exponenta event banner

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

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

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

Использовать 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
   


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

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

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

Создайте 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]);