American English British English Български Čeština Français Deutsch (Du) Magyar Italiano 日本語 Lietuvių Polski Српски Slovenčina Español (Tú) Türkçe Українська
Select language:

Расширение кол-ва I/O портов.

<<

Pavel Buyevich

User avatar

Posts: 30

Joined: 30 Aug 2014, 09:56


Has thanked: 0 time
Been thanked: 4 times

Post 30 Aug 2014, 10:11

Расширение кол-ва I/O портов.

Приветствую.
Недавно встала необходимость увеличения кол-ва I/O портов на блоке (эмулятор бензофорсунок для управления гбо 4 поколения с сохранением всех оставшихся рюшек - автоподсос, вентилятор, бензонасос, тахометр, итп). Посему встал вопрос о блоке расширения. Вопрос стоит о том, как разумнее организовать коммуникацию блока расширения с блоком SECU с минимальным вторжением в готовую плату - ADD_IO_1/2 используя I2C протокол? Проблема в том что там последовательно висят два резистора по 10ком, из за которых коммуникация становится невозможной (не ходелось бы мудрить схему повышения уровней или выдирать эти резисторы). Второй вариант используя SPI повесить параллельно с микрухой датчика детонации. Можно ли в этом случае реализовать выбор адресуемого устройства аппаратно (шина SS или CS в обозначении микросхемы) сделав простой инвертер уровней на одном транзисторе? И как скажется на работе системы обнаружения детонации факт присутсвия еще одного устройства отбирающего процессорное время? Хотелось бы услышать мнение авторов проекта, какой путь выбрали бы они. Спасибо.
<<

STC

User avatar

Posts: 6613

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 820 times
Been thanked: 1332 times

Post 30 Aug 2014, 11:22

Re: Расширение кол-ва I/O портов.

Резисторы можешь ставить какие тебе нужны. Да, можно как по I2C, так и по SPI.
В первом случае прийдется отказаться от 3 и 4 каналов зажигания или переназначить их на другие свободные порты. Так как I2C не используется, то он свободен, единственное там в некоторых частях кода могут использоваться его регистры в качестве битовых переменных и нужно будет там сделать замену на обычные переменные из ОЗУ, но только не забывать про атомарность обращений к ним.
Во втором случае дополнительно устройство подключить параллельно HIP9011. Прийдется при этом пожертвовать одним портом для CS. Можно воспользоваться тем, который идет на ногу TEST HIP9011 и убрать из кода инициализации HIP9011 тестирование отклика (без этого можно спокойно жить). В момент каждого такта двигателя производится передача данных в HIP9011, это занимает мало времени. Для разделения SPI между 2 устройствами запросы можно ставить в простую очередь (или просто блокировка с ожиданием, по типу семафора или мутекса). Еще лучше перенести код из прерывания в основной цикл, тогда проще будет (но есть нюансы, например можно ли вносить изменения в настройки HIP9011 во время активного INT/HOLD).
Я бы делал через SPI, так как в этом случае мы ничего не теряем.
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
<<

Pavel Buyevich

User avatar

Posts: 30

Joined: 30 Aug 2014, 09:56


Has thanked: 0 time
Been thanked: 4 times

Post 30 Aug 2014, 13:08

Re: Расширение кол-ва I/O портов.

Окей спасибо. Кстати, я полагаю что именно по такой схеме будет добавляться возможность управления распределенным впрыском в будущем (если не вносить радикальных изменений в схему и печатку)?
<<

STC

User avatar

Posts: 6613

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 820 times
Been thanked: 1332 times

Post 30 Aug 2014, 13:28

Re: Расширение кол-ва I/O портов.

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

Распределенный фазированный впрыск на 4 форсунки можно сделать и с существующим железом (без платы расширения), что и будет сделано и только потом плата расширения. Для начала с головой хватит и распределенного одновременного, что уже есть сейчас. А так, да.
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
<<

mmlevin

User avatar

Posts: 245

Joined: 13 May 2013, 09:44

Location: Россия, Воронеж


Has thanked: 2 times
Been thanked: 61 times

Post 08 Sep 2015, 12:02

Re: Расширение кол-ва I/O портов.

Рисовал тут схему инжекторного жгута для подключения блока Secu, со всеми положенными реле и т.п. Столкнулся с тем, что входы в запасе еще есть, как минимум 2-3, а вот с выходами проблема. Между тем, имеется ряд выходов, которые занимают драгоценный порт контроллера и могли бы быть вынесены на расширитель. Это следующие сигналы:
  • 1. ECF
  • 2. ST_BLOCK
  • 3. CE
  • 4. FL_PUMP
  • 5. PWR_RELAY
  • 6. INTK_HEAT
