ФУОЗ по дешману | OPPOZIT.RU | мотоциклы Урал, Днепр, BMW | оппозитный форум, ремонт и тюнинг мотоциклов
Home

ФУОЗ по дешману

оппозитчик kimba
чтоб поменять аватар - читай FAQ
нахождение: Москва, Ясенево

Ребята на базе ардуино запилили фуоз, дешево и просто
https://www.youtube.com/watch?v=XP1SUmiTKZY
Каково мнение общественности?
Думаю надо попробовать, ради эксперимента.
Ссылки на инструкцию
https://customcult.netlify.app/

PCDeath's picture

Ну почему же? Можно. Можно отказаться от работы по USB. Это как два пальца - достаточно шить не через bootloader, а через ISP.
Можно уменьшить тайм-аут ожидания связи по USB, но надо перепилить bootloader, и есть риск нестабильного коннекта, если ПК не успеет определить, что на шину что-то повешено, и попытаться опросить устройство.

На nano тоже есть свой bootloader, но какой у него тайм-аут - ХЗ.

Peacedeath подкрался незаметно, но слышен был издалека

РЕКЛАМА's picture

У меня такого нету программатора..
и перепиливать бутлоадеры я тоже не умею.
Попробую сначала на нано..

Nebel_S's picture

Всем привет. Кто-нибудь запускал digispark от датчика холла или все на оптике?
У меня почему то плата не видит от него сигнал, только если шторка очень медленно проходит через датчик и то как то с запозданием искра бьёт. Из контролера сигнал на коммутатор идёт, при включении питания искра бьёт несколько раз. Без платы сигнал от ДХ на коммутатор идёт без проблем (двиг заводится).

РЕКЛАМА's picture

Надо подтянуть резистором сигнал от датчика. К плюсу, вроде. У меня тоже не видел по началу.

Nebel_S's picture

Добро попробую к плюсу. Подтягивал на минус почему-то, не помогло.

Nebel_S's picture

Спасибо! Подтянул на плюс, помогло. Завелся, правда работает не больше минуты и сам перезагружается контроллер либо во все зависает. Видимо косячный попался. Или что это может быть?

Artegro's picture

посмотри насколько качественно подключено питание к контроллеру, скорее всего контакты где то..

РЕКЛАМА's picture

Я не знаю, у меня еще на столе всё.

Artegro's picture

у меня подключен с датчиком холла , ничего подтягивать не надо кроме разьве что резистора 1кОм в разрыв сигнального провода (защита от замыкания) , прошивка просто сделана под вырез в модуляторе , если надо под шторку то меняется один параметр , он в прошивке помечен.
Задержка при включении 6 сек на страт бутлодера ИМХО незначительна. плата проверена мной на колясыче , поездка порядка часа на прошивке аля саруман , проблем не выявила.. , с МАР не тестировал .. времени нет совсем..

PCDeath's picture

Тупо "в лоб" MAP не прикрутить - функция чтения аналогового входа analogRead() сто́ит 120 микросекунд - при 6000 об/мин это почти 3 градуса поворота коленвала. Если делать усреднение хотя бы из 5 считываний, то это уже 15 градусов.
Понадобится высчитывать промежуток, когда можно уделить столько времени на чтение, и только тогда опрашивать аналоговый вход.

Peacedeath подкрался незаметно, но слышен был издалека

РЕКЛАМА's picture

Реально не заработал с датчиком напрямую. Я сначала на машине попробовал, нет искры..
Потом на столе, с новым датчиком, тоже нет..
Мне кажется слишком высокий уровень "0" идет с датчика, плата считает его за "1"
Под вырез или лепесток без разницы, у меня две прошито разных.

Artegro's picture

видать ДХ разные , только что проверил с датчиком 671.3855, работает стабильно .. + со старым ДХ тоже работает .. хз какая модель помню много лет назад покупал для 8-ки. тоже работает нормально , показания на сигнальном проводе с ДХ - (масса) и +5 (при прохождении модулятора соответственно), подключено все без подтяжек резисторами.. хотя чтоб не подтягивать отдельно резистором сход с ДХ его можно подтянуть встроенным в микрухе

pinMode(0, INPUT_PULLUP); // Вход с датчика зажигания. подтянули на + по умолчанию
Проверку на столе этого параметра провел , с ним работает.

Artegro's picture

так в коде ж вычисляется время в процедуре расчета rpm
loadtime = VMTtime + diffTime/4; // устанавливаем время середины такта впуска

