При подаче питания на Arduino Mega на пинах в первые примерно 0,5 секунд наблюдаю произвольные уровни. Робот с этой платой на борту при подаче питания кратковременно дергается. В void setup() устанавливаю необходимые начальные уровни, но видимо до тех пор пока не отработают эти команды на пинах возникают некие уровни "по умолчанию". Можно ли этого избежать?
Питание силовой части робота (привода и т.п.) запитать через транзистор, а его открывать в конце setup(). Т.е. подавать питание силовой части после инициализации выходов. Нужно собрать все GND (минусы) нагрузок и коммутировать их транзистором, который нужно выбрать по нагрузке.
Приводы робота управляются у меня MOSFET-транзисторами. Если речь о том, чтобы добавить еще один контур управления, то я не совсем понимаю, чем состояние неинициализированного пина для этого контура будет отличаться от пинов, управляющих MOSFETами.
0,5 с - это перебор. МК должен заводиться в считанные микросекунды. И состояния пинов должны быть не произвольными, а теми, которые выставлены в setup() или нулями.
Нам бы схемку, аль чертёж - мы б устроили вертёж! В том смысле, что проблема, возможно, легко решается банальными подтяжками.
Вот такой вот драйвер двигателя с мосфетами К Arduino Mega он подключен по пинам 4-7. Часть скетча, инициализирующая пины для управления двигателями такова int LeftMotorDirection = 6; int RightMotorDirection = 4; int LeftMotorPWM = 7; int RightMotorPWM = 5; void setup() { pinMode(LeftMotorDirection, OUTPUT); pinMode(RightMotorDirection, OUTPUT); pinMode(LeftMotorPWM, OUTPUT); pinMode(RightMotorPWM, OUTPUT); digitalWrite(LeftMotorPWM, LOW); digitalWrite(RightMotorPWM, LOW); digitalWrite(LeftMotorDirection, LOW); digitalWrite(LeftMotorDirection, LOW); } void loop() { } После подачи питания робот движется примерно 0,5 сек. С чем это может быть связано?
Попробуйте так, это тоже самое что у вас, только быстрее в сотни раз. Если все равно будет реагировать не сразу, значит причина в долгой паузе перед запуском. Код (C++): DDRD = 0b11110000; PORTD = 0x00;
Эта задержка - отработка загрузчика Ардуино, который ждет новую прошивку после сброса. Не дождавшись начинает выполнение setup (). Без изменения загрузчика программно исправить нельзя. Решение - это подтяжка силовых транзисторов в закрытое состояние, т.к. сразу после включения все выходы настроены как входы, т.е. болтаются в воздухе.