Page 1 of 3

Вопросы по реализации алгоритма ДПКВ

Posted: 14 Aug 2017, 22:49
by sergeyk
Разбираюсь с исходником ckps.c
Условия: ДПКВ60-2, DWELL_CONTROL
Есть вопросы:
1. Насколько точно алгоритм способен поддерживать установленный УОЗ? Понятно, что в установившемся режиме на постоянных оборотах можно ожидать высокой точности. А как это выглядит в динамике? Например, разгон или остановка авто.

Было бы замечательно, если кто-то смог выложить запись сигналов ДПКВ+каналы зажигания от старта до остановки ДВС хотя бы на холостом ходу в формате анализатора Saleae Logic.
2. Я так понимаю, что сигналы включения катушек формируются с минимальным неперекрытием каналов зажигания в 2 зуба? Это означает, что в любой момент времени может работать на накопление только 1 канал?
3. Точность окончания накопления без DWELL_CONTROL будет выше?
4. С какой целью восстанавливаются пропущенные зубья? Т.е. программно формируются 59-й и 60-й зуб? Если да, то почему нельзя рассмотреть выбитые зубы просто как один длинный?

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 15 Aug 2017, 10:51
by STC
Для обеспечения максимальной точности в динамике, алгоритм опирается на зубья, а для этого как раз и восстанавливаются пропущенные.
p.s. Код для ДПКВ, который сейчас лежит в репозитории уже устарел и я его весной-летом почти полностью переписал.

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 15 Aug 2017, 19:16
by sergeyk
В момент пропущенных зубов если изменяется скорость(ускорение), то восстанавливай-не восстанавливай, об ошибке узнаем только на первом реальном зубе. Или я что-то недопонимаю?

Мне важно понять не только как устроено, но и почему так.

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 16 Aug 2017, 16:05
by sergeyk
Удалось записать сигнал с ДПКВ. Увидел много нового и интересного.

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 07 Sep 2017, 09:35
by sergeyk
Отвечу на свои вопросы.
На примере Января ошибку синхронизации можно получить около 0.2-0.3 угловых градуса. Предполагаю, что это без учёта аномалий.
Алгоритм с восстановлением выбитых зубов получается компактный(следовательно быстрый) и имеет меньше веток с условиями.
При восстановлении углового счётчика по межзубным интервалам вычислительные затраты меньше чем если считать в иных единицах измерения. Фактически для принятия решения требуется только операция сравнения (>=).

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 17 Sep 2017, 17:07
by sergeyk
Имитатор ДПКВ 60-2 реального двигателя.

Сигнал с датчика автомобиля записан логическим анализатором, данные импортированы в программу микроконтроллера. По ним синтезируется логический сигнал.
Имитируются следующие события: запуск двигателя, срыв синхронизации ДПКВ(примерно через 2,8 сек от начала), остановка двигателя.
Можно использовать для отладки алгоритмов на столе.

Контроллер Atmega328
Кварц 20МГц
Выходной сигнал снимается с вывода D2.

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 20 Sep 2017, 16:18
by sergeyk
В исходнике ckps.c перезагрузка актуальных значений в буфер происходит за 66 градусов перед ВМТ. Чем объясняется выбор именно такого угла, а скажем не 60 или 90 градусов?

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 20 Sep 2017, 16:22
by STC
sergeyk wrote:В исходнике ckps.c перезагрузка актуальных значений в буфер происходит за 66 градусов перед ВМТ. Чем объясняется выбор именно такого угла, а скажем не 60 или 90 градусов?
Объясняется максимально возможным требуемым УОЗ 60°.

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 10 Oct 2017, 13:10
by sergeyk
Сколько времени уходит на обработчик прерывания по захвату(вычисления и прочее)?

Re: Вопросы по реализации алгоритма ДПКВ

Posted: 12 Oct 2017, 20:33
by sergeyk
Ковырялся в исходнике интересного проекта Megasquirt, нашёл непонятные режимы зажигания:
--------------------------------------------------------
// User inputs - 1 set in flash, 1 in ram
typedef struct {
unsigned char no_cyl,no_skip_pulses, // skip >= n pulses at startup
ICIgnOption, // Bit 0: Input capture: 0 = falling edge, 1 rising
// Bit 1: 1= trigger return mode in cranking; for this
// mode, set bit 0 to normal edge, then opp.edge used in cranking.
// trigger return not applicable to EDIS
// Bits 2-3: spare
// Bits 4-7: 0 = standard - charge coil, spark
// 1 = Ford EDIS option
// 2 = EDIS with multispark

spkout_hi_lo, // Ign Output compare: 0 = spark low (gnd)
max_coil_dur,max_spk_dur,DurAcc; // ms x 10
--------------------------------------------------------
Кто-нибудь может пояснить чем эти режимы между собой различаются?