Коммутатор мотоцикла на ATMega8.
Добавлено: Ср июн 19, 2013 14:06:19
Доброго времени суток.
Так сказать введение в курс дела: На мотоциклах и максискутерах стоят коммутаторы - они управляют опережением зажигания на различных оборотах. Стоимость оригинальных запчастей оставляет желать лучшего и доходит до сумм в 150евро да еще и доставка в другую страну и так далее. Ко мне обратился друг с просьбой помочь отремонтировать его скутер с минимальными вложениями (умер коммутатор, замена на китайские от мало-кубатурных мопедов удается, но мотор себя ведет далеко не идеально на них). У другого знакомого есть такой-же скутер с рабочим коммутатором.
Немного подумав я решил собрать прибор позволяющий замерять опережение зажигания на различных оборотах двигателя, при измерении все данные заносятся в eeprom, после чего их можно загрузить в комп на всякий случай и для дальнейших работ. Изначально планировалось сделать без сохранения параметров, просто удерживая определенные обороты чтоб котроллер выводил опережение на дисплей и запись данных вручную на листик так сказать. Подумав еще немного я решил исключить человеческий фактор и сделать чтоб прибор сам все сохранял, при этом чтоб этот же прибор мог воспроизводить данные после настройки (считывания данных) - т.е. смог стать коммутатором.
Способ замера опережения зажигания у меня следующий:
1) на INT0 подаю импульсы с датчика холла, меряю количество тиков контроллера между следующим импульсом с датчика, (F=Fcpu/Tcnt) вычисляю частоту Герц, обнуляю счетчик (начинаю считать с 0). На всякий случай настроено прерывание по переполнению, однако на практике и при исследованиях в протеусе выяснилось что переполнение происходит только в случае если частота больше 8мГц (частота на которой работает сам контроллер) т.е. в моем случае 10000 об/мин, больше эти моторы не развивают, в реальных условиях при заведенном моторе оборотов менее 600 не будет, так что ниже этих оборотов опережение зажигания измерять нет необходимости и воспроизводить тоже. Дискретность измерения оборотов 60 об/мин, это даже слишком, в реальных условиях необходимы 100 и 1000 измерения.
2) на INT1 подаю импульсы снятые с катушки зажигания (т.е. снятые после коммутатора) ,если сигнал появился то считываю что в данный момент натикал счетчик таймера, это и есть опережение которое я ищу.
Вопрос в следующем, не могу определиться с алгоритмом накопления результатов и с алгоритмом воспроизведения используя тотже таймер и только 1 прерываени int0 вместо 2-х
И еще при работе прерываний по спадающему фронту почему-то погрешность у меня, а по нарастающему не работает вообще, может я что не так в схеме сделал. При моделировании в протеусе все работает идеально, на практике же показало, что если использовать TIM0 с прерываниями по переполнению то прибор в железе еще показывает временами частоту, после перевода на TIM1 протеус показывает более хорошую картину, а в реальном железе не работает, прерывание не срабатывает или что, не получается разобраться. Уже и так и сяк переделывал и по разным фронтам, в протеусе работает, в железе не работает корректно. Схему перепроверял, все правильно собрано. Думал вначале помехи, но стоит подтяжка на 4,7к к +5В.
Помогите пожалуйста.
Так сказать введение в курс дела: На мотоциклах и максискутерах стоят коммутаторы - они управляют опережением зажигания на различных оборотах. Стоимость оригинальных запчастей оставляет желать лучшего и доходит до сумм в 150евро да еще и доставка в другую страну и так далее. Ко мне обратился друг с просьбой помочь отремонтировать его скутер с минимальными вложениями (умер коммутатор, замена на китайские от мало-кубатурных мопедов удается, но мотор себя ведет далеко не идеально на них). У другого знакомого есть такой-же скутер с рабочим коммутатором.
Немного подумав я решил собрать прибор позволяющий замерять опережение зажигания на различных оборотах двигателя, при измерении все данные заносятся в eeprom, после чего их можно загрузить в комп на всякий случай и для дальнейших работ. Изначально планировалось сделать без сохранения параметров, просто удерживая определенные обороты чтоб котроллер выводил опережение на дисплей и запись данных вручную на листик так сказать. Подумав еще немного я решил исключить человеческий фактор и сделать чтоб прибор сам все сохранял, при этом чтоб этот же прибор мог воспроизводить данные после настройки (считывания данных) - т.е. смог стать коммутатором.
Способ замера опережения зажигания у меня следующий:
1) на INT0 подаю импульсы с датчика холла, меряю количество тиков контроллера между следующим импульсом с датчика, (F=Fcpu/Tcnt) вычисляю частоту Герц, обнуляю счетчик (начинаю считать с 0). На всякий случай настроено прерывание по переполнению, однако на практике и при исследованиях в протеусе выяснилось что переполнение происходит только в случае если частота больше 8мГц (частота на которой работает сам контроллер) т.е. в моем случае 10000 об/мин, больше эти моторы не развивают, в реальных условиях при заведенном моторе оборотов менее 600 не будет, так что ниже этих оборотов опережение зажигания измерять нет необходимости и воспроизводить тоже. Дискретность измерения оборотов 60 об/мин, это даже слишком, в реальных условиях необходимы 100 и 1000 измерения.
2) на INT1 подаю импульсы снятые с катушки зажигания (т.е. снятые после коммутатора) ,если сигнал появился то считываю что в данный момент натикал счетчик таймера, это и есть опережение которое я ищу.
Вопрос в следующем, не могу определиться с алгоритмом накопления результатов и с алгоритмом воспроизведения используя тотже таймер и только 1 прерываени int0 вместо 2-х
И еще при работе прерываний по спадающему фронту почему-то погрешность у меня, а по нарастающему не работает вообще, может я что не так в схеме сделал. При моделировании в протеусе все работает идеально, на практике же показало, что если использовать TIM0 с прерываниями по переполнению то прибор в железе еще показывает временами частоту, после перевода на TIM1 протеус показывает более хорошую картину, а в реальном железе не работает, прерывание не срабатывает или что, не получается разобраться. Уже и так и сяк переделывал и по разным фронтам, в протеусе работает, в железе не работает корректно. Схему перепроверял, все правильно собрано. Думал вначале помехи, но стоит подтяжка на 4,7к к +5В.
Помогите пожалуйста.