Patent Publication Number: US-8536822-B2

Title: Voltage-controlled stepper motor driver

Description:
CROSS-REFERENCES TO RELATED APPLICATIONS 
     This application claims the benefit of priority from U.S. Provisional Patent Application No. 61/316,727, filed Mar. 23, 2010. 
    
    
     BACKGROUND 
     A stepper motor positioning system for pan/tilt/zoom (PTZ) surveillance cameras has several stringent desired characteristics. First, such a system should have very accurate positioning when coming to a stop, with no position feedback, i.e., static positioning accuracy. Second, the system should have very smooth motion at low speed, namely, low variation of angular velocity, when moving in unstable mechanical systems. A typical stepper motor and motor load have multiple frequencies of high-Q resonances which are energized at specific angular velocities. Third, the system should be capable of implementing high speed positive/negative acceleration profiles to change position quickly. Fourth, the system should be very power efficient, as security domes of PTZ cameras have limited power available and limited means for dissipating thermal energy generated in the motor and the motor drive. 
     Referring to  FIG. 7 , a typical PTZ stepper motor driver  100  is a motor winding current-controlled driver. The current-controlled motor driver  100  contains digital pulse-width modulation (PWM) modules  102 ,  104  and H-Bridges  106 ,  108  to force current into motor windings  110 ,  112 , shunt resistors  114 ,  116  in series with each motor winding to measure the winding current, and comparators  118 ,  120  that feed back the winding currents to the modules  102 ,  104  to vary duty cycle of the PWM modules  102 ,  104  to achieve desired instantaneous currents in the motor windings  110 ,  112 . The comparators  118 ,  120  compare reference/control signals with the voltage generated across the shunt resistors  114 ,  116 . The driver  100  controls the instantaneous peak current, but not the average current. Thus, when the voltage across the resistor  114 ,  116  crosses the reference voltage, the PWM signal switches. This causes the current to ramp up and down in a sawtooth pattern, the levels of which depend on component values and characteristics such as parasitics. The H-bridges  106 ,  108  can be adjusted to help reduce the swing of this sawtooth pattern, but the swing leads to position inaccuracies, and vibration and noise in the motor driven by the driver  100 . 
     With the typical stepper motor driver, the value in Ohms of the winding current shunt resistor has competing interests. Increasing the value of the current shunt resistor yields an increase in signal/noise ratio, which provides a more accurate measurement of the winding current, resulting in an increase in the static positioning accuracy of the motor driver. Reducing the value of the current shunt resistor, however, increases the efficiency of the motor driver by reducing power loss and dissipation due to the large motor currents passing through the shunt resistor. Therefore, optimizing both efficiency and static positioning accuracy is difficult, if not impossible. 
     In addition, it is not practical to measure the winding current with a current shunt when both motor windings are switching from rail to rail due to the PWM generator output. Therefore, in a typical unipolar current-controlled driver the current shunt is placed in the unipolar power supply return line. At each zero crossing of the current the driver switches winding current polarity. This causes a large output error around each cardinal step (movement caused by an increment in winding driving waveforms, e.g., with four cardinal steps in a full cycle of quadrature driving waveforms) where one of the winding currents crosses zero, resulting in a larger-than-normal static positioning error. This also reduces smoothness of motion for low angular velocity as there is an error bump in the torque of the driver at each cardinal step. 
     Still further, the resistance in the motor winding is decoupled from the energy at the mechanical system resonances, thus providing little or no damping of the high-Q resonances. This driver is prone to uncontrolled oscillations due to undamped high-Q mechanical resonances. Typically, with current-controlled drivers the designer uses modeling and/or trial and error with built devices to determine motor velocities that induce system resonances. The designer uses the determined resonances to implement safeguards to help ensure that the system does not dwell at those velocities. The designer can implement “no-go” velocity bands around the velocities that induce system resonances, e.g., by having controlling software and/or firmware keep the velocity outside of these bands (e.g., just above or below the band) when feasible and when not feasible, to transit the bands quickly enough to avoid oscillation. 
     Moreover, the current-controlled driver applies large PWM voltages to the motor windings, which cause eddy currents to flow in the motor metal structures, increasing power loss and generating heat in the motor components. 
     Current-controlled drivers have been favored, and voltage-controlled drivers dismissed, because stepper motor position is dictated by winding current. Thus, driving with a current ensures motor position while driving with voltage could lead to unknown current and thus unknown motor position. 
     SUMMARY 
     An example of a stepper motor driver system includes: a digital signal controller configured to digitally synthesize synthesized analog voltage signals that will induce a desired velocity of a stepper motor when applied to a pair of stepper motor windings; and voltage amplifiers, communicatively coupled to the digital signal controller, configured to amplify the synthesized analog voltage signals to produce amplified analog voltage signals and to output the amplified analog voltage signals; where the digital signal controller is configured to synthesize the analog voltage signals by affecting at least one of a phase or an amplitude of each of the analog voltage signals as a function of the desired velocity of the stepper motor. 
     Implementations of the example stepper motor driver system may include one or more of the following features. The digital signal controller includes a phase-compensation module including a non-linear look-up table of phase-compensation values and corresponding desired stepper motor velocity values. The digital signal controller includes an amplitude module including a non-linear amplitude-scaling look-up table of amplitude-scaling values and corresponding desired stepper motor velocity values. The digital signal controller includes a phase-compensation module including a non-linear phase-compensation look-up table of phase-compensation values and corresponding desired stepper motor velocity values; the digital signal controller includes a waveform module including a waveform look-up table of quasi-sinusoidal waveform values and corresponding position values; and the digital signal controller is configured to: determine a present desired stepper motor velocity; determine a present phase-compensation value corresponding to the present desired stepper motor velocity using the phase-compensation look-up table; apply the present phase-compensation value to a present position value to produce a phase-corrected position value; determine a waveform value corresponding to the phase-corrected position value using the waveform look-up table; determine a present amplitude-scaling value corresponding to the present desired stepper motor velocity using the amplitude-scaling look-up table; and scale the waveform value using the present amplitude-scaling value to produce amplified analog voltage signals. 
     Also or alternatively, implementations of the example stepper motor driver system may include one or more of the following features. The voltage amplifiers are class-D amplifiers fed by a supply voltage; the digital signal processor includes a corresponding plurality of bias sources and a corresponding plurality of digital-to-analog converters (DACs); and the bias sources are coupled and configured to bias signals input to the DACs such that the amplified analog voltage signals are biased to a midpoint of the supply voltage. The amplified analog voltage signals have pseudo-sinusoidal shapes. The system further includes the stepper motor communicatively coupled to the voltage amplifiers, the voltage amplifiers consisting of four voltage amplifiers arranged in two pairs with each pair of voltage amplifiers configured and coupled across a respective winding of the stepper motor. 
     An example of a stepper motor system includes: a stepper motor including first and second windings and an iron rotor; synthesizing means for digitally synthesizing first pseudo-sinusoidal analog voltage signals in quadrature with respect to each other; amplifying means, communicatively coupled to the synthesizing means and the stepper motor, for amplifying the pseudo-sinusoidal analog voltage signals to produce second amplified pseudo-sinusoidal analog voltage signals and for providing the second pseudo-sinusoidal analog voltage signals to the first and second windings of the stepper motor. 
     Implementations of such a stepper motor system may include one or more of the following features. The synthesizing means are further for compensating the first pseudo-sinusoidal analog voltage signals for back-electromotive force produced by the stepper motor. The synthesizing means include compensating means for compensating the first pseudo-sinusoidal analog voltage signals for back-electromotive force produced by the stepper motor by affecting at least one of phase or amplitude of each of the first pseudo-sinusoidal analog voltage signals as a function of velocity of the rotor. The synthesizing means include compensating means for compensating the first pseudo-sinusoidal analog voltage signals for back-electromotive force produced by the stepper motor by affecting both phase and amplitude of each of the first pseudo-sinusoidal analog voltage signals as a function of velocity of the rotor. The compensating means include: a non-linear phase-compensation look-up table of phase-compensation values and corresponding stepper motor velocity values; a non-linear amplitude-scaling look-up table of amplitude-scaling values and corresponding desired stepper motor velocity values; and a waveform module including a waveform look-up table of quasi-sinusoidal waveform values and corresponding position values. 
     An example of a method of controlling a stepper motor includes: producing first and second compensated analog voltage waveforms in quadrature phase with respect to each other; amplifying the first and second analog voltage waveforms to produce first and second analog winding drive voltage waveforms; and applying the first and second analog winding drive voltage waveforms to first and second windings, respectively, of a stepper motor; where the first and second compensated analog voltage waveforms being compensated for at least one of phase or amplitude as a function of a velocity of a rotor of the stepper motor. 
     Implementations of such a method may include one or more of the following features. The first and second compensated analog voltage waveforms are compensated for both phase and amplitude as a function of the velocity of a rotor of the stepper motor. Producing the first and second compensated analog voltage waveforms includes: digitally synthesizing stepper motor velocity indications and corresponding stepper motor position indications; altering the stepper motor position indications based on the corresponding stepper motor velocity indications to produce phase-compensated position indications; digitally synthesizing first and second unscaled pseudo-sinusoidal voltage waveforms based on the phase-compensated position indications, the first and second unscaled pseudo-sinusoidal voltage waveforms being in quadrature phase with respect to each other; scaling the first and second unscaled voltage waveforms based on amplitude-scaling values corresponding to the stepper motor velocity indications to produce first and second scaled pseudo-sinusoidal waveforms; and converting the first and second scaled pseudo-sinusoidal waveforms from digital to analog to produce first and second scaled pseudo-sinusoidal analog waveforms as the first and second compensated analog voltage waveforms. The method may further include amplifying the first and second scaled pseudo-sinusoidal analog waveforms to produce the first and second analog winding drive voltage waveforms. 
     Items and/or techniques described herein may provide one or more of the following capabilities, as well as other capabilities not mentioned. 
     A voltage-controlled driver is provided with no feedback loop, being 100% open loop, providing a faster acting and more accurate output than current-controlled drivers. A stepper motor driver for pan/tilt/zoom (PTZ) surveillance cameras provides improved position accuracy and reduced power losses, while also providing resistive damping for high-Q resonances in the mechanical system, increasing the stability of the positioning system near and on the angular velocities where a system resonance occurs. A damping driver provides easier system design and improved performance, and can be used without “no-go” motor velocity bands. 
     Static motor winding current at a fixed position is given by the drive voltage divided by the motor winding resistance. Since the motor winding resistance is much larger in value than a typical current-controlled driver shunt resistor, the accuracy of the static motor winding current is often much higher in the voltage-controlled drivers discussed herein, resulting in static positioning accuracy in the voltage-controlled drivers being an order of magnitude more accurate than achievable in current-controlled drives. 
     Voltage-controlled drivers discussed herein do not have a current shunt in series with the motor winding. Consequently, power dissipation is reduced and power efficiency is increased compared to current-controlled drivers with shunt resistors. 
     Voltage-controlled drivers discussed herein do not apply large PWM voltages to motor windings. Consequently, power dissipation is reduced and power efficiency is increased compared to current-controlled drivers as eddy current losses are not induced. 
     Since voltage-controlled drivers discussed herein generate fully linear bipolar outputs (unlike the current-controlled driver which has zero-crossover error), voltage-controlled drivers discussed herein do not have error at zero crossover. Thus, zero-crossover static positioning errors and zero-crossover torque bumps at low velocity are avoided. 
     Voltage-controlled drivers discussed herein have output impedances that are very low, nearly short circuits. When a stepper motor velocity approaches a mechanical resonance, a large amount of power at the resonance frequency begins to oscillate between the electrical system and the mechanical system. On the electrical side, the resonance causes a back-EMF voltage to be generated in the motor windings at the resonance frequency. Since the motor driver outputs present very low impedances, this resonating back-EMF voltage pumps a large amount of energy into motor winding resistance, which then dissipates a significant portion of the resonant energy as heat in the motor winding, damping the resonance. The net effect is that the resistance damping of the motor winding combined with low impedances of the voltage-controlled driver outputs dampen the mechanical resonances, causing stable operation near mechanical resonance frequencies. 
     It may be possible for an effect noted above to be achieved by means other than that noted, and a noted item/technique may not necessarily yield the noted effect. Further, at least some implementations discussed herein or derivable from the discussion herein may not provide one or more of the capabilities discussed. 
     Other capabilities and applications will be made apparent by the following detailed description. 
    
    
     
       BRIEF DESCRIPTION OF THE FIGURES 
         FIG. 1  is a block diagram of a video surveillance system. 
         FIG. 2  is a block diagram of a digital signal processor microcontroller of a pan driver shown in  FIG. 1 . 
         FIG. 3  is a schematic diagram of amplifiers and a stepper motor of the pan driver shown in  FIG. 1 . 
         FIG. 4  is a block flow diagram of a process of driving the stepper motor shown in  FIG. 3  with analog voltage signals. 
         FIG. 5  is a block flow diagram of producing compensated quadrature analog voltage waveforms shown in  FIG. 4 . 
         FIGS. 6A-6B  are experimental results of stepper motor winding current when driven by a current-controlled stepper motor driver ( FIG. 6A ) and stepper motor winding current when driven by a voltage-controlled stepper motor driver ( FIG. 6B ). 
         FIG. 7  is a block diagram of a current-controlled stepper motor driver. 
     
    
    
     DETAILED DESCRIPTION 
     Techniques are provided for controlling stepper motors with voltage inputs. The motors may be used in a variety of applications such as in movable surveillance cameras. A stepper motor driver for pan/tilt/zoom (PTZ) surveillance cameras is provided that comprises a digital signal processor (DSP) microcontroller that provides voltage control signals to four efficient class-D voltage amplifiers. The amplifiers drive two stepper motor windings using four digital-to-analog converters in the DSP microcontroller. The system is preferably open-loop with no feedback. The DSP microcontroller that drives the class-D amplifiers uses very fine microstep precision at static and low angular velocity, where very accurate positioning is desired. As the angular velocity increases and the positioning accuracy tolerance increases, the DSP microcontroller may reduce the microstepping precision, e.g., at a continuous rate proportional to the angular velocity until, at high speed, the microstep precision is very low due to large increments in driving waveforms between consecutive samples. Preferably, there are no discrete changes in microstep precision levels, only continuous variation with angular velocity. As the motor slows down, the microstep precision gradually increases, reaching full precision once the motor stops. 
     The DSP controller takes a motor current signal generated in a present position register and transforms that signal to voltage signals to be applied to motor windings. The current-to-voltage transformation is a non-linear vector function (including amplitude and phase) based on motor winding resistance, motor winding inductance, and motor winding back-EMF (electro-motive force). The back-EMF is linearly proportional to motor velocity, with the volts output vs. angular velocity being a function of motor parameters, design, and construction, and typically provided by the motor&#39;s manufacturer. The DSP controller implements the non-linear current-to-voltage transformation using two fine-precision non-linear lookup tables (LUTs), one table for amplitude scaling and one table for phase shift compensation. The DSP controller also contains a third non-linear table to correct the sinusoidal drive signal applied to the motor windings for non-linear behavior of the motor part between cardinal steps of the motor, providing excellent static position accuracy and smoothness of motion of the motor at low speed. 
     Referring to  FIG. 1 , a video surveillance system  10  includes a video monitoring system  12  and a camera system  14 . The systems  12 ,  14  are connected for bi-directional communication by a communication line  14 , for example, an Ethernet cable such as Category 5 (CAT5) cable. The camera system  14 , in this example, is a movable, pan/tilt/zoom (PTZ) system including a camera  16 , a pan driver  18 , a tilt driver  20 , control circuitry  22 . The camera system  14  can be disposed in a protective dome (not shown). The camera  16  can be, for example, a mega pixel camera and includes a zoom feature controllable by control signals received from the control circuitry  22 . The pan driver  18  includes a pan motor physically connected to the camera  16  and configured to rotate the camera  16  in a horizontal plane. The tilt driver  20  includes a tilt motor physically connected to the camera  16  and configured to rotate the camera  16  in a vertical plane, with the horizontal and vertical planes being orthogonal to each other and defined relative to a default orientation of the camera  16 . The pan and tilt motors are stepper motors, having motor positions determined by the difference in currents provided to two windings of each motor. The control circuitry  22  is configured to provide the pan driver  18  and the tilt driver  20  with control signals in response to signals received from the video monitoring system  12  over the communication line  14 . Each of the pan driver  18  and the tilt driver  20  preferably include a voltage-controlled microstepping motor driver to move the camera  16  in the horizontal and vertical planes, respectively. 
     Referring also to  FIGS. 2-3 , the pan driver  18  includes a digital signal processor (DSP) microcontroller  30 , a set  32  of four voltage amplifiers  34 , and a stepper motor  36 . While the driver shown in  FIGS. 2-3  is the pan driver  18 , the same driver could be used as the tilt driver  20 . Further, the driver shown in  FIGS. 2-3  could be used for other applications for which stepper motors are currently used, e.g., for surgical equipment, 3D printers, industrial automation controls, machine tools, medical fluid infusion pumps, other fluid-dispensing equipment, etc., or for applications for stepper motors developed in the future. The DSP microcontroller  30  provides four analog outputs that are compensated in amplitude and phase for velocity-dependent effects of the motor  36 . The DSP microcontroller  30  outputs are connected to the four voltage amplifiers  34  to drive pairs of the amplifiers  34  differentially, and the pairs of voltage amplifiers  34  are connected across respective first and second windings  38 ,  39  of the motor  36 . The windings  38 ,  39  are disposed adjacent to an iron rotor  41  such that selective excitation of the windings  38 ,  39  will cause the rotor  41  to rotate due to changing attraction of the rotor  41  to the windings  38 ,  39 . The voltage driver  18  presents a low, near-zero (near short circuit) impedance to the motor  36 , while a current driver would present a very high (ideally, infinite) impedance to the motor  36 . The low impedance of the voltage driver helps resist anomalies in motor velocity because perturbations of velocity and position will be opposed. 
     The DSP microcontroller  30  includes, among other things, motion profile control logic  40 , an acceleration register  42 , a velocity register  44 , a position register  46 , a phase correction or compensation module  48 , a four quadrant (full cycle) quasi-sinusoidal waveform module  50 , an amplitude module  52 , DC sources  54 , digital-to-analog converters (DACs)  56 , and hardware multipliers  58 . As the modules  48 ,  50 ,  52  respectively include a phase-compensation look-up table (LUT), a quasi-sinusoidal (pseudo-sinusoidal) LUT, and an amplitude scaling LUT, the modules  48 ,  50 ,  52  may be referred to as LUTs, although the modules include firmware or other entities for using the LUTs as described. The controller  30  includes hardware, firmware, and software (e.g., stored in memory of the control logic  40 ) configured to implement the functions described. The DSP microcontroller  30  is configured to process or generate indications of desired motion of the camera  16  and to provide voltage outputs to induce the desired corresponding motion of the motor  36 . 
     The controller  30  provides direct digital synthesis (DDS), using digital data processing to generate frequency-tunable, phase-tunable, signals. The microcontroller  30  implements a DDS quadrature waveform generator in firmware. Waveform shapes are given in the waveform LUT  50 , and applied to the DACs  56 , which reconstruct an analog waveform. The LUT  50  comprises a table of integer constants stored in microcontroller memory. The integer constants can be selected to provide arbitrary waveshapes as desired. The digital domain control of the DDS technique can be used to control waveshape, amplitude, frequency, and phase of the voltage output signals. The waveform frequency determines the stepper motor angular velocity. The motor velocity is controlled by adjusting the DDS “tuning word.” The tuning word, here the value of the velocity register  44 , sets the rate at which the synthesizer sequences through the waveform LUT  50 . Larger tuning words result in faster cycling through the LUT  50 , and thus a higher frequency of the resulting waveform. The shape of the waveform is dictated by the values in the LUT  50  as selected according to phase accumulator values. The position register value provides an address into a phase accumulator  47 . The phase accumulator accumulates (steps or updates) the phase at each sampling instant by adding a velocity variable (the “tuning word”) to the prior phase value. The accumulated phase is provided to the LUT  50 , which fetches the waveform&#39;s present amplitude using the present phase-adjusted position, and presents the amplitude to the DACs  56 . 
     The DSP microcontroller  30  is configured to compensate for back-EMF induced by the motor  36  by adjusting the phase and amplitude of the voltages driving the windings  38 ,  39  as a non-linear function of the motor velocity. The controller  30  compensates for the velocity-dependent effects of the motor  36 . As the velocity of the motor  36  increases, the back-EMF and the reactance of the windings  38 ,  39  increases. This in turn would cause a reduction in torque if not compensated for. The controller  30  compensates for these effects to induce substantially smooth, substantially noise-free winding current in the windings  38 ,  39 . The DSP controller  30  is configured to select a phase and an amplitude of generated waveforms to produce currents to induce a position of the rotor  41  that matches a determined desired position indicated by the position register  46 . 
     Referring to  FIG. 4 , with further reference to  FIGS. 1-3 , a process  80  of driving the stepper motor  36  with analog voltage signals includes the stages shown. The process  80  is, however, an example only and not limiting. At stage  82 , compensated quadrature analog voltage waveforms are produced. The DSP microcontroller produces analog voltage waveforms that are in quadrature, and that are compensated in phase and amplitude for velocity of the motor  36 . At stage  84 , the compensated waveforms are amplified by the amplifiers  34 . At stage  86 , the amplified signals are applied to the motor windings  38 ,  39  to induce motion of the rotor  41 . 
     Referring also to  FIG. 5 , stage  82  of producing compensated quadrature analog voltage waveforms includes the stages shown. These stages, however, are an example process only and not limiting. 
     At stage  90 , the DSP controller  30  digitally synthesizes stepper motor velocity indications and stepper motor position indications. Values of the acceleration register  42 , the velocity register  44 , and the position register  46  represent the present state of the motor  36  in terms of acceleration, velocity and position, respectively. The DSP microcontroller  30  is a state machine that changes state once every sampling time interval. The sampling time is a design variable, and is a periodic signal provided to the controller  30  to cause an update of the state of the controller  30 . For example, in the driver  18 , an internal timer/counter of the controller  30  is used to generate an interrupt signal to the processor core. The core responds by executing an interrupt service routine (ISR) that performs the operations to update the driving waveform outputs. Every sampling time interval the velocity register  44  is updated by summing the previous value of the velocity register  44  with the acceleration register value, and the position register  46  is updated by summing the position register&#39;s previous value with the velocity register value. The motion profile control logic  40  controls the motion of the motor  36  by setting the acceleration register  42  to positive values, negative values, or zero at specific sample times. The control logic  40  can also set the value of the velocity register  44  as desired, but would preferably only implement small changes in velocity, to help avoid stalling the motor  36 . A jerk register can also be provided, with the acceleration register value being the previous acceleration register value plus the jerk register value. The jerk register value thus indicates the acceleration of the acceleration of the motor  36 . The jerk register value can be changed by the control logic  40 , e.g., from zero to a positive value, or even an increasing positive value, as the velocity of the motor  36  increases. This helps avoid sudden acceleration from zero velocity while providing increasing accelerations with increasing velocity. 
     The value of the position register  42  is controlled to achieve the desired position of a load connected to the motor  36 . A command is provided by the control circuitry  22  to the motion profile control logic  40 . The logic  40  determines the direction to move (clockwise or counterclockwise) the motor  36  and implements an appropriate motion profile to ramp the velocity up and down until the present position of the load, as dictated by the position of the motor  36 , is at the desired target position. The angular precision of the motor  36  is a design parameter, here being very fine, 1/256 of a cardinal step of the stepper motor  36 , with the cardinal step being ¼ of a cycle of the driving waveform of the stepper motor  36 . The precision is determined by the resolution of the waveform&#39;s phase, i.e., the number of entries in the LUT  50  (more entries providing finer resolution, and thus a smaller microstep size, increasing the number of individual steps to implement a full cycle of the waveform). Smaller step sizes can reduce jitter, especially at slower speeds. 
     At stage  92 , the LUT  48  phase-alters the position indications from the position register  46  based on the velocity indications from the velocity register  44 . Since the back-EMF and winding reactance vary with the motor velocity, the transformation between winding current and winding voltage varies non-linearly with motor velocity. At each velocity value there is a fixed phase shift angle between the winding current and the voltage signals applied across the motor windings  38 ,  39 . Therefore the DSP microcontroller  30  includes the non-linear phase compensation LUT  48 . The LUT  48  provides phase shifts that are dependent upon characteristics of the motor  36  (e.g., back-EMF factor of the motor  36  (due to motor angular velocity and voltage generated, given in volts/radians/seconds), winding resistance, and winding inductive reactance) and the velocity of the motor  36 . The non-linear LUT  48  is calibrated (e.g., to cancel induced phase angles at each rotor velocity) for the particular motor  36 , preferably at the nominal winding current level for the application. This can be done experimentally, or by using provided characteristics of the motor  36 . Different LUTs, i.e., with different entry values, are used for different motors  36  and/or different nominal winding current levels. The LUT  48  phase-alters the position indications before input to the LUT  50  to affect the shapes of the waveforms output by the LUT  50 . 
     The phase shift transformation provided by the LUT  48  is applied before the pseudo-sinusoidal LUT  50 , at the output of the position register  46 . Based on the present value of the velocity register  44 , a phase compensation value is read from the non-linear phase compensation LUT  48 , and this phase compensation value is added to the position value to phase shift both of the winding signals to compensate for the back-EMF induced by movement of the motor  36 . 
     The phase-altered position indications are split into quadrature indications. Because the currents in the windings  38 ,  39  are in quadrature, i.e., 90 degrees out of phase with respect to each other, the current value for the first and second windings  38 ,  39  are different. To find the winding current value for the second winding  39 , the position value of the position register  46 , used to find the current value for the first winding  38 , is shifted by one cardinal step before being applied to the non-linear pseudo-sinusoidal lookup table  50 . The position indication is split (duplicated) and a 90° phase shift is introduced to one of the position indications to produce two phase-altered position indications in quadrature phase with respect to each other. The phase-altered quadrature position indications are input to the LUT  50 . 
     At stage  94 , the LUT  50  digitally synthesizes unscaled pseudo-sinusoidal quadrature waveforms using the phase-altered position indications. To translate the position register value to motor winding current values for that position, the non-linear pseudo-sinusoidal LUT  50  is used. The LUT  50  is a waveform LUT that holds a sampled, integer representation of the driving waveform, i.e., a table of constants stored in program memory. The number of samples (record length) and the number of bits (resolution) are design variables that are tailored to the application&#39;s requirements. The LUT  50  is used to translate step and microstep coordinates into near-sinusoidal winding current values to induce the corresponding desired movement of the rotor  41 , based on known relationships of the winding currents and rotor position. Here, as an example, the LUT  50  includes 1,024 10-bit entries encoding amplitude values for a full 360-degree waveform. Other implementations are possible, e.g., for waveforms that are symmetrical in four quadrants, entries for 90° of the waveform can be used, with a two-bit code used to indicate the polarity of the signal and the direction to proceed through the table. The winding current value found using the position and the LUT  50  will be used to provide a voltage to the first winding  38  of the motor  36 . Outputs  51  of the LUT  50  are pseudo-sinusoidal digital winding driver signals indicative of analog pseudo-sinusoidal voltage signals to be applied to the windings  38 ,  39 . 
     The translation discussed so far is a translation from desired position to desired winding current calculated based on the state of the position register  46  at the sample time. The stepper motor  36 , however, is driven by the voltage amplifiers  34  with analog voltage waveforms. Therefore, the DSP microcontroller  30  is configured to convert the winding current signals into voltage signals, here in the LUT  50  and the multipliers  58 . 
     The transformation of current to voltage is non-linear, and is based on resistance of the windings  38 ,  39 , inductance of the windings  38 ,  39 , and a back-EMF voltage of the motor  36 . For a constant speed state of the motor  36 , the magnitude of winding current I M  is given by: 
     
       
         
           
             
               
                 
                   
                     
                        
                       
                         I 
                         M 
                       
                        
                     
                     2 
                   
                   = 
                   
                     
                       
                         
                           [ 
                           
                             
                               V 
                               D 
                             
                             - 
                             
                               V 
                               BY 
                             
                           
                           ] 
                         
                         2 
                       
                       + 
                       
                         V 
                         BX 
                         2 
                       
                     
                     
                       
                         R 
                         M 
                         2 
                       
                       + 
                       
                         X 
                         M 
                         2 
                       
                     
                   
                 
               
               
                 
                   ( 
                   1 
                   ) 
                 
               
             
           
         
       
     
     where: 
     V D  is the output voltage of the motor driver applied to a winding; 
     V BX  is the component of the motor back-EMF in phase with the drive voltage; 
     V BY  is the component of the motor back-EMF in quadrature with the drive voltage; 
     R M  is the resistance of the motor winding under consideration; and 
     X M  is the reactance of the motor winding under consideration. 
     At stage  96 , the LUT  52  scales the unscaled pseudo-sinusoidal quadrature waveforms from the LUT  50  based on the velocity indications from the velocity register  44 . As with the phase shift discussed above, at each velocity value there is a fixed magnitude gain between the winding current and the voltage pseudo-sinusoidal signals across the motor windings  38 ,  39 . Therefore the DSP microcontroller  30  includes the non-linear amplitude transformation LUT  52 . The LUT  52  provides amplitude adjustments that are dependent upon characteristics of the motor  36  (including winding resistance, winding inductance, and back-EMF for the motor  36 ) and the velocity of the motor  36  to keep the winding current at the target level as a function of velocity (waveform frequency). The non-linear LUT  52  is calibrated for the particular motor  36 , preferably at the nominal winding current level for the application. Different LUTs, i.e., with different entry values, are used for different motors  36  and/or different nominal winding current levels. 
     The amplitude transformation is applied after the pseudo-sinusoidal LUT  50 . Based on the present value of the velocity register  44 , an amplitude scaling value is read from the non-linear amplitude scaling LUT  52 . This amplitude scaling value is applied to multipliers  58  to multiply the scaling value by each of the two quadrature outputs  51  of the pseudo-sinusoidal LUT  50  to generate scaled quadrature voltage signals  59 . The signals  59  provide the appropriate voltages, according to Eqn. (1), to induce the currents determined using the LUT  50 . 
     With the motor  36  at a stop or at low velocity, the phase compensation is zero and the amplitude scaling factor is equal to a constant, which is equal to the motor winding resistance. At a stop or at low velocity, the winding-current-to-voltage transformation is very constant over velocity, and very accurate. Therefore at a stop or at low velocity, the error between the position register  46  and the actual motor angular position is very small, on the order of a few milli-degrees. 
     With the phase compensation applied to the position signal, and the amplitude scaling transformations applied to the quadrature winding current signals  51 , the result is the pair of quadrature winding voltage signals  59 . These two voltage signals  59  are used to apply voltages to the motor windings  38 ,  39  at each sample time to generate the desired motor winding currents to help keep the motor angular position in synchronization with the position register  46  at each sample period. 
     Since each of the motor windings  38 ,  39  is driven differentially from two voltage amplifiers, the DSP microcontroller  30  is configured to produce a second inverted voltage signal for each of the windings  38 ,  39 . Each of the signals  59   1 ,  59   2  is inverted by having a 2&#39;s complement taken (after being divided by 128, as shown). Further, the controller  30  applies a DC bias from each of the DC sources  54   1 - 54   4  to the voltage signals and the inverted voltage signals. The DC bias is selected to bias each of the outputs of the amplifiers  34  at a midpoint of a unipolar power supply. 
     At stage  98 , the DC-biased signals are converted from digital to analog for application to the windings  38 ,  39 . The DC-biased voltages are converted from digital form to analog form by the DACs  56   1 - 56   4 , providing four analog output voltage signals  60   1 - 60   4  from the DSP microcontroller  30 . 
     Referring again to  FIG. 4 , at stage  84 , the compensated waveforms from the controller  30  are amplified to produce analog winding drive voltage waveforms. The waveforms  60  output by the controller  30  are provided to respective ones of the amplifiers  34 . Here, the amplifiers  34  are class-D amplifiers. The inputs to the amplifiers  34  are the analog signals  60 , passed through shunt resistances. The amplifiers  34  modulate signals on and off to amplify the input signals. The modulated signals are filtered, providing smooth, pseudo-sinusoidal analog output voltage signals  62 . 
     At stage  86 , the signals amplified by the class-D amplifier circuits  34  and output as the signals  62  are applied to the motor windings  38 ,  39 . Unlike with current-controlled drivers, the voltage-controlled drivers of  FIG. 2  do not employ a current shunt in series with the motor windings  38 ,  39 . 
     Experimental Results 
       FIGS. 6A-6B  show experimental results comparing winding signal waveforms of a current-controlled driver and of the driver  18 . As seen in  FIG. 6A , heavy harmonic distortion is present in this current-controlled driver, inducing erratic position control, and thus position inaccuracy, and noise and vibration in the motor. Conversely, as seen in  FIG. 6B , the driver  18  provides smooth, consistently-spaced quadrature driver signals leading to accurate position control and smooth motion of the motor  36 . 
     Other Considerations 
     Variations and modifications to the specific examples given can be made without departing from the scope of the disclosure or claims. The specific examples disclosed herein are not liming of the following claims. For example, while the description above described compensation of both phase and amplitude of the synthesized waveforms as a function of stepper motor velocity, implementations can be used that compensate for phase or amplitude, but not both, by removing the respective components discussed above. 
     Other examples and implementations are within the scope and spirit of the disclosure and appended claims. For example, due to the nature of software, functions described above can be implemented using software executed by a processor, hardware, firmware, hardwiring, or combinations of any of these. Features implementing functions may also be physically located at various positions, including being distributed such that portions of functions are implemented at different physical locations. Also, as used herein, including in the claims, “or” as used in a list of items prefaced by “at least one of” indicates a disjunctive list such that, for example, a list of “at least one of A, B, or C” means A or B or C or AB or AC or BC or ABC (i.e., A and B and C). 
     Substantial variations to described configurations may be made in accordance with specific requirements. For example, customized hardware might also be used, and/or particular elements might be implemented in hardware, software (including portable software, such as applets, etc.), or both. Further, connection to other computing devices such as network input/output devices may be employed. 
     The terms “machine-readable medium” and “computer-readable medium,” as used herein, refer to any medium that participates in providing data that causes a machine to operate in a specific fashion. In an embodiment implemented using a computer system, various computer-readable media might be involved in providing instructions/code to a processor(s) for execution and/or might be used to store and/or carry such instructions/code (e.g., as signals). In many implementations, a computer-readable medium is a physical and/or tangible storage medium. Such a medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media include, for example, optical and/or magnetic disks. Volatile media include, without limitation, dynamic memory. Transmission media include, without limitation, coaxial cables, copper wire and fiber optics. Hence, transmission media can also take the form of waves (including without limitation radio, acoustic and/or light waves, such as those generated during radio-wave and infrared data communications). 
     Common forms of physical and/or tangible computer-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punchcards, papertape, any other physical medium with patterns of holes, a RAM, a PROM, EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read instructions and/or code. 
     Various forms of computer-readable media may be involved in carrying one or more sequences of one or more instructions to the processor(s) for execution. Merely by way of example, the instructions may initially be carried on a magnetic disk and/or optical disc of a remote computer. A remote computer might load the instructions into its dynamic memory and send the instructions as signals over a transmission medium to be received and/or executed by the computer system. These signals, which might be in the form of electromagnetic signals, acoustic signals, optical signals and/or the like, are all examples of carrier waves on which instructions can be encoded, in accordance with various configurations of the invention. 
     The methods, systems, and devices discussed above are examples. Various configurations may omit, substitute, or add various procedures or components as appropriate. For instance, in alternative configurations, the methods may be performed in an order different from that described, and that various steps may be added, omitted, or combined. Also, features described with respect to certain configurations may be combined in various other configurations. Different aspects and elements of the configurations may be combined in a similar manner. Also, technology evolves and, thus, many of the elements are examples and do not limit the scope of the disclosure or claims. 
     Specific details are given in the description to provide a thorough understanding of example configurations (including implementations). However, configurations may be practiced without these specific details. For example, well-known circuits, processes, algorithms, structures, and techniques have been shown without unnecessary detail in order to avoid obscuring the configurations. This description provides example configurations only, and does not limit the scope, applicability, or configurations of the claims. Rather, the preceding description of the configurations will provide those skilled in the art with an enabling description for implementing described techniques. Various changes may be made in the function and arrangement of elements without departing from the spirit or scope of the disclosure. 
     Further, the preceding description details a security camera system. However, the systems and methods described herein may be applicable to other forms of camera systems, or other systems generally. 
     Also, configurations may be described as a process which is depicted as a flow diagram or block diagram. Although each may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be rearranged. A process may have additional steps not included in the figure. Furthermore, examples of the methods may be implemented by hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware, or microcode, the program code or code segments to perform the necessary tasks may be stored in a non-transitory computer-readable medium such as a storage medium. Processors may perform the described tasks. 
     Having described several example configurations, various modifications, alternative constructions, and equivalents may be used without departing from the spirit of the disclosure. For example, the above elements may be components of a larger system, wherein other rules may take precedence over or otherwise modify the application of the techniques discussed. Also, a number of steps may be undertaken before, during, or after the above elements are considered. Accordingly, the above description does not bound the scope of the claims. 
     Further, more than one invention may be disclosed.