PDA

Просмотр полной версии : Эмулятор (замена) ручки управления круиз-контроля. (на Arduino)


kostyamat
12.05.2017, 18:54
Эмулятор ручки управления КК на Arduino Nano
Теория, программа, принципиальная схема
Теория: Конструктивно, ручка круиз контроля представляет собою две инфо.шины+один "земельный" провод.
Между инфо.шинами и "землей" одновременно-попарно включаются некие резисторы, которые формируют некий потенциал, в зависимости от нажатий на кнопки. Если все кнопки отпущены, между каждой из двух инфо.шин и "землей" имеем сопротивление 20.5 КОм и напряжение (потенциал) 4.55 вольт. Таким образом ЭБУ автомобиля узнает о наличии ручки КК.
Со стороны ЭБУ, система считывания сопротивления резисторов представляет собой два АЦП канала, входы которых подтянуты к +5в через резисторы 2КОм.
По крайней мере на это указывают рабочие промеры напряжения на выводах родной ручки КК, при ее наличии. Из этого вывод: ЭБУ не измеряет резисторы, ЭБУ измеряет напряжение на этих двух входах АЦП. Эти напряжения формируют резистивные делители, сформированные резисторами подтяжки к +5в в АЦП ЭБУ и резисторы в родной ручке управления КК.

Мне родную, правильную, ручку купить так и не удалось, к тому же по дому валялась относительно дешевая, и легко доступная, ручка управления КК от Chrysler PT Cruiser. Эту ручку я купил по ошибке. Эта ручка КК, имея три вывода, фактически является одноканальной, ее инфо.шины попросту запараллелены. Но при этом, на место в руле, эта ручка встает как родная.

Идея: Из написанного мной выше, я пришел к выводу, что переключение режимов КК в ЭБУ осущевствляется некими напряжениями на двух входах АЦП ЭБУ, входы которых выведены на 6-ти пиновый разъем "часовой пружины" руля, меняющимися при нажатии кнопок ручки управления КК. Хмм...

Подумав и почитав, я принял решение делать эмулятор-переходник, с ручки PT Cruiser на двухканальною родную, на базе Arduino.

Затратность: Схема получилась проста до безобразия. Это видно на рисунке, всего три резистора, два конденсатора, +Arduino Nano, стоимость всех деталей на Aliexpress состаляет всего 3$, плюс ручка КК PT Cruiser, которую можно купить на разборках от 10-15$. Общая стоимость 30% от цены оригинальной ручки КК для нашего барашка.

Схема, сборка и как работает: Ручку от PT Cruiser подключаем ко входу АЦП ардуино А0, подтянутого к +5в, снимаемого с внутреннего стабилизатора arduino, через резистор 10кОМ. Arduino читает и оцифровывает напряжение сформированное резистивным делителем резистора подтяжки и резисторами внутри ручки, при нажатии на кнопки.
Используется функцияdata=analogRead(analogPin);
При оцифровке напряжения получаем некое цифровое значение, которое пропускаем через фильтры if <> и если какая нибудь кнопка на ручке нажата, записываем в цифровые выходы arduino D6 и D9 значения ШИМ модуляции, соответствующие нажатой кнопке.
Используется функция{analogWrite(pin6_OUT_D9, значение_ШИМ+corr_D9); analogWrite(pin4_OUT_D6, значение_ШИМ+corr_D6);}
Переменные corr_D9 и corr_D6 введены в программу для возможности общей коррекции значений на выводах D6\D9. Например при разбросах значения внутреннего +5в у разных плат ардуино, или разбросах параметров резисторов относительно указанных на схеме.
Итак, ШИМ снимаем с выводов D6 и D9 через сглаживающую RC цепочку, призванную убрать "пилу" ШИМ в выходном напряжении.

Скетч (программа) для платы Arduino Nano:
int analogPin=0; //пин для подключения ручки КК от PT Cruiser, A0 на плате Ардуино, подтянут через резистор 10КОм к выводу +5 на плате.
// Второй вывод ручки подключается к GRND Ардуино

int data;
int corr_D6;
int corr_D9;

