My requirement is to obtain a constant speed from a DC motor, regardless of the mechanical load on the shaft... within reason, of course. To experiment, I bought an 'entry level' BLDC motor with Hall-effect sensors and a controller module for it, both from stepperonline.com. Connecting things up according to instructions, I find that, sure enough, I can vary the speed of the motor with a pot, either the one built into the controller or by tying an external pot to the circuit. Using an external pot, the built-in one can set the maximum motor speed, thus affording better resolution over the motor's working speed range by the outboard pot.
My application has the motor running at about 700 r.p.m. I'm able to set the speed close to the precise speed I need, but not quite. With essentially infinite resolution over the DC control voltage applied to the controller, the motor seems to 'hop' up and down in speed by about 2% per hop. So I can get either 693 r.pm. or 707 r.p.m., but never 700 on the nose. This makes me question exactly how this controller works.
The controller has a 'pulses' output, which seems to be an 'OR' function of the Hall sensor outputs. This output yields six pulses per revolution of the motor, so at 700 r.p.m. (11-2/3 revs. per second) it's a fairly symmetrical squarewave at 70Hz. What I'm figuring is that this frequency is being compared with some clock internal to the controller, and a PLL is applying more or less DC to the motor to maintain lock. I'm also thinking that the reason I can't get an exact speed from the motor is that 70Hz is too low a PLL loop frequency to provide the necessary resolution.
What I'd like is a confirmation of, or correction to, my understanding of what's going on in that controller. Any hints, like messing with the controller's internal clock to vary its frequency and allow 'fine tuning' the motor speed, or any other approach, would be much appreciated.
My application has the motor running at about 700 r.p.m. I'm able to set the speed close to the precise speed I need, but not quite. With essentially infinite resolution over the DC control voltage applied to the controller, the motor seems to 'hop' up and down in speed by about 2% per hop. So I can get either 693 r.pm. or 707 r.p.m., but never 700 on the nose. This makes me question exactly how this controller works.
The controller has a 'pulses' output, which seems to be an 'OR' function of the Hall sensor outputs. This output yields six pulses per revolution of the motor, so at 700 r.p.m. (11-2/3 revs. per second) it's a fairly symmetrical squarewave at 70Hz. What I'm figuring is that this frequency is being compared with some clock internal to the controller, and a PLL is applying more or less DC to the motor to maintain lock. I'm also thinking that the reason I can't get an exact speed from the motor is that 70Hz is too low a PLL loop frequency to provide the necessary resolution.
What I'd like is a confirmation of, or correction to, my understanding of what's going on in that controller. Any hints, like messing with the controller's internal clock to vary its frequency and allow 'fine tuning' the motor speed, or any other approach, would be much appreciated.