Генератор сигналов датчиков коленчатого и распределительного валов двигателя

saskor
Offline
Зарегистрирован: 25.04.2018

Как учебный проект, хотелось бы сделать генератор сигналов датчиков коленчатого и распределительного валов двигателя внутреннего сгорания, с управлением через serial port, для выявления неисправностей блоков управления двигателем в лабораторных условиях.

Сигнал датчика положения коленчатоговала (ДПКВ) имееет форму синусоиды, но на вход блока управления двигателем можно подавать и меандр, сигнал датчика положения распределительного вала тоже меандр но другой длительности и периодичности.

Осциллограмма ДПКВ и ДПРВ шкода фабиа 2002 1.4 AME

Вопросов много.

Я так понял, что передачу данных через serial port нужно вести в основном цикле а сигналы генерировать по таймеру? На картинке четко видно, что састота сигнала ДПКВ меняется, как это реализовать пока не знаю.

Имею в распоряжении arduino duo.

Про таймеры нашел вот такую статью https://habr.com/post/337430/

Про одновременную установку уровня сигнала на разных пинах нашел вот такой материал на зарубежном сайте https://arduino.stackexchange.com/a/12584 но не совсем понял как создавать битовую маску для того чтобы не перезаписывать весь порт.

Ну и может кому быдет полезно, нашел распиновку для arduino due http://forum.arduino.cc/index.php/topic,132130.0.html с картинками м желаемом формате.

Основной вопрос, как организовать архитектуру программы, для бесперебойной генерации сигналов, как я понял в arduino ide моногие функции занимают большое количество процессорного времени.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

saskor пишет:

Ну и может кому быдет полезно, нашел распиновку для arduino due http://forum.arduino.cc/index.php/topic,132130.0.html с картинками м желаемом формате.

Молодец, что нашёл, это гораздо лучше, чем тупо спрашивать на форуме "где взять - в гугле нету", но забавно, что .... Вы читали "Похищение белого слона" Марка Твена? Так вот, эта распиновка спокойненько лежит здесь на этом форуме в прикреплённой "гвоздиком" теме - http://arduino.ru/forum/obshchii/pin-mapping-sootvetstvie-vyvodov-i-registrov#comment-32058

:))))

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

saskor, вам сначала не вопросы задавать нужно, а описать техническим языком задачу.   Сначала частотно-временные характеристики сигнала, например "необходимо с выхода МК получить сигнал типа меандр амплитудой 5 вольт, частотой 10кГц в котором после каждых xx периодов на y периодов  делается пауза с лог. 0 на выходе, и так по кругу бесконечно". В случае если необходимо генерировать 2 сигнала одновременно, нужно аналогично описать второй сигнал, указать есть ли между сигналами какая-либо синхронизация и зависимость, и если есть, то описать по каким принципам она происходит. Далее какими параметрами хотите управлять, почему через сериал, а не кнопками например. Дискретность управления параметрами. Допустимая точность установки. Например необходимо регулировать частоту вышеописанного сигнала от 1 кГц до 15 кГц с дискретностью не более 25 Гц, допустимая погрешность установки частоты не более +/- 100 Гц.

ВН
Offline
Зарегистрирован: 25.02.2016

Теория.

коленчатый и распред валы вращаются полностью синхронно, только коленвал с вдвое большей частотой.

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

Как там формируются метки вмт и сколько импульсов идет за оборот это, как понимаю, для кадого авто может быть свое. 

 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

вот почитайте, может что полезное увидете

MaksVV
Offline
Зарегистрирован: 06.08.2015

я так понимаю через сериал порт вы хотите задавать обороты двигателя. Можно упростить и поставить потенциометр для установки нужных оборотов. Проблема в том , как сымитировать синусоидальный сигнал индуктивного датчика КВ. Понятно, что можно меандр подавать, а вот как быть с местом в сигнале, где идёт пропуск двух зубьев? как это прямоугольным сигналом обыграть?

MaksVV
Offline
Зарегистрирован: 06.08.2015

а вообще моё видение такое, когда не разбираешься в таймерах. Берём скетч генератора сигналов, например от Dimax. Duty делаем 50%, типа симметричный меандр. Частоту (обороты в нашем случае) при этом мы можем настраивать.  Подаём этот сигнал на пин int0 . Прерыванием считаем какой сейчас № импульса (читай зуб задающего диска датчика КВ). В зависимости от номеров импульсов (номера зуба) рулим другими пинами, создавая различные сигналы относительно как бы задающей частоты импульсов генератора сигнала. Рулить пинами лучше не digitalWrite,  а прямым доступом к порту. Создаваемые различные сигналы это :

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

2. сигнал датчика распредвала

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Мне кажется, если нужен синус, не следует пытаться выжать его из встроенных в контроллер таймеров. Если дорого AD9850, можно использовать что-то типа ICL8038.

saskor
Offline
Зарегистрирован: 25.04.2018

Всем спасибо. Синус не надо. Таймеры очень помогли и прямой доступ к портам. Спасибо MaksVV. 

Осталось через сериал порт настроить парсинг конфигурации сигналов, ну и запуска и остановки таймера.

Как доделаю отпишусь.