Уже почти год я делаю устройство, принцип действия которого очень похож на алгоритм работы дискотечного прибора, именуемого как "поворотная голова". Это мой первый столь масштабный проект, и в данный момент я уперся в препятствие под названием "программирование микроконтроллера". Мне данная наука дается весьма тяжело, так как привык работать руками, а не головой. Очень хочу разобраться и возыметь понимание вопроса самостоятельно, но если кто-то поможет - буду очень рад. Поиск по просторам как отечественных, так и зарубежных сайтов, не принес должного результата - готового решения моей задачи нет.
Теперь подробности.
Необходимо управлять 2 шаговыми моторами по протоколу DMX512 через ардуино, работающего в режиме приема DMX512. Моторы управляются посредством драйверов SPEP/DIR. Вход "Enable" не подключен, так как в момент остановки двигателя требуется удержание вала мотора. Ток удержания не контролируется, задан драйвером мотора. При загрузке, моторы делают поворот до срабатывания щелевой опторапы, которая перекрывается шторкой, закрепленной на валу мотора. Таким образом выставляется "нулевая точка", от которой мотор может поворачиваться на определенное количество шагов. В моем случае их 255, по одному на уровень канала DMX512.
В цикле работы моторы поворачиваются на определенное количество шагов, в зависимости от изменения уровня DMX канала. Грубо говоря - уровень DMX канала "157" равен 157 шагов от отметки 0, при которой сработала оптопара при загрузке. Скорость вращения двигателей ограничена, так как у механизма большая масса и соответственно - инерция. Например, если уровень DMX изменяется от 0 до 100 и обратно в 0 (цифры для примера) слишком быстро, то мотор делает от нуля 10 шагов (тоже цифра отбалды) и возвращается обратно. При перемещениях на большое количетсво шагов старт и стоп плавные, для снижения момента инерции и потери шагов, если конечно это реализуемо.
На профессиональных заводских головах стоит энкодер, если в процессе работы ее насильно повернуть, она вернется обратно на то же количенство шагов, но это реализовать я точно не смогу, да и не думаю что это необходимо.
Что имеем. Два ШД, 1.8 градуса на шаг (стандарт) nema 34. Драйвера DM556 в полношаговом режиме, для наибольшего крутящего момента. Ардуино - китайский клон Arduino Nano. DMX приемник реализован на SN75176 и развязан оптроном 6n137. Схему я выложу чуть позже, так как она сделана их нескольких, я целиком не рисовал. Щелевая оптопара закреплена на корпусе мотора, шторка на валу, фото выложу чуть позже.
Ардуино плата принимает DMX пакеты, вот этот скетч работает, один канал выдает 0/1 на выходе управляясь через DMX.
Код: Выделить всё
#include <DMXSerial.h>
void setup () {
DMXSerial.init(DMXReceiver);
pinMode(2, OUTPUT);
}
void loop() {
unsigned long lastPacket = DMXSerial.noDataSince();
int n = 1;
int k = 155;
if (DMXSerial.read(n) > k) {
digitalWrite (2, LOW);
} else {
digitalWrite (2, HIGH);
}
}
В какую сторону мне дигаться дальше? Подскажите, друзья. В итоге данной ветки выложу готовый скетч, схему и плату, проверив все в работе.