RVL

Проблемы С Работой Uart

14 сообщений в этой теме

RVL    0

Доброго времени суток!

Исходное:

ATmega16L подключен к ком-порту через MAX232CPE.

Командами из компа управляем ногами контроллера, которые (через транзистор+реле) включают/отключают нагрузку (электродвигатели 12в*4А).

Все это питается от того же блока питания, что и компьютер.

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

Предположения:

- max232cpe начинает "гнать лажу" в одну/обе сторону(ы) из-за колебаний питания;

- мк виснет (глючит) после колебаний питания;

Хотя оба предположения странные - вроде компьютерный блок питания ATX (350W) обеспечивает достаточный ток! Да и комп ведь при этом не виснет!

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mazzi    12

Все эти вещи вполне нормальны. С этим следует бороться с помощью протокола. То есть формируется посылка, маркёр начала, длина, тело, контрольная сумма, маркёр конца. По контрольной сумме определяется правильность посылки и принимаются соответствующие действия.

Найдите описание какого либо протокола и почитайте, например Modbus.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RVL    0

Нет. Не нормальны. Я ведь скалаз "иногда".

Выглядит так:

1. сначала долгое время все нормально.

2. в какой-то момент контроллер начинает всякий раз добавлять к своему нормальному ответу мусорный (-ные) байт(ы). И так, пока не "передергну" питание всей платы с контроллером.

3. После передергивания питания контроллера все становится опять просто замечательно (переходим к п.1).

Так что в протоколе здесь ошибок нет. Кроме того, мк имеет парсер команды. И если что-то пришло неправильно, он в ответ выдаст "ERRRO", иначе "ОК".

Но ведь он выполняет команды при этом, но неправильно (ощущение, что параметр команды неправилен).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
wowa    4

А можете показать фото устройства? У вас похоже серьёзные проблемы с фильтрацией сигнала и питания...Всегда когда надо включать и выключать нагрузку более чем 2А надо принимать меры о гащении помех в питании...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RVL    0

Так вроде используется реле для развязки питания мк от питания нагрузки. У них только GND общий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zenner    1

При вкл/выкл релюшек тоже могут возникать помехи в питании, на которые, может быть, и обижается Ваш МК...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RVL    0
При вкл/выкл релюшек тоже могут возникать помехи в питании, на которые, может быть, и обижается Ваш МК...

Обмотки релюшек питаются от +24в.

С мк 4 выхода подключены к дешифратору (ИД3), а о дешифратора к инфертору. От инвертора идет на транзисторный ключ, который включает/отключает обмотку реле (с параллельно включенным диодом в обратку).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zenner    1

Я бы начал с проверки MAX232.

У меня с ней тоже были глюки. Только я юзал MAX232N и скорость была 115кб/с. При ~3.5В питании оно работало, при 5В - байт нормально, байт бреда...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RVL    0

Появилось новое подозрение на источник проблемы:

Дело в том, что 4 выхода с мк подключены на вход дешифратора (аналог ИД3). А все его выходы (а они инверторные) подключены на входы инверторов.

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

Выход: все выходы дешифратора подтянуть к +5в через, например, 22к.

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

Изменено пользователем RVL

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Последнее легко проверить отключив дешифратор вовсе. Мое мнение совпадает с мнением mazzi - ваш протокол не умеет или не корректно обробатывает ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zenner    1

Да протокол явно непричем. Если бы его глючило - глючило бы постоянно.

Скорее всего глюки железа, и стоит попробовать, как сказал Станислав, отключить дешифратор...

Изменено пользователем Zenner

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RVL    0

Протокол сейчас правлю. До этого вообще не было контроля целостности управляющей строки.

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

Т.е. проверки по сути не было.

Сейчас добавляю CRC16 для проверки, что команда и ее параметры пришли такими, как их отправлял компьютер.

Отключить дешифратор не получится. Мы останемся только с контроллером. Нагрузка отключится вместе с дешифратором.

А так все это у меня собрано на макетке (только мк, max, светодиоды заместо нагрузки и кнопки заместо датчиков).

На макетке все работает как надо. Протокол работает без ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

трабла очевидна. На релюшках нету диодов в обратном направлении. Это раз. Дальше ключем проблемы является вот эта строчка:

Все это питается от того же блока питания, что и компьютер.

Что сделать:

1) поставить в обратном направлении шунтирующие диоды на реле (обмотка реле)

2) поставить подтяжку на + ресет

3) поставить дроссель по плюсу и конденсатор более чем 470мкф хотя бы.

у меня была довольно таки итересная ситуация: авр 910 сделал, и подключил на выход через транзистор маленькое реле 5В , все это питалось от юсб. Релюшка жрет отсилы 10ма. Так вот иногда в момент включения/выключения реле комп просто зависал и отрубался очень жостко! очень неприятно это было... все это закончилось когда на реле поставил диод. в момент выключения реле на обмотках возникает довольно таки большой отрицательный импульс которого у меня хватало чтобы комп отрубился. У вас же изза этого мк пропускает пару тактов или подвисает или еще хз что с ним происходит. Что сделать я уже написал. Напишите результат

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас