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

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

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

Используйте daqlist обнаружить устройства. Этот пример использует Национальный Instruments® ELVIS II с 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
   


Описание настройки оборудования

Этот пример использует Portescap 20M020D1U двигатель (5 В, 18 степеней униполярный степпер). Сигналы TTL, произведенные цифровой системой ввода-вывода, усилены Texas Instruments 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]);