Вступление

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

Ниже приведен фрагмент исходного кода программы, отвечающий за задание значений АЦП. В нем вписаны значения для Lacetti. Посмотрим, во что превратится этот фрагмент в результате.

; Определение соответствия значений АЦП кнопкам на пульте.
Btn0		EQU	.32		; Порог кнопки Vol-.
Btn1		EQU	.88		; Порог кнопки Vol+.
Btn2		EQU	.135		; Порог кнопки Next.
Btn3		EQU	.177		; Порог кнопки Src.
Btn4		EQU	.225		; Порог кнопки Pwr/Mute.
						

Теория

В первую очередь, вспомним классическую схему резисторного делителя напряжения (справа). Напряжение Vout на выходе делителя рассчитывается по формуле Vout=Vin*(R2/(R1+R2)). Запомним эту формулу, она нам пригодится.

Делитель напряжения
Схема резисторного делителя напряжения.
Входная цепь адаптера
Схема входной цепи адаптера.

А теперь посмотрим на схему входной цепи адаптера (слева). Как видите, она ничем не отличается от схемы классического резисторного делителя напряжения. Здесь номинал R1 постоянен (и равен 1 кОм), а R2 представляет собой резистор в рулевом пульте, номинал которого меняется в зависимости от нажатой кнопки. Напряжение Vin равно 5 вольтам. Зная номиналы, соответствующие кнопкам на руле, пользуясь вышеприведенной формулой, можно рассчитать какие напряжения будут повляться на входе "ADC input" микроконтроллера при нажатии кнопок на руле. Далее, зная принцип работы преобразователя АЦП и алгоритм программы, можно вычислить значения, которые необходимо вписать в исходный код программы.

Расчет напряжения на входе "ADC input" микроконтроллера

Значения резисторов, подключаемых кнопками в руле Honda приведены в таблице.

Кнопка Номинал резистора (Ом)
Vol- 99
Vol+ 357
Ch- 775
Ch+ 1694
Mode 3726
Ничего не нажато 10000

Считаем напряжение на входе микроконтроллера для кнопки "Vol-": V=5*(99/(1000+99))=0,45 В. Аналогично для остальных кнопок. В результате получаем значения всех напряжений, которые и вносим в таблицу.

Кнопка Номинал резистора (Ом) Напряжение на входе МК (В)
Vol- 99 0,45
Vol+ 357 1,32
Ch- 775 2,18
Ch+ 1694 3,14
Mode 3726 3,94
Ничего не нажато 10000 4,55

Расчет результатов АЦП

Программа адаптера работает с приведенным к 8 битам результатом работы встроенного АЦП микроконтроллера. Таким образом, минимально возможным результатом АЦП будет 0 (при 0 вольт на входе МК), а максимальным - 255 (при 5 вольт на входе МК). Составив пропорцию, легко вычислить, какой результат АЦП должен быть при каждом приложенном на вход микроконтроллера напряжении (то есть при каждой нажатой кнопке руля).
5 - 255
N - X
----------
X=N*255/5=N*51 (X - результат АЦП при N вольт на входе МК).

Теперь считаем результат АЦП для кнопки "Vol-": X=0,45*51=22,95. Округляем до 23. Аналогично для остальных кнопок. В результате получаем все результаты АЦП, которые и вносим в таблицу.

Кнопка Номинал резистора (Ом) Напряжение на входе МК (В) Результат АЦП
Vol- 99 0,45 23
Vol+ 357 1,32 67
Ch- 775 2,18 111
Ch+ 1694 3,14 160
Mode 3726 3,94 201
Ничего не нажато 10000 4,55 232

Определение диапазонов результатов АЦП для каждой кнопки

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

Для кнопки "Vol-" начальная граница диапазона будет упираться в 0. Находим конечную границу: 23+(67-23)/2=45 (значение кнопки + половина промежутка до следующей кнопки). Аналогично для остальных кнопок.

Кнопка Номинал резистора (Ом) Напряжение на входе МК (В) Результат АЦП Диапазон результатов АЦП
Vol- 99 0,45 23 0-45
Vol+ 357 1,32 67 46-89
Ch- 775 2,18 111 90-135
Ch+ 1694 3,14 160 136-180
Mode 3726 3,94 201 181-216
Ничего не нажато 10000 4,55 232 217-255

Модификация текста программы

Теперь осталось вписать верхние границы диапазонов в переменные программы. Заодно поправим комментарии, так как названия кнопок у Honda немного другие.

; Определение соответствия значений АЦП кнопкам на пульте.
Btn0		EQU	.45		; Порог кнопки Vol-.
Btn1		EQU	.89		; Порог кнопки Vol+.
Btn2		EQU	.135		; Порог кнопки Ch-.
Btn3		EQU	.180		; Порог кнопки Ch+.
Btn4		EQU	.216		; Порог кнопки Mode.
						

P.S.

Приведенный пример немного не характерен из-за того, что рулевой пульт Honda, в отличие от большинства остальных, при ненажатых кнопках имеет сопротивление 10 кОм. Обычно при ненажатых кнопках не подключено никакого резистора. Это может несколько запутать. Но стоит понимать, что если не подключено никакого резистора, это означает подключен резистор с бесконечным сопротивлением. И сразу все становится на свои места.

Вот как бы выглядели последние две строчки таблицы в этом случае.

Кнопка Номинал резистора (Ом) Напряжение на входе МК (В) Результат АЦП Диапазон результатов АЦП
Mode 3726 3,94 201 181-228
Ничего не нажато Бесконечность 5 255 229-255

Программатор PIC

Протоколы проводного управления

Поиск по сайту