Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить

Проблемы при работе с UART

Пт авг 07, 2009 18:11:16

Доброго времени суток!
Исходное:
ATmega16L подключен к ком-порту через MAX232CPE.
Командами из компа управляем ногами контроллера, которые (через транзистор+реле) включают/отключают нагрузку (электродвигатели 12в*4А).
Все это питается от того же блока питания, что и компьютер.
В какие-то моменты времени в момент включения нагрузки комп начинает получать в ответ на команды информацию, что контроллер не разобрал команду (скорость 9600, кабель короткий). Также, комп может получать какие-то левые байтики на ком-порт. А иногда, контроллер вообще выполняет принятую команду с неверным параметром!

Предположения:
- max232cpe начинает "гнать лажу" в одну/обе сторону(ы) из-за колебаний питания;
- мк виснет (глючит) после колебаний питания;
Хотя оба предположения странные - вроде компьютерный блок питания ATX (350W) обеспечивает достаточный ток! Да и комп ведь при этом не виснет!

Может кто сталкивался с проблемами режимов питания мк AVR или max232?

Пт авг 07, 2009 18:26:27

Можно попробовать соединить корпуса устройст отдельным проводником если схема питания это позволяет.

Если ошибки пропадут то наверно вам поможет оптоизоляция RS232 - простые ПРОВЕРЕНЫЕ схемы опторазвязки есть на страничке - http://pid.by.ru/z4.htm

Пт авг 07, 2009 20:50:25

Корпуса и так соединены. Ведь питания компа, устройств, контроллера от одного блока питания.
С оптоизоляцией - поздно переделывать плату кардинально.
А почему так много разновидностей преобразователя MAX232 ?
Может мне стоит перейти на другой (напр. MAX232A)?
Чем они вообще отличаются?

Пт авг 07, 2009 20:55:52

Кстати, я использую прерывание таймера Т0 по совпадению.
Где-то сейчас прочитал мысль (вернее вопрос) одного человека другому: "...я ты отключаешься UART на время прерывания?".
И собственно, возникла мысль, а может дело как раз в этом? Может надо UART отключать после входа в прерывания ? А перед выходом - включать.

Пт авг 07, 2009 21:32:39

Смотря какие там у вас прерывания и какая частота такта.

Пт авг 07, 2009 21:49:47

Aiudara писал(а):Смотря какие там у вас прерывания и какая частота такта.


ATmega16L
используется прерывание TIM0_COMP (compare, Т0).
Таймер Т0: clock: 31,250kHz (прескаллер 256, частота мк 8MHz).

Пт авг 07, 2009 22:08:43

Если не секретный проект то выкладывайте весь архив.

Иначе понять что-то сложно. Ведь в прерывание бывают понпихают чтолько что в нем МК висит подолгу ...

Пт авг 07, 2009 22:26:03

У меня сразу куча вопросов:
Питание АтМеги 3/5 В ? Питание Мах? Кондеры обвязки Мах ?
Длины проводов питания, фильтрация питания нагрузки от основного питания есть ?
И здесь может даже не столь проблемма в положительном уровне, а может быть уроведь земли плавает..

Пт авг 07, 2009 22:45:53

Aiudara писал(а):Если не секретный проект то выкладывайте весь архив.

Иначе понять что-то сложно. Ведь в прерывание бывают понпихают чтолько что в нем МК висит подолгу ...
Последний раз редактировалось RVL Ср авг 12, 2009 22:28:35, всего редактировалось 1 раз.

Пт авг 07, 2009 22:57:41

Pe3ucTop писал(а):У меня сразу куча вопросов:
Питание АтМеги 3/5 В ? Питание Мах? Кондеры обвязки Мах ?
Длины проводов питания, фильтрация питания нагрузки от основного питания есть ?
И здесь может даже не столь проблемма в положительном уровне, а может быть уроведь земли плавает..


- Питание АтМеги: 5В (от ATX)
- Питание Max: 5В (ATX)
- Кондеры обвязки: 5 шт. * 1 мкф (max232cpe - согласно даташиту);
- длины проводов питания: мк и макс на одной плате. длина провода питания=длине провода БП ATX (для IDE).
- фильтрация отсутствует. только между GND и +5в электролит.кондеры (10мк, 0.1мк, 1мк, 1мк - в разных местах).

Пт авг 07, 2009 23:20:35

