Простой Буст-Контроллер (Boost-Controller) на Arduino
Приветствую, коллеги.
Вопрос контроля наддува для меня становится насущным, ибо вплотную подхожу к запуску турбомотора.
Временно можно воткнуть самодельный механический контроллер.
Но есть острое желание сделать процесс более гибким и поручить его автоматике, т.е. контроллеру на Ардуино.
Исходные данные:
Есть Arduino.
Есть соленоид. На данном этапе планируется использовать клапан продувки адсорбера от ВАЗ.
Есть Датчик Абсолютного Давления (ДАД) - Motorola MPX4250.
http://s017.radikal.ru/i443/1203/cf/a8317fbf3408.jpg
Собственно зависимость напряжения на выходе ДАД от прикладываемого давления на графике:
http://s019.radikal.ru/i614/1203/88/ef9b81483ee0.jpg
Собственно что хочется получить:
- Надо мониторить изменение напряжения на выходе ДАД;
- Выводить значение наддува в Атмосферах на 4х-значный цифровой сегментный индикатор типа CA56-11GWA.
При давлении ниже 101.3 kPa = 1 атмосфер (разряжение в ресивере), значение на индикаторе должно быть отрицательным, например "-0.20", при давлении в 151.95 kPa (1.5 Атмосфера), значение на индикаторе должно быть "+0.50";
- Управлять открытием-закрытием соленода (12V клапан продувки адсорбера) методом ШИМ с частоторой 25-30Hz, изменяя скважность импульсов, опять же в зависимости от напряжения на выходе ДАД. При напряжении на выходе ДАД 1,75В (101,3 kPa = 1 Атм) соленоид должен быть постоянно закрыт.
- Возможность смещения настроенной верхней границы давления наддува на +0,20 при нажатии на кнопку (функция Overboost), с ограничением по времени до 30 сек (если это возможно реализовать) и морганием индикатора.
Нюансы:
Индикатор будет использоваться как проекционный, отражение в лобовом стекле. Сейчас у меня таким образом воткнут магазинный тахометро/вольтметро/будильник с часами. Соответственно картинка должна быть перевернута относительно горизонтальной оси. Но это не проблема сделать самостоятельно, просто переброской отдельных сегментов.
Соленоид, в свою очередь, управляет открытием-закрытием клапана WasteGate? который открывает или закрывает заслонку в горячей улитке турбины, тем самый снижая давление в ней выхлопных газов, и как следствие - скорость вращения лопаток турбины.
Это минимум, который хотелось бы получить.
Знатоки Arduino и мастера скетчей, не откажите в любезности помочь с составлением схемы и написанием скетча. Ибо сам не осилю.
Собрать турбомотор могу (собрал уже), залить поправить прошивку на ЭБУ могу (это тоже), а вот в программировании тёмен изрядно.
Позже можно говорить о дальнейшем развитии проекта.
Подключить еще и сигналы тахометра и датчик скорости, чтобы настраивать давление наддува для разных режимов движения (например в пробке наддув не нужен), и быстрого переключения калибровок контроллера из режима "город" в режим "трасса", например.
P.S.: В дальнейшем, если проект будет работать, можно купить настоящий соленоид от контроллера APEXi, например, или AEM. Он реально скоростной и точный.
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
Составил табличку соответствия давления на датчике напряжению на его выходе.
http://s019.radikal.ru/i604/1203/18/ac8a5566eaa3t.jpg
Так как характеристика линейна, то думаю, можно описать вычисления формулой. Не представляю как это сделать в скетче.
Формула расчета выглядит так:
Vout = Vs*(P*0.004-0.04)
Где
Vout - напряжение на выходе ДАД (1й вывод датчика).
Vs - Напряжение питания датчика = 5,1V
P - давление в kPa
Как делаются подобные вычисления в скетчах для Arduino?
Подскажите, плз.
И еще.
В этой же таблице я расписал для себя, какие сегменты индикатора надо зажигать, чтобы получить на нем адекватное изображение.
Получилось, что этот индикатор у меня не просто сожрет выводы Arduino, а еще и не хватит.
Помню, что был способ сократить количество используемых выводов с помощью дополнительной обвязки. Что и как можно применить?
Где посмотреть пример с, хотя бы, 2х двузначным семи-сегментным индикатором.
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
Можно индикаторы подключить через шифты
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
Ура, я получил один ответ.
Chip, если не сложно - ткните пальцем, где есть примеры подключения индикаторов через шифты к ардуино.
Потыркался по форуму, нашел схему. Это оно, я правильно понимаю?
Получается, что можно использовать 4 выхода с Ардуино.
http://easyelectronics.ru/img/starters/register.GIF
Еще надо разобраться, что и как на них подавать.
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
ИМХО, навряд ли кто то сделает тебе готовое решение. Вывод - самому начинать осваивать программирование Ардуины. Сходи на http://arduino.ru/ в раздел Программирование. Для начала, согласно твоего плана, сделай чтение с аналогового входа. Там и примеры есть. Подсказка - см. функцию analogRead(). Результаты выкладывай, спрашивай что непонятно. Форумчане, которые могут подсказать, здесь имеются.
Удачи.
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
zhserg, благодарю за поддержку.
Я и не думаю, что кто-то загорится идеей разрабатывать устройство для меня. Мне и самому интересно. Собственно вот репу расчесываю :)
Порыскал по нашему форуму.
Нашел тему про индикатор передач.
http://www.compcar.ru/forum/showpost...79&postcount=8
Там используется безрегистровая индикация и индикация с регистром сдвига.
Но не очень понял, как пишутся значения в регистры.
Потом подумалось, что "0" - это зажигаемые сегменты, а "1" - не зажигаемые.
Таким образом можно легко вычислить, какой вывод какому биту соответствует.
А так как количество выводов надо уменьшить, пошел чуть дальше.
Стал сравнивать скетчи и подумалось, что в первом значения представлены в двоичном виде, а во втором - в десятичном.
Нашел конвертер - http://whoyougle.ru/measure/hex/ - попробовал. Точно, оно.
Мне надо использовать четыре семи-сегментных индикатора.
Попытаюсь предположить, что чтобы зажигать не 7 сегментов, а 28, мне надо отдавать на регистры не 8 битов, а 32.
Т.е., чтобы получить на индикаторе значение "0000", надо записать в регистр двоичное значение "11000000110000001100000011000000", что в десятичном соответствует числу 3233857728. Сразу вопрос, можно ли использовать шестнацатеричное исчисление? Просто в скетче оно места меньше займет - "C0C0C0C0" :)
Схему можно представить наверное так (переделал из того тахометра):
http://s44.radikal.ru/i104/1203/0c/c90540cc40d9t.jpg
Прокомментируйте, плз, правильно ли течет моя мысль?
Может есть возможность что-либо оптимизировать?
Далее надо посмотреть что такое вольтметр и как интерпретируются данные.
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
Вот ссылка:
http://arduino.cc/en/Tutorial/ShiftOut
Там схема и скетч для двух регистров. Еще два подключаются аналогично.
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
manu_245, спасибо, разобрался.
Нашел сразу по-русски:
http://arduino.ru/Tutorial/registr_74HC595
Первый шаг был от Chip'a - "шифты", а дальше покатилось :)
Re: Простой Буст-Контроллер (Boost-Controller) на Arduino
Привет дружище!
Давно тоже вынашиваю идею по буст-контроллеру на ардуинке.
В отличие от готовых железок, есть поле для творчества, да и стоимость куда более гуманна.
Только я не понял, а почему ты хочешь сегментный индикатор воткнуть, а не ЖК дисплей от Нокии той же самой?