Форум myROBOT.ru » Лаборатория » Микроконтроллеры » Зависание

Страниц (1): [1]
 

1. Vlad_sem - 02 Февраля, 2018 - 16:37:50 - перейти к сообщению
Появилась небольшая темка для обсуждения.
Сразу хочется сказать, что слово "зависание" использовано образно, т.к. описанная проблема не выводит из строя МК, который после этого можно запустить только ребутом.

Имеется:
1. Плата-хост (Atmega164 8 MHz от внутреннего генератора, USART0->ESP-12F, USART1->cp2102->ПК).
2. Плата-клиент (Atmega8 8 MHz от внутреннего генератора, USART->ESP-12F, два сдвиговых регистра hc595->uln2803).
3. Управляемая нагрузка, подключаемая к плате-клиенту (~150mA на канал uln2803).

Работа:
1. Клиент подключается к хосту.
2. Хост начинает слать пакеты приемнику с байтами для сдвиговых регистров.
3. Клиент получает пакет, парсит, расшифровывает. Если есть изменения, то записывает байты в сдвиговые регистры.
4. Если передача прекращается, приемник шлёт байт со своим id приемнику раз в две секунды, "заявляя о своём присутствии".

Как получить проблему?
1. Начинаем передачу в холостую (коннекторы нагрузки не подсоединены к плате-клиенту, данные на сдвиговых регистрах: 0x00).
2. Подключаем единицу нагрузки к свободному выходу uln2803.
3. Меняем отправляемые данные командой с ПК на 0xFF ("активируем" все выходы uln2803),
видим, что нагрузка включается.
4. Меняем отправляемые данные командой с ПК на 0x00 ("деактивируем" все выходы uln2803),
видим, что нагрузка отключается.

Пока все хорошо.

5. Подключаем еще 3 единицы нагрузки к свободным выходам uln2803.
6. Меняем отправляемые данные командой с ПК на 0xFF ("активируем" все выходы uln2803),
видим, что нагрузка включается.
7. Меняем отправляемые данные командой с ПК на 0x00 ("деактивируем" все выходы uln2803), видим, что нагрузка не отключается.

Детали:
1. Плата-хост к проблеме отношения не имеет, т.к. исправно шлёт данные (видно логическим анализатором).
2. Плата-клиент:
-ESP-12F принимает данные исправно (видно логическим анализатором);
-прерывания работают (мигает светодиод 1 раз в секунду);
-функция приема данных с ESP-12F частично работает, т.к. если нет данных в течение 2 секунд, регистры сбрасываются в 0x00.

Очевидно, что проблема вызвана падением напряжения из-за нагрузки. Падение напряжения в свою очередь вызывает проблемы с тактированием МК, что влечет за собой "заторможенность тактирования", что в свою очередь влияет на правильный прием данных от ESP-12F.

Проблема в данной ситуации решается подбором настроек скорости USART`а на плате-клиенте, чтобы скорость была примерно похожа на нужную при падении напряжения и без него. Но это не дело. Решит ли эту проблему установка внешнего кварца?

При этом напряжение при 50% нагрузки остается в районе 3.28V, а на холостом ходу 3.48V
2. ОЛЕГ - 03 Февраля, 2018 - 00:30:31 - перейти к сообщению
Привет!
Когда-то давно была у меня похожая ситуация, когда приемник отказывался понимать то, что ему присылают. А на макетке, которая с кварцем, все прекрасно работало. Долго думал тогда. Замешательство
3. Группа Инженеров - 03 Февраля, 2018 - 00:43:10 - перейти к сообщению
Не специалист по атмелам, но...
Вряд ли снижение напряжения как таковое может привести к срыву генерации.
Но, импульс по питанию может привести к установке какого-нибудь флага в каком-нибудь модуле, например тактирования или даже генерации сброса.
Если нет возможности запитать нагрузку от другого источника, попробуйте поставить RC или LC фильтр в цепь питания (и сброса) микроконтроллера. Ну, скажем 10Ом 220мкФ или 100мкГн 220мкФ.
4. Vlad_sem - 03 Февраля, 2018 - 00:46:14 - перейти к сообщению
Группа Инженеров пишет:
Не специалист по атмелам, но...
Импульс по питанию может привести к генерации сброса.
Если нет возможности запитать нагрузку от другого источника, попробуйте поставить RC или LC фильтр в цепь питания (и сброса) микроконтроллера. Ну, скажем 10Ом 220мкФ или 100мкГн 220мкФ.

Нет, причина не в импульсе. Несколько раз сталкивался с подобным. В таком случае МК просто намертво зависает, а тут, если нагрузку отключить, то все снова становится нормально и данные принимаются нормально.
Просаживается частота, сохраняя полную работоспособность МК, но понижение частоты влечет понижение скорости UART`a, а значит хоть МК и принимает данные от ESP, но принимает мусор. Вопрос вот в чем: почему так? Вроде нет выхода за пределы допустимого напряжения.
(Добавление)
Группа Инженеров пишет:
Но, импульс по питанию может привести к установке какого-нибудь флага в каком-нибудь модуле, например тактирования или даже генерации сброса.

Я тоже думал об этом, но тогда МК остался бы неработоспособным при отключении нагрузки.
5. Группа Инженеров - 03 Февраля, 2018 - 00:54:13 - перейти к сообщению
Ну, а я сталкивался. Выставлялся флаг в супервизоре напряжения питания, а этот флаг обрабатывается аппаратно. При его установке тактирование ядра переключается c кварца на RC генератор и вуаля...
Опять же не знаю как в этих Ваших мегах.
Решил вопрос программным сбросом этого флага в основном цикле программы.
6. Vlad_sem - 03 Февраля, 2018 - 00:54:55 - перейти к сообщению
ОЛЕГ пишет:
Привет!
Когда-то давно была у меня похожая ситуация, когда приемник отказывался понимать то, что ему присылают. А на макетке, которая с кварцем, все прекрасно работало. Долго думал тогда. Замешательство

Логический анализатор нереально выручает в таких ситуациях.
7. Группа Инженеров - 03 Февраля, 2018 - 01:04:24 - перейти к сообщению
Сейчас посмотрел. Это был не флаг супервизора напряжения. Это был флаг ошибки работы генератора. А, лечил я это проверкой флага и перезапуском генератора в случае его установки.
НО!
Этот флаг у меня ставился именно из-за импульса по питанию. При подачи питания, одно из устройств, которое висело на той же шине питания генерировало переходной процесс...
8. Predator - 03 Февраля, 2018 - 11:04:29 - перейти к сообщению
при увеличении нагрузки еще и пульсации напряжения увеличиваются.
9. Vlad_sem - 03 Февраля, 2018 - 15:30:46 - перейти к сообщению
Predator пишет:
при увеличении нагрузки еще и пульсации напряжения увеличиваются.

Если без нагрузки понизить напряжение, ситуация повторится.
10. Predator - 04 Февраля, 2018 - 16:22:41 - перейти к сообщению
Ну тогда дело в напряжении в чистом виде. Нужно линию "Sence" к источнику питания тянуть.