Разработка автомобильного измерителя температуры и давления воздуха на контроллере AVR

Арифметика многобайтовых чисел в МК. Порядок операций в формате BCD. Хранение данных в ОЗУ, его преимущества и недостатки. Использование встроенного АЦП. Автомобильные датчики температуры и давления. Схема источника питания для температуры и давления.

Рубрика Транспорт
Вид контрольная работа
Язык русский
Дата добавления 05.12.2012
Размер файла 24,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Введение

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

Поэтому для начала поучимся оперировать в контроллере большими числами и представлять их в десятичной форме.

датчик температура давление автомобильный

1. Арифметика многобайтовых чисел в МК

Сложение и вычитание больших чисел в МК не представляет трудностей. Корректная операция сложения двух 16-разрядных чисел будет занимать две команды: add RL1,RL2 adc RH1,RH2.

Здесь переменные RL1 и RL2 содержат младшие байты слагаемых, а RH1 и RH2 -- старшие. Если при первой операции результат превысит 255, то перенос запишется во все тот же флаг переноса С и учтется при второй операции. Общий результат окажется в паре RH1: RL1. Совершенно аналогично выглядит операция вычитания. Примеры операций с большим числом слагаемых вы найдете в тексте программ далее.

А вот с умножением и делением несколько сложнее. Выполнение типовых операций на AVR для чисел с различной разрядностью, вообще говоря, приводится в фирменных руководствах по применению: «аппнотах» (Application Notes, в данном случае номер 200). Но эти процедуры для наших целей все равно придется творчески переработать (тем более что в них встречаются ошибки). Поэтому мы не будем на них останавливаться, а сразу воспользуемся тем обстоятельством, что для контроллеров семейства Mega определены аппаратные операции умножения. Тогда и алгоритм сильно упрощается, и легко модифицируется для любого размера операндов и результата. Вот так выглядит такой алгоритм для перемножения двух 16-разрядных сомножителей с получением 24-разрядного результата (в названиях исходных переменных отражен факт основного назначения такой процедуры -- для умножения неких данных на некий коэффициент):

def dataL = г4 ;младший байт данных

def dataH = г5 ;старший байт данных

def KoeffL = г2 /младший байт коэффициента

def koeffH = гЗ /старший байт коэффициента

def temp = г1б /байт О результата (LSB - младший разряд)

def temp2 = rl7 /байт 1 результата

def teirp3 = rl8 /байт 2 результата (MSB - старший разряд)

Сокращения LSB и MSB означают least (most) significant bit -- младший (старший) значащий разряд, по-русски МЭР и СЭР, соответственно.

mul dataL,KoeffL /умножаем младшие

mov teirp,rO ;в rO младший результата операции mul

mov tempi,rl ;в rOl старший результата операции mul

mul dataH,KoeffL /умножаем старший на младший

add tempi,rO ;в rO младший результата операции mul

adc temp2,rl ;в rOl старший результата операции mul

mul dataL,KoeffH /умножаем младший на старший

add tempi,rO ;в rO младший результата операции mul

adc temp2,rl ;в rOl старший результата операции mul

mul dataH,KoeffH /умножаем старший на старший

add temp2,r0 ;4-й разряд нам тут не требуется, но он - в г01

ret

Если нужно получить полный 32-разрядный диапазон, просто необходимо добавить еще один регистр для старшего разряда (temp3, к примеру) и одну строку кода перед командой ret: adc temp3,r01

Естественно, можно просто обозвать rOi через temp3, тогда и добавлять ничего не придется.

Деление -- значительно более громоздкая процедура, чем умножение, требует больше регистров и занимает больше времени. Операции деления двух чисел (и 8- и 16-разрядных) приведены в той же «аппноте» 200, и даже без ошибок, но они не всегда удобны на практике: часто нам приходится делить результат какой-то ранее проведенной операции умножения или сложения, а он нередко выходит за пределы двух байтов.