Наличие помех при таком раскладе практически гарантировано. Совет - выкинуть реле и транзистор и заменить оптроном и симистором/тиристором. Или хоть оптически развяжите, хотя с реле и транзистором с этим есть определенные трудности

Сб авг 08, 2009 00:34:51

Если бы это были помехи, то они были бы всегда.
Здесь же получается, что сначала все чисто! А сбои начинаются с определенного момента.
К тому же реле питаются от +24в. Ток через них - где-то 30 мА.

Сб авг 08, 2009 01:24:06

Чем этот "определенный момент" определен? (: На самом деле может и от 24 в глючить, не переживайте)

Re: Проблемы при работе с UART

Сб авг 08, 2009 09:05:59

RVL писал(а):В какие-то моменты времени в момент включения нагрузки комп начинает получать в ответ на команды информацию, что контроллер не разобрал команду (скорость 9600, кабель короткий). Также, комп может получать какие-то левые байтики на ком-порт. А иногда, контроллер вообще выполняет принятую команду с неверным параметром!

Похоже что выбросы напряжения на релюхах глючат систему, диоды защитные параллельно реле стоят? На каждую микросхему не мешало бы на линии питания повесить блокировочные конденсаторы керамические или танталовые (а не электролиты - электролита одного на всю схему хватит 47-100мкФ). Если все это не поможет, то все таки лучше прислушаться к совету об опторазвязке.

Сб авг 08, 2009 10:58:40

защитные диоды стоят.
С опторазвязкой сложнее:
Реле применяли потому, что необходимо управлять полярностью напряжения на нагрузке (нужно вращать двигатель в разные стороны).
Выглядит примерно так: отдельной ногой меги меняем полярность (управляем полярностью с помощью полумоста на МОСФЕТах).
4-мя ногами через дешифратор ИД3 включаем одну из 9-ти реле (подключаем контакт, допустим "А" к одному плечу полумоста), другой ногой включаем реле для коммутации второго контакта (допустим "Б") - подключаем к другому плечу полумоста. Нагрузка подключена к "А" и "Б". Всего имеем 36 потребителей.

Опторазвязка, насколько помню, в качестве коммутирующего элемента использует фототранзистор. А он проводит ток только в одну сторону.

Сб авг 08, 2009 12:01:05

Можно попробовать на контакты реле поставить искрогасящие RC-цепочки, все таки электродвигатель нагрузка индуктивная, возможно искры между контактами реле при коммутации и портят всю картинку.
Оптроны есть и с тиристорами и симисторами, не только с транзисторами.

Сб авг 08, 2009 12:45:15

DrWatson писал(а):Можно попробовать на контакты реле поставить искрогасящие RC-цепочки, все таки электродвигатель нагрузка индуктивная, возможно искры между контактами реле при коммутации и портят всю картинку.

На контактах реле (те, что питают обмотку) и так стоит диод (катодом к плюсу).

Сб авг 08, 2009 14:44:18

Так вы возьмите оптрон не с транзистором, а с оптосимистором. типа MOC3021. А может у вас блокировочные диоды медленные? Там нужно чтото типа 1N5819

Сб авг 08, 2009 15:53:26

RVL писал(а):- Питание АтМеги: 5В (от ATX)
- Питание Max: 5В (ATX)


Я так понял что 5 вольт напрямую от БП. Был у знакомого один трабл. МК питаемый от компового БП постоянно ресетился BOD'ом каждую минуту. Причина - слишком грязное напряжение +5V. Лучше возьмите шину +12 и понизьте кренкой до 5 с хорошими кондерами.

Сб авг 08, 2009 17:14:14

Появилось новое подозрение на источник проблемы:
Дело в том, что 4 выхода с мк подключены на вход дешифратора (аналог ИД3). А все его выходы (а они инверторные) подключены на входы инверторов.
Так вот что получается: пусть в какой-то момент времени дергается питание. И этого хватает, чтобы отключился дешифратор. Когда отключается дешифратор, инверторы на вход получают лог.0 (поскольку вход болтается в воздухе), а на своих выходах выдают лог.1. Это открывает транзисторные ключи (одновременно все!) и включает одновременно все релюшки и нагрузку. Естественно, что это уже перебор.
Выход: все выходы дешифратора подтянуть к +5в через, например, 22к.

Может быть такое???
Ответить