Jump to content

    

Не хватает UART-ов

Ну зачем это все, а? Человеку простой ремапинг подходит, зачем все остальное городить?

начнем с того, что ТС не описал максимальную скважность опросов.

с ремапом все понятно, я пытаюсь описать прелесть другого подхода

 

так-то оно, конечно, да - заремапить и делов

 

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

минус - место на плате. Опять же - ТС не указывает каких-то дополнительных данных, кроме как просто "мало места"

Share this post


Link to post
Share on other sites
adnega, надо 9. чтобы к 8-ми приделать датчики, а по 1 гнать все данные дальше

мультиплексор подойдет...но плату надо минимизировать

А что за датчики? Какой протокол? Датчики шлют данные по свое инициативе или в ответ на запрос?

Почему нельзя работать всем датчикам на одной шине? Есть ли адресация в датчиках/протоколе?

Т.е. датчики напрямую к LVTTL-ногам контроллера подключены без какой либо защиты (раз места мало)?

На каком расстоянии все это должно работать? Что насчет помех?

Не у всех STM32 "нормальный" remap. Какое семейство рассматриваете?

Share this post


Link to post
Share on other sites

Надо подбирать МК под задачу, а не пытаться втиснуть задачу в то, что знаете.

На STM свет клином не сошёлся. Например: TM4C129DNCPDT - 8 встроенных UART-ов. Недостающий 9-й можно эмулировать программно.

Или сделать программный 8-канальный UART на датчики, а для 9-го - использовать аппаратный.

Share this post


Link to post
Share on other sites
..а что это даст?

У нас когда-то 8 контроллеров шаговиков на пиках висели параллельно на одной шине UART. Каждому контроллеру при помощи перемычек задавали уникальный идентификатор, все отлично работало (9 бит нужен для того, чтобы сигнализировать о посылке запроса с идентификатором, если он сброшен, работает только откликнувшийся контроллер).

 

ТС явно делает что-то не так, если ему так дофига UART'ов нужно!

 

то что на другом конце UART-ов имеет одинаковую прошивку

Перепрошить и задать возможность установки идентификаторов (можно и на первичной стадии во флеш писать).

 

P.S. А еще лучше вообще на нормальную CAN-шину пересесть, коли проблемы с уартами...

Edited by Эдди

Share this post


Link to post
Share on other sites
А что за датчики? Какой протокол? Датчики шлют данные по свое инициативе или в ответ на запрос?

Почему нельзя работать всем датчикам на одной шине? Есть ли адресация в датчиках/протоколе?

Т.е. датчики напрямую к LVTTL-ногам контроллера подключены без какой либо защиты (раз места мало)?

На каком расстоянии все это должно работать? Что насчет помех?

Не у всех STM32 "нормальный" remap. Какое семейство рассматриваете?

Датчики (в конструкцию входит МК) шлют ответ по запросу.

Датчики имеют одинаковую прошивку и конструкцию, поэтому на одной шине их нельзя различить. Кроме того потребуется увеличить скорость обмена, что не есть хорошо. Адресации никакой нет.

Вы про какую защиту? Защитные диоды стоят, они места почти не занимают.

Длина кабеля - два метра. Присутствуют высокочастотные помехи. Не могу их точно оценить, но первый образец прибора, говорят, не сбивался.

Рассматриваю STM32F09x - у них есть 8 UART-ов.

 

Share this post


Link to post
Share on other sites
Датчики (в конструкцию входит МК) шлют ответ по запросу.

Датчики имеют одинаковую прошивку и конструкцию, поэтому на одной шине их нельзя различить. Кроме того потребуется увеличить скорость обмена, что не есть хорошо. Адресации никакой нет.

Вы про какую защиту? Защитные диоды стоят, они места почти не занимают.

Длина кабеля - два метра. Присутствуют высокочастотные помехи. Не могу их точно оценить, но первый образец прибора, говорят, не сбивался.

Рассматриваю STM32F09x - у них есть 8 UART-ов.