Здесь потребуется вычислять среднее значение для уточнения результата измерения по сумме отдельных измерений. Если даже само измерение укладывается в 16 разрядов, то сумма нескольких таких результатов уже должна занимать три байта. В то же время делитель -- число измерений -- будет относительно небольшим и укладывается в один байт. Но мы не будем здесь заниматься построением «настоящих» процедур деления (интересующихся отсылаю к моей книге [18]). Многие подобные задачи на деление удается решить значительно более простым и менее громоздким методом, если заранее подгадать так, чтобы делитель оказался кратным степени 2.

Тогда все деление сводится к сдвигу разрядов вправо столько раз, какова степень двойки.

Для примера предположим, что мы некую величину измерили 64 раза и хотим узнать среднее. Пусть сумма укладывается в 2 байта, тогда вся процедура деления будет такой:

clr count_ciata /счетчик до 6 div64L

Isr dataH /сдвинули старший

ror dataL /сдвинули младший с переносом

inc count_data

cpi count_data,б

brne div64L

2. Операции с числами в формате BCD

Упакованные BCD-числа удобны для хранения данных, но неудобны для отображения и для выполнения арифметических операций с ними. Поэтому перед отображением упакованные BCD-числа распаковывают, перемещая старший разряд в отдельный байт и заменяя в обоих байтах старшие полубайты нулями. А перед проведением арифметических действий их переводят в обычный формат, после чего опять преобразуют в упакованный формат BCD. Cледует отменить, что в AVR нет специальных команд десятичной коррекции, поэтому придется изобретать им замену самостоятельно.

В области двоично-десятичных преобразований (BCD-преобразований) есть три основные задачи:

1. Преобразование двоичного/шестнадцатеричного числа в упакованный BCD-формат;

2. Распаковка упакованного BCD-формата для непосредственного представления десятичных чисел с целью их вывода на дисплей;

3. Обратное преобразование упакованного BCD-формата в двоичный/шестнадцатеричный с целью, например, произведения арифметических действий над ним.

Некоторые процедуры для преобразования в BCD-формат приведены в фирменной Application notes 204. Приведем здесь вариант такой процедуры, более экономичный в части использования регистров. Исходное hex-число содержится в регистре temp, распакованный результат -- в tempi:temp. Процедура довольно короткая:

