ФУОЗ по дешману
|
на сайте:
ноя-08
нахождение:
Москва, Ясенево
|
|
|
26-11-20 18:13
|
|
Ребята на базе ардуино запилили фуоз, дешево и просто |
|
|
на сайте:
ноя-08
нахождение:
Москва, Ясенево
|
|
|
26-11-20 18:13
|
|
Ребята на базе ардуино запилили фуоз, дешево и просто |
|
Да можно попробовать ,
еще можно попробовать например не графики переключать а менять их угол наклона, ..
мне в сарумане например разница в работе графиков неощутима вообще на нагрузке но вот мотор то тупил то наоборот (но вибрирует одинакого) (видать это применительно к750, или моего изготовления сарумана)) потому и думаю попробовать на ардуине мож я криворукий паятель), занижение графика целиком не вижу смысла так как например с увеличением нагрузку вибрации росли прям пропорционально , и общее снижение графика на 10 градусов толку не давало , а вот локально в нужный момент понижать график на 0-20 в зависимости от нагрузки думаю смысл имеет потому и смотрю на МАР.
Выпала тут пол часика свободных..
Дописал Скеч , на 2 графика с обработкой кнопки переключения графиков , 2 графика взял с сарумана "золотая середина" (по умолчанию) и "колясыч" при замкнутой на землю кнопке.
Поправил условие обработки первого оборота двигателя. в первые 2 прохождения искра идет в вмт. далее считается как положено.
Поправил Скеч с МАР график м72 отсечка на 5200 под датчик МАР 45.3829 газель по параметрам он как раз от 0.2 до 1 бар и напряжение 0.8-4.8 соответственно.
П.С.
расчет искры для первого скеча сделал как в сарумане до 7000 об/м далее отсечка.
Элиас , жду твоих конструктивных коментов.
Откатал на стенде прошивки с коммутатором 95.3734, искра при старте будет всегда, это особенность платы, при старте стартует бутлотер который и дает сигнал на ногу выхода, и это не победить будет Бах при включении зажигания. Подправил прошивку под вырез, так же программно на пины входа подтягиваем +, дает более стабильную реакцию на датчик холла.
осталось обкатать на мотоцикле. все свежие скечи по ссылкам в посту выше , аналог сарумана называется sketch-461_NO_MAP...
так же на вход датчика мап надо подтягивать отдельным резистором на 10кОм gnd иначе при отключеном датчике на порту начинаются самопроизвольные показания и угол коррекции начинает плясать. подтягивание встроенным резистором толку не дает.
ТЕсты на мотоцикле показали несостоятельность данный прошивки , холостые работают четко , но набор оборотов сопровождалось пропусками зажигания и т.п.
После нескольких тестов и правок в итоге получилась рабочая прошивка а-ля саруман (....no_map), протестировал пока с одним графиком, пока заводка и работа на холостых в разных режимах, прошивку можно взять в папке папке.
Далее буду выкладывать по мере проведения работ.
Поглядел эту версию.
Не понял, зачем ты выпилил внедрённую тобой же защиту от обратной вспышки при включении зажигания на вращающемся моторе.
Ну и плюс есть поле для оптимизации. ИМХО, надо сначала закончить с этой версией, добившись максимальной производительности и минимального веса, а потом уже внедрять MAP.
Кнопка - штука хорошая, но вход надо защищать от случайного включения на 12В. И это уже не программно...
Кстати, шаг в 1000 об/мин не большеват ли, как считаешь?
Нет желания уменьшить его до 500, а в идеале - до 200 об/мин?
Потребуется, конечно, более детально прописать графики и потратить дополнительно 36...120 байт, но, может, овчинка стоит выделки, чтобы приблизиться к целевому графику от текущей ломаной линии?
Peacedeath подкрался незаметно, но слышен был издалека
Когда прошивка нормально не заработала, первый запуск.. вообще очень странно прошивка себя вела , потом я из нее выпилил почти все до изначальной и добавлял по немногу с тестами на мотоцикле, до внедрения защиты и проверки просто не хватило времени.
(Я долго сидел сравнивал изначальную прошивку и свою, так и не понял почему она нормально не заработала, может не надо писать программы в 4 утра как вариант..))
На выход кнопки можно вкорячить резюк на 1кОм и стабилитрон на 5В или 4.5, можно конечно сделать обвязку с транзисторным ключом что то типо кт3102, это точно избавит от возможного высокого напряжения , но ИМХО достаточно резистора, так как 12В на этом порту может взяться только от криворукости и перекоротившей проводки . если кнопка выносится на руль .
По оптимизации , наверняка поле там не паханное , но я просто не вижу что и как можно поправить, вроде все лаконично и лишнего нет, может конечно на case перейти но по моему это одно и тоже что и else if по скорости))
ОК.
Значит, будем допиливать...
Ибо защита от обратной вспышки, ИМХО, нужна.
Да, резистора 1 кОм должно быть достаточно. Высокое напряжение там может появиться только если обмотать провод кнопки вокруг катушки / ВВ провода, или при электростатическом разряде.
Peacedeath подкрался незаметно, но слышен был издалека
Защиту внедрим , тем более обработка её достаточно простая.
А вот по оптимизации мне знаний не хватит , жду предложения ))
Внедряй и кидай ссылку на обновлённую прошивку.
А я займусь оптимизайцами.
Peacedeath подкрался незаметно, но слышен был издалека
Немного допилил после просмотра обучалок (не смотрите обучалки перед сном.. сон прогоняет) , переделал считывание с пинов на непосредственное и непосредственный вывод на пины, в теории должно увеличить скорост ьработы прошивки , так же добавил защиту на первый оборот Папка со скетчами , теперь при первом обороте всегда искра бьет в вмт , а далее уже идет полноценный расчет.
В прямую работу с портами лезть стоит, когда всё остальное уже вылизано. Функции чтения порта и записи в порт стоят не то чтобы очень дорого, но код моментально перестаёт быть читабельным, и нужно выносить все операции с портами в отдельные функции. Но начинание похвальное.
Порадовали строки 36, 41 и 47 - сэкономил сразу 8 байт памяти ОЗУ относительно предыдущей версии. Было любопытно, когда же мы избавимся от одной дублирующей переменной и излишнего размера двух других. И вот оно пришло.
Правда, я не очень понимаю, зачем всё же переменным rpm и ignitionDegree знак - неужели у нас может быть отрицательное значение скорости вращения или УОЗ?
Также правильно сделал, что убрал из конца присвоение переменной oldtime значения текущего времени и перенёс его к расчёту скорости вращения, где оно и должно быть - таким образом ты исключил влияние всей математики на временную метку. Теперь время ставится чётко (есть, конечно, нюансы, но о них позже).
Плюс после этого переноса ты увидел, что при присвоении значения oldtime можно не обращаться к функции micros(), а взять значение из уже существующей переменной VMTtime, что дополнительно сэкономило несколько тактов и повысило точность измерений.
Это всё мелочи, но в сумме они дадут прирост производительности и свободное время камня, которое можно будет применить куда-то ещё.
И рекомендовал бы тебе обратить взор на строки 111...113 вкупе с 116...119
Если правильно с ними поступить, то будет сэкономлено ещё несколько байт флеша.
Peacedeath подкрался незаметно, но слышен был издалека
Спасибо . учел замечания , сделал правки , выносить считывание и вывод на порты в отдельные функции не стал, из-за этого растет размер прошивки. Сейчас доковырял алгоритм по условиям от rpm , для понимания страшновато выглядет но теперь до каждого значения у нас не более 3 прыжков , 4 прыжка только до самых медленных значений, по идеи программа должны быстрее отрабатывать теперь условия .
скеч в той же папке по ссылке выше обновил.
Провел полноценный ходовой тест, прошивка на 2 графика работает , графики переключаются, на колясочном графике лучше тянет меньше трясет, что и не удивительно для касика с каляской и 9-кой. работает стабильно, заводится нормально, работает стабильно.
Осталось откатать прошивку под мап. но тут пока под рукой датчика нет.
Молодец.
Спасибо, что не забросил.
А что там в первичной цепи катушки-то?
Коммутатор с Холлом или контакты?
Если коммутатор с Холлом, то пойдёт, но количество правок зависит от расположения шторки, её формы и расположения фронта.
Peacedeath подкрался незаметно, но слышен был издалека
для работы с 4-х целиндровым надо либо делать двойную систему на 1,4 и 2,3 кател , отдельные датчики, платы и коммутаторы, или править прошивку. можно например только дописать расчет до 14000 оборотов и сделать график более пологий раза в 2 (так как модулятор имеет 4 лепестка и соответственно обороты умножаем на 2).
Не нужна там двойная система. Трамблёр же.
Достаточно будет повесить шторку с двумя лепестками на коленвал или с четырьмя - на распредвал, задать нужные графики и скорректировать расчёт скорости вращения.
Обороты считать как 30000000UL/diffTime, т.к. между фронтами теперь не 1 оборот, а 0,5 оборота.
Правильнее весь этот праздник для всех версий будет записать так:
#define FRONTS_PER_ROTATE 1 // Количество прохождений шторки через датчик за 1 оборот КВ
#define MICROS_IN_MINUTE 60000000UL // Количество микросекунд в минуте
#define TIME_FOR_RPM_COUNT (MICROS_IN_MINUTE / FRONTS_PER_ROTATE) // определяем коэффициент для расчёта скорости вращения в зависимости от количества импульсов на оборот
И в строке 65:
rpm = TIME_FOR_RPM_COUNT / diffTime;
Теперь при установке на четырёхцилиндровый мотор с трамблёром достаточно задать константу
FRONTS_PER_ROTATE 2
И вуаля, обороты считаются корректно, и графики можно рисовать нормальные.
Peacedeath подкрался незаметно, но слышен был издалека
тут уже попахивает универсальностью .. предлагаю тогда так
#define ROTATE_IN_CYCLE 2 /Колличество оборотов каленвала в полном цикле мотора
#define CYLNDERS 4 // Количество цилиндров
#define MICROS_IN_MINUTE 60000000UL // Количество микросекунд в минуте
#define TIME_FOR_RPM_COUNT (MICROS_IN_MINUTE * ROTATE_IN_CYCLE/ CYLNDERS ) // определяем коэффициент для расчёта скорости вращения в зависимости от количества импульсов на оборот
Погоди-ка... А зачем так?
В полном цикле мотора всегда 2 оборота коленвала, если это 4Т, и 1 оборот - если 2Т.
Если зажигание будет установлено на одноцилиндровый 4Т мотор со шторкой на коленвалу, то расчёт скорости по этой формуле сломается - значение будет в 2 раза выше истинного. Именно поэтому предлагаю завязываться на параметр "Количество прохождений шторки в датчике за 1 оборот коленвала".
Peacedeath подкрался незаметно, но слышен был издалека
так мы можем считать и 3 и 5 и 6 и 8 и 12 цилиндров , универсальность.
В случае с 1 цилиндровым и шторкой на кв , у нас получается всегда одна холостая искра ..
тогда мы должны учитывать полный цикл (обычно 2 оборота) на колличество прохождений шторки (которое обычно равно цилиндрам) .
#define ROTATE_IN_CYCLE 2 //Колличество оборотов каленвала в полном цикле мотора
#define CYLNDERS 4 // Количество цилиндров, или прохождение шторки за полный цикл
#define MICROS_IN_MINUTE 60000000UL // Количество микросекунд в минуте
#define TIME_RPM_COUNT (MICROS_IN_MINUTE * ROTATE_IN_CYCLE / CYLNDERS) // определяем коэффициент для расчёта скорости вращения в зависимости от количества импульсов на оборот
В предложенном мной варианте ровно так же могут обрабатываться что 3-цилиндровые, что 12-цилиндровые моторы с трамблёром. Только есть возможность ещё и одноцилиндровые включить в тот же ряд без каких-либо условностей. Холостая искра - она и на наших родных оппозитах есть, проблем вроде бы не вызывает.
Но спорить далее не стану, ибо это не принципиальный вопрос, и влияет исключительно на удобство редактирования прошивки и задания констант под конкретную конфигурацию.
Peacedeath подкрался незаметно, но слышен был издалека
Ну это да ... ))
Куда интереснее предложения по оптимизации и графикам , их наверно и стоит сделать с шагом 250.
А кстати да , будет работать. если ты искру бегунком трамблёра будешь раздавать по котлам
Допилил прошивку , шаг расчета 250 оборотов
кривые зашиты из сарумана ,
стантарт по умолчанию и калясыч при замкнутой на - пине 2 (кнопка переключение графиков)
поиск сделал алгоритмом в котором до любого значения оборотов у нас не более 6 сравнений . при размере таблиц в 25 значений
осталось провести тестовые испытания
прошивка как всегда NO_MAP ТУТ
так же выложил туда же екселчик с графиками , по которому подбирал промежуточные занчения .
П.С.
Как точно узнать сколько микросекунд занимает полный цикл программы сколько самый малый цикл . ожидания и сколько проходит времени от срабатывания датчика в вмт и сигналом на коммутатор..
Для этого надо осциллограф мегагерцовый+ иметь.
Вот приедет мне платка эта - и расскажу по таймингам, что и сколько занимает.
Кстати, а как ты вычислял промежуточные значения для графика?
Я посмотрел на Сарумановские графики и увидел там шаг 1000 об-мин, а всё, что между ними - прямая линия, которая описывается функцией MAP
Peacedeath подкрался незаметно, но слышен был издалека
промежуточные подгонял в екселе чтоб был наиболее ровный, красивый график.
Протестировал на мотоцикле последнюю прошивку под 2 графика, работает стабильно, графики переключаются (заметно по максимальным оборотам, для к750 график более пологий лучше). считаю прошивку а-ля саруман законченной, дальнейшую оптимизацию в какую сторону копать уже не вижу.
На её базе добавлю обработку МАР, но это уже ольше, сначала надо сделать место отбора вакуума, подключить МАР и получить значения на разных оборотах , и потом исходя из них сделать зависимость.
А как ты переключение графиков реализовал физически, какой вывод платы нужно на землю замыкать?
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)
Выходы платы :
Р0 = вход с датчика холла или оптического
Р1 = выход на коммутатор
Р2 = выход на кнопку переключения графиков (кнопка замыкает, размыкает - бортсети), между кнопкой и этим выходом желательно припаять последовательно резистор на 1КОм (защита от замыкания на + 12в от бортсети)
GND = - 12в (бортсети)
VIN = + 12в (бортсети)
видео с теста зажигания https://youtu.be/tC2brxl9h3I
А какого вида шторка? Вырез или пластина? Ну и в целом, как настраивать, сам процесс?
прошивка сделана под вырез в шторке , размер выреза непринципиален главное симетрия (у меня стоит модулятор от сарумана, так как он был и городить отдельный смысла нет).
для того чтоб сделать прошивку для работы со шторкой надо поменять один параметр
строка 146
if (modulator == HIGH) { // HIGH для активного элемента вырез, LOW для активного элемента пластины
Выход активного элемента из датчика должен быть +- ВМТ , далее корректируем под свой мотор.
В момент вхождение активного элемента в датчик , на плате загорается светодиод , в момент выхода гаснет.
заказал, прошил, скрестил воедино с оптодатчиком. На столе работает. Поставлю на мотоцикл и стробоскопом гляну работает ли и как.
обрати внимание особенно на режимы от 700 до 1500. жду результатов.
измерения показаний с МАР на работающем двигателе показали изменения переменной нагрузки в среднем от 800 до 1021 , показания менее 800 там не интересны , потому что достигаются только на сбросе газа , а вот показаний более 1021 быть не может,
исходя из этого поправил скеч с обработкой МАР, новую версию выложил по ссылке выше.
Ты только скажи какой MAP-sensor был взят и как его цеплять к контроллеру. Ветка разрослась и не у всех хватит умения все внимательно прочесть.
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)
Скеч NO MAP подключение
Выходы платы :
Р0 = вход с датчика холла или оптического
Р1 = выход на коммутатор
Р2 = выход на кнопку переключения графиков (кнопка замыкает, размыкает - бортсети), между кнопкой и этим выходом желательно припаять последовательно резистор на 1КОм (защита от замыкания на + 12в от бортсети)
Скеч MAP :
MAP модель Gaz 45.3829 (и его аналоги ссылка на exist)
Подключение, так как датчик работает с 5В , подключается к плате следующим образом:
5V = первый контакт с МАР подключаем
GND = второй контакт с МАР подключаем
Р0 = вход с датчика холла или оптического
Р1 = выход на коммутатор
Р2 = третий контакт с МАР подключаем (за место кнопки переключения графиков)
Общее для всех прошивок :
GND = - 12в (бортсети)
VIN = + 12в (бортсети)
Дублирую еще раз Папка со скечами
по описанию плата переваривает до 17В так что можно питать из любого места ,но у меня именно так и сделано как ты предлагаешь , плюс разъемы сделаны так что можно соединить напрямую коммутатор с датчиком если вдруг ФОЗУ выйдет из строя (еще для сарумана это делал).
Это дань, которую приходится платить за возможность прошивки по USB.
При подаче питания запускается bootloader, который ожидает связи по USB и поступления данных в порт. При отсутствии данных в течение 5 секунд - запускает основную программу, зашитую пользователем.
Peacedeath подкрался незаметно, но слышен был издалека
Ну почему же? Можно. Можно отказаться от работы по USB. Это как два пальца - достаточно шить не через bootloader, а через ISP.
Можно уменьшить тайм-аут ожидания связи по USB, но надо перепилить bootloader, и есть риск нестабильного коннекта, если ПК не успеет определить, что на шину что-то повешено, и попытаться опросить устройство.
На nano тоже есть свой bootloader, но какой у него тайм-аут - ХЗ.
Peacedeath подкрался незаметно, но слышен был издалека
Всем привет. Кто-нибудь запускал digispark от датчика холла или все на оптике?
У меня почему то плата не видит от него сигнал, только если шторка очень медленно проходит через датчик и то как то с запозданием искра бьёт. Из контролера сигнал на коммутатор идёт, при включении питания искра бьёт несколько раз. Без платы сигнал от ДХ на коммутатор идёт без проблем (двиг заводится).
Добро попробую к плюсу. Подтягивал на минус почему-то, не помогло.
Спасибо! Подтянул на плюс, помогло. Завелся, правда работает не больше минуты и сам перезагружается контроллер либо во все зависает. Видимо косячный попался. Или что это может быть?
посмотри насколько качественно подключено питание к контроллеру, скорее всего контакты где то..
у меня подключен с датчиком холла , ничего подтягивать не надо кроме разьве что резистора 1кОм в разрыв сигнального провода (защита от замыкания) , прошивка просто сделана под вырез в модуляторе , если надо под шторку то меняется один параметр , он в прошивке помечен.
Задержка при включении 6 сек на страт бутлодера ИМХО незначительна. плата проверена мной на колясыче , поездка порядка часа на прошивке аля саруман , проблем не выявила.. , с МАР не тестировал .. времени нет совсем..
Тупо "в лоб" MAP не прикрутить - функция чтения аналогового входа analogRead() сто́ит 120 микросекунд - при 6000 об/мин это почти 3 градуса поворота коленвала. Если делать усреднение хотя бы из 5 считываний, то это уже 15 градусов.
Понадобится высчитывать промежуток, когда можно уделить столько времени на чтение, и только тогда опрашивать аналоговый вход.
Peacedeath подкрался незаметно, но слышен был издалека
видать ДХ разные , только что проверил с датчиком 671.3855, работает стабильно .. + со старым ДХ тоже работает .. хз какая модель помню много лет назад покупал для 8-ки. тоже работает нормально , показания на сигнальном проводе с ДХ - (масса) и +5 (при прохождении модулятора соответственно), подключено все без подтяжек резисторами.. хотя чтоб не подтягивать отдельно резистором сход с ДХ его можно подтянуть встроенным в микрухе
pinMode(0, INPUT_PULLUP); // Вход с датчика зажигания. подтянули на + по умолчанию
Проверку на столе этого параметра провел , с ним работает.
так в коде ж вычисляется время в процедуре расчета 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 показаний , это тоже избавит от сильных всплесков.
Должно быть, выход активного элемента из датчика в ВМТ.
"буса" ты имеешь в виду минивен? ты прошивку под 4 цилиндра правил ?
#define FRONTS_PER_ROTATE 1 // Количество прохождений шторки через датчик за 1 оборот.
Для 4 цилиндров должно быть #define FRONTS_PER_ROTATE 2 // так как на 4 цилиндровых по 2 искры на один полный оборот КВ
странная тема, прошил плату только у меня с разъемом микро юсб, с прошивкой саруман стреляет то в глушак то в карб ( ручное опережение двигал) с прошивкой откастомкульт все заработало сразу, шторка от совека ( цилиндр с вырезами) в чем может быть причина? (146ю строчку менял)