Управляйте шаговым двигателем, используя цифровые выходы

Этот пример показывает, как управлять шаговым двигателем, используя цифровые выходные порты.

Обнаружение устройств, поддерживающих цифровой выход

Использование daqlist для обнаружения устройств. Этот пример использует National Instruments ™ ® ELVIS II с идентификатором 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
   


Описание Setup оборудования

Этот пример использует двигатель 20M020D1U Portescap (5 В, 18 степени униполярный шаговый). Сигналы TTL, производимые цифровым вводом-выводом системой, усиливаются ULN2003AIN приборов Техаса (высокое напряжение, высокий ток Пары Дарлингтона массива), как показано на этой схеме:

Добавление каналов только цифрового вывода

Создайте DataAcquisition и добавьте 4 цифровых канала на порт 0, линии 0-3. Установите тип измерения равным OutputOnly. Они соединяются с 4 линиями управления для шагового двигателя.

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. 

Задайте шаги двигателя

Смотрите схему проводки двигателя Portescap, описывающую последовательность 4-разрядных шаблонов. Послать этот шаблон последовательно к двигателю, чтобы произвести движение против часовой стрелки. Каждый шаг поворачивает двигатель на 18 степени. Каждый цикл из 4 шагов поворачивает двигатель на 72 степени. Повторите этот цикл пять раз, чтобы повернуть двигатель на 360 степени.

step1 = [1 0 1 0];
step2 = [1 0 0 1];
step3 = [0 1 0 1];
step4 = [0 1 1 0];

Вращайте Двигатель

Использование write для вывода последовательности поворота двигателя на 72 степени против часовой стрелки.

write(dq,step1);
write(dq,step2);
write(dq,step3);
write(dq,step4);

Повторите последовательность 50 раз, чтобы повернуть двигатель 10 раз против часовой стрелки.

for motorstep = 1:50
    write(dq,step1);
    write(dq,step2);
    write(dq,step3);
    write(dq,step4);
end

Чтобы повернуть двигатель на 72 степени по часовой стрелке, измените порядок шагов назад.

write(dq,step4);
write(dq,step3);
write(dq,step2);
write(dq,step1);

Выключите все выходы

После того, как вы используете двигатель, отключите все линии, чтобы позволить мотору вращаться свободно.

write(dq,[0 0 0 0]);