Программа управления шаговым приводом.
- Войдите на сайт для отправки комментариев
Здравствуйте уважаемые участники форума.Прошу прощения за столь примитивную задачу которую не могу решить без вашей помощи.Задача заключается в следующем,требуется проверить привод на шаговом двигателе,а точнее повторяемость.Повторяемость это погрешность которая возникает в любом механизме перемещения из за неточностей в передаче.Проще говоря имеется передача на рейке,с одной стороны стоит микрометр,требуется замерить какая ошибка накопится при перемещении каретки влево вправо 10раз.Имеется драйвер шагового двигателя с входами STEP и DIR (шаг и направление).Нужен такой код,который бы позволял гонять каретку влево вправо 10 раз и на несколько секунд останавливался в правом положении и цикл продолжался.Говоря другим языком на вход DIR (каретка движиться влево) подать лог 0, на вход step нужно подать 1000 импульсов, на 1001 импульс подать сигнал на вход DIR лог1 (изменится направление движения каретки вправо) спустя еще 1001 т.е на 2002 импульс снять сигналс DIR (лог0 каретка опять поедет влево ) и так 10 раз,после 5 секунд задержаться в левом положении(лог 0 на DIR 5сек) при этом импульсы на Step не подавать,по истечении 5 секунд возобновить все что было написано выше.5 секунд требуется для того что бы снять показания с микрометра.
На повторяемость будет влиять и люфт в передаче колесо - рейка (а без него никак)
На счет люфта все известно,он состовляет 0,01 на ход 300 мм,следовательно погрешность при перемещении каретки 10 раз влево вправо на отрезок 300м ошибка составит 0,1 мм,так ли это на самом делене неизвестно,нужно испытывать для этого и нужна программа которая будет перемещать каретку влево вправо 10 раз после на 5 секунд остановится для того чтоб можно было снять показания с микрометра,и возобновит работу далее по кругу
Пока для генератора импульсов STEP думаю использовать готовый пример без Delay
const int STEPPin = 13; // номер выхода, подключенного к STEP
int STEPState = LOW; // этой переменной устанавливаем состояние STEP
long previousMillis = 0; // храним время последнего переключения STEP
long interval = 10; // интервал между STEP (0,01 секунда)
void setup() {
pinMode(STEPPin, OUTPUT);
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (STEPState == LOW)
STEPState = HIGH;
else
STEPState = LOW;
digitalWrite(STEPPin, STEPState);
}
}
как дальше включить счетчик который бы позволял на 1001раз запускать DIR(менять направление движения)
и как осуществить прерывание импульсов на 5 секунд после 10 переключений DIR ? (десяти ходов каретки влево вправо для снятия показаний с микрометра)
В цыкле задать количество шагов 1000 - остановка 5 сек -меняем направление ДИР и снова цыкл