Страница 1 из 1

Непонятный сброс контроллера (Tiny24)

Добавлено: Ср май 13, 2026 10:44:58
Engineer_Keen
Словил вчера интересный глюк, пол дня ковырялся. Казалось бы, схема простейшая, кода 600 байт.
Суть такова. Есть пульт для управления простым коллекторным двигателем, связка Attiny24+L293.
Спойлер Управление: две кнопки (PA1, PA2) крутят двигатель с максимальной скоростью по/против часовой стрелки, две кнопки (PA3, PA7) крутят со скоростью заданной переменником на PA0. На PA4-5-6 - светодиоды, один горит постоянно, два индицируют вращение двигателя в соответствующую сторону. На PORTB подключен L293, оба моста запараллелены, управляются IN1,4 / IN2,3 - направление, EN1,EN2 - ШИМ от Таймера 0. Входы драйвера подтянуты к земле через 10к. Кнопки подтянуты внутренней подтяжкой контроллера, на входах кнопок и переменника конденсаторы 0.1мкФ на землю (антидребезг). Питание 12В, 7805 (танталы и керамика с обоих сторон) + керамика по питанию у самих микросхем. Сброс контроллера через RC цепочку.
Cхема:
СпойлерИзображение
Все это прекрасно работало, но понадобилось поставить энкодер вместо регулятора скорости с кнопками, кнопки вращения на макс. скорости остаются. Не вопрос, убираем переменник, вместо кнопок PA3,PA7 ставим энкодер. Немного переделал логику управления драйвером L293, зная качество энкодеров, добавил программный антидребезг, в симуляторе проверил - работает как и ожидалось. Собрал на новенькой плате, все подключил, проверяю, кнопки работают как надо, а вот энкодер дурит, по индикации вижу что крутит то нормально, то в случайную сторону, то в обе сразу, догадался что это сброс (после сброса все индикаторы горят секунду, специально делал - проверка индикации). Стал искать в чем затык. Методом исключения выкинул/закомментировал все что касается драйвера двигателя, все что касается системного таймера (делает 1мс интервал для управления индикаторами и подсчета антидребезга), в итоге оставил вообще только кнопки и индикаторы, кода - 10 строк ассемблера - все равно при вращении ручки - сброс!. Перетыкал осциллографом всю плату (точнее 2 платы, т.к. нужно было две штуки сделать, на обоих эффект один) - ни просадок, ни помех ни по питанию, ни по входам, ни по выходам. В итоге эффект пропал только после отключения подтяжки входов энкодера, но он без них естественно не работает. Тогда я отпаял емкости на этих входах, а подтяжку вернул - все заработало как надо :shock:
Я так и не понял что это было. Конденсаторы нормальные, энкодеры обычные. Тем более что точно такая же схема подключения с практически идентичным кодом прекрасно работает в другом устройстве на ATmega8/88 (но там изначально был энкодер, т.к. управляет он уже драйвером с шаговым двигателем). :dont_know:
PS: Пытался так и эдак представить схему с конденсаторами, энкодером и входами контроллера чтобы получить какую-то недопустимую комбинацию напряжения на входах, так и не смог, но тут точно какая-проблема в процессе заряда-разряда конденсаторов через подтяжку и контакты энкодера.

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Ср май 13, 2026 12:00:27
Starichok51
Engineer_Keen писал(а): Ср май 13, 2026 10:44:58 Тогда я отпаял емкости на этих входах, а подтяжку вернул - все заработало как надо
я никогда не ставлю конденсаторы на контакты энкодера.
а также никакого программного "антидребезга" для энкодера я не делаю, и энкодер у меня прекрасно работает.
а конденсаторы на входах через внутреннюю подтяжку "медленно" заряжаются и разряжаются, поэтому получается у тебя хаос в работе энкодера.
если оставить конденсаторы, то нужно сделать внешнюю подтяжку резисторами 1 кОм, чтобы конденсаторы быстро перезаряжались.

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Ср май 13, 2026 12:22:22
Engineer_Keen
Starichok51 писал(а): Ср май 13, 2026 12:00:27 я никогда не ставлю конденсаторы на контакты энкодера.
а также никакого программного "антидребезга" для энкодера я не делаю, и энкодер у меня прекрасно работает.
Если это обычные механические энкодеры за 150р, то как оно нормально работает тогда? Либо схемотехнически, либо программно антидребезг должен быть. Если работа по прерываниям, то как минимум запрет прерывания на 50-100мс после срабатывания, если опросом входов, то игнор изменения состояния на входе на то же время, ну это если простейшие варианты, без всяких повторных проверок. Там же каждый щелчок энкодера дает целую пачку срабатываний по обоим каналам, а если с конденсаторами, то там более-менее прямоугольник, конечно с встроенной подтяжкой фронты немного завалены, но там гарантированно один щелчок-один фронт.
Starichok51 писал(а): Ср май 13, 2026 12:00:27 а конденсаторы на входах через внутреннюю подтяжку "медленно" заряжаются и разряжаются, поэтому получается у тебя хаос в работе энкодера.
Ну да медленно, но этого вполне достаточно, если крутить пальцами... Если осциллографом смотреть, там нормальные прямоугольники, сдвинутые по фазе в зависимости от направления вращения, никакого хаоса там нет.
Starichok51 писал(а): Ср май 13, 2026 12:00:27 если оставить конденсаторы, то нужно сделать внешнюю подтяжку резисторами 1 кОм, чтобы конденсаторы быстро перезаряжались.
Внешние резисторы подтяжки у меня даже на печати есть, но я их не ставил, потому-что "и так работало", до вчерашнего дня... :)))

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Ср май 13, 2026 14:40:50
Starichok51
у меня самые дешевые механические энкодеры, если я правильно помню их название, ЕС11.
и да, работают прекрасно без обработки антидребезга.
ты крутишь энкодер, и за 50-100 мс состояние энкодера изменится много раз. и такой интервал опроса категорически делать нельзя.
у меня интервал опроса по таймеру где-то 1 мс, где-то 2 мс.
что опрос показал, то и принимается за текущее состояние энкодера.
и кручу я пальцами, и при любой скорости поворота работает прекрасно.
и у меня с внутренней подтяжкой и без конденсаторов на входах.
и хотя ты считаешь, что по осциллографу там всё нормально, но ты сам увидел, что без конденсаторов работает, а с конденсаторами не работает.
и у меня не единичный случай, у меня несколько моих самоделок с энкодером, а везде энкодер работает прекрасно.

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Ср май 13, 2026 16:41:03
VNS
Engineer_Keen писал(а): Ср май 13, 2026 10:44:58 В итоге эффект пропал только после отключения подтяжки входов энкодера, но он без них естественно не работает. Тогда я отпаял емкости на этих входах, а подтяжку вернул - все заработало как надо
Разряжать конденсаторы через контакты энкодера или кнопок, это принудительно уменьшать ресурс контактных групп.
Если есть желание использовать конденсаторы на выводах МК, то правильно подключать МК к энкодеру по такой схеме:
1.png
(6.75 КБ) 58 скачиваний

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Ср май 13, 2026 18:34:54
VNS
Engineer_Keen писал(а): Ср май 13, 2026 12:22:22 Если это обычные механические энкодеры за 150р, то как оно нормально работает тогда?
Прекрасно работает... прошивка для теста это подтверждает... :)
Опрос энкодера через каждые 2 мс.
test.hex
(709 байт) 40 скачиваний
МК тактируется на заводских установках (1 МГц).
Схема для теста:
2.png
(24.06 КБ) 53 скачивания

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Сб май 16, 2026 17:23:38
Engineer_Keen
Интересненько, надо будет попробовать ваш способ опроса. Правда хотелось бы еще все таки понять физику процесса сброса...

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Сб май 16, 2026 18:36:47
Starichok51
чтобы что-то понять, нужно увидеть исходный код, который ты так и не показал.

Re: Непонятный сброс контроллера (Tiny24)

Добавлено: Вс май 17, 2026 12:40:36
Engineer_Keen
Извините, в командировке сижу, исходника с собой нет, по памяти боюсь навру, не будет чистоты эксперимента. Сам потом на макетке попробую воспроизвести, там уж я точно все точки поковыряю...