Странность в поведении контроллера
- Войдите на сайт для отправки комментариев
Сейчас делаю один проект (проект достаточно простой).
Есть Freeduino 328 и есть три кнопки (вверх, вниз, авто), есть два датчика освещенности и одна серва.
Кнопки вверх-вниз - просто крутят серву от нуля до максимального значения (крайние положени обрабатываются, за пределы не выходим никогда). Кнопка Авто - поворачивает серву в средний режим.
Обрабатывается пока один датчик света. В случае, если вдруг на нем стало существенно больше света - серву загоняем в одно из крахних положений (каждый раз в одно и то же). Если столь же существенно стало темнее - возвращаем серву в среднее положение.
Серва ES08A (насколько понимаю, очень распространенный образец). Серва подключена к +5В и "земле" ардуино. Управляющий pin сервы подключается как напрямую к PWM pin контроллера, так и через транзистор 2N4401 (разницы в поведении всей системы - никакой).
Серву просто так не напрягаю - даю ей команду на изменение положения только в том случае, что ее текущее положение не такое же, как было на предыдущем шаге:
// функция установки сервы в нужное положение void setServo(int pos) { int curPos = abs(pos-MAX); // преобразование потребовалось, чтобы соответствовать механике int prevPos = valve.read(); if (curPos != prevPos) valve.write(curPos); return; }
При этом есть странности в поведении:
1. серва "подрагивает" (слышен звук) с периодичностью примерно в 1Гц (вне зависимости от положения). При этом ее положение визуально не меняется (серва пока не нагружена - просто стоит на столе). Таких серв у меня две - обе ведут себя одинаково.
2. вся система в произвольный момент времени (чаще сразу после движения сервы на приличный угол - от 20-30 градусов) перестает реагировать на внешние раздражители (кнопки) и в Serial Monitor перестают идти данные - особенно проявляется при питании от USB порта компа. Если питание от блока питания (12В, 2А) - проявляется реже.. но все-таки проявляется.
В чем причина и как лечить?
или "тикающая" серва - это нормальное ее поведение?
Кстати, еще один раз была вообще странная ситуация:
Питание от USB компа. Система перестала реагировать на нажатия кнопок и изменение света... при этом почему-то начал моргать светодиод на 13 ноге (хотя этот вывод в моем скетче на 100% не используется). Посмотрел повнимательнее и понял, что работает blink (такое ощущение, что плата вернулась в заводское состояние).
Как такое может быть?
Как можно заставить плату убрать текущий скетч (при этом среда ардуино хоть и была запущена, но в ней был скетч под текущую систему. Кнопки "компилировать" или "проверить" не нажимались)?
P.S. в чудеса не верю, к плате и компу никто не подходил.
Дрожание и подергивание нормальное поведение для дешовых серв.
Если управлять не позицией а милисекундами немного лучше.
Проблема с "зависающим" контроллером решилась установкой дополнительного электролитического конденсатора на питание. Теперь работает как часы.
http://www.youtube.com/watch?v=gjbXbt_TEjc - вот так работает