Ну, если по очереди и никто больше сильно не мешает- то вполне можно и софтовые порты недостающие сделать, если ремапинг религия или объективные причины не позволяют использовать. Одно прерывание на бит с погрешностью 5% от длины бита (реакция на первый, стартовый, бит должна быть быстрее чем 5% от длины бита), сами считайте успеете или нет. У меня 16С84 с 4 МГц ядром успевал 9600 ловить с одного порта и в 8 других портов отсылать разные данные, а сейчас техника уже пошустрее :).

 

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

Share this post


Link to post
Share on other sites
Датчики (в конструкцию входит МК) шлют ответ по запросу.

Датчики имеют одинаковую прошивку и конструкцию, поэтому на одной шине их нельзя различить. Кроме того потребуется увеличить скорость обмена, что не есть хорошо. Адресации никакой нет.

Здесь нужен один-единственный UART + мультиплексор на Tx мелкоконтроллера (если действительно сами по себе датчики ничего в UART не пихают).

Т.е. для работы с 16 датчиками понадобятся: 2 ноги UART (Rx/Tx) + 4 ноги для адресации мультиплексора.

Share this post


Link to post
Share on other sites
Датчики (в конструкцию входит МК) шлют ответ по запросу.

Датчики имеют одинаковую прошивку и конструкцию, поэтому на одной шине их нельзя различить. Кроме того потребуется увеличить скорость обмена, что не есть хорошо. Адресации никакой нет.

"Нельзя различить" != "не умеете различить".

При желании и должном умении всё возможно.

И без всяких мультиплексоров можно обойтись и всего одним UART-ом на вашем головном МК (раз ПО на датчики пишете Вы сами и вы сами можете его менять, что изначально вы не указали).

Если структуру кабельных связей между датчиками и центром сбора на STM можно организовать в виде кольца, а не только звезды, то можно сделать простую сеть на одном UART.

Потребуется только один UART в центре сбора и по одному UART на каждом датчике.

Как:

Подключаете TX центра к RX датчика1, TX датчика 1 - к RX датчика2, ..., TX датчика 8 - к RX центра.

Получаете кольцо (всего два провода в кольце - данные и GND).

Далее имеем сеть в виде кольца. Сеть работает в пакетном режиме. Старт обмена - по инициативе центра. Каждый датчик имеет уникальный номер (от 1 до 8 например).

Протокол обмена:

Центр отправляет (на свой TX) кадр заданного формата. В заголовке кадра указывает целевой адрес датчика (из диапазона 1...8).

ПО датчиков принимает кадр со своего RX, смотрит целевой адрес в кадре, если этот кадр предназначен не ему, просто пересылает этот кадр без изменений на свой TX.

Если кадр предназначен ему, заменяет содержимое поля запрос в кадре, на поле ответ. И отправляет на RX.

Центр принимает всё на RX и анализирует ответы.

Всё.

Такой алгоритм позволяет кроме адресных запросов к датчикам, посылать широковещательные (например - широковещательная отправка уставок всем датчикам, и даже широковещательный запрос данных со всех датчиков (отсылается кадр в который каждый датчик вставляет свой слот ответа и тогда можно опрашивать датчики гораздо быстрее, все сразу за один запрос, чем колхозом с мультиплексорами)).

И назначить уникальные номера датчикам - не проблема. Например:

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

Центр периодически (или по вкл. питания) отправляет команду энумерации в сеть, установив в ней некий счётчик в значение==0. Каждый датчик, приняв команду энумерации, инкрементирует в ней этот счётчик и затем устанавливает свой адрес равным ему, затем отправляет этот кадр дальше по кольцу. После прохождения кадра энумерации всего кольца, все датчики получат уникальные номера.

Данный алгоритм позволяет также горячее подключение новых датчиков в ходе работы.

 

Здесь нужен один-единственный UART + мультиплексор на Tx мелкоконтроллера (если действительно сами по себе датчики ничего в UART не пихают).

