Требуется CAN-трансмиттер данных SECU-3 в протокол OBD
-
- 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
Пусть повисит
Ради спортивного интереса начал запихивать поддержку MCP2515 в последний публичный git.
По задумке можно MCP2515 подключить к шине SPI. Вывод TEST от HIP9010 отключить и использовать как ~CS для CAN контроллера. (а зачем он там вовсе был?)
Ног не хватает, следовательно - проверять сообщения программно когда нечего делать, ну и отвечать кому надо.
Вот самая дешевая плата MCP2515 + TJA1050.
Пока смог добиться компиляции без ошибок. Кабы кто помог все это заставить работать
MCP2515 имеет на борту буфер для тактирования внешних устройств. Можно обойтись одним единственным кварцем на все устройство.
По задумке можно MCP2515 подключить к шине SPI. Вывод TEST от HIP9010 отключить и использовать как ~CS для CAN контроллера. (а зачем он там вовсе был?)
Ног не хватает, следовательно - проверять сообщения программно когда нечего делать, ну и отвечать кому надо.
Вот самая дешевая плата MCP2515 + TJA1050.
Пока смог добиться компиляции без ошибок. Кабы кто помог все это заставить работать
MCP2515 имеет на борту буфер для тактирования внешних устройств. Можно обойтись одним единственным кварцем на все устройство.
- Attachments
-
- secu3app-master-can.tar.gz
- (889.87 KiB) Downloaded 411 times
- 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
Да, линию порта идущую к TEST можно как CS использовать. В SECU-3i я буду использовать другую линию порта, так как линия использовавшаяся для ТEST уже занята.
Я еще давно посмотрел, CAN контроллеров с интерфейсом UART нет, только SPI.
Я еще давно посмотрел, 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 (вступаем!)
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
-
- 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-трансмиттер для Гранты/Калины/Датсун
Китайцы вовсю продают SPI модули MCP2515 + TJA1050 ценой 1 евро. Там кварц на 8 мгц.
Отрываем TEST от HIP9011 и делаем его MCP2515_CS.
Для работы с CAN-шиной ВАЗ, нужно загрузить
Принимать сообщения не требуется. Нужно только слать.
Скорость автомобиля (Периодичность посылки 10 мс):
DATA[0] крутит стрелку спидометра.
Также действует тахометр, но слать надо ID 0x180 Периодичность посылки 100 мс.
По аварийным лампочкам есть такая информация:
Видимо поддержку OBDII можно не делать, ибо есть свой софт.
Вопрос к автору:
1. Будут ли движения в сторону CAN? Вопрос не просто актуальный, а сверхактуальный. Не хотелось бы приматывать "доработки" синей изолентой
2. Куда можно воткнуть инструкции рассылки сообщений по CAN, чтобы это не мешало алгоритмам secu?
Всего то такой кусок:
Принимать и что-либо обрабатывать не надо.
3. Нужны ли дополнительные виртуальные таймеры, или же можно использовать имеющиеся?
4. Как можно на практике завести в процессор аварию генератора и давления масла?
Спасибо.
Отрываем 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
Также действует тахометр, но слать надо 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] — реакции нет, но меняется
Вопрос к автору:
1. Будут ли движения в сторону CAN? Вопрос не просто актуальный, а сверхактуальный. Не хотелось бы приматывать "доработки" синей изолентой
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. Как можно на практике завести в процессор аварию генератора и давления масла?
Спасибо.
- 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
Sergey21126, могу уделить этому внимание и попробовать включить код в последнюю версию прошивки. Можно связаться через личку по скайпу.
2. Проще всего воткнуть в основной цикл, но нужно проверять если SPI занят, то ждать некоторое время пока он освободится (всего несколько десятков мкс). Мне кажется что частота пересылки данных в панель не имеет значения. Наверное можно просто слать каждые 10мс и все. Лучше всего сделать пересылку в прерывании 1.6мс, каждые 10мс.
4. Только через свободные аналоговые входы, которые уже заняты для впрыска. В SECU-3i с этом проще, так как там есть еще 2 дополнительных аналоговых входа.
По давлению масла понятно, там датчик стоит, а вот как определяется авария генератора?
1. Можно попробовать добавить поддержку CAN в последнюю прошивку. Без приема сообщений, только отсылка. Могу выделить на это время на следующей неделе.Вопрос к автору:
1. Будут ли движения в сторону CAN? Вопрос не просто актуальный, а сверхактуальный. Не хотелось бы приматывать "доработки" синей изолентой
2. Куда можно воткнуть инструкции рассылки сообщений по CAN, чтобы это не мешало алгоритмам secu?
2. Проще всего воткнуть в основной цикл, но нужно проверять если SPI занят, то ждать некоторое время пока он освободится (всего несколько десятков мкс). Мне кажется что частота пересылки данных в панель не имеет значения. Наверное можно просто слать каждые 10мс и все. Лучше всего сделать пересылку в прерывании 1.6мс, каждые 10мс.
3. Дополнительные таймеры не нужны. Есть прерывание 1.6 мс и там можно делать отсылку данных. Только нужно проверять если SPI занят, тоставить запрос на отсылку в очерень. Я уже реализовал этот механизм в последней прошивке для SECU-3i.3. Нужны ли дополнительные виртуальные таймеры, или же можно использовать имеющиеся?
4. Как можно на практике завести в процессор аварию генератора и давления масла?
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 (вступаем!)
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
-
- 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
Низкий уровень (лампа горит) - генератор не работает.
Высокий уровень (лампа не горит), работает.
ВАЗ 2106 -1.6, 60-2, SECU3-T rev6 mega644 + УВЗ, МЗ 2112-3705010, Солекс-21053-20.
- 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
Спасибо, значит достоточно просто дискретного входа (0/1) для определения этого момента. В SECU-3T с этим туго, но дискретный вход можно найти, а вот в SECU-3i с этим проблем вообще нет.Yurii wrote:Схема подключения генератора.
Низкий уровень (лампа горит) - генератор не работает.
Высокий уровень (лампа не горит), работает.
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 (вступаем!)
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
-
- 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
Можно затащить так
По поводу спидометра
Как он работает (видео)
Как управлять
Я ошибся. Третий байт крутит стрелкой. Второй может моргать стрелками круиза но это не нужно.
Удельный вес единицы скорости = 2,5 км/ч.
Панель принимает число до 97 включительно, т.е. она могла бы быть на 240 км/ч. Наверно большой насялника решил что такие цыфры на тазик вешать не этично. При 98 и выше стрелка падает на ноль и дальше не растет. Вот такие у нее особенности.
Периодичность отправки скорости может быть большой. Пробовал 300 мс. Нормально. А вот тахометр очень нервный.
Резистор 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 км/ч. Наверно большой насялника решил что такие цыфры на тазик вешать не этично. При 98 и выше стрелка падает на ноль и дальше не растет. Вот такие у нее особенности.
Периодичность отправки скорости может быть большой. Пробовал 300 мс. Нормально. А вот тахометр очень нервный.
-
- 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
Обороты двигателя слать так
Стрелкой рулит первый байт. Допускает число 255, т.е. панель могла бы показать 8100, если бы не большой нясяльника...
Терпит рассылку до 500 мс. Пробовал делать по 1 сек, так стрелка машет на пол циферблата.
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);
}
Терпит рассылку до 500 мс. Пробовал делать по 1 сек, так стрелка машет на пол циферблата.
-
- 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
Ну и напоследок
Теперь дело за Вами!
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; // Никакой реакции.
-
- 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-шиной
Дешевую плату можно пригубить. Требуется перебить некоторые дорожки.
CS будет сбоку. Все контакты при деле.
Перебиваем дорожку TEST на SECU.
Приделываем CS
Готово! Можно перенести электролитический конденсатор, чтобы хорошо села.
Железо ждет прошивки!