American English British English Български Čeština Français Deutsch (Du) Magyar Italiano 日本語 Lietuvių Polski Српски Slovenčina Español (Tú) Türkçe Українська
Select language:

Обработчик ДПКВ

<<

KOT

User avatar

Posts: 328

Joined: 10 May 2013, 14:23

Location: Запорожье


Has thanked: 6 times
Been thanked: 85 times

Post 21 Sep 2015, 10:18

Обработчик ДПКВ

В общем ситуация такая:
В релизе за 14 год в файле CKPS.c имитация пропущенных зубьев делается на таймере 0.
Есть там вот такие строки:
  Code:
void set_timer0(uint16_t value)
{
 TCNT0_H = _AB(value, 1);
 TCNT0 = ~(_AB(value, 0));  //One's complement is faster than 255 - low byte

Так вот если значение low byte = 0, т.е в TCNT0 записывается значение 255, то у меня протеус 7,7 моделирует срабатывание прерывания по переполнению аж на следующий раз, т.е через 256 тиков таймера 0.
Если TCNT0 = 254; - то все нормально.

Написал уже прошивку на асме для тестирования таймера - в АВР студии такого пропуска нет. В протеусе есть.

Вот не совсем пойму документацию, вроде как если писать в TCNT0, то сравнения по следующему такту игнорируется:
All CPU write operations to the TCNT0 Register will block any compare match that occur in the
next timer clock cycle, even when the timer is stopped. This feature allows OCR0 to be initialized
to the same value as TCNT0 without triggering an interrupt when the Timer/Counter clock is
enabled.

Еще не ясен мне момент - зачем обнулять таймер если он и так только что обнулился аппаратно?
  Code:
ISR(TIMER0_OVF_vect)
{
 if (TCNT0_H!=0)  //Did high byte exhaust (ñòàðøèé áàéò íå èñ÷åðïàí) ?
 {
  TCNT0 = 0; // кажись лишнее?
  --TCNT0_H;
 }
Машина ЗАЗ 1103i, ГБО4. Управление ДВС: аналог Secu-3 и MegasquirtAVR модифицированное железо и своя прошивка.
<<

STC

User avatar

Posts: 6539

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 800 times
Been thanked: 1317 times

Post 21 Sep 2015, 12:31

Re: Обработчик ДПКВ

Интересный вопрос. Сам несколько раз сталкивался с тем, что в документации поведение не описано полностью. Искал в разной документации, ничего не нашел и забыл про это. Поведение проверял осциллографом, но мог проскочит 255. Думаю можно попробовать проверить. Нпример зажигать СЕ если значение таймера равно 255 и в этот момент следить за импульсами (вывести импульсы восстановленных зубьев на какой-нибудь выходюд).

  Code:
TCNT0 = 0; // кажись лишнее?

Похоже что да, перестарался ).
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 (вступаем!)
<<

KOT

User avatar

Posts: 328

Joined: 10 May 2013, 14:23

Location: Запорожье


Has thanked: 6 times
Been thanked: 85 times

Post 21 Sep 2015, 12:59

Re: Обработчик ДПКВ

STC wrote:Интересный вопрос. Сам несколько раз сталкивался с тем, что в документации поведение не описано полностью. Искал в разной документации, ничего не нашел и забыл про это. Поведение проверял осциллографом, но мог проскочит 255. Думаю можно попробовать проверить. Нпример зажигать СЕ если значение таймера равно 255 и в этот момент следить за импульсами (вывести импульсы восстановленных зубьев на какой-нибудь выходюд).

Как руки дойдут до железа то попробую посмотреть осцилофом, я делаю частоту, чтоб время мужду зубьями было приблизительно 1 мс, а в таймер0 пишу в младший регистр 255, в старший = 1. (значение между забьями = 256 тиков таймера)

Заметил что при эмуляции второго зуба, прерывание, когда в TCNT0 пишется 254 тоже не всегда срабатывает, похоже все таки протеус.
Машина ЗАЗ 1103i, ГБО4. Управление ДВС: аналог Secu-3 и MegasquirtAVR модифицированное железо и своя прошивка.
<<

STC

User avatar

Posts: 6539

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 800 times
Been thanked: 1317 times

Post 21 Sep 2015, 15:25

Re: Обработчик ДПКВ

:) В 2007 году, когда я начинал писать первую прошивку SECU-3, тоже столкнулся с глюком протеуса. Были перепутаны половинки регистр ICR.
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 (вступаем!)
<<

KOT

User avatar

Posts: 328

Joined: 10 May 2013, 14:23

Location: Запорожье


Has thanked: 6 times
Been thanked: 85 times

Post 26 Dec 2015, 00:30

Re: Обработчик ДПКВ

Ну наконец-то дошли руки проверить, мега 88 протеус глючит, в живую нет.
Но прошу помощи по алгоритму:
Я так понял данные об расчетном угле из ignlogic в ckps.с передаются раз в 1 такт двигателя?
И расчет времени для заряда катушки производится раз в пол оборота после зажигания?, входные данные для последнего это время потраченное на пол оборота и время задержки на искру OCR1A ?

А как быть в таком случае с ускорением / замедлением двигателя - какая погрешность получается для времени заряда катушки?
Машина ЗАЗ 1103i, ГБО4. Управление ДВС: аналог Secu-3 и MegasquirtAVR модифицированное железо и своя прошивка.
<<

STC

User avatar

Posts: 6539

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 800 times
Been thanked: 1317 times

Post 26 Dec 2015, 00:55

Re: Обработчик ДПКВ

Да, данные передаются 1 раз за такт, из основного цикла (secu3.c)
C зарядом катушки сложней. Там рассчитывается время, но на каждом зубе оно корректируется, и таким образом достигается достаточно высокая точность.
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 (вступаем!)
<<

KOT

User avatar

Posts: 328

Joined: 10 May 2013, 14:23

Location: Запорожье


Has thanked: 6 times
Been thanked: 85 times

Post 26 Dec 2015, 01:05

Re: Обработчик ДПКВ

Понял, спс, буду разбираться.
Машина ЗАЗ 1103i, ГБО4. Управление ДВС: аналог Secu-3 и MegasquirtAVR модифицированное железо и своя прошивка.
<<

KOT

User avatar

Posts: 328

Joined: 10 May 2013, 14:23

Location: Запорожье


Has thanked: 6 times
Been thanked: 85 times

Post 26 Dec 2015, 19:27

Re: Обработчик ДПКВ

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

Кажись на старом форуме это было, но повторюсь, я решил не выполнять деление в прерыввании, верней оно есть но оно же на консатнту(количество межзубных градусов), поэтому его можно сделать умножением, получаем вместо 40 мкс расчетов всего лиш 5мкс.

Формула для расчета для шкива 60-2, для точности 0,1 градус.
задержка = старшие два байта 32 битной переменной из (последние значение таймера * кол оставшихся градусов * 1092)
Все равно что задержка = последние значение таймера * кол оставшихся градусов / 60;
Машина ЗАЗ 1103i, ГБО4. Управление ДВС: аналог Secu-3 и MegasquirtAVR модифицированное железо и своя прошивка.

Return to Прошивки

Who is online

Users browsing this forum: No registered users and 9 guests

Powered by phpBB® Forum Software © phpBB Group.