Select language:

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

<<

F5XX

Аватара пользователя

Сообщения: 24

Зарегистрирован: 11 авг 2016, 20:19

Машина: TAZ 21126

Версия SECU: самодельная SECU-3i


Благодарил (а): 6 раз.
Поблагодарили: 3 раз.

Сообщение 22 апр 2017, 18:20

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

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

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

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

MCP2515 имеет на борту буфер для тактирования внешних устройств. Можно обойтись одним единственным кварцем на все устройство.
Вложения
secu3app-master-can.tar.gz
(889.87 КБ) Скачиваний: 23
<<

STC

Аватара пользователя

Сообщения: 6344

Зарегистрирован: 30 апр 2013, 23:41

Откуда: Ukraine

Машина: AZLK 2140

Версия SECU: самодельная SECU-3


Благодарил (а): 771 раз.
Поблагодарили: 1274 раз.

Сообщение 22 апр 2017, 18:54

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

Да, линию порта идущую к 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

Аватара пользователя

Сообщения: 86

Зарегистрирован: 04 дек 2016, 22:11

Машина: LADA 2190

Версия SECU: самодельная SECU-3i


Благодарил (а): 2 раз.
Поблагодарили: 23 раз.

Сообщение 29 июн 2017, 00:26

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

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

По аварийным лампочкам есть такая информация:
  Код:
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?
Всего то такой кусок:
  Код:
    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. Как можно на практике завести в процессор аварию генератора и давления масла?
Спасибо.
<<

STC

Аватара пользователя

Сообщения: 6344

Зарегистрирован: 30 апр 2013, 23:41

Откуда: Ukraine

Машина: AZLK 2140

Версия SECU: самодельная SECU-3


Благодарил (а): 771 раз.
Поблагодарили: 1274 раз.

Сообщение 29 июн 2017, 11:46

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

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

Аватара пользователя

Сообщения: 196

Зарегистрирован: 10 июл 2013, 09:41

Откуда: Шебекино

Машина: ВАЗ2106

Версия SECU: самодельная SECU-3T


Благодарил (а): 1 раз.
Поблагодарили: 87 раз.

Сообщение 29 июн 2017, 13:50

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


Схема подключения генератора.
Низкий уровень (лампа горит) - генератор не работает.
Высокий уровень (лампа не горит), работает.
ВАЗ 2106 -1.6, 60-2, SECU3-T rev6 mega644 + УВЗ, МЗ 2112-3705010, Солекс-21053-20.
<<

STC

Аватара пользователя

Сообщения: 6344

Зарегистрирован: 30 апр 2013, 23:41

Откуда: Ukraine

Машина: AZLK 2140

Версия SECU: самодельная SECU-3


Благодарил (а): 771 раз.
Поблагодарили: 1274 раз.

Сообщение 29 июн 2017, 14:31

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

Yurii писал(а):
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

Аватара пользователя

Сообщения: 24

Зарегистрирован: 11 авг 2016, 20:19

Машина: TAZ 21126

Версия SECU: самодельная SECU-3i


Благодарил (а): 6 раз.
Поблагодарили: 3 раз.

Сообщение 29 июн 2017, 16:32

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

Можно затащить так
alternator.png
alternator.png (5.12 КБ) Просмотров: 223

Резистор 47 Ом, 5 Вт ставят если генератор с обычным регулятором. Если регулятор "умный", то подтягивающий резистор нужен 910 Ом. Он нужен только для того чтобы разбудить регулятор при включении зажигания. Этим же проводом он сигнализирует отказ, моргая светодиодом.

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

Как управлять
  Код:
      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

Аватара пользователя

Сообщения: 24

Зарегистрирован: 11 авг 2016, 20:19

Машина: TAZ 21126

Версия SECU: самодельная SECU-3i


Благодарил (а): 6 раз.
Поблагодарили: 3 раз.

Сообщение 29 июн 2017, 17:16

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

Обороты двигателя слать так
  Код:
      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

Аватара пользователя

Сообщения: 24

Зарегистрирован: 11 авг 2016, 20:19

Машина: TAZ 21126

Версия SECU: самодельная SECU-3i


Благодарил (а): 6 раз.
Поблагодарили: 3 раз.

Сообщение 29 июн 2017, 18:36

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

Ну и напоследок
  Код:
    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

Аватара пользователя

Сообщения: 86

Зарегистрирован: 04 дек 2016, 22:11

Машина: LADA 2190

Версия SECU: самодельная SECU-3i


Благодарил (а): 2 раз.
Поблагодарили: 23 раз.

Сообщение 30 июн 2017, 01:28

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

Дешевую плату можно пригубить. Требуется перебить некоторые дорожки.

CS будет сбоку. Все контакты при деле.

Перебиваем дорожку TEST на SECU.

Приделываем CS

Готово! Можно перенести электролитический конденсатор, чтобы хорошо села.


Железо ждет прошивки! :mrgreen:
Пред.След.

Вернуться в Аппаратное обеспечение

Кто сейчас на конференции

Сейчас этот форум просматривают: maklaut и гости: 2

Powered by phpBB® Forum Software © phpBB Group.