ADC controls multiple stepper motors
K Suresh, Indira Gandhi Centre for Atomic Research, Kalpakkam, India -- EDN, 9/14/2000
Typical stepper-motor control circuits use either logic gates and flip-flops or shift registers to generate the proper sequences of binary codes that produce bidirectional stepper-motor movement. A conventional stepper-motor-control circuit uses a square-wave generator, a sequence generator, or a shift register and current translators to control one stepper motor apart from the logic circuit necessary for producing a known and valid binary code at start-up. When you need to control more than one stepper motor, as is the case of 2- and 3-D position control, the conventional type of control circuit becomes voluminous, complicated, and expensive due to the increased number of identical stages, the increased power dissipation, and the larger pc board.Figure 1 shows a multiple-stepper-motor-control circuit that uses an ADC to control multiple stepper motors. The heart of this stepper-control circuit is an 8-bit, successive-approximation type ADC, (IC1), whose 8-bit output forms two nibbles: LNIBBLE, D0 to D3, and UNIBBLE, D4 to D7. Each of these two nibbles carries valid 4-bit binary codes and drives the stepper-motor coils through a corresponding quad latch, IC2 and IC3, and buffer, IC4 and IC5. A set of four discrete analog voltages of 0 to 1V at VIN1 in the proper sequence control the stepper motor, SM1, and another set of discrete analog voltages of 1 to 10V control stepper motor SM2. A timing waveform
at the MOVE input controls the start and end of each A/D conversion. The
output of the ADC and AND gates in IC6 generate enable signals to latch the ADC output nibbles to the buffers. The SELECT input determines the selected stepper motor. A logic 1 at the SELECT input enables IC6A and closes S1, and the ADC's LNIBBLE latches in IC2 to drive SM1. A logic 0 at the SELECT input enables IC6B and closes switch S2, and the UNIBBLE latches in IC3 to drive SM2.
Table 1 and Table 2 list the discrete analog voltages you must apply to the circuit in sequence and the corresponding valid ADC-generated codes. Figure 2 shows the necessary timing waveforms for the stepper-control process. Initially, the MOVE input is at logic 1, which keeps the ADC in low-power mode and the ADC output in an open state so that both the motors are on hold. Next, you select SM1 or SM2 by applying a
logic 1 or 0 at SELECT, and you apply any one of the four discrete analog
voltages to the ADC. Then, pulling MOVE to logic 0 initiates a conversion. After
approximately 42 µsec, the ADC generates a valid binary code, which the
output of the ADC latches to the latch. The corresponding motor coils receive power according to the generated binary code through the buffer that the SELECT input enables. The MOVE input then returns back to logic 1. In this way, the circuit generates the successive valid codes by reading the corresponding analog voltages in a sequence, each time performing the A/D conversion. To rotate the selected motor in the opposite direction, you simply reverse the sequence of applied voltages.
The circuit in Figure 1 is one way of using an ADC to control multiple stepper motors, and you can modify the circuit to suit individual requirements. Any low-cost, low-speed ADC is suitable for this circuit because the minimum time between application of successive codes, which the LR characteristics of the stepper-motor coils determine, is usually on the order of tens of microseconds. Because each motor uses only 4 bits of the ADC output, an 8-bit ADC can control two stepper motors. You can extend this concept to control three stepper motors using a 12-bit, low-speed ADC. You can apply the analog voltage to the ADC either through an analog multiplexer and a 2-bit up/down counter or through a DAC.
