int pin4_OUT_D6 = 6; // 4-й вывод на разъеме "часово пружины" руля, D6 на плате Ардуино.
// 5-вывод на разъеме "часовой пружины" является "массой" и подключается к выводу GRND Ардуино.
int pin6_OUT_D9 = 9; // 6-й вывод на разъеме "часово пружины" руля, D9 на плате Ардуино.
// Последовательно к каждому из выходов D6 и D9 нужно включить по резистору 470 Ом и по конденсаторк 4.7мФ Х 10 вольт на "землю", вывод GRND Ардуино.

// D6&9 <-----[ 470 ]-----+----------------> Pin 4 & Pin 6 в разъеме "часовой пружины" руля Додж Калибер.
// ¦+
// === 4,7mF x 10v
// ¦
// " Grnd

// вывод GRND на плате ардуино.

void setup()
{
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение)
Serial.begin(9600);
pinMode(pin6_OUT_D9, OUTPUT); // sets the pin as output
pinMode(pin4_OUT_D6, OUTPUT); // sets the pin as output

corr_D6=0; // Вносит поправку сразу во все значения напряжения на выводе D6 Ардуино.
corr_D9=0; // Вносит поправку сразу во все значения напряжения на выводе D6 Ардуино.

}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
if (data>=400 && data<=1023) {analogWrite(pin6_OUT_D9, 231+corr_D9); analogWrite(pin4_OUT_D6, 231+corr_D6);} // Normal - 4.55v pin 6 and 4.55v pin 4
if (data>=50 && data<=80) {analogWrite(pin6_OUT_D9, 13+corr_D9); analogWrite(pin4_OUT_D6, 182+corr_D6);} // On/Off - 0.90v pin 6 and 3.75v pin 4
if (data>=140 && data<=180) {analogWrite(pin6_OUT_D9, 159+corr_D9); analogWrite(pin4_OUT_D6, 38+corr_D6);} // Coast/Set - 3.35v pin 6 and 1.35v pin 4
if (data>=300 && data<=350) {analogWrite(pin6_OUT_D9, 198+corr_D9); analogWrite(pin4_OUT_D6, 93+corr_D6);} // ACC/Res - 4.00v pin 6 and 2.25v pin 4
if (data>=0 && data<=40) {analogWrite(pin6_OUT_D9, 67+corr_D9); analogWrite(pin4_OUT_D6, 137+corr_D6);} // Eruise/Cansel - 1.80v pin 6 and 3.00v pin 4
delay(50);
}

37871

ПС. Установку Arduino ID, драйвера, настройки COM-порта я описывать не буду, этой информации море в сети. И поверьте - там все просто. Под силу любому человеку, умеющему читать и включать ПК. :)
Например, тут (http://arduino.ua/ru/guide/Windows) это расписано очень доступно, а тут (https://www.youtube.com/watch?v=yYsFdyf-kjg) можно даже посмотреть.

На этом первая часть закончена. Во второй части будет фото-отчет об установке и использовании.

kostyamat
12.05.2017, 20:51
Часть вторая
Установка в автомобиль


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

Схема работает сразу, но если есть желание проверить все ли в порядке, можно собрать простенький эмулятор входов ЭБУ на двух резисторах по 2кОм, я делал на макетке, если ее нет - не страшно.
37883
37884

Включение эмулятора ЭБУ такое: один вывод резистора 2кОм вешаем на +5в. (нужно взять с вывода +5v на ардуино), а второй вывод включить на выход схемы (пин 5 и 6 на схеме выше в посте), повторить для второго вывода. Запитать ардуино (вывод Vin и GRND) напряжением +12 вольт. Промерять напряжения на выходах на соответствие напряжениям, указанным в этой PDF (http://www.rostra.com/manuals/250-9001_Form5071H.pdf) на последней странице, нажимая ручку в разных режимах. В состоянии покоя, напряжение должно быть 4.55 вольт +- 0.1 вольт.

Монтаж в машину: для начала снимаем крышку, закрывающую нишу под рулем. Находим жмут проводов, идущих от рулевой колонки и в нем серо\белый провод - это провод идущий от пин 1 разъема "часовой пружины" в руле. Он нам будет нужен для подачи в руль питания АСС +12 вольт, для ардуино. Сам АСС можно найти так 37887 Обрезаем серо\белый от жмута уходящего в глубь и подсоединяем к АСС 37888.
Тут нужно сразу понять и определится. Если у вас на руле есть кнопки управления магнитолой, то пин 1 разьема занят этими кнопками. Тогда саму плату ардуино лучше размещать и подключать внизу, а не в руле. Вам придется найти и разрезать два провода приходящих от пин 4 и пин 6 разъема "часовой пружины" (цвета ищем по PDF выше). Любой один, из двух отрезанных, уходящих в руль использовать для подключения ручки КК от PT Cruiser. А концы, уходящие в глубь машины подключить к выходам платы эмулятора КК, согласно схеме в первом сообщении. GRND и ACC можна взять тут же рядом. Может так и лучше (лично я теперь считаю что лучше).
Я же выбрал способ монтажа ардуино в руль. И вот что получилось.
37885
37886
37889

Надо иметь ввиду:
1) что на Евро-дизелях (наверное и на бензинках, проданных в ЕС) круиз-контроль программно отключен в доступных опциях ЭБУ . Для включения понадобится либо дилерский сканер, либо чувак с крякнутым Launch EasyDiag, как у меня. (включается через пункт Variante)

2) так как плата не пассивный элемент, а целый микроконтроллер, происходит задержка на загрузку и начало исполнения кода. Соответственно, это вызывает ошибку ЭБУ, которую видит сканер. Ошибка звучит приблизительно так "Высокий уровень на выводе управления скоростью SW..", ошибок будет две, по количеству инф.шин АЦП ЭБУ, читающих оригинальную ручку КК.
Причина ошибок в том, что ЭБУ, уже при положении ключа I, просыпается и опрашивает всю свою периферию, в том числе и ручку КК, а ардуино только включилось с "холодного" (подали АСС) и еще не успело включится в работу.