Т.е. для работы с 16 датчиками понадобятся: 2 ноги UART (Rx/Tx) + 4 ноги для адресации мультиплексора.

Если датчики можно объединить в кольцо, то здесь нужен один-единственный UART и 0 мультиплексоров и ног GPIO.

Share this post


Link to post
Share on other sites
Подключаете TX центра к RX датчика1, TX датчика 1 - к RX датчика2, ..., TX датчика 8 - к RX центра.

Получаете кольцо (всего два провода в кольце - данные и GND).

Далее имеем сеть в виде кольца. Сеть работает в пакетном режиме. Старт обмена - по инициативе центра. Каждый датчик имеет уникальный номер (от 1 до 8 например).

угу. И имеем ситуацию: лифты во всем доме не работают, потому что перегорела лампочка подсветки кнопки вызова лифта на 7-м этаже 4-го подъезда.

Аналогия, думаю, понятна.

Share this post


Link to post
Share on other sites
Подключаете TX центра к RX датчика1, TX датчика 1 - к RX датчика2, ..., TX датчика 8 - к RX центра...

ремонт елочных гирлянд - занятие кропотливое)

Share this post


Link to post
Share on other sites
угу. И имеем ситуацию: лифты во всем доме не работают, потому что перегорела лампочка подсветки кнопки вызова лифта на 7-м этаже 4-го подъезда.

Аналогия, думаю, понятна.

Аналогия непонятна и совершенно не к месту.

Естественно если нужно горячее включение, то необходимо предусмотреть некую аппаратную поддержку (замыкать RX на TX для откл. датчиков).

Если какой-то из датчиков повис (повисло ПО), то естественно в нём есть сторожевик, который как минимум подаст RESET на него. Данный RESET можно использовать для замыкания TX-RX (если по каким-то причинам ПО никогда не стартует).

Share this post


Link to post
Share on other sites

Все не правы, потому что автор сам не знает, что хочет, а тему создал как эмоцию на "по идее, 8 должны примерно одновременно работать".

Share this post


Link to post
Share on other sites
Вы про какую защиту? Защитные диоды стоят, они места почти не занимают.

Длина кабеля - два метра. Присутствуют высокочастотные помехи. Не могу их точно оценить, но первый образец прибора, говорят, не сбивался.

"Делай сразу хорошо - плохо само получится".

Меня лично настораживают уровни 3.3В "на улицу" на 2 метра на 8 датчиков в условиях помех.

Что за защитные диоды стоят? Те, которые сливают помеху на землю и питание? Не боитесь, что питание подскочит и все спалит?

Защита может быть гораздо больше по площади, чем мультиплексор.

Как вы проверяете защиту? Подавали помеху в виде постоянного уровня, например, от -7 до +12В на входы?

Любой монтажник перепутает провода и вся поделка в виде центрального блока и 8 датчиков рискует превратится в уголек.

Ну, да, конечно же монтажник виноват, но икаться будет вашей маме (это оборот речи, а не конкретно чья-то мать).

А при первой же возможности монтажники/проектировщики выберут другого поставщика/исполнителя.

Нормальное решение: RS485 + адресация в датчиках.

Если есть сложности с манипулированием перемычками в датчиках, то можно применить CAN.

Кста, если есть потребность в быстрой реакции, т.е. работать по событию, а не по опросу, то за CAN поднимается вторая рука.

Share this post


Link to post
Share on other sites
На STM свет клином не сошёлся. Например: TM4C129DNCPDT - 8 встроенных UART-ов. Недостающий 9-й можно эмулировать программно.

 

MB91F524FSBPMC (Fujitsu/Spansion)- до 12 UART

MB91F527MSCPMC - до 20 UART

Share this post


Link to post
Share on other sites
Далее имеем сеть в виде кольца.

Жесть!

Самый простой вариант с одним-единственным уартом - это повесить все на одну шину. Нефиг тут кольцевать. Работоспособный и проверенный вариант.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this