далее в теле мы ловим момент по времени маркеру считывания
if (micros() >= loadtime && loadRead == true){
word load = 0;
for (byte i =0; i <= 4; i++){ // считываем показания с МАР 5 раз
load = load + analogRead(1);
}
load = load / 5; //получаем средне значение с МАР
loadRead = false; // снимаем флаг считывания МАР
if (load >= 800 && load >= 1021){
ignitionload = map(load , 800 , 1021, 0, 200); // записываем значение угла поправки зажигание в пределах от 0 до 20 градусов в зависимости от разряжения на впуске (значения с мап меняются в среднем 800 до 1021 в среднем)
}
else {
ignitionload = 0; // если показания с МАР выходят за рамки то коррекцию по вакууму ставим на 0 (нет коррекции)
}

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

РЕКЛАМА's picture

С программной подтяжкой искра теперь тоже есть. Ставил на буса, не завел.
Подскажи как должен стоять вырез (или выступ) модулятора по отношению к ВМТ для предварительной наладки?

Artegro's picture

Должно быть, выход активного элемента из датчика в ВМТ.
"буса" ты имеешь в виду минивен? ты прошивку под 4 цилиндра правил ?

#define FRONTS_PER_ROTATE 1 // Количество прохождений шторки через датчик за 1 оборот.
Для 4 цилиндров должно быть #define FRONTS_PER_ROTATE 2 // так как на 4 цилиндровых по 2 искры на один полный оборот КВ

РЕКЛАМА's picture

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

VmaxHammer's picture

странная тема, прошил плату только у меня с разъемом микро юсб, с прошивкой саруман стреляет то в глушак то в карб ( ручное опережение двигал) с прошивкой откастомкульт все заработало сразу, шторка от совека ( цилиндр с вырезами) в чем может быть причина? (146ю строчку менял)

Artegro's picture

тебе не надо менять было 146 строчку , у тебя активный элемент это вырез.
в твоем случае без изменений if (modulator == HIGH)

Artegro's picture

Оживлю темку.
Ходовые испытания показали , что в прошивке с мап , для к750 малы угды мот не едит на оборотах выше 2600 (да же с отключенным МАП)
Так же опытным путем ыяснил что на оборотах выше 2600 коррекция по мап не нужна.
Поставил другой график,
Переделал логику программы с мап коррекция работает от 800 до 2600 рпм,
искра в вмт только до 700 рпм а не на всех оборотах как раньше.
Самое важное теперь посте входа активного элемента в датчик запускается цикл который крутиться до расчетного времени опережения и по выходу из цикла идет искра,
так де посте выхода активного элемента из датчика (ВМТ при оборотах менее 700 рпм идет искра) проходят расчеты и по окончании расчетов запускается цикл ожидания времени середины первого такта впуска , по выходу из цикла идет 5-кратное считывание показаний мап и расчет по среднему арифметическому, значение коррекции сделал от 0 до 13 градусов , так как ходовые показали что 20 градусов корекци это очень много.
Скеч

Artegro's picture

Проверил прошивку на работоспособность.
Выявился такой же глюк как в первых прошивках под саруман , на малых углах опережения пропадала искра.
Не стал делать дублирующую искру в ВМТ, пошел другим путем, точка отсчета времени взял при входе активного элемента в датчик, в моем случае за 60 градусов до вмт (шторка от сарумана), все расчеты поменял с коррекцией на эти 60 градусов, и о чудо , перебои на малых углах пропали, мотор заработал ровно.
Завтра ходовые покажут попал я в углы и коррекцию.
скечи обновил оба по новому алгоритму работы (4 строка #define Modul_Size 600 // Размер активного элемента) в ней задается размер активного элемента , так что можно подстроить под свой модулятор, но не советую делать модулятор меньше 40 Градусов ,

ToliK56's picture

Добрый день.
Слежу за темой. Посмотрел Ваш скетч. Не может ли быть ошибки в "if (load >= 800 && load >= 1021)", может быть надо "if (load >= 800 && load <= 1021)"?

Artegro's picture

Да , спасибо.
скеч поправил,

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

Artegro's picture

Упростил прошивку, остались тестовые испытания но погода подпортила планы.

Dnepr_1186's picture

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

Artegro's picture

мысль хорошая, интересно в чем была проблема с вуфером?

Dnepr_1186's picture

При установке его как положено он давал очень маленькое опережение. То есть там выходило градусов 15 ну может 20 максимум и то на очень больших оборотах. Такок ощущение что мозги не правильно определяли обороты. Случай не единичный, пробовал разные прошивки. Мотоцикл был тугой на Разгон. В итоге пришлось довернуть сильно в сторону раннего, в итоге вышло что на хх в районе 10-15 градусов, ну а дальше оно уже от этого угла отсчитывало.
Единственный плюс вуфера -отсутствие коммутатора, программа имммет фиксированное время накопления в катушке, а при использовании современного igbt транзистора на выходе позволяет весь блок сделать чуть больше спичечного коробка.

Artegro's picture

Переделал алгоритм расчета Тут новая версия
избавился от операций деления и умножения в рачете времени , теперь все это делается в таблице #define так, как у нас есть константы, это угол опережения на контрольной точке и время одного градуса в этой точке, соответственно перемножив одно на другое мы получим время которое надо вычесть из следующего втм для образования искры и все сложные и затратные расчеты там не нужны
В самом теле программы оперируем только мар и сложением и вычитанием .

П.С.
Элиас буду признателен если взгляешь.

Artegro's picture

Провел тесты опережения .. и что то результаты прям интересные получились.
тест тут https://youtu.be/yMfCx3gCFAY
что то захотелось мне механическое опережение потестить , народ дайте модулятор с пружинками от кулочкового ...

BuffoG's picture

Есть у меня подозрение, что не станет коммутатор от ВАЗ типа СОАТЭ 036.3734 с диджиспарком корректно работать. Нужна своя схема управления катушкой аля как сделано у Сарумана или КЭПа
Так как ВАЗовский коммутатор построен на микросхеме L497 - специализированная микруха с функцией ФУОЗ, то она будет не корректро работать с диджиспарком который сам подстраивает ФУОЗ по своему алгоритму.

Немного о микросхеме
контроллер L497- это один из наиболее популярных и надежных контроллеров системы зажигания, производится компанией SGS-Thomson .
Его основные технические характеристики:
• непосредственное управление ключевым составным транзистором в цепи коммутации КЗ;
• автоматическая регулировка угла опережения зажигания (УОЗ);
• программируемое ограничение пикового тока через обмотку КЗ;
• программируемый УОЗ в условиях, когда ток через КЗ не достигает величины, равной 94% от номинального значения;
• наличие выхода управления тахометром;
• наличие встроенной защиты от бросков тока;
• наличие схемы защиты внешнего транзистора от перенапряжений;
• внутренний стабилизатор напряжения;
• наличие защиты от переполюсовки источника питания;
• работоспособность при напряжении источника питания от 3,5 до 28 В;
• непосредственное управление ключевым составным транзистором в цепи коммутации КЗ;
• автоматическая регулировка угла опережения зажигания (УОЗ);
• низкий потребляемый ток - от 5 до 25 мА.

Контроллер L497 выпускается в корпусах двух типов - DIP16 (L497B) для обычного печатного и SO16 (L497D1) для поверхностного монтажа. Для того чтобы лучше уяснить принципы построения системы зажигания на основе L497, рассмотрим его структурную схему (рис. 1)

и познакомимся с назначением выводов, которое представлено в таблице 1.

На рис. 3 приведена типовая принципиальная схема применения контроллера L497.

Обозначения на ней соответствуют обозначениям, приведенным в таблице 1.
Стабилитрон DZ2 обеспечивает защиту от перенапряжений транзистора драйвера, управляющего составным транзистором, стабилитрон DZ1 - защиту датчика Холла и защиту от перенапряжений по входу питания. Резистор R4 ограничивает ток через DZ1. Напряжение на коллекторе внешнего составного транзистора ограничивается делителем R2R3. Порог ограничения возрастает при уменьшении R2 или увеличении R3. Иногда при подборе транзистора Q1 для повышения стабильности работы схемы требуется ввести дополнительную цепь RoCo. Цепи контроллера по выводам 6, 3, 16, 15 защищены от переполюсовки питающего напряжения диодом D1.
Схемотехника №3 2001 год.
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

BuffoG's picture

Дополню.
В микросхеме имеется возможность восстановления оптимального для работы двигателя времени опережения зажигания в случае если максимум тока в катушке зажигания не достигает 94% от номинального значения.
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

Artegro's picture

За этот даташин огромное спасибо .
правда я коммутатор пользую 76.3774 но есть подозрение что оно тоже что то умеет

BuffoG's picture

76.3774 построен на КР1055ХП2, это аналог L497 так что по факту коммутаторы эти одинаковые, разница там только в обвязке микросхемы
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

BuffoG's picture

Думаю чтобы схема коррекции УОЗ работала корректно нужно использовать схему коммутации такого типа:

Либо вносить поправку в алгоритм ПО
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

BuffoG's picture

А вообще если контакты 10 и 11 микросхемы посадить на землю, то коррекции УОЗ коммутатором не будет
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

Artegro's picture

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

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

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

BuffoG's picture

Можешь попробовать с ВАЗ-коммутатором проэкспериментировать как я выше писал?
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

Artegro's picture

Скетчи обновленные выложил , собственно под ваз коммутатор так и называется for_VAZ, остались ходовые испытания... но это позже.. , с самодельным коммутатором на месте мотор крутится до 5500.. с ваз коммутатором до 4700.
скетчи как всегда ТУТ

BuffoG's picture

А что за прошивки Стробоскоп и ФУОЗ?
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)

Artegro's picture

Стробоскоп , это прошивка для стробоскопа на ардуине.. там тоже простая схема ардуинка и схема на одном ключе.
а фуоз_вмт это превертыш показаний с датчика холла , нужен если модулятор вырез а не шторка, чтоб подключить без опережения ВАЗ коммутатор, так как если подключить напрямую ДХ потребует перенастроить положение датчика (актуально именно для выреза).

Artegro's picture

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

MrBushmen's picture

Послежу за темой

Artegro's picture

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

kimba's picture

В итоге как выглядит все? Как подключается и т.д. и фотки как на мотаке все встало

Artegro's picture

чуть позже запилю полный обзор по нему. с описанием как и что.
сегодня по делам мотался 200км с лихом полет нормальный.

Artegro's picture

Оживлю темку.
Вылез баг , который раньше не замечал , вылезает он при непрерывном пробеге более часа с лихом, есть подозрение что это из-за обнуления счетчика микросекунд в ардуине , вроде как раз его переполнение происходит митун за 70.
Бак такой что зажигание пропадает вообще на 5 секунд.
Впилил защиту по этому параметру , как только текущее время становиться меньше времени вмт то включается алгоритм как при старте , 2 оборота без расчета опережения с искрой в вмт.
Так же чуть уменьшил прошивку сделав коррекцию по МАР более плавную но при этом линейную, ранее было 5 графиков из которых выбирались значение сейчас идет кореляция между 2-х крайних графиков.
прошивка тут Ing_4_MAP
Длинные ходовые думаю до 4 ноября уже не получатся.
Так что баг ранее не обкатаю, наверно.

Artegro's picture

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

Ребят, Спасибо ОГРОМНОЕ за помощь!

Artegro's picture

Выяснилось что я "лошара" в посте выше описал функционал и изменения которые внес последние а вот сам скеч по ссылке то не обновил.... прошу прощения.
Немного облагородил Скеч с учетом замечаний PCDeath.
изменения которые описаны выше теперь выложил по ссылке.

cptGreen's picture

Приветствую! Сидел на карантине и решил сделать своё зажигание на Ардуино Уно, она была у меня в руках с горсткой светодиодов, кнопок и резисторов.
Писать код учился по видеоурокам Алекса Гайвера но в голове не держется всё сразу, тогда покапал еще и нашел FLprog - тут проще, но гибкости нет. Потом мне подсказали посмотреть вашу тему. Я такой: "О ,черт! Где были мой глаза!?" Короче научился я всякой хрени, а УОЗ так и не придумал как написать. Сижу адоптирую ваш скетч для УНО.

Возникают вопросы типа:
PORTB |= (1 << 1); //Подаем высокий уровень на Р1 , БАХ
Это что еще за вуду? ладно что это я понял, а кто из них номер порта? У меня выход на катушку ( коммутатор ) pin13, так как на нём есть встроенный светодиод, а вход с датчика сделал pin2 потому что на нём есть аппаратное прерывание.

Почитав еще немного, выяснил, что правая единица - это номер порта. Верно?

Artegro's picture

Привет, это вуду PORTB |= (1 << 1); ("1)" это номер порта на который выводим), можно заменить на digitalWrite(13, HIGH); по сути это одно и то же только быстрее.. напрямую вывод в порт без обработок и вызова процедуры (digitalWrite).

PORTB &= ~(1 << 1); этот параметр соответственно меняем на digitalWrite(13, LOW);

по сути из всей адаптации надо переназначить порты в соответствии с даташитом уны и выстроить графики под свой мотор , взяв за основу например мои или сарумана.
и если надо поменять этот параметр analogRead(1); это считывание первого аналогово порта.
переназначить типо такого
pinMode(13, OUTPUT); // выход на коммутатор
pinMode(2, INPUT_PULLUP); // Вход с датчика зажигания.

cptGreen's picture

Отлично! Я с портами я уже так и сделал. Блин, как все просто. А я графики градусов в миллисекунды переводил ручками.
С "вуду" то же понял. В уроках такого не было и я затормозил.

еще два вопроса: финальная версия была уже со "switch cese"? Скетчи с МАР внимательно не смотрел - пока рано. Коррекция делается вводом дополнительной переменной, которая двигает весь график вдоль оси Х ,так?

Активные обсуждения форума

User login