Но, как показала практика, это НИКАК НЕ ВЛИЯЕТ НА РАБОТОСПОСОБНОСТЬ круиз контроля. ЭБУ читает ручку даже если словил ошибку ее отсутствия. :bk:
Но, если эти ошибки вас смущает, включайте ардуино на постоянные +12 вольт от аккумулятора, ошибка формироваться не будет. По расчетам, ардуино, в этом случае, будет разряжать ваш аккумулятор на 1 вольт на протяжении 200-300 часов, не смертельно.

ПС. На публику выложена вполне работоспособная наработка для использования совместно с ручкой КК Chrysler PT Cruiser. Но после программной, и возможно схематической, доработкой, этот эмулятор сможет работать практически с любым способом управления, как то: не родные резистивные и многоканальные ручки КК, всевозможные кнопочные матрецы, блютуз кнопки удобно устанавливающиеся на руль, даже на радиобрелке.

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

OtherDima
14.05.2017, 00:09
при сигнале снятия сигнализации - дать питание на ардуино :)
чтобы до момента вставления ключа - она запустилась
так же можно палить сигнал АСС и если его минут 10 нет - вырубить ардуино:)

kostyamat
14.05.2017, 05:53
OtherDima, то что вы говорите вертелось у меня в голове. У нас "мозги" сигналки, похоже в панелей приборов. Но, реализация мне показалась слишком уж сложной. Это либо нужен ещё CAN-шилд для ардуино (+2.5$), потом найти пид и разобрать данные шины CAN, чтобы вычитать состояние сигналки. Тогда можно было-бы задействовать систему сна ардуино (нет пида - спим), потребление упадет где-то до 3мА, при чем все эти мА сожрёт сам стабилизатор на плате, процессор же будет брать несколько мкА.
Второй вариант - перерыть приборку, найти какую-то точку на которой появляется напряжение, в момент снятия с сигнализации, и им же запитать ардуино, через транзисторный ключ, при этом оттуда же с приборки можно и +5в украсть.
Но мне это показалось не существенным, исходя из того, что ошибка чтения ручки КК, при старте ЭБУ, не влияет на работоспособность. Хотя, если кто-то "распотрошит" приборку и найдет сигнал (достаточно любого, вплоть до 1 вольт), не обязательно даже 0-5 вольт, может быть даже 2.5-3.5 вольта, главное видимое и четкое изменение сигнала при закрыл/открыл, - я готов поправить скетч и дорисовать нужное на схеме, для реализации режима сна.

добавлено через 23 минуты
Исходя из того, что ручкой круиза управляет целый процессор на 16мГц, возможности которого используются всего лишь на 0.5%, и всего лишь три вывода из 30. Принимаю идеи на счёт того, чем ещё можно было бы нагрузить ардуино (ставить в руль оказалось таки плохой идеей, буду переставлять в нишу под руль). Самому пока пришла в голову идея сделать адаптивный круиз. Идея основана на 5€ китайском радаре на 10 метров. Понятно, что он не получится как у Тесла, самый дешёвый лидар стоит 170€ + доставка, и бьёт на 40 метров. Но для движения в потоке, шаг в шаг, и десять метров сошло бы. Вот думаю, стоит или нет этим заморачитватся?

OtherDima
15.05.2017, 13:15
Самому пока пришла в голову идея сделать адаптивный круиз. как тормозить будешь?:)

Идея основана на 5€ китайском радаре на 10 метров.10 метров это ты считать уже в в бампере другой машины

ВОПРОС
реально ли сделать (как оно передаёт скорость в мозг?)
сделать 2 кнопки запрограммированной скорость 77км.ч. и 107км.ч.
?:)

kostyamat
15.05.2017, 15:47
как тормозить будешь?
Сбросом газа само собой, плюс побудка водителя громким и противным бузером.

10 метров это ты считать уже в в бампере другой машины
это да. Но есть шанс резко увеличить дальность радара с помощью волновода. К тому же это сузит угол со 180 до градусов 30, что нам и надо. Думаю метров 30-40 вытянуть можно.

ВОПРОС
реально ли сделать (как оно передаёт скорость в мозг?)
сделать 2 кнопки запрограммированной скорость 77км.ч. и 107км.ч.
? нет предела совершенству. Кнопок хоть десять, скорость придется с CAN-шины читать, есть приблуда для ардуино для этого - CAN-shild называется, стоит 2$. Я себе купил, правда для другого проекта, и в другую машину. У нас на CAN-шине есть все, главное пиды найти, и данные расшифровать, или описание протокола найти. ))
Вообще-то, если ставить ардуино в нишу под рулём, на нее можно много заданий повесить, например автодоводку стекол при установке на охрану, адаптивный круиз, что-то ещё... пока не придумал что. ))

Очень хотелось бы реализовать одну штуку - зеркала у нас маленькие, а обзорность как в танке. Есть желание научить зеркала опускаться при парковке задом, а потом возвращаться в первоначальное положение. Но там есть нюансы, пока думаю как это сделать.

OtherDima
15.05.2017, 16:24
офтопик
Очень хотелось бы реализовать одну штуку - зеркала у нас маленькие
мне кажется у нас одни из самых больших зеркал боковых

у меня сейчас стоит ESP8266
которая управляет цветами подсветки в блоке управления климатом:)))

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

kostyamat
16.05.2017, 01:39
по шоссе езжу на круизе (механика)
скорость двиглом плохо сбрасывается, а писк это лишнее
так что думаю адаптивный это лишнее
точнее у тебя не получится адаптивного
+ нельзя водителя освобождать от своей 'работы'...!!!
У меня дизель двухлитровый, там газ сбросил - как тормоз нажал. Я его протюнячил немецкой прошивкой - вообще самолёт. Вот за что я дизеля люблю, крутятся турбированные не хуже атмосферных бензиновых, момент на валу в два раза выше и эластичность с ног сшибательная. Плюс расход на трассе 5.5-6л./100 (доказано), при скорости 130-135 на 6-ой. Вообще, сейчас у машины 176 лошадей, поведение вообще поменялось. Ну это оффтоп.
Бузер это первое, и самое главное, при езде с круизом. Плывешь такой 4 часа с постоянной скоростью, мозг выключается, а тут побудка. Радар и бузер будет полюбэ, уже заказал, наверное даже два радара. Смотрящий назад чуть в лево, - самое то. Собрался на обгон, а бузер тебе - обрати внимание, сзади машина в обгоне.
Почему адаптивный не получится? Управление в наших руках, при нехватке реакции на "-", можно просто круиз временно вырубать, что аналогично полному сбросу педали газа, а потом снова включить, он и сам скорость наберёт последнюю, только "Resume" нажать. Я уже все проверил. Отличный у нас круиз, умный. ))

добавлено через 2 часа 29 минут
мне кажется у нас одни из самых больших зеркал боковых зеркала-то большие, а обзор у них маленький, плоские они совсем. Были бы более сферические что-ли.