То есть видим как минимум 6 низкоскоростных, фактически триггерных сигналов, которые могли бы быть вынесены на расширитель. Для UNI_OUT[1..3] возможность вынесения зависит от того, как быстро должно меняться значение вывода, т.е. такие вещи, как шифт-лампа, сигнализатор нагрузки и т.п. теоретически могли бы быть тоже вынесены.
Здесь предлагалось использовать микрочиповские порт-экспандеры, например MCP23S08, для организации двунаправленного ввода-вывода. Однако, думаю, что проблема с недостатком выходных портов при наличии входных имеет место не только у меня, в связи с чем пришла идея применения обычного регистра 74HC595. Он интересен тем, что стоит вдесятеро дешевле экспандера, между тем у меня есть опыт его применения в промышленной аппаратуре, где он стоит, скажем так, в жизненно важных узлах и переключается довольно часто. Кроме того, по интерфейсу управления он полностью совместим с SPI в режиме MODE0, т.е. с самым распространенным.
Как бы это могло выглядеть программно. Есть некая опция компиляции, включающая поддержку вывода данных на регистр. В принципе, можно сделать и без опции - работать все равно будет. В коде, отвечающем за перенаправление входов-выходов задействуется часть ранее зарезервированных plugs - как это будет по-русски? Предположим, слотов. То есть к IOP_ECF, IOP_ST_BLOCK и т.д. добавятся IOP_ECF_EXT, IOP_ST_BLOCK_EXT и их обработчики, которые просто будут выставлять или сбрасывать соответствующий бит в байте, хранящем содержимое для вывода на регистр. В тех местах кода, где происходит сейчас установка значения вывода вроде IOCFG_SET(IOP_FL_PUMP, s) , добавится вызов IOCFG_SET(IOP_FL_PUMP_EXT, s). А непосредственная запись в регистр будет производиться из главного цикла, в моменты, когда нет обращения к HIP9011 и/или другим SPI устройствам, если таковые появятся. Пожертвовать придется функцией одной из линий, идущих на разъем расширения (нужен будет CS на регистр), при этом в конфигурации этих выходов можно добавить функцию IOP_EXTERNAL_REGISTER_CS, либо функция жестко определяется, если используется опция компиляции для поддержки вывода в регистр.
И тут можно было бы обойтись без внесения изменений в менеджер, если бы не было необходимости устанавливать инверсию выходов.
Более того, если на ту же шину включить регистр вроде CD4021, то появляется возможность ввода низкоскоростных данных извне, схожим образом. Непосредственно посылку можно осуществлять (если не использовать опцию компиляции) только если сконфигурирован выход IOP_EXTERNAL_REGISTER_CS. Также, в принципе, ничего не мешает объединять два и более регистра в цепочку. Переназначение выводов на самом регистре делать не обязательно, можно жестко зафиксировать их.
Итого - изменений в коде сравнительно немного, а вот пользы - очень даже!
Что думает об этом уважаемое сообщество и непосредственно STC?
<<

STC

User avatar

Posts: 6613

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 820 times
Been thanked: 1332 times

Post 08 Sep 2015, 14:34

Re: Расширение кол-ва I/O портов.

Идея хорошая, я уже над этим думал несколько раз. Окончательное решение приймем когда я начну рисовать схему блока "все в одном". Или ты предлагаешь подключать экспандер к плате SECU-3T?
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
<<

mmlevin

User avatar

Posts: 245

Joined: 13 May 2013, 09:44

Location: Россия, Воронеж


Has thanked: 2 times
Been thanked: 61 times

Post 08 Sep 2015, 14:41

Re: Расширение кол-ва I/O портов.

Сейчас у меня в сборке 2 платы SECU-3T, китайцы все никак не пришлют несколько диодов. Я предлагал подключать экспандер (ну или регистр) к SECU-3T, этих плат у людей много :oops:. Переход на новую плату, чтобы получить функцию поддержки питания - это хорошо, но расточительно:) А маленький модуль в принципе выручил бы. А те, кто сразу собирается ставить инжектор, сразу бы ставили новую плату. По крайней мере стоит подумать об обратной совместимости расширителя с платой SECU-3T, но не думаю, что с этим будут какие-либо проблемы - SPI он и в Африке SPI.
<<

STC

User avatar

Posts: 6613

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 820 times
Been thanked: 1332 times

Post 08 Sep 2015, 16:04

Re: Расширение кол-ва I/O портов.

Согласен. Тут главное чтобы релизация расширителя для SECU-3T и расширителя в новой плате были одинаковыми (чтобы не усложнять ПО).
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
<<

mmlevin

User avatar

Posts: 245

Joined: 13 May 2013, 09:44

Location: Россия, Воронеж


Has thanked: 2 times
Been thanked: 61 times

Post 08 Sep 2015, 16:08

Re: Расширение кол-ва I/O портов.

Вывод - ждем появления решения в мастер-ветке (инжекторный блок) и бекпортируем в стабильную ветку (SECU-3T).
<<

kordal

User avatar

Posts: 19

Joined: 29 Jul 2013, 10:34


Has thanked: 3 times
Been thanked: 1 time

Post 20 Oct 2015, 08:10

Re: Расширение кол-ва I/O портов.

Доброго времени суток. А что, если использовать для расширения отдельную платку ретранслятор пакетов (мастер\ хост), связать с блоком по RS232 - 485 (422)? Т.е. сделать некий буфер, который цепляется на ноги RX TX, а он уже рулит разными устройствами по 485\422 (бортовой комп, противоугонные системы, системы расширения с разной логикой и пр.). Останется добавить несколько новых пакетов передачи данных. Единственным узким местом в такой системе, будет быстродействие. Хотя, скорее всего его хватит. Но есть и "+":
    1. Можно навешать много устройств.
    2. Относительно гибкая логика, блоки смогут общаться между собой.
    3. Опрашивать их по USB или иным образом.
    4. Можно конфигурировать из программы менеджер.
    5. Если задача стоит только считывать данные из главного блока, то переделка совсем не значительна.
Платка расширения ставится по аналогии с блютуз модулем в разрез RX\TX, кому не нужно дорожки остаются целыми.
Attachments
Next

Return to Аппаратное обеспечение

Who is online

Users browsing this forum: No registered users and 8 guests

Powered by phpBB® Forum Software © phpBB Group.