/*преобразование 8-разрядного hex в неупакованный BCD

;вход hex= temp, выход BCD teirpl - старший; temp - младший

Эта процедура работает только для исходного hex-числа от О до 99

bin2bcd8:

clr tempi ;очистить MSB bBCD8_l:

subi temp,10 ;input = input - 10

brcs bBCD8_2 ;если установлен бит переноса, закончить

inc tempi ;увеличить MSB

rjmp bBCD8_l ;перейти на начало цикла

bBCD8__2:

subi teirp,-10 ; скомпенсрфовать лишнее вычитание ret

Заодно приведем одно из решений обратной задачи -- преобразования упакованного BCD в hex-число, после чего с ним можно производить арифметические действия (хотя в программе далее это нам не понадобится). По сравнению с «фирменной» BCD2bin8 этв процедура хоть и немного длиннее, но понятнее и более предсказуема по времени выполнения:

на входе в teirp упакованное BCD-значение ;на выходе в temp hex-значение; tempi - вспомогательный регистр для промежуточного хранения temp. Действительна только для семейства Меда

HEX_BCD:

mov tempi,temp

andi temp,ObllllOOOO /распаковываем старшую тетраду swap temp /старший в младшей тетраде

mul temp,multlO /умножаем на 10, в гО результат умножения mov tenp,tenpl /возвращаемся к исходному andi temp,ObOOOOllll /младший add temp,rO /получили hex ret

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

3. Хранение данных в ОЗУ

В проектируемом измерителе для всех операций переменных-регистров не хватит, и часть данных придется хранить в ОЗУ (SRAM).

Во всех случаях в чтении и записи SRAM используются регистры х, y и z -- то есть пары г27:г2б, г29:г28 И г31:г30, соответственно, которые по отдельности еще именуют xh:xl, yh.yl, zh.zl-- в том же порядке (то есть старшим в каждой паре служит регистр с большим номером). Если обмен данными производится между памятью и другим регистром общего назначения, то достаточно задействовать только одну из этих пар (любую), если же между областями памяти -- целесообразно задействовать две. Независимо от того, какую из пар мы используем, чтение и запись происходят по идентичным схемам, меняются только имена регистров.

Покажем основной порядок действий при чтении из памяти в случае использования регистра z (г31:г30). Чтение одной ячейки с заданным адресом Address, коррекция ее значения и обратная запись производится так: ldi zh,High(Address) /старший байт адреса RAM ldi ZL,Low(Address) ;младший байт адреса RAM Id temp,z /читаем ячейку в temp inc temp /например, увеличиваем значение на 1 St z,teirp ;и снова записываем. Режимы с преддекрементом и постинкрементом используются, когда нужно прочесть/записать целый фрагмент из памяти. Схема действий аналогичная, только команды выглядят так:

St -z,teirp ;с преддекрементом, запись в ячейку с адресом Z-1,

После выполнения команды регистр Z = Z-1 St z+,tenp; с постинкрементом, запись в ячейку с адресом Z, после выполнения команды регистр Z = Z+1.

Абсолютно аналогично выглядят команды чтения:

Id teirp,-z; с преддекрементом, чтение из ячейки с адресом Z-1.

После выполнения команды регистр Z = Z-1 Id temp,Z+ ;с постинкрементом, чтение из ячейки с адресом Z, после выполнения команды регистр Z = Z+1.

А вот как можно в цикле записать одно и то же значение из temp в 16 идущих подряд ячеек памяти, начиная с нулевого адреса старших 256 байт памяти:

ldi zh,1 clr ZL LoopW:

st z+,temp ;сложили в память cpi ZL,16 ;счетчик до 16 brne LoopW

4. Использование встроенного АЦП

Встроенный АЦП последовательного приближения входит в состав почти всех МК семейства Mega и большинства МК семейства Tiny, кроме простейших младших моделей и увы, знакомого нам Tiny2313. Мы не будем жаться (от батареек термометру-барометру работать не придется, и экономить тут нечего) и выберем ATniega8535 в корпусе с 40 выводами, у которого имеются четыре порта А, В, С и D полностью (каждый по 8 выводов) и некоторая часть выводов задействована только под альтернативные функции.

Сначала несколько общих слов о встроенных АЦП. Во всех моделях AVR общего назначения они многоканальные и 10-разрядные (за некоторым исключением, например, в ATmega8 из 6 каналов только четыре имеют разрешение 10 разрядов, а оставшиеся два-- 8, а в новейшем семействе Xmega АЦП имеет 12 разрядов). Многоканальность означает, что имеется только одно ядро преобразователя, которое по желанию программиста может подключаться к одному из входов через аналоговый мультиплексор, наподобие 561КП2, разобранного в главе 15. Если вы, как чаще всего и бывает, задействуете лишь часть входов, то остальные могут использоваться, как обычные порты ввода-вывода.

Точность АЦП номинально составляет ±2 LSB, плюс еще 0,5 LSB за счет нелинейности по всей шкале. То есть фактически такой АЦП с точки зрения абсолютной точности соответствует 8-разрядному. При соблюдении всех условий эту точность, впрочем, можно повысить, правда, условия довольно жесткие и включают в себя как «правильную» разводку выводов АЦП, так и, например, требование остановки цифровых узлов на время измерения, чтобы исключить наводки (специальный режим ADC Noise Reduction, которого мы здесь касаться не будем).

Чтобы не углубляться в детали этого процесса и не усложнять задачу, мы в дальнейшем поступим проще -- предпримем ряд мер, чтобы обеспечить стабильность результата, а абсолютную ошибку скомпенсируем за счет калибровки, которая все равно потребуется. Для этой цели погрешности встроенного АЦП нам хватит и без особых ухищрений, важно только, чтобы показания не «дребезжали». Уменьшение дребезга почти до нуля у нас будет достигаться тем, что, во-первых, на входе канала поставим конденсатор для фильтрации неизбежных в совмещенных аналогово-цифровых схемах наводок на внешние цепи (фирменное руководство рекомендует еще последовательно с ним включать индуктивность порядка ЮмкГн, но мы без этого обойдемся). Во-вторых, мы будем измерять несколько раз и усреднять значения отдельных измерений.

АЦП в МК AVR могут использовать три источника опорного напряжения на выбор -- внешний, встроенный и напряжение питания аналоговой части. Последний вариант, как самый простой, мы и применим: все равно подгонкой масштабов мы заниматься не будем, а все рассчитаем в цифровом виде. Отметим, что выводы аналогового питания сделаны отдельно от цифрового (хотя в простейших случаях это может быть и одно и то же питание, но мы их также разделим).

Пару слов о самой организации измерений. АЦП последовательного приближения должен управляться определенной тактовой частотой, для чего в его состав входит делитель тактовой частоты самого МК, подобный предделителю у таймеров. Рекомендуется подбирать этот коэффициент деления так, чтобы тактовая частота АЦП укладывалась в промежуток от 50 до 200 кГц. Например, для тактовой частоты МК 4 МГц подойдет коэффициент деления 32, тогда частота АЦП составит 125 кГц. Преобразование может идти в непрерывном режиме (после окончания преобразования сразу начинается следующее), запускаться автоматически по некоторым прерываниям (не для всех типов AVR) или каждый раз запускаться по команде. Мы будем использовать только последний «ручной» режим, так как нам для осреднения результатов тогда удобно точно отсчитывать число преобразований. В таком режиме на одно преобразование уходит 14 тактов, потому для приведенного примера с частотой 125 кГц время преобразования составит приблизительно 9 мс.

По окончании процесса преобразования возникает прерывание АЦП, в обработчике которого результат измерения читается из соответствующих регистров. Так как число 10-разрядное, то оно займет два байта, у которых старшие 6 разрядов равны нулю. Это удобно, так как мы можем без опасений суммировать до 64 (2^) результатов в рамках двухбайтового числа, не привлекая дополнительных регистров, и затем простым сдвигом, как мы обсуждали ранее, вычислять среднее.

5. Датчики температуры и давления

Чтобы использовать диапазон встроенного АЦП полностью, здесь надо подавать сигнал от О до 5 В (точнее, до значения опорного напряжения, которое здесь совпадает с аналоговым питанием), причем с отрицательными напряжениями на входе в данном случае АЦП работать «не умеет» (в некоторых моделях AVR есть АЦП с дифференциальным режимом, и даже с предварительными усилителями, но точность при этом значительно снижается). При указанных в приложении Б номиналах резисторов диапазон выходных напряжений всей схемы составит около 4,9 В, то есть мы будем использовать весь диапазон АЦП с некоторым запасом. Резистор R4, который устанавливает нижнюю границу диапазона, нужно выбирать равным сопротивлению датчика при нижней требуемой температуре.

С датчиком атмосферного давления все еще проще -- ряд фирм выпускают готовые датчики давления. Мы используем барометрический датчик МРХ4115 фирмы Motorola, питающийся от напряжения 5В и имеющий удобный диапазон выхода примерно от 0,2 до 4,6 В. При этом учтем, что большая абсолютная точность нам не требуется, только стабильность: для небольших высот над уровнем моря можно считать, что при изменении высоты на каждые 10--12 м давление меняется примерно на 1 мм рт. ст. Так что в пределах такого города, как Москва, с естественными перепадами высот до 100 и более метров, оно само по себе будет «гулять» в пределах как мини­мум 10 мм рт. ст., даже без учета этажности зданий. И нам все равно целесообразно будет подогнать результат «по месту» так, чтобы не иметь крупных расхождений с прогнозом погоды по телевидению -- иначе показания прибора окажутся никому не нужны.

С учетом всего сказанного схема термометра-барометра будет выглядеть так, как показано в приложении А (ОУ МАХ478 можно заменить, например, на ОР293)

6. Схема источника питания для измерителя температуры и давления

Схема источника питания показана в приложении В. Измеритель имеет два питания (+5 Вц, +5 Ва) и заземление аналоговое и цифровое. Так так по условию задания измеритель разработан для автомобиля, то питание берётся непосредственно с аккумулятора, 12В постоянного тока. Этот факт позволяет существенно упростить схему, в ней нет понижающего трансформатора, диодного моста и стабилизатора напряжения как в стандартных источниках питания.

Использованная литература

1. «Справочник по электрическим конденсаторам» И. И. Четветков, В. Ф. Смирнов г. Москва «Радио и связь» 1983г.

2. «Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера» Ю. Ревич издательство «БХВ-Петербург» 2011г.

3. «Руководство по микроконтроллерам» М. Предко Москва «Постмаркет» 2001г.

4. «Конструирование устройств на микроконтроллерах» А. В. Белов Санктпетербург «Наука и техника» 2007г.

5. «10 практических устройств на AVR» А. В. Кравченко Санктпетербург «Корона-Век» 2009г.

6. Справочник «Резисторы» Четвертков И. И. Терехов В. М. «Радио и связь» 1991г.

7. Материалы с сайтов www.reom.ru и http://vicgain.sdot.ru.

Размещено на Allbest.ru

...

Подобные документы

  • Новые тенденции и перспективные технологии автомобильных датчиков скорости и положения, концентрации кислорода, массового расхода воздуха, давления, температуры, уровня и состояния масла, детонации в системах Powertrain. Датчики для газовых двигателей.

    дипломная работа [3,1 M], добавлен 20.05.2009

  • Работа датчика давления топлива. Отклонение давления топлива от заданной величины. Срабатывание регулирующего клапана в топливной рампе. Датчик давления в шинах. Основной элемент системы прямого контроля давления. Основные виды датчиков давления масла.

    презентация [943,9 K], добавлен 29.11.2016

  • Датчики массового расхода воздуха, положения дроссельной заслонки. Назначение датчика температуры охлаждающей жидкости. Регулятор давления топлива. Клапаны продувки адсорбера, бензонасос. Методика проверки датчиков фазы и положения коленчатого вала.

    курсовая работа [1,9 M], добавлен 17.12.2009

  • Электроника и электрооборудование транспортных, транспортно-технологических машин. Датчики электронных информационных систем. Магнитоэлектрические указатели на автомобилях. Датчик сигнализатора аварийного давления. Отличие датчиков давления друг от друга.

    реферат [682,0 K], добавлен 07.06.2011

  • Определение параметров конца впуска, сжатия, сгорания и расширения: температуры и давления газов в цилиндре, эффективных показателей двигателя и размеров его цилиндров. Методика динамического расчёта автомобильного двигателя. Расчет поршневой группы.

    курсовая работа [180,8 K], добавлен 11.12.2013

  • Анализ протоколов обмена электронных систем, применяемых на автомобилях. Разработка модулей микроконтроллера и индикатора, схемы питания. Подключение драйвера CAN интерфейса. Программное обеспечение датчика давления. Алгоритм работы основной программы.

    дипломная работа [1,3 M], добавлен 26.06.2016

  • Ознакомление с конструкцией и принципом действия регулятора давления АК-11Б в отечественных электровозах и мотор-вагонных подвижных составах. Основное назначение устройства - автоматическое поддержание давления сжатого воздуха в установленном диапазоне.

    лабораторная работа [4,3 M], добавлен 01.12.2010

  • Определение индикаторных, эффективных и геометрических параметров двигателя. Расчет давления газов в цилиндре. Суммарные радиальные и окружные силы, действующие на шатунную шейку. Расчет процесса наполнения. Повышение температуры воздуха в нагнетателе.

    курсовая работа [3,1 M], добавлен 04.02.2012

  • Конструктивная схема двигателя АИ-24. Выбор температуры газа перед турбиной, степени повышения полного давления в компрессоре. Потери в элементах проточной части двигателя. Термогазодинамический расчет на ЭВМ. Согласование параметров компрессора, турбины.

    контрольная работа [355,4 K], добавлен 13.02.2012

  • Устройство и принцип работы термометрических приборов на хладотранспортных средствах, методы их проверки и настройки. Виды термометров, применяемых на хладотранспорте. Схемы измерения температуры. Размещение датчиков температуры в подвижном составе.

    лабораторная работа [712,0 K], добавлен 10.05.2011

  • Назначение, устройство и основной принцип работы системы питания ВАЗ-2109. Неисправности, отказы в работе, признаки и способы устранения. Техническая характеристика датчика давления масла. Ремонт и техническое обслуживание датчика давления масла ВАЗ-2109.

    курсовая работа [718,3 K], добавлен 26.03.2015

  • Система подачи топлива в инжекторной системе. Регулятор давления топлива. Порядок сбрасывания давления в системе его подачи. Применение электробензонасоса турбинного типа. Функционирование топливного фильтра. Форсунка системы распределенного впрыска.

    презентация [129,8 K], добавлен 18.09.2013

  • Тепловой расчет автотракторного двигателя: определение основных размеров, построение индикаторной диаграммы и теоретической скоростной (регуляторной) характеристики мотора. Вычисление температуры и давления остаточных газов, показателя адиабаты сжатия.

    курсовая работа [1005,3 K], добавлен 16.06.2011

  • Понятие технического обслуживания и текущего ремонта автомобиля. Магнитоэлектрический указатель давления масла логометрического типа. Указатели температуры охлаждающей жидкости и уровня топлива в топливном баке. Организация заработной платы, охрана труда.

    курсовая работа [2,9 M], добавлен 01.12.2014

  • Основные параметры автомобильного двигателя. Определение давления в конце процессов впуска, сжатия, расширения и выпуска. Построение индикаторной диаграммы карбюраторного двигателя. Расчет массы поршневой группы, силы давления газов и крутящих моментов.

    курсовая работа [147,8 K], добавлен 20.01.2016

  • Краткая характеристика датчиков контрольных сигналов и аварийных режимов. Датчики сигнализаторов аварийного давления масла в автомобиле. Контактные, контактно-транзисторные, бесконтактные (электронные), микропроцессорные системы искрового зажигания.

    курсовая работа [2,1 M], добавлен 11.02.2013

  • Расчёт массы деталей кривошипно-шатунного механизма, силы давления на поршень. Схема уравновешивания двигателя. Описание конструкции и систем двигателя: кривошипно-шатунный, газораспределительный механизмов, систем смазки, охлаждения, питания, зажигания.

    курсовая работа [1,3 M], добавлен 28.10.2015

  • Приспособления для проверки давления и зарядки систем. Назначение, элементы конструкции, технические данные и порядок использования гидроподъемников самолета Ту-154 и вертолета Ми-8. Порядок розжига подогревателя воздуха МП "Север" при помощи факела.

    отчет по практике [52,8 K], добавлен 14.10.2014

  • Назначение системы питания дизельного двигателя, схема его работы. Основные причины неисправностей и нарушений в работе насосов низкого давления. Перебои и неравномерность в работе цилиндров двигателя. Проверка герметичности системы питания воздухом.

    реферат [2,8 M], добавлен 15.11.2014

  • Назначение, устройство и принцип работы клапана дыхательного совмещённого, его технические характеристики и значение для регулирования давления в резервуарах. Функциональные модификации и варианты комплектации в зависимости от сферы применения клапанов.

    научная работа [523,7 K], добавлен 21.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.