Странность в поведении контроллера

ustas
Offline
Зарегистрирован: 12.03.2012

Сейчас делаю один проект (проект достаточно простой).

Есть 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А) - проявляется реже.. но все-таки проявляется.

В чем причина и как лечить?

 

ustas
Offline
Зарегистрирован: 12.03.2012

или "тикающая" серва - это нормальное ее поведение?

Кстати, еще один раз была вообще странная ситуация:

Питание от USB компа. Система перестала реагировать на нажатия кнопок и изменение света... при этом почему-то начал моргать светодиод на 13 ноге (хотя этот вывод в моем скетче на 100% не используется). Посмотрел повнимательнее и понял, что работает blink (такое ощущение, что плата вернулась в заводское состояние).

Как такое может быть?

Как можно заставить плату убрать текущий скетч (при этом среда ардуино хоть и была запущена, но в ней был скетч под текущую систему. Кнопки "компилировать" или "проверить" не нажимались)?

P.S. в чудеса не верю, к плате и компу никто не подходил.

skystorm
skystorm аватар
Offline
Зарегистрирован: 17.01.2012

Дрожание и подергивание нормальное поведение для дешовых серв.
Если управлять не позицией а милисекундами немного лучше.

ustas
Offline
Зарегистрирован: 12.03.2012

 Проблема с "зависающим" контроллером решилась установкой дополнительного электролитического конденсатора на питание. Теперь работает как часы.

http://www.youtube.com/watch?v=gjbXbt_TEjc - вот так работает