эмулятор ДПКВ с корректировкой
- Войдите на сайт для отправки комментариев
Вс, 17/10/2021 - 15:02
Всем привет!
Ваяю эмулятор ДПКВ с корректировкой времени задержки.
принцип работы такой: к мозгам автомобиля подключается ардуинка на ноги датчика положения коленвала.
Мозги "видят" ее как датчик.
НО! время задержки (delayMicroseconds) необходимо регулировать.
Решил замерять время прохождения шторки через датчик Холла. Двиг может вращаться от 600 - 5000 оборотов в минуту.
Попробовал добавить к рабочему коду что то типа:
int analogValue = analogRead(A2);
start = millis();
if (analogValue != 0)
{duration = millis() - start; }
previousmillis = duration;
Полная фигня получилась, на модельке в тинкеркаде duration постоянно 0 выдает.
Прошу вспоможения в решении задачи.
Рабочий кусок кода:
int poluperiod; void setup() { pinMode(2, OUTPUT); pinMode(A1, INPUT); } void loop() { int val = 70; // - 200 оборотов poluperiod = map(val, 0, 1023, 2500, 100); for (int a = 1; a <= gear - 2; a++) { digitalWrite(2, HIGH); delayMicroseconds(poluperiod); digitalWrite(2, LOW); delayMicroseconds(poluperiod); } delayMicroseconds(poluperiod * 4); }
Полная фигня получилась, на модельке в тинкеркаде duration постоянно 0 выдает.
конечно фигня.
Во-первых, почему analogRead() если сигнал цифровой?
Во-вторых, миллис слишком груб для этого, используйте микрос
В третьих, САМОЕ ГЛАВНОЕ - пока в основном ходе у вас есть задержки через delay() - никакой подобный код работать не сможет в принципе. А у вас ваш, считай. из одних задержек и состоит
по пунктам:
1. автомобильный датчик холла - аналоговый (если я конечно не ошибаюсь).
2. принято
3. про это не понял. сам по себе приведенный кусок кода замечательно работает, или вы конкретно про замер времени?
по пунктам:
1. автомобильный датчик холла - аналоговый (если я конечно не ошибаюсь).
В любом случае сравнивать результат analogRead() с нулем - это тупиковый путь, там шумы в десятки единиц. Надо сначала померить выход датчика в замкнутом и разомкнутом состояниях и определить границы значений для каждого случая
данный кусок кода замечательно работает, но он блокирующий. Это значит, что никакой другой кусок кода, требующий точного задания или измерения времени, с этим кодом не совместим. Вам надо для начала переписать свой основной код к неблокирующему виду, например на миллис
Датчик холла имеет цифровой сигнал, либо 1 либо 0. С чего вы взяли что он аналоговый .
Вот почитайте
ок) я не настаиваю
Спасибо! прочитаю
код по ссылке #5 тяжело будет для понимания. Вот упростил . (в консоли выбираем обороты, а вначале скетча количество и размер зубьев и впадин)
код по ссылке #5 тяжело будет для понимания. Вот упростил . (в консоли выбираем обороты, а вначале скетча количество и размер зубьев и впадин)
Спасибо еще раз! вчитаюсь, но выглядит несколько сложнее чем нужно мне.
пока, что переписываю рабочий код на версию без delay... но опять не все так как должно быть
создание сигнала в лупе нормально работать не будет , это я уже проходил. на 9000 об мин не успевает нормально сигнал формироваться. Я вам код дал с комментами, что именно там не понятно для пользования?
создание сигнала в лупе нормально работать не будет , это я уже проходил. на 9000 об мин не успевает нормально сигнал формироваться. Я вам код дал с комментами, что именно там не понятно для пользования?
Да в целом в нем все понятно, но для моих целей он несколько избыточен, т.к. двиг свыше 5 000 не крутится + заморочки с параметрами венца (размер зубьев и т.д.)
А как вы хотели подсунуть эбу сигнал без подбора формы сигнала (размер зубьев и количество)? Ведь эбу не понравится сигнал, если не будет соответствовать штатному. Ну если для вас заморочки три цифры ввести, то увольте.
Да в целом в нем все понятно, но для моих целей он несколько избыточен, т.к. двиг свыше 5 000 не крутится + заморочки с параметрами венца (размер зубьев и т.д.)
простите, но из этого ответа ясно, что вы ничего не поняли.
Формирование сигнала в любом случае надо делать через таймер, даже если обороты не слишком велики. В ЛУПе вы никогда не получите равномерной частоты
пока, что переписываю рабочий код на версию без delay... но опять не все так как должно быть
то что вы написали можно заменить этим , сигнал будет такой же
вот еще покомментил немного
Помоги немного компилятору - сделай uint16_t tooth_quantity константой - тогда tooth_quantity*2 тоже будет константой, а не постоянно вычисляться. Хотя, может, он уже и достаточно умный...
А 64 строка, как мне кажется, вообще вот так перезаписывается: if (tooth_quantity*2 - counttooth) > 3 { ... }
согласен, на коленке писал, есть место для оптимизации
sadman, гуд , действительно так намного лучше, теперь и количество пропущенных зубьев можно выбрать
вот еще покомментил немного
на сколько критичен тип данных: uint16_t?
я попытался прогнать вот это: http://forum.vagma.ru/index.php?app=core&module=attach§ion=attach&attach_id=3043
дробную часть отбросило
и еще вопрос: нет ли Вазовских параметров?
вазовский шкив 60 зубов и 2 пропущенных, соответственно на зуб и впадину 360/60 = 6 градусов. зуб и впадина там равны , т.е. по 3 градуса . про дроби не понял , поясните . Ну и на ВАЗе как бы индуктивный датчик, сигнал то там синус, если ещё прямоугольный основной сигнал может и съест ЭБУ , то вот где пропущенные зубья могут быть проблемы.
по ссылке выше бошевский документ, у них на впадину 3.30 и на зуб 2.70.
при тесте дробные значения срезало до целых, и вылазит предупреждение, что не равно 360 градусам.
но это я чисто для интереса попробовал. меня вазовский шкив вполне устраивает
вазовский шкив 60 зубов и 2 пропущенных, соответственно на зуб и впадину 360/60 = 6 градусов. зуб и впадина там равны , т.е. по 3 градуса . про дроби не понял , поясните . Ну и на ВАЗе как бы индуктивный датчик, сигнал то там синус, если ещё прямоугольный основной сигнал может и съест ЭБУ , то вот где пропущенные зубья могут быть проблемы.
этими 3,3 и 2.7 можно пренебречь , сделав 3.0 и 3.0 . Ардуина разрешение сигнала в 0.1 градуса уже не потянет
этими 3,3 и 2.7 можно пренебречь , сделав 3.0 и 3.0 . Ардуина разрешение сигнала в 0.1 градуса уже не потянет
Ясненько, благодарю.
Но теперь следующий вопрос: как прикрутить к этому коду корректировку времени по прохождению шторки через датчик Холла.
За один оборот шторка проходит два раза.
Сомнения по поводу того, корректно ли будет вписывать в loop отсчёт времени по millis?
И второй вопрос: можно ли прописать 500, 700 и т.д. оборотов в применённом типе данных?
Т.е. Вам надо с другого пина также имитировать сигнал датчика холла шторки трамблера? Или вы хотите считывать сигнал со шторки и считать по нему обороты? Я я не понимаю вашу фразу корректировку времени по прохождению шторки.
Конечно же через луп задержка сигнала шторки в конечном итоге задаваться не будет. И да, Обороты любые можно сделать
Чую вы хотите микропроцессорное зажигание на карбюраторный таз прикрутить. Или не, хотите инжектор прикрутить на карбюратор, не используя при этом дпкв, а обойдясь штатным трамблёр ом с датчиком холла.
Чую вы хотите микропроцессорное зажигание на карбюраторный таз прикрутить. Или не, хотите инжектор прикрутить на карбюратор, не используя при этом дпкв, а обойдясь штатным трамблёр ом с датчиком холла.
типа того
Затея так себе. Кроме просто эмуляции сигнала дпкв, этот сигнал нужно жёстко привязать к реальному положению вала. Чтобы легче понять, представьте что прорези на трамблёре только две, т. Е., Допустим, каждая прорезь должна попадать на пропуск зубьев сигнала дпкв. Начинаем измерять момент прохождения прорези, После того как зарегистрировали прорезь, начинаем подавать сигнал дпкв, обороты известны, в сигнал подаются зубчики.... 60 штук. А в реальности допустим обороты в этот момент увеличились, и уже следующая прорезь зарегистрировалась, а мы ещё не все 60 зубов передали, что прикажете делать?
Я уже не говорю про проблему того, что ориг датчик индуктивный и имеет сигнал синуса, а вы ему меандр запихнуть пытаетесь.
Пока получилось вот так:
https://youtu.be/pRWtLwKgsJc
Видео конечно красивое и увлекательное, но можно код глянуть в итоге какой получился? Вы не ответили на вопрос, который я постом выше задал, а он очень важный
Хорошего ответа на вопрос у меня нет. Разве, что надеюсь, что в моем случае это будет не очень критично, т.к. двиг больших оборотов не развивает.
ссылка на код: https://github.com/Nlegion/Arduino/blob/main/DPKV_noDelay_new_m.cpp
Будет критично 100%. В коде нет никакой привязки выдаваемого сигнала дпкв к реальному положению вала (читай вашей шторки). Момент зажигания, слышали про такой термин, дальше продолжать?
И у меня почему то по ссылке на гитхаб 404 ошибку выдаёт, нет страницы
Если делать только впрыск, без зажигания, то возможно как то и будет работать
Упрощать сложный сигнал можно (например делать из 60-2 простой сигнал с прорезями, отбрасывая лишнюю, существующую информацию), а вот наоборот - из простого сигнала, сложный никак нормально не получить, это получается придумывание информации и не соответствует реальности
Ну и мельком в видео заметил ваши добавления в код. Читайте про volatile и атомарность, иначе будет работать совсем не так, как вы ожидаете
И у меня почему то по ссылке на гитхаб 404 ошибку выдаёт, нет страницы
так удалил...
Я поэтому и сообщил, что ТС видимо не в курсе, что по ссылке ничего
MaksVV
не по теме но копать не хочется, спрошу тут, а впрыск форсунки в какой момент открывается? по идее на подходе к НМТ но всё же ...
код:
Пардон, забыл расшарить видимость репозитория
MaksVV
не по теме но копать не хочется, спрошу тут, а впрыск форсунки в какой момент открывается? по идее на подходе к НМТ но всё же ...
существует одновременный , попарно-параллельный и фазированный впрыск, из названия думаю понятно какой как работает. Исходя из вышесказанного, форсунка открывается на определённом такте только при фазированном впрыске. Наиболее вероятно это такт впуска, ну или несколько градусов до него.
NLegion, пост #35, внимательно...
MaksVV
не по теме но копать не хочется, спрошу тут, а впрыск форсунки в какой момент открывается? по идее на подходе к НМТ но всё же ...
существует одновременный , попарно-параллельный и фазированный впрыск, из названия думаю понятно какой как работает. Исходя из вышесказанного, форсунка открывается на определённом такте только при фазированном впрыске. Наиболее вероятно это такт впуска, ну или несколько градусов до него.
благодарю, почитаю, а то я только ГАЗ-51 знаю