1

Тема: Данные из CAN в LIN

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

Основная логика: Canny 5 nano - к нему будут подключены резистивные кнопки и он будет отправлять CAN пакеты в зависимости от нажатой копки.
Canny 5.3 pico используется для управления штатным блоком вибрации по LIN и в него заходят сигналы CAN
логика штатного блока - по адресу LIN D8 нужно отправить пакеты:  20 00 для остановки мотора 28 00 для запуска.

На приложенной диаграмме реализую логику (пока тестовую) - при наличии на адресе CAN 0х500 значения 01 в первом байте - включаю вибрацию, при отсутствии - выключаю.

Хочется советов от профи - правильно ли я в целом осознаю то, как необходимо это делать. И хотелось бы получить рекомендации на дальнейшее развитие:
1) При получении сообщения, например с температуророй выше порога - провибрировать 3 раза с определенным интервалом
2) Заложить разные паттерны вибрации в зависимости от разных сообщений.

Хочу понять логику, как это реализуется.

Так ж вопрос - Например если кан потом имеет 100 разных ID то надо ли включать фильтрацию пакетов, чтобы не нагружать выполнение дополнительными пакетами и их проверками.

Вложений в сообщении

Иконка вложения vibro_LIN.cfd 3.33 кб, скачивался 11 раз, последний раз 2025-12-06 

2

Re: Данные из CAN в LIN

Такк - сразу возник вопрос - диаграмму я заставил работать, пока не понятно, как отработать остановку кан-потока.

3 (06-12-2025 22:37:56 отредактировано beast_drc)

Re: Данные из CAN в LIN

Чуть обновленная диаграмма, но почему то мотор работает не ровно, как будто пропадает сигнал с LIN. Видимо что-то не то с корреляцией периода с КАН пакета и генератором ШИМ.

Вложений в сообщении

Иконка вложения vibro_LIN.cfd 2.99 кб, скачивался 15 раз, последний раз 2025-12-06 

4

Re: Данные из CAN в LIN

Так ж вопрос - Например если кан потом имеет 100 разных ID то надо ли включать фильтрацию пакетов, чтобы не нагружать выполнение дополнительными пакетами и их проверками.

Использование режима фильтрации приема CAN в данном случае крайне желательно.

Чуть обновленная диаграмма, но почему то мотор работает не ровно, как будто пропадает сигнал с LIN. Видимо что-то не то с корреляцией периода с КАН пакета и генератором ШИМ.

Синхронизация приема CAN с отправкой LIN  не выглядит в данном случае обязательной. Используйте Триггер D для хранения последних полученных данных CAN. См.примеры здесь: https://canny.ru/docs/c53pico/can/#sec- … an-primery

Кроме того, период 100 мс для сообщений LIN выглядит необычно большим, но возможно это не проблема в вашем случае.

5

Re: Данные из CAN в LIN

Вот новая схема. чуть поменял принцип. но пока все равно работает не стабильно. пытаюсь понять гре происходит рассинхронизация. Скорость LIN 9600

Вложений в сообщении

Иконка вложения vibro_LIN.cfd 5.82 кб, скачивался 11 раз, последний раз 2025-12-09 

6

Re: Данные из CAN в LIN

См.: https://forum.canny.ru/viewtopic.php?pid=9810#p9810

7

Re: Данные из CAN в LIN

Константин, CANNY пишет:

. Используйте Триггер D для хранения последних полученных данных CAN. См.примеры здесь: https://canny.ru/docs/c53pico/can/#sec- … an-primery

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

Следующие вопросы:

1) по логике работы задержек- например если задержка (вкл\выкл без разницы) 100мс это значит что это будет 100 мс + выремя выполнения цикла, т.к. 100 мс может попасть на середину цикла, верно же я понимаю?

2) В моей диаграмме - верно ли я понимаю как работат то, что я написовал - Самые правые блоки, один коммутатор который выставляет значение регистра 2-х байтов пакета LIN далее чуть правее старт передачи и я моку считать, что у меня отправится именно то сообщение которое я поставил либо но попадет в буфер и отправится "когда то" асинхронно? (приложен скрин)

3) Верно ли логически у меня построена локика изменения содеримого отправки каждого  6-ого пакета в лин (приложен скрин)

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

Вложений в сообщении

Иконка вложения Clipboard_12-09-2025_01.jpg 170.43 кб, скачивался 4 раз, последний раз 2025-12-09 

Иконка вложения Clipboard_12-09-2025_02.jpg 235.08 кб, скачивался 8 раз, последний раз 2025-12-09 

Иконка вложения vibro_LIN.cfd 5.82 кб, скачивался 11 раз, последний раз 2025-12-09 

8

Re: Данные из CAN в LIN

1) по логике работы задержек- например если задержка (вкл\выкл без разницы) 100мс это значит что это будет 100 мс + выремя выполнения цикла, т.к. 100 мс может попасть на середину цикла, верно же я понимаю?

Верно.

2) В моей диаграмме - верно ли я понимаю как работат то, что я написовал - Самые правые блоки, один коммутатор который выставляет значение регистра 2-х байтов пакета LIN далее чуть правее старт передачи и я моку считать, что у меня отправится именно то сообщение которое я поставил либо но попадет в буфер и отправится "когда то" асинхронно? (приложен скрин)

Контроллер попытается начать отправку именно того сообщения, которое было записано в регистры передачи сразу после окончания цикла диаграммы в котором в Регистр старта передачи было записано значение >0. После чего, передача сообщения продолжится асинхронно диаграмме вплоть до момента полной его передачи.

3) Верно ли логически у меня построена локика изменения содеримого отправки каждого  6-ого пакета в лин (приложен скрин)

Вы можете выяснить это самостоятельно используя симулятор.


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

См.вложение.

Вложений в сообщении

Иконка вложения vibro_LIN_sim.cfd 6.68 кб, скачивался 12 раз, последний раз 2025-12-09 

9

Re: Данные из CAN в LIN

КОнстантин, спасибо очень помогли. не могу решить следующую задчу, если она решаема:

Есть несколько веток выполнения:
1) отправка пакета 20 00 в лин
2) отправка попеременно 28 00 и 20 00
3) однократная отправка 28 00 и 20 00

по умолчанию программа должна идти по 1)
в случае наличия одного сигнала с КАН шины 2, в случае с другого - 3

Для решения посмользовался коммутатором, но я уже несколько часов не могу придумать, как отправить в коммутатор нужный индект.

Я подумал использовать конвертер побитово. но если каждый бит использовать ся мы получим ряд чисел 1, 2, 4, 8, 16, 32, 64, 128.

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

Каждый такой учсток можно предствить в виде составного блока.

Я думл как то решить побитовым сдвигом, но пока тоже что то не понимаю как.

Вложений в сообщении

Иконка вложения vibro_LIN.cfd 7.03 кб, скачивался 8 раз, последний раз 2025-12-10 

10

Re: Данные из CAN в LIN

См.: https://canny.ru/docs/tips_tricks/const … condition/