Arduino с шаговым двигателем в Proteus

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Аватара пользователя
Сообщения: 3
Зарегистрирован: Ср июн 19, 2013 20:02:55

Сообщение ledpinD9 »

Здравствуйте! Так как не имею шагового двигателя под рукой, решил все протестировать в Proteus (ISIS Proteus), но столкнулся с проблемой. Сейчас шаг за шагом опишу порядок действий, возможно я допустил ошибки в программировании Arduino, либо в Proteus.

Скачал проект «SIMULINO» сделанный в Proteus, который имитирует Arduino. Проверил на нем работоспособность парочки легких программ с миганием светодиодов, вроде все работает отлично. Далее добавил драйвер L293D и биполярный шаговый двигатель. В свойствах шагового двигателя указал напряжение 12V и угол поворот 1 градус. Все, на этом работа в Proteus закончилась.

Изображение
Изображение

Далее написал программу на Arduino, которая должна поворачивать двигатель на 45, 90, 180 и 45 градусов. Так как шаг двигателя равен одному градусу, то переменная STEPS, принимает значение 360. Вроде ошибиться было негде.

Код: Выделить всё

#include <Stepper.h>

#define STEPS 360 // Так как шаг равен 1-му градусу

Stepper stepper(STEPS, 8, 9, 10, 11);

void setup()
{
   stepper.setSpeed(100);
}

void loop()
{
   stepper.step(45);
   delay(2000);
   
   stepper.step(90);
   delay(2000);
   
   stepper.step(180);
   delay(2000);
   
   stepper.step(45);
   delay(1000); 
}
Загрузив HEX файл скомпилированной программы в Proteus, я получаю, что двигатель поворачивается на 1-2 градуса и ждет 2 секунды, далее опять поворачивается на 1-2 градуса и снова ждет.

Экспериментируя с кодом, я присвоил STEPS число 8, вместо 360. Ради интереса поделил оборот на 45 градусов. Результат был на ура! Все работает, даже если задать угол поворота 10 градусов (т.е. теория деления оборота на 45 градусов уже не работает). В чем дело?!

Приложил архив с проектом в протеусе (Proteus 7.1 и выше) и кодом программ с HEX файлами.
Вложения
proteus uno.zip
(30.52 КБ) 356 скачиваний
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Если не считать решения проблемы с изменением STEPS, пробовали скорость (stepper.setSpeed(100)) увеличить? Я не очень представляю себе, с какой скоростью моделирует протеус, но, возможно, увеличение скорости сократит задержку.
Изображение only pure true norwegian blackx Изображение
Реклама
Родился
Аватара пользователя
Сообщения: 3
Зарегистрирован: Ср июн 19, 2013 20:02:55

Сообщение ledpinD9 »

Я понял куда вы клоните, но нет, дело не в этом :))

Для проверки этого, написал кодик, который должен при включении МК повернуть двигатель на 45 градусов и на этом закончить работу. При STEPS = 8, все работает отлично (поворачивается на 45 и заканчивает движение), а вот при STEPS = 360, поворот происходит только на 1,5 градуса и конец.

Код при STEPS = 8, все работает:

Код: Выделить всё

#include <Stepper.h>

#define STEPS 8

Stepper stepper(STEPS, 8, 9, 10, 11);

void setup()
{
   stepper.setSpeed(100);
   stepper.step(45);
}

void loop(){}
Родился
Аватара пользователя
Сообщения: 3
Зарегистрирован: Ср июн 19, 2013 20:02:55

Сообщение ledpinD9 »

Мне тут подсказали что нужно увеличить RPM именно в свойствах шаговика (в протеусе), при изменении 360 на 36000 и не трогал код (в котором RPM 100) все заработало! Что самое интересное, код с STEPS = 8 работает как и раньше (поворачивается на нужный угол). Нет идей почему так может быть?
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

ledpinD9 писал(а):Нет идей почему так может быть?
это симулятор. Купите шаговик (достаньте из принтера старого) и соберите в железе.
Ставим плюсы: )
Реклама
Ответить

Вернуться в «AVR»