Зажигание с АУОЗ для V-50 на микроконтроллере PIC16F628
  Эта статья будет посвящена микропроцессорной системе зажигания для советских мопедов с двигателями V-50, V-501, S-62. 

Предисловие:
   В 2011 году загорелся желанием собрать зажигание с автоматической регулировкой угла опережения для своей Риги с двигателем В-50. Скажу сразу, что штатное зажигание работает без нареканий, мотор заводится с 1-2 нажимов на кикстартер, да и тяга хорошая, но... руки чешутся сделать что-нибудь этакое. Около недели лазил по просторам интернета в поисках подходящей схемы, но кроме зажигания Сарумана и схемы из журнала "Радио" ничего путного не находил...
   Решено было попытаться сделать свою систему. В качестве контроллера решил использовать широко распространенный и доступный чип - PIC16F628. Вообще-то говоря, я не большой сторонник применения микроконтроллеров на такой технике, но это наиболее простой путь получить нужный результат с минимальными затратами. Схема построена таким образом, что даже в случае отказа контроллера сохраняется возможность продолжить движение на штатной системе, переключив всего два переключателя. Для установки данной системы не требуется переделка генератора и датчика, нужно всего лишь изготовить и установить новую плату в корпус БКС (в крайнем случае устройство можно сделать в виде самостоятельного блока, подключаемого к стандартному БКС).

Схема:

Схема соединений на мопеде:


Осциллограмма сигнала с индукционного датчика, развертка 6.5 мс/дел:



Нагрузочные характеристики датчика

Прямое включение:


Обратное включение:


   Напряжение на датчике (амплитудное) измерялось вольтметром постоянного тока, подключенного через диод КД105Б. Щупы вольтметра были зашунтированы электролитом емкостью 47 мкФ.



Алгоритм:
   После инициализации портов и управляющих регистров, устанавливается влаг LowRPM, "говорящий" контроллеру, что КВ вращается медленно. В этом режиме контроллер подает управляющий импульс как только придет положительный сигнал с датчика (PP). При приходе РР устанавливаем флаг SkipPulse и, если КВ вращается медленно открываем VS1. Длительность управляющего импульса задается программно в диапазоне 10...3000мкс и отсчитывается аппаратным таймером TMR2. В своих экспериментах я задавал длительность импульса 100мкс. По прерыванию от TMR2 снимаем управляющий сигнал.

   В программе организован цикл проверки флага INTF. Если INTF=1, проверяем какой из сигналов вызвал установку флага (NP или РP). 

   При приходе отрицательного импульса с датчика (NP), проверяем флаг SkipPulse. Если SkipPulse=1 - сбрасываем его в 0 и продолжаем ждать следующего NP. Если SkipPulse=0 - сохраняем значение аппаратного таймера TMR1 в спаренный регистр Т и обнуляем TMR1. После, проверяем достаточно ли быстро вращается КВ
и производим рассчет времени задержки. Для включения тиристора использован модуль ССР в режиме сравнения. Как только значение в регистрах CCPR1 сравняется со значением счетчика TMR1, происходит переход на программу обработки прерываний. В обработчике прерываний проверяем достаточно ли быстро вращается КВ (флаг LowRPM) и не включено ли ограничение по оборотам (флаг Break). Если все эти флаги = 0 - подаем управляющий импульс и запускаем TMR2.

   Для повышения помехоустойчивости устройства, в программу введены задержки обработки сигналов с датчика. При приходе любого импульса (NP или РP), аппаратно устанавливается флаг внешнего прерывания INTF. Поскольку МК имеет только один вход внешних прерываний, для установки флага INTF при приходе NP в схему добавлен Диод VD6. Далее следует задержка на некоторое время (задается программно с дискретностью 3мкс). После происходит повторный опрос выводов. Если их состояние изменилось - продолжаем ждать импульс с датчика. 

   При работе двигателя на низких оборотах (порог задается программно начиная с 950 об/мин) светодиод HL2 мигает с периодом ~0.4с, а при бОльших оборотах горит постоянно. С помощью этого светодиода можно точно настраивать обороты ХХ. Постоянное свечение HL2 говорит о том, что контроллер формирует управляющий импульс в зависимости от оборотов КВ. Моментом начала отсчета служит второй отрицательный импульс.

Печатная плата, вид со стороны компонентов:


Печатная плата, вид со стороны проводников:


   Для создания прошивки для контроллера была написана программа. Пользоваться программой просто: выставляем параметры датчика, длительность управляющего импульса и несколько других параметров на вкладке "настройки", задаем зависимости УОЗ от оборотов, жмем F9 и получаем готовую прошивку, которую затем нужно будет загрузить в контроллер с помощью программатора.



Какие параметры нужно задать в калькуляторе:
   На вкладке настройки в калькуляторе нужно выставить параметры датчика: начальный угол - угол между ВМТ и положительным импульсом. Он должен быть 15-20 градусов, это приблизительно 1.1-1.5 мм до ВМТ. Угол между положительным и отрицательным импульсом 72 градуса, но на всякий случай можно померить осциллографом конкретно для Вашего случая. Число отрицательных импульсов - 2. Задержку обработки сигналов с датчика можно поставить 30-60 мкс, этого вполне достаточно для фильтрации помех. Длительность управляющего импульса - это время в течение которого на управляющий электрод тиристора будет подаваться открывающий импульс. Какое значение ставить зависит от типа применяемого  тиристора. Минимальное значение, которое здесь должно быть можно посмотреть в документации на тиристор. В принципе, можно и не смотреть в справочники, а просто поставить значение 100 - 200 мкс, практически все тиристоры успевают надежно открыться таким импульсом. Коэффициент деления предделителя TMR1 можно поменять только в том случае, если Вы четко представляете себе алгоритм работы устройства и знаете к чему это приведет. Если нет - оставьте значение по умолчанию, т.е. 8. Оставшиеся два поля, недоступные для редактирования, ни на что не влияют и в этой версии калькулятора не используются.

Фото собранного блока:




Печатная плата (некоторые детальки еще не установлены):

    Калькулятор зажигания
    Печатная плата в SprintLayout5.0


   Как показала практика смысл применения этого зажигания все же есть. Конечно, V-50 не превратился в какой-нибудь гоночный мотор, однако ездить без этой штуковины уже не хочется, правда хочу отметить, что оптимальную кривую УОЗ я так и не подобрал, поэтому если вдруг кто знает напишите ине на почту или в гостевую книгу. До недавнего времени я даже представить не мог, что V-50 может работать так ровно!
   В заключении хочу поблагодарить всех, кто помог мне в создании зажигания. Отдельную благодарность хочу выразить пользователем  killer258 и mrfixer с сайта http://www.dyr4ik.su/.

   С вопросами и замечаниями обращайтесь в гостевую книгу или на почту v-50m(собака)yandex.ru