Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Все вопросы по железу
F5XX
Posts: 24
Joined: 11 Aug 2016, 20:19
Your CAR: TAZ 21126
SECU version: DIY SECU-3i
Has thanked: 6 times
Been thanked: 3 times

Пусть повисит

Post by F5XX »

Ради спортивного интереса начал запихивать поддержку MCP2515 в последний публичный git.
По задумке можно MCP2515 подключить к шине SPI. Вывод TEST от HIP9010 отключить и использовать как ~CS для CAN контроллера. (а зачем он там вовсе был?)
Ног не хватает, следовательно - проверять сообщения программно когда нечего делать, ну и отвечать кому надо.

Вот самая дешевая плата MCP2515 + TJA1050.

Пока смог добиться компиляции без ошибок. Кабы кто помог все это заставить работать :roll:

MCP2515 имеет на борту буфер для тактирования внешних устройств. Можно обойтись одним единственным кварцем на все устройство.
Attachments
secu3app-master-can.tar.gz
(889.87 KiB) Downloaded 411 times
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by STC »

Да, линию порта идущую к TEST можно как CS использовать. В SECU-3i я буду использовать другую линию порта, так как линия использовавшаяся для ТEST уже занята.
Я еще давно посмотрел, CAN контроллеров с интерфейсом UART нет, только 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 (вступаем!)
Sergey21126
Posts: 89
Joined: 04 Dec 2016, 22:11
Your CAR: LADA 2190
SECU version: DIY SECU-3i
Has thanked: 2 times
Been thanked: 26 times

CAN-трансмиттер для Гранты/Калины/Датсун

Post by Sergey21126 »

Китайцы вовсю продают SPI модули MCP2515 + TJA1050 ценой 1 евро. Там кварц на 8 мгц.
Отрываем TEST от HIP9011 и делаем его MCP2515_CS.
Для работы с CAN-шиной ВАЗ, нужно загрузить

Code: Select all

RESET(MCP2515_CS);
spi_putc(SPI_WRITE);
spi_putc(CNF3);
spi_putc(0x01); // Bitrate 500 kbps at 8 MHz
spi_putc(0x91); // CNF2
spi_putc(0x40); // CNF1
Принимать сообщения не требуется. Нужно только слать.

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

Code: Select all

CAN ID=0x1F9
RTR=0
LEN=8 
DATA[0]=0xE5
DATA[1]=0x70
DATA[2]=0x00
DATA[3]=0x00
DATA[4]=0x00
DATA[5]=0x00
DATA[6]=0x00
DATA[7]=0x00
DATA[0] крутит стрелку спидометра.

Также действует тахометр, но слать надо ID 0x180 Периодичность посылки 100 мс.

По аварийным лампочкам есть такая информация:

Code: Select all

CAN ID=0x551 — отвечает за сигнализацию неисправностей двигателя и его температуру. Периодичность рассылки 100 мс.

data[0] — Всегда 0x00, реакции нет.
data[1] — Вероятно температура. Если сделать FF панель выдаст лампочку перегрева.
data[2] — Меняется, но ничего не дает. Вероятно младшие биты температуры.
data[3] — авария заряда АКБ если первый бит = 0, другие значения нет реакции.
data[4] — Бит 0: моргать Check Engine, Бит 1: потушитьCheck Engine,Бит 2: авария давления масла, Бит 3: авария температуры, хзхз..
data[5] — COUNTER
data[6] — реакции нет, но меняется
data[7] — реакции нет, но меняется
Видимо поддержку OBDII можно не делать, ибо есть свой софт.

Вопрос к автору:
1. Будут ли движения в сторону CAN? Вопрос не просто актуальный, а сверхактуальный. Не хотелось бы приматывать "доработки" синей изолентой :cry:
2. Куда можно воткнуть инструкции рассылки сообщений по CAN, чтобы это не мешало алгоритмам secu?
Всего то такой кусок:

Code: Select all

    tCAN message;
    message.id = msg_id;
    message.header.length = msg_len;
    message.header.rtr = msg_rtr;
    message.data[0] = msg1;
    message.data[1] = msg2;
    message.data[2] = msg3;
    message.data[3] = msg4;
    message.data[4] = msg5;
    message.data[5] = msg6;
    message.data[6] = msg7;
    message.data[7] = 0x00;
    mcp2515_send_message(&message);
Принимать и что-либо обрабатывать не надо.

3. Нужны ли дополнительные виртуальные таймеры, или же можно использовать имеющиеся?
4. Как можно на практике завести в процессор аварию генератора и давления масла?
Спасибо.
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by STC »

Sergey21126, могу уделить этому внимание и попробовать включить код в последнюю версию прошивки. Можно связаться через личку по скайпу.
Вопрос к автору:
1. Будут ли движения в сторону CAN? Вопрос не просто актуальный, а сверхактуальный. Не хотелось бы приматывать "доработки" синей изолентой :cry:
2. Куда можно воткнуть инструкции рассылки сообщений по CAN, чтобы это не мешало алгоритмам secu?
1. Можно попробовать добавить поддержку CAN в последнюю прошивку. Без приема сообщений, только отсылка. Могу выделить на это время на следующей неделе.
2. Проще всего воткнуть в основной цикл, но нужно проверять если SPI занят, то ждать некоторое время пока он освободится (всего несколько десятков мкс). Мне кажется что частота пересылки данных в панель не имеет значения. Наверное можно просто слать каждые 10мс и все. Лучше всего сделать пересылку в прерывании 1.6мс, каждые 10мс.
3. Нужны ли дополнительные виртуальные таймеры, или же можно использовать имеющиеся?
4. Как можно на практике завести в процессор аварию генератора и давления масла?
3. Дополнительные таймеры не нужны. Есть прерывание 1.6 мс и там можно делать отсылку данных. Только нужно проверять если SPI занят, тоставить запрос на отсылку в очерень. Я уже реализовал этот механизм в последней прошивке для SECU-3i.
4. Только через свободные аналоговые входы, которые уже заняты для впрыска. В SECU-3i с этом проще, так как там есть еще 2 дополнительных аналоговых входа.
По давлению масла понятно, там датчик стоит, а вот как определяется авария генератора?
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 (вступаем!)
Yurii
Posts: 279
Joined: 10 Jul 2013, 09:41
Your CAR: ВАЗ2106
SECU version: DIY SECU-3T
Location: Шебекино
Has thanked: 1 time
Been thanked: 123 times

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by Yurii »

vaz_2108_1356.jpg
Схема подключения генератора.
Низкий уровень (лампа горит) - генератор не работает.
Высокий уровень (лампа не горит), работает.
ВАЗ 2106 -1.6, 60-2, SECU3-T rev6 mega644 + УВЗ, МЗ 2112-3705010, Солекс-21053-20.
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by STC »

Yurii wrote:
vaz_2108_1356.jpg
Схема подключения генератора.
Низкий уровень (лампа горит) - генератор не работает.
Высокий уровень (лампа не горит), работает.
Спасибо, значит достоточно просто дискретного входа (0/1) для определения этого момента. В SECU-3T с этим туго, но дискретный вход можно найти, а вот в SECU-3i с этим проблем вообще нет.
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 (вступаем!)
F5XX
Posts: 24
Joined: 11 Aug 2016, 20:19
Your CAR: TAZ 21126
SECU version: DIY SECU-3i
Has thanked: 6 times
Been thanked: 3 times

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by F5XX »

Можно затащить так
alternator.png
alternator.png (5.12 KiB) Viewed 2073 times
Резистор 47 Ом, 5 Вт ставят если генератор с обычным регулятором. Если регулятор "умный", то подтягивающий резистор нужен 910 Ом. Он нужен только для того чтобы разбудить регулятор при включении зажигания. Этим же проводом он сигнализирует отказ, моргая светодиодом.

По поводу спидометра
Как он работает (видео)

Как управлять

Code: Select all

      for (uint8_t speed_kmH = 0; speed_kmH < 250; speed_kmH++) {
         _delay_ms(300);
         uint8_t speed_code = speed_kmH / 2.5;
         PRINT("Speed=%d km/H Code=%d \r\n", speed_kmH, speed_code);
        message.id = 0x1F9;
        message.header.length = 8;
        message.header.rtr = 0;
        message.data[0] = 0x00;
        message.data[1] = 0x00;
        message.data[2] = speed_code;
        message.data[3] = 0x00;
        message.data[4] = 0x00;
        message.data[5] = 0x00;
        message.data[6] = 0x00;
        message.data[7] = 0x00;
        mcp2515_send_message(&message);
      }
Я ошибся. Третий байт крутит стрелкой. Второй может моргать стрелками круиза но это не нужно.
Удельный вес единицы скорости = 2,5 км/ч.
Панель принимает число до 97 включительно, т.е. она могла бы быть на 240 км/ч. :lol: Наверно большой насялника решил что такие цыфры на тазик вешать не этично. При 98 и выше стрелка падает на ноль и дальше не растет. Вот такие у нее особенности.

Периодичность отправки скорости может быть большой. Пробовал 300 мс. Нормально. А вот тахометр очень нервный.
F5XX
Posts: 24
Joined: 11 Aug 2016, 20:19
Your CAR: TAZ 21126
SECU version: DIY SECU-3i
Has thanked: 6 times
Been thanked: 3 times

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by F5XX »

Обороты двигателя слать так

Code: Select all

      for (uint16_t engine_RPM = 0; engine_RPM < 8500; engine_RPM=engine_RPM+10) {
         uint8_t RPM_code = engine_RPM / 32;
         PRINT("RPM=%d  Code=%d \r\n", engine_RPM, RPM_code);
        message.id = 0x180;
        message.header.length = 8;
        message.header.rtr = 0;
        message.data[0] = RPM_code; // allow up to 255
        message.data[1] = 0x00;
        message.data[2] = 0x00;
        message.data[3] = 0x00;
        message.data[4] = 0x00;
        message.data[5] = 0x00;
        message.data[6] = 0x00;
        message.data[7] = 0x00;
        mcp2515_send_message(&message);
      }
Стрелкой рулит первый байт. Допускает число 255, т.е. панель могла бы показать 8100, если бы не большой нясяльника...
Терпит рассылку до 500 мс. Пробовал делать по 1 сек, так стрелка машет на пол циферблата.
F5XX
Posts: 24
Joined: 11 Aug 2016, 20:19
Your CAR: TAZ 21126
SECU version: DIY SECU-3i
Has thanked: 6 times
Been thanked: 3 times

Re: Требуется CAN-трансмиттер данных SECU-3 в протокол OBD

Post by F5XX »

Ну и напоследок

Code: Select all

    uint8_t FAILS = 0x00; // Аварии. Нет аварий.
    uint8_t AKB = 0x00;   // Норма заряда АКБ. Нормы нет.

    FAILS |= 1<<0; // Зажечь индикатор Check Engine постоянно
    FAILS |= 1<<1; // Моргать индикатором Check Engine 1 Гц.
    FAILS |= 1<<2; // Зажечь индикатор - нет давления масла
    FAILS |= 1<<3; // Зажечь индикатор - перегрев!

    AKB |= 1<<0; // Тушим лампочку аварии заряда АКБ
   // Панель сама измеряет напряжение, не знаю что там еще за биты

    message.id = 0x551;
    message.header.length = 8;
    message.header.rtr = 0;

    message.data[0] = 0x00; // Никакой реакции. Младший байт температуры двигателя?
    message.data[1] = 0x00; // Никакой реакции, кроме 0xFF - начнет моргать лампочкой перегрева 1Гц. Старший байт температуры?
    message.data[2] = 0x00; // Ничего не делает, вольтаж?
    message.data[3] = AKB; // Норма заряда, может еще и вольтаж?
    message.data[4] = FAILS; //Аварии
    message.data[5] = 0x00; // Никакой реакции. COUNTER.
    message.data[6] = 0x00; // Никакой реакции.
    message.data[7] = 0x00; // Никакой реакции.
Теперь дело за Вами! :mrgreen:
Sergey21126
Posts: 89
Joined: 04 Dec 2016, 22:11
Your CAR: LADA 2190
SECU version: DIY SECU-3i
Has thanked: 2 times
Been thanked: 26 times

Доработка SECU-3T для работы с CAN-шиной

Post by Sergey21126 »

Дешевую плату можно пригубить. Требуется перебить некоторые дорожки.
Dorabotka_PCB.jpg
CS будет сбоку. Все контакты при деле.
Dorabotka_PCB_ok.jpg
Перебиваем дорожку TEST на SECU.
Dorabotka_SECU.jpg
Приделываем CS
Dorabotka_SECU1.jpg
Готово! Можно перенести электролитический конденсатор, чтобы хорошо села.
Dorabotka_SECU2.jpg
Железо ждет прошивки! :mrgreen:
Post Reply

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