Control Stepper Motor Using Digital Outputs
This example shows how to control a stepper motor using digital output ports.
Discover Devices Supporting Digital Output
Use daqlist
to discover devices. This example uses a National Instruments® ELVIS II with ID Dev2
.
d = daqlist
d = 12×5 table VendorID DeviceID Description Model DeviceInfo ________ ___________ __________________________________ _____________ ____________________ "ni" "cDAQ1Mod1" "National Instruments NI 9205" "NI 9205" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod2" "National Instruments NI 9263" "NI 9263" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod3" "National Instruments NI 9234" "NI 9234" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod4" "National Instruments NI 9201" "NI 9201" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod5" "National Instruments NI 9402" "NI 9402" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod6" "National Instruments NI 9213" "NI 9213" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod7" "National Instruments NI 9219" "NI 9219" [1×1 daq.DeviceInfo] "ni" "cDAQ1Mod8" "National Instruments NI 9265" "NI 9265" [1×1 daq.DeviceInfo] "ni" "Dev1" "National Instruments PCIe-6363" "PCIe-6363" [1×1 daq.DeviceInfo] "ni" "Dev2" "National Instruments NI ELVIS II" "NI ELVIS II" [1×1 daq.DeviceInfo] "ni" "Dev3" "National Instruments PCIe-6363" "PCIe-6363" [1×1 daq.DeviceInfo] "ni" "Dev4" "National Instruments PCIe-6363" "PCIe-6363" [1×1 daq.DeviceInfo]
d{10, "DeviceInfo"}
ans = ni: National Instruments NI ELVIS II (Device ID: 'Dev2') Analog input supports: 7 ranges supported Rates from 0.0 to 1250000.0 scans/sec 16 channels ('ai0' - 'ai15') 'Voltage' measurement type Analog output supports: -5.0 to +5.0 Volts,-10 to +10 Volts ranges Rates from 0.0 to 2857142.9 scans/sec 2 channels ('ao0','ao1') 'Voltage' measurement type Digital IO supports: 39 channels ('port0/line0' - 'port2/line6') 'InputOnly','OutputOnly','Bidirectional' measurement types Counter input supports: Rates from 0.1 to 80000000.0 scans/sec 2 channels ('ctr0','ctr1') 'EdgeCount' measurement type Counter output supports: Rates from 0.1 to 80000000.0 scans/sec 2 channels ('ctr0','ctr1') 'PulseGeneration' measurement type
Hardware Setup Description
This example uses a Portescap 20M020D1U motor (5 V, 18 degree unipolar stepper). The TTL signals produced by the digital I/O system are amplified by a Texas Instruments ULN2003AIN (high voltage, high current Darlington transistor array), as shown in this schematic:
Add Digital Output-Only Channels
Create a DataAcquisition and add 4 digital channels on port 0, lines 0-3. Set the measurement type to OutputOnly
. These are connected to the 4 control lines for the stepper motor.
dq = daq("ni"); addoutput(dq,"Dev2","port0/line0:3","Digital")
Warning: Added channel does not support clocked sampling: clocked operations are disabled. Only on-demand operations are allowed.
Define Motor Steps
Refer to the Portescap motor wiring diagram describing the sequence of 4-bit patterns. Send this pattern sequentially to the motor to produce counterclockwise motion. Each step turns the motor 18 degrees. Each cycle of 4 steps turns the motor 72 degrees. Repeat this cycle five times to rotate the motor 360 degrees.
step1 = [1 0 1 0]; step2 = [1 0 0 1]; step3 = [0 1 0 1]; step4 = [0 1 1 0];
Rotate Motor
Use write
to output the sequence to turn the motor 72 degrees counterclockwise.
write(dq,step1); write(dq,step2); write(dq,step3); write(dq,step4);
Repeat sequence 50 times to rotate the motor 10 times counterclockwise.
for motorstep = 1:50 write(dq,step1); write(dq,step2); write(dq,step3); write(dq,step4); end
To turn the motor 72 degrees clockwise, reverse the order of the steps.
write(dq,step4); write(dq,step3); write(dq,step2); write(dq,step1);
Turn Off All Outputs
After you use the motor, turn off all the lines to allow the motor to rotate freely.
write(dq,[0 0 0 0]);