Дырчик.SU
http://dyr4ik.su/

Зажигание с автоматическим ФУОЗ на микроконтроллере
http://dyr4ik.su/viewtopic.php?f=7&t=1025
Страница 5 из 13

Автор:  Elektron [ 30 авг 2013, 17:23 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Biker1, спасибо, конечно, за ссылку, но про зажигание Сарумана я уже давно знаю, и почему я не стал его ставить, в начале темы уже обсуждалось - нужно сделать много кардинальных переделок. Моя же схема работает без каких либо переделок генератора и пр. Просто подключаем и едем. Не понравилось - все легко вернуть обратно, даже положение датчика менять не нужно.

Автор:  mrfixer [ 30 авг 2013, 21:49 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Встречно-параллельный фильтр L1 обычно ставится между источником помех и защищаемой
частью схемы, то есть до стабилизатора (перед С3). Некоторые стабилизаторы, например
регулируемые низковольтные (1...1.2 В) начинают работать как усилители помех.

Перестраховаться предусмотрев L1, в принципе полезно. Если установите L1, не помешает
ещё один танталовый конденсатор в параллель С11.

Хорошо, что и без L1 работает.

Автор:  Elektron [ 30 авг 2013, 22:35 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

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

На мопеде собрано примерно так:
Изображение

Немного об алгоритме.
После инициализации портов и управляющих регистров, устанавливается влаг LowRPM, "говорящий" контроллеру, что КВ вращается медленно. В этом режиме контроллер подает управляющий импульс как только придет положительный сигнал с датчика (PP). При приходе РР устанавливаем флаг SkipPulse и, если КВ вращается медленно открываем VS1. Длительность управляющего импульса задается программно в диапазоне 5...255мкс и отсчитывается аппаратным таймером TMR2. При включении предделителя к TMR2, длительность импульса можно сделать больше 255 мкс. В своих экспериментах я задавал длительность импульса 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мкс). После происходит повторный опрос выводов. Если их состояние изменилось - продолжаем ждать импульс с датчика.

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

Изображение

Автор:  mrfixer [ 31 авг 2013, 00:24 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Только сейчас, читая алгоритм, заметил, что убрали блокировку на VT1.
Всё просто и логично. Несколько активных и пассивных элементов заменил выключатель.
В случае аварии контроллера, размыкаем SA4, замыкаем SA1 и едем дальше на родном импульсе.

Респект за программное подавление импульсных помех!

Судя по складному описанию алгоритма, Вы учились. В "Учебном Заведении" или самостоятельно?

Автор:  Elektron [ 31 авг 2013, 11:42 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Электронику постигал сам, в основном по книжкам и методом научного тыка. До этого был небольшой опыт написания программ для компьютера на языке Visual Basic. Когда писал первые программы для МК, пользовался Pic Basic'ом, одно время пробовал на С, но после, перешел на Ассемблер. Там хоть знаешь, что все написанные команды просто переведутся в машинный код, а как работает компилятор языков высокого уровня одним разработчикам известно.

Автор:  killer258 [ 31 авг 2013, 22:51 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Elektron писал(а):
. killer258 хочется на ваш девайс посмотреть.


давно это всё было, уже 6 лет прошло. Но несколько фоток сохранилось (два варианта сборки девайса, график(измеренный на виртуальном имитаторе коленвала с измерением УОЗ) угла опережения от оборотов и схема)
Оптроны поставлены потому, что боролся с помехами на процессор. И когда не стояло оптронов, один пик даже умер по непонятной причине. Кнопка ограничения оборотов в нажатом состоянии прекращала выдачу искры при превышении оборотами установленного порога и возобновляла, как только обороты станут чуть ниже порога (у меня стояло 4500, но можно любое значение задать в исходнике). Вопреки ожиданиям, скутер в этом случае не шёл рывками, как я боялся,а шёл на удивление ровно, только звук становился более басовитым и при дальнейшем повороте ручки газа увеличивался только рык при неизменных оборотах. Скутер при этом переставал быть резвым и по поведению становился очень похожим на вялый советский мопедик тех ещё годов (Этот режим я предусмотрел для обкатки или если кому другому надо дать покататься, чтоб он не отжигал.)

ИзображениеИзображениеИзображение

Изображение

Проект разрабатывался для скутеров, схемой использовался нерабочий(отрицательный)импульс датчика, который возникает за 40...70 град (в зависимости от фирмы производителя скутера (выбор переключателем)) до ВМТ

Автор:  Elektron [ 01 сен 2013, 15:32 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Где-то эту схему я уже видел, только не помню где...

Автор:  killer258 [ 01 сен 2013, 17:02 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

я уже выкладывал её когда-то вместе с исходниками. А вообще, схемотехнический принцип у всех схем подобного назначения сходный. В любой есть вход датчика и выход на тиристор.. Алгоритмы только разные.Одни пишут на пике, как я, другие пишут на атмегах, я в то время умел писать только для пиков. Правда, оптроны почему-то другие авторы не ставят, я во всяком случае, не видел ни разу.Видимо, у них проблем с помехами от искры не было. Обычно большинство программ других авторов измеряют таймером период от одного импульса датчика до следующего, потом берут из таблицы соответсвующую задержку. В моём алгоритме в таблице хранились не задержки, а градусы. Так мне удобнее было.Программа же по ним сама считала задержку. Это было сложнее для программы(поэтому там и стоит 20 мгц кварц, а не 4 ),но зато позволяло в целях эксперимента с помощью кнопок на RA2,RA3 (впоследствии были убраны из схемы )
сдвигать угол на +5 и на -5 градусов, и этот сдвиг был одинаковым в градусах(а не в миллисекундах!) на любой частоте вращения, иными словами, можно было немного поднять или опустить одновременно всю кривую (во время езды для выяснения оптимальности хода характеристики). Предполагалось в дальнейшем сюда подать сигнал с датчика разрежения во впускном патрубке или положения ручки газа(для более точной работы), либо поставить переключатель типа "нагруженный мопед с пассажиром"/"мопед-одиночка", но потом как-то это забросил.

Данный вариант работал, получая на вход импульс намного раньше ВМТ (40-80 гр), а процессор делал задержку, доводя момент до требуемого. Это было удобно для скутера.

Был у меня и другой вариант, но от него пришлось отказаться. Он использовал сигнал родного датчика (чтоб ничего не дорабатывать), и в зависимости от оборотов он выдавал либо задержанный на небольшой угол отностиельно исходного сигнал (припозднял), либо выдавал задержанный на чуть менее 360 градусов относительно исходного сигнал, что соответствовало более раннему зажиганию. Проблемы были на частоте коленвала, которая являлась границей при выборе этого действия (около 4 тыс об/мин), но возникали в основном на плохой дороге в гору, а вторая проблема проявляласт в том, что задержки, близкие к 360 градусам, были очень чувствительны к рывкам в трансмиссии. Нет, всё работало, но первый вариант субьективно ощущался как более удачный.

Автор:  killer258 [ 01 сен 2013, 17:27 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

если обратили внимание, я там кроме прочего,ещё сделал выход аналогового тахометра . На каждый оборот коленвала(по фронту импульса датчика) формировался импульс фиксированной длительности, равный 2 миллисек. Это дело подавалось на стрелочный прибор. Шкала получилась удивительно линейной от 1000 об/мин до 10500 об/мин (выше у меня мотор не крутился. Впрочем, без ФУОЗа он крутился до 8000 еле-еле). Недостаток оказался в том, что миллиамперметры, примотанные изолентой к рулю, выходили со временем из строя от вибрации, поэтому в перспективе планировался вывод оборотов и угла на ЖКИ)

Автор:  Elektron [ 29 сен 2013, 22:27 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

А тем временем работы по созданию ФУОЗа продолжаются... Вчера опробовал новую прошивку с регулируемым УОЗ. Первое, что заметил - стал легче заводиться. Раньше, после длительной стоянки, заводился раза с 4-5, а вчера завелся с одного нажима на кик-стартер. С места трогается примерно как и раньше, но в горку стал тянуть увереннее. Максималка, по ощущениям, осталась на том же уровне, к сожалению, замерить нечем. Как же ощутимо снизилась вибрация! Никогда бы не подумал, что В-50 может работать так ровно!

В память контроллера записаны вот такие графики:
Изображение

Ездить пробовал только на синей характеристике. На улице было уже темно, а останавливаться и откручивать БКС, чтобы переключить переключатель было лень.

На всякий случай прикрутил стробоскоп. С ростом оборотов метка, как и положено, смещается в сторону раннего зажигания. На холостых оборотах метка немножко подергивается, градусов на 5-6, видимо, на малых оборотах КВ вращается довольно неравномерно. О подобном эффекте писАл omich в своей теме про ФУОЗ для дэшки http://www.mopedist.ru/forum/thread1727-20.html

Автор:  killer258 [ 30 сен 2013, 00:31 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

подскажу по своему опыту, чтоб сэкономить ваше время. то, что на 3000 у вас опережение около 15 гр, это правильно, я тоже на такой цифре остановился. На более низких оборотах вплоть до холостого хода оптимально оставить около 10. Я пробовал и меньше, вплоть до 5,но в этом случае, если в моторое всё идеально, то заводится так же, ничуть не хуже,но если есть хоть небольшие проблемы, то заводится уже не так уверенно. Поэтому оставил 10.
На участке от 3000 до 6000 я пробовал разные кривые, сравнивая по времени в секеундах, за которое мопед , тронувшись с места, проезжал по дороге участок около 100 метров (два столба вдоль дороги).
Лучше всего получалось на этом участке оборотов при линейной зависимости опережения от оборотов, то есть , иначе говоря, от 15 гр на 3000об/мин до 30 гр на 6000 об/мин. Самое оптимальное получалось. Попробуйте так,(начните на низких и средних, как на синем графике, а закончите, как на красном грфике) и вы почувствуете в диапазоне от 3т до 6т очень хороший подхват. (я правда, на скутере это пробовал,и на V-50, на скутере эффект подхвата был заметнее, но и на V50 тоже прибавка была на средних оборотах. Насчёт вибрации- да, у меня тоже ровнее начинал работать на холостых. Далее до 8-10т угол должен почти не расти, можно плавно наращивать так, чтоб к концу прибавилось ещё градуса четыре. Больше ни к чему. У меня вначале доходило до 38-40 градусов, но это был явный перебор, я потом уменьшил, ибо на макс оборотах начинало звенеть в цилиндре и кончилось это прихватом и кромка поршня частично откололась.
Короче , в начале и в конце нужны пологие участки, а в середине от 3 до 6 тыс прямо пропорциональный.
Для нагруженного мопеда (с пассажиром, или езда в гору по грунтовке и песку) характеристику лучше в средней и верхней части немного опустить вниз градуса на 4-5

Автор:  killer258 [ 30 сен 2013, 20:13 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

тут, собственно, суть в следующем, как я понял. Поскольку опережение применяется из-за конечного времени воспламенения (которое обычно порядка 1..2 мсек плюс-минус немного туда-сюда в зависимости от условий типа температуры, состава смеси и тд), то оно и составляет эти 1-2 мсек. Чем больше скорость, тем на больший угол успевает повернуться коленвал за эти 1..2 мсек, соответственно приходится зажигать смесь за бОльший до ВМТ угол поворота.

Установлено, что наибольшая механическая работа поршнем совершается в случае, если момент максимального роста давления воспламеняющейся смеси приходится на приблизительно 12 градусов после прохода им ВМТ. Не раньше и не позже. Вот и нужно поджигать смесь тогда, когда максимум давления в цилиндре произойдёт при проходе упомянутых выше 12 градусов. В этом и состоит смысл подбора опережения ,с учётом ещё и того, что смесь не сгорает мгновенно. Если бы у нас был бы в распоряжении датчик абсолютного давления в цилиндре, способный работать в условиях камеры сгорания, то нахождение нужных моментов поджига было бы очень простой задачей, не требующей много времени.(можно было бы даже сделать адаптивную самоподстраивающуюся систему на микроконтроллере,который подбирает этот момент так, чтобы максимум давления всегда , при любых условиях и при любом топливе был бы на 12 гр после ВМТ. это было бы очень красиво..). Но его, к сожаленю, нет у нас.

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

Если график оптимального УОЗ был бы нарисован не в привычных градусах, а именно в единицах задержки в миллисекундах, от оборотов, то нетрудно самому убедиться, (если пересчитать и перерисовать), что это будет почти прямая горизонтальная линия, то есть подтверждается, что главный смысл- это обеспечить опережение поджига смеси за эти самые 1..2 мсек на всех оборотах.
Но тем не менее, в реальности это будет соблюдаться только для средних оборотов в диапазоне от 3000 до 6000
На более низких и более высоких оборотах начинают проявляться и другие факторы, изменяющие время воспламенения, поэтому там кривая не падает до нуля при стремлении оборотов к нулю (скорость воспламенения падает предположительноиз-за большого процента остаточных газов из-за ухудщения продувки при почти закрытом дросселе), как это ожидалось бы по логике вещей, и не продолжает расти вверх после 6000 с той же резвостью до 50 и более градусов на 10 тыс об/мин, видимо, на больших оборотах скорость воспламенения увеличивается в силу каких-то причин (улучшения продувки при полностью открытом дросселе) и дальнейший рост угла уже не так нужен. (имеется в виду , что речь о двигателе 2Т с его неидеальной продувкой)

Вообще, конечно, оптимальная кривая зависит не только от оборотов, но и от положения дроссельной заслонки, то есть реально существует не одна кривая, а семейство кривых уоз, образующих криволинейную поверхность на множестве из этих двух переменных, как их функция (этих двух переменных),но для мотора V50 этим ньюансом можно не заморачиваться, а вот на 4т вакуум-корректор применяется.
И если мотор 4т, то графики пойдут пониже по сравнению с 2т. Видимо, раз очистка от остаточных газов в 4т проходит лучше, то и опережение требуется не такое большое.

Автор:  killer258 [ 30 сен 2013, 21:51 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

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

Я для этой цели проверки применял имитатор сигнала датчика коленвала с измерением УОЗ. Он был собран на пике, и работал следующим образом.
В программе пика была переменная, инкрементирующаяся вместе с тактовой частотой пика от 0 до 360 с шагом 1. (градусы короче)
Когда до условного ВМТ (=0) оставалось 40 градусов (так у меня был установлен датчик на моторе), пик на одном из выходов выдавал импульс, имитирующий импульс датчика.
Его подаёшь на свой ФУОЗ. А ответный импульс от ФУОЗА подаёшь обратно, на вход пика. Пик, уловив такой импульс, смотрит, чему в этот момент равна его переменная, и выводит это на ЖКИ. Получается значение опережения с дискретностью в 1 градус.
Другой пик работает тахометром (на импульсе), значение оборотов передаётся в первый пик и выводится в другой строке индикатора.

Тактировался пик RC-генератором. R и С были взяты переменные, вращая их, можно было делать "обороты" от 100 об/мин до примерно 20 тыс об/мин, что отображадлось на ЖКИ вместе с углом опережения.
Причём могли быть показаны любые углы, хоть опережение, хоть запаздывание(в последнем случае требовался пересчёт)
до сих пор где-то это приспособление валяется, удобно было проверять характеристику на совпадение с требуемой,прямо на столе, а не в гараже. и без мотора.

Ну, в общем, идея понятна для тех, кто захочет повторить сей девайс

Автор:  Elektron [ 30 сен 2013, 22:18 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Хорошая идейка с измерителем УОЗ, будет время, надо будет собрать. Пока что пользуюсь симулятором Proteus, там на осциллографе видны все задержки, правда, приходится вручную пересчитывать в градусы.

Кстати, УОЗ у меня рассчитывается для каждой частоты вращения индивидуально, а не выбирается из таблицы, как в большинстве алгоритмов. Для хранения двух характеристик ~ по 7500 точек каждая, у пика памяти не хватит, а ставить внешнюю флэш не охота. Поэтому вся кривая УОЗ разбита на 30 опорных точек, по которым контроллер вычисляет момент включения тиристора в real time.

Автор:  killer258 [ 30 сен 2013, 23:10 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Elektron писал(а):

Кстати, УОЗ у меня рассчитывается для каждой частоты вращения индивидуально, а не выбирается из таблицы, как в большинстве алгоритмов. .


у меня тоже кое-что пиком рассчитывалось в реал-тайме, а не просто бралось из таблицы.
Обычно авторы различных ФУОЗов хранят в таблицах заранее посчитанные задержки. И пик их просто загружает в таймеры. Это даёт простоту программы, но для смены хода кривой пришлось бы вручную пересчитвыать эти задержки для тех или иных диапазонов оборотов.
А у меня в таблице хранились градусы, что позволило оперативно вносить изменения и это как-бы нагляднее для человека.Но зато труднее для пика, так как он в реалтайме пересчитывает градусы в задержки, на что расходуется время процессора, и приходится учитывать поправку на больших оборотах. (операции деления и умножения занимают сотни тактов процессора)

И ещё один момент, который надо обязательно предусматривать. при стремлении оборотов к нулю для сохранения требуемого угла опережения 10-12 град будут требоваться очень большие задержки, и измерение периода коленвала на этих оборотах тоже иногда приводит к переполнению счётчиков, для избежания этого на сверхнизких оборотах работает отдельная процедура.Без неё УОЗ при падении оборотов начинал с некоторого момента быть некорректным. Я имею в виду 200 об/мин- это обороты при заводке скутера электростартером (или кикстартером-немного побольше), и в этом режиме надо, чтоб тоже углы корректно реализовывались даже на очень малых оборотах. Зато никогда не ударяет кистартером в ногу, даже если очень медленно давлю.

Автор:  Elektron [ 01 окт 2013, 08:29 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

killer258 писал(а):
И ещё один момент, который надо обязательно предусматривать. при стремлении оборотов к нулю для сохранения требуемого угла опережения 10-12 град будут требоваться очень большие задержки, и измерение периода коленвала на этих оборотах тоже иногда приводит к переполнению счётчиков

В принципе, максимальное значение, которое может посчитать счетчик 65535, предделитель с коэффициентом деления 8, итого Nmin=60/(65535*8*10^-6)=114 об/мин. Но я решил подстраховаться, поэтому для каждого оборота оценивается период между двумя импульсами с датчика. Если он выше заданного порога или если произошло переполнение таймера, контроллер будет открывать тиристор при приходе каждого положительного импульса с датчика. При достаточной частоте вращения КВ, угол отсчитывается от отрицательного импульса.

Автор:  Elektron [ 04 окт 2013, 19:40 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Вчера вечером опробовал новый график (на фото синяя кривая). Если честно, результат не понравился. На оборотах чуть выше средних есть небольшой подхват, но если продолжать добавлять газу, обороты как-то медленно нарастают, двигатель становится "ватным". Думаю, УОЗ для этих оборотов слишком большой. В прошлый раз результат порадовал больше (красная кривая). Надо будет попробовать что-нибудь среднее между ними.

Изображение

Автор:  killer258 [ 04 окт 2013, 20:09 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

на всякий случай проверьте стробоскопом, действительно ли формируются те самые углы, что указаны на графике.
Обычно угол в 18-20 градусов годится для оборотов около4-5 тыс, а при оборотах 6 тыс и выше он недостаточен,(проявляется в том, что мотор "тупит") если у вас двухтактный мотор.
А на оборотах от 8 до 11 тыс там обороты они и будут медленно нарастать, динамики там уже и правда,никакой , к сожалению. Вот у меня мотор до переделки крутился до 8000, после стал до 10500 об/мин, но радости от этого никакой не было, ибо на поворот ручки газа на этих оборотах никакой реакции уже не было, и последние две тысячи набирались очень долго и мучительно, наверное, с пол-минуты где-то на хорошем ровном асфальте. Хотя до 5000 разгонялся секунд за семь-восемь, если не даже не меньше)
Максимум реакции (силы "рывка" при повороте ручки газа) у меня наблюдался на участке 5-7 тыс об, (то есть тоже чуть выше средних) не смотря на то, что крутиться он стал до 10500.

Правда, справедливости ради стоит сказать, что это я экспериментировал на скутере Honda Pal.
А на двухскоростной Риге эффект подхвата был не так выражен, но тем не менее было заметно всё равно, что с ФУОЗом лучше.
Единственно, что я не долго на той Риге ездил, поэтому на ней не проводил много экспериментов.

И ещё. У меня в девайсе было предусмотрено две кнопки, которые всё время опрашивались контроллером во время работы.
Одна повышала угол на 4 градуса, другая понижала. Их можно было нажимать при езде для сравнения, как будет лучше, и запоминать, какие были обороты.. Рекомендую сделать на время отладки что-то подобное
Если у вас в таблице находятся задержки, а не градусы, как у меня, то будет невозможно сделать сдвиг, одинаковый в градусах на любых оборотах, но тем не менее всё равно он будет уменьшаться и увеличиваться, и это поможет.
Кнопки крепятся на руле, провода к ним возможно, придётся экранировать (у меня помехи от зажигания иногда мешали)
Также могу сказать, что на самых высших (предельно достижимых) оборотах мотора даже с помощью этих кнопок я так и не смог выяснить, какой же угол нравится мотору на них больше всего, там он уже ни на газ, ни на уоз при их изменении особо не реагировал, и выл при этом, как пылесос.

Вот ссылка в помощь
http://www.moto.com.ua/forum.php?id=41985&page=6#pryam
я когда-то там участвовал в обсуждениях,были интересные моменты

Автор:  Elektron [ 04 окт 2013, 21:41 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Да, надо будет углы на моторе померить, я смотрел стробоскопом только движение метки. Пробовал прогонять схемку на симуляторе в Proteus'e, там углы точь-в-точь совпадают с расчетными, но это только в теории, в реальности, как обычно, можно на что-нибудь напороться.

killer258 писал(а):
Если у вас в таблице находятся задержки, а не градусы, как у меня, то будет невозможно сделать сдвиг, одинаковый в градусах на любых оборотах

В таблице у меня хранятся не градусы и не задержки. В таблицу записаны константы, по которым контроллер считает задержки. Примерно так: есть зависимость угла от оборотов. Пересчитываем градусы во временные задержки, обороты тоже заменяем на время (Т=60/n). Зависимость времени задержки от периода вращения КВ получается практически прямолинейная. Вся зависимость разбивается на 30 точек с шагом 2048 мкс. Через две соседние точки проводится прямая линия. Уравнение прямой y=k*x+b. Далее находятся коэффициенты k и b. Коэффициент k получается меньше 1, b<0. В лоб с такими числами ПИК работать не умеет, поэтому умножаем k на 512 (с округлением до целого числа), b на -1. Эти точки и записываются в EEPROM контроллера.

Анализируя период вращения КВ, контроллер определяет на каком участке кривой мы находимся и выбирает две константы. Время задержки рассчитывается по формуле j=(k*i)/512-b. Здесь j - значение, записываемое в регистры модуля CCP, i - то, что насчитал таймер TMR1 за один оборот КВ. Число 512 взято потому, что деление на него можно заменить простым сдвигом регистров вправо.

killer258 писал(а):
Вот ссылка в помощь
http://www.moto.com.ua/forum.php?id=41985&page=6#pryam
я когда-то там участвовал в обсуждениях,были интересные моменты

Во-о, в точку, то, что искал!

Автор:  killer258 [ 04 окт 2013, 22:14 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Elektron писал(а):
Число 512 взято потому, что деление на него можно заменить простым сдвигом регистров вправо.


кстати, тоже через это проходил. Мне (вернее, процессору) нужно было после того, как он измерил период оборота коленвала в единицах таймера TMR1, определять "цену" одного градуса в этих же единицах таймера для данной скорости вращения, для этого нужно было это значение делить на 360 (чтоб потом , умножив "цену" одного градуса на требуемое число градусов, получить то, что нужно таймеру для отмеривания задержки на заданное кол-во градусов)
Так вот, поскольку всё это писалось в то время на ассемблере, а не на Си с его библиотеками(не было бесплатного компилятора у меня в то время), то деление одного двухбайтового числа на другое двухбайтовое (360) число писать на асме очень не хотелось,да и тратить на это сотни тактов процессора тоже не хотелось, и помнится, мне тоже пришло решение типа "пусть в моей окружности будет не 360, а 512 градусов,(условных) ну и что, что мои градусы будут немного помельче стандартных, зато деление заменю простым сдвигом. Тем более, что я знаю, во сколько раз они меньше "классических" и всегда могу перевести "классические" градусы в мои и наоборот" .Значит,оказывается, не мне одному такое в голову пришло. ;)

Автор:  Elektron [ 04 окт 2013, 23:04 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

А как задавалась зависимость угла от, оборотов таблицей, или как-то по другому?

Автор:  killer258 [ 05 окт 2013, 08:47 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

сначала процессор измерял таймером TMR1 время от предыдущего импульса датчика коленвала до только что пришедшего .(для этого использовалось прерывание по RB0/INT) После этого в программе обработки прерывания от датчика,содержимое счётчика переписывается в буферную переменную, а сам счётчик обнуляется и начинает новый счёт.
Затем от двухбайтного содержимого счётчика берётся старший байт, (кварц и предделители таймера были подобраны так, чтобы даже на самых высоких возможных оборотах старший байт не опускался ниже нескольких единиц)
и соответственно имеется таблица из 256 ячеек, а этот старший байт используется как номер ячейки, из которой и извлекается информация о требуемом УОЗ
Понятно, что таблица получается не очень равномерная,(каждый элемент таблицы охватывал некоторый интервал оборотов в пределах отброшенного младшего байта) слишком подробная на малых оборотах, где это не требуется и менее подробная в конце, но был выбран некоторый компромисс, и это работало. Понятно, что выбранное из ячейки число применялось к некоторому диапазону оборотов коленвала от чего-то и до чего-то, вследствие такого разбиения кривая получалась не ровной, а немножечко ступенчатой, но ошибка в каждом участке не превышала 1-2 градусов, с этим можно было мириться.
Тем более что из-за этого угол немного рос от левого конца интервала к правому, но по замыслу, наша кривая тоже везде растущая, так что поэтому это особо не мешало, погрешность была в "нужную" сторону, в сторону увеличения угла.

Автор:  Elektron [ 05 окт 2013, 10:23 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Я, кстати, точно так же поступил, только прерывания по RB0/INT обрабатываются программно. Один вход обрабатывает оба импульса с датчика (положительный и отрицательный). И размер таблицы уменьшен до 120 (2 кривые), чтоб в EEPROM влезло.

Автор:  killer258 [ 07 окт 2013, 17:28 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

вот нашёл картинку зависимости УОЗ для какого-то мотора от оборотов и нагрузки.
так,на всякий случай, чтоб видетьэто визуально
Изображение

Автор:  Elektron [ 07 окт 2013, 21:42 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

В принципе, можно было бы добавить еще и зависимость от нагрузки на двигатель, сделать это программно не трудно, а вот с установкой датчиков не все так просто. Думаю, в нашем случае вполне хватит простой зависимости угла от оборотов. В выходные сравнил два последних графика. На красной кривой двигатель работает гораздо лучше, чем на синей.

Начал задумываться о создании какого-нибудь нагрузочного стенда, а то это как пальцем в небо. Первое, что приходит на ум - это взять машину постоянного тока и соединить с ДВС цепной передачей. Якорь МПТ нагрузить на реостат. Меняя сопротивление в цепи якоря будем регулировать величину тормозного момента для ДВС. Основная проблема - достать подходящую МПТ и мощные реостаты.

Автор:  killer258 [ 07 окт 2013, 22:54 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

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

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

Если первый вариант, то либо механическая тормозная муфта (я думаю, подойдёт сухое сцепление или тормозной барабан от какого-нибудь грузовика),
либо генератор (мне попался от таврии, 12 вольт, 500 ватт- маловато, но короткое время выдержит ) или от автобуса, он даёт больше киловатта. В качестве нагрузок можно применить параллельные гирлянды из автомобильных ламп фар на всё те же 12вольт, можно коммутировать количество секций.
В промышленном стенде (советских времён) я слышал, использовались две пластины, опускаемые в бак с раствором электролита (наподобие КПЕ по конструкции)
Учитывая, что сейчас микроконтроллеры не проблема, можно автоматизировать процесс измерения.и даже сохранять или печатать графики мощностных характеристик

Автор:  Elektron [ 08 окт 2013, 23:14 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Почти закончил работу над калькулятором, у кого будет свободная минутка, может, так сказать, заценить мое творение :)

Изображение

Пользоваться программой очень просто: распаковываем архив и запускаем AutoCom.exe, задаем зависимости УОЗ и жмем кнопку "рассчитать", если полученные кривые устраивают - жмем F9. Если все получилось, в папке с программой должен создаться файл прошивки с расширением .hex. Этот файл можно загружать в память контроллера. На вкладке "настройки" можно задавать параметры датчика, длительность управляющего импульса и пр.

Некоторые возможности программы пока не доработаны и поэтому не доступны для использования. Наверняка где-нибудь накосячил, поэтому пишите, если что не так :)

Вложения:
ComCalc.zip [123.67 KiB]
Скачиваний: 948

Автор:  foxx33 [ 14 окт 2013, 21:24 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Elektron будь любезен сделай фотки генератора да покрупнее покажи как у тебя ДПКВ сделан и если можно выложи в архивчике окончательную схемку если можно с печаткой (зачем изобретать велосипед) и прошивку ну чтоб проще было повторить.
Спасибо что проделал такую работу.
Да и еще а зачем "датчик абсолютного давления" ведь на машинах его не используют есть на это датчик детонации ну к примеру система Диджифанк на VW B3 там обыкновенный трамблер но задержка управляется по датчику детонации?
Ведь его прикрутить недолго.

Автор:  Elektron [ 14 окт 2013, 21:44 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

foxx33, вынужден тебя огорчить, но датчик абсолютного давления я еще не освоил, да и ставить его особого смысла не вижу. Прошивка создается при помощи программы из поста выше, там же лежит и исходник на ассемблере. Схему и рисунок платы можно взять здесь http://v-50m.narod.ru/com.zip

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

Изображение

Автор:  foxx33 [ 14 окт 2013, 23:00 ]
Заголовок сообщения:  Re: Зажигание с автоматическим ФУОЗ на микроконтроллере

Подскажи что из себя представляет трансформатор L1

Страница 5 из 13 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/