Добрый день. У меня возникла проблема с управлением серво по цифровому входу. Согласно приложенной схеме привод должен включаться с задержкой по таймеру (TON) через 5 секунд и поворачиваться (константа 90 градусов) однако при включении схемы серво начинает вращаться сразу.. Что яделаю не так?
Код сгенерированный FLprog
#include <Servo.h>
Servo _SM1;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
void setup()
{
_SM1.attach(11);
}
void loop()
{
if (1)
{ if (_tim1I) { if (_isTimer(_tim1P, 5000)) {_tim1O = 1;}} else {_tim1I =1; _tim1P = millis();}} else {_tim1O = 0; _tim1I = 0;}
if (_tim1O) {_SM1.write (90);}
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
подключение серво
подключение серво
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Great_al 10 фев 2017, 13:00, всего редактировалось 1 раз.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
подключение серво
Дело в том, что большинство "народных" сервоприводов при подаче питания (даже без управления), сразу становятся в среднее положение (примерно 90 градусов), а затем уже в то положение, которое задано.
Проверить можно очень просто.
Задержку на таймере поставить секунд 10, а угол любой (кроме 90 градусов), например градусов 30.
Если серво из серии выше описанных, то при включении платы, сначала станет в 90 градусов, а через 10 секунд в 30 градусов. С этим тогда ничего не сделаешь, при подаче питания, серво изначально всегда будет кратковременно становиться в первичный угол 90.
Проверить можно очень просто.
Задержку на таймере поставить секунд 10, а угол любой (кроме 90 градусов), например градусов 30.
Если серво из серии выше описанных, то при включении платы, сначала станет в 90 градусов, а через 10 секунд в 30 градусов. С этим тогда ничего не сделаешь, при подаче питания, серво изначально всегда будет кратковременно становиться в первичный угол 90.
подключение серво
Так вот оно что! спасибо за ответ. Всё получилось!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Great_al 12 фев 2017, 17:28, всего редактировалось 1 раз.
подключение серво
Дальнейшее развитие вопроса. Итак: собрана и проверена схема (рис1). По схеме серво проварачивается на заданные углы (25 и 55 град), импульсом служат высокий и низкий сигнал мультивибратора. (цикл 1)
Еще имеется датчик препятствия (рис2), по сигналу с которого серво проварачивается константу на 90 град
Вопрос. Как связать эти схемы чтобы получилась следующая логика: при подаче сигнала с датчика (рис 2) цикл 1 прерывался и серво оставалась в положении 90, до того момента пока не исчезнет сигнал с датчика.
Как только исчезает сигнал с датчика, то возобновляется цикл 1.
Добавлено (16.02.2017, 13:35)
---------------------------------------------
Сам разобрался, не актуально больше
Еще имеется датчик препятствия (рис2), по сигналу с которого серво проварачивается константу на 90 град
Вопрос. Как связать эти схемы чтобы получилась следующая логика: при подаче сигнала с датчика (рис 2) цикл 1 прерывался и серво оставалась в положении 90, до того момента пока не исчезнет сигнал с датчика.
Как только исчезает сигнал с датчика, то возобновляется цикл 1.
Добавлено (16.02.2017, 13:35)
---------------------------------------------
Сам разобрался, не актуально больше
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей