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

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

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

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

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

Добавлено: Пт авг 07, 2009 18:26:27
Aiudara
Можно попробовать соединить корпуса устройст отдельным проводником если схема питания это позволяет.

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

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

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

Добавлено: Пт авг 07, 2009 21:32:39
Aiudara
Смотря какие там у вас прерывания и какая частота такта.

Добавлено: Пт авг 07, 2009 21:49:47
RVL
Aiudara писал(а):Смотря какие там у вас прерывания и какая частота такта.
ATmega16L
используется прерывание TIM0_COMP (compare, Т0).
Таймер Т0: clock: 31,250kHz (прескаллер 256, частота мк 8MHz).

Добавлено: Пт авг 07, 2009 22:08:43
Aiudara
Если не секретный проект то выкладывайте весь архив.

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

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

Добавлено: Пт авг 07, 2009 22:45:53
RVL
Aiudara писал(а):Если не секретный проект то выкладывайте весь архив.

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

Добавлено: Пт авг 07, 2009 22:57:41
RVL
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
BCluster
Наличие помех при таком раскладе практически гарантировано. Совет - выкинуть реле и транзистор и заменить оптроном и симистором/тиристором. Или хоть оптически развяжите, хотя с реле и транзистором с этим есть определенные трудности

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

Добавлено: Сб авг 08, 2009 01:24:06
BCluster
Чем этот "определенный момент" определен? (: На самом деле может и от 24 в глючить, не переживайте)

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

Добавлено: Сб авг 08, 2009 09:05:59
DrWatson
RVL писал(а):В какие-то моменты времени в момент включения нагрузки комп начинает получать в ответ на команды информацию, что контроллер не разобрал команду (скорость 9600, кабель короткий). Также, комп может получать какие-то левые байтики на ком-порт. А иногда, контроллер вообще выполняет принятую команду с неверным параметром!
Похоже что выбросы напряжения на релюхах глючат систему, диоды защитные параллельно реле стоят? На каждую микросхему не мешало бы на линии питания повесить блокировочные конденсаторы керамические или танталовые (а не электролиты - электролита одного на всю схему хватит 47-100мкФ). Если все это не поможет, то все таки лучше прислушаться к совету об опторазвязке.

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

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

Добавлено: Сб авг 08, 2009 12:01:05
DrWatson
Можно попробовать на контакты реле поставить искрогасящие RC-цепочки, все таки электродвигатель нагрузка индуктивная, возможно искры между контактами реле при коммутации и портят всю картинку.
Оптроны есть и с тиристорами и симисторами, не только с транзисторами.

Добавлено: Сб авг 08, 2009 12:45:15
RVL
DrWatson писал(а):Можно попробовать на контакты реле поставить искрогасящие RC-цепочки, все таки электродвигатель нагрузка индуктивная, возможно искры между контактами реле при коммутации и портят всю картинку.
На контактах реле (те, что питают обмотку) и так стоит диод (катодом к плюсу).

Добавлено: Сб авг 08, 2009 14:44:18
BCluster
Так вы возьмите оптрон не с транзистором, а с оптосимистором. типа MOC3021. А может у вас блокировочные диоды медленные? Там нужно чтото типа 1N5819

Добавлено: Сб авг 08, 2009 15:53:26
uk8amk
RVL писал(а): - Питание АтМеги: 5В (от ATX)
- Питание Max: 5В (ATX)
Я так понял что 5 вольт напрямую от БП. Был у знакомого один трабл. МК питаемый от компового БП постоянно ресетился BOD'ом каждую минуту. Причина - слишком грязное напряжение +5V. Лучше возьмите шину +12 и понизьте кренкой до 5 с хорошими кондерами.

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

Может быть такое???