Автомобильный тахометр на микроконтроллере

Автор работы: Пользователь скрыл имя, 21 Января 2014 в 02:45, курсовая работа

Описание работы

Цель работы: разработка многофункционального устройства на базе микроконтроллера. Данное устройство включает в себя тахометр для измерения оборотов двигателя, термометр для измерения температуры двигателя и вольтметр для измерения напряжения борт сети автомобиля. Вывод информации осуществляется на три LСD-дисплея.

Содержание работы

Задание на курсовой проект 2
Реферат 4
Основные сокращения 5
Содержание 6
Введение 7
Аналитический обзор 8
Разработка структурной схемы и алгоритма функционирования 12
Выбор элементов устройства, их технические характеристики 14
Разработка принципиальной схемы устройства 16
Разработка программного обеспечения 21
Заключение 25
Список используемой литературы 26

Файлы: 1 файл

work.docx

— 784.75 Кб (Скачать файл)

 

 

 

2. Разработка структурной  схемы и алгоритма функционирования                  устройства

 

2.1 Обоснование  и выбор схемы РТУ

 

Для создания автомобильного тахометра, обеспечивающего условия технического задания, на основе проведенного анализа была выбрана схема реализации на микроконтроллере, представленная в пункте 1.1.

Выбор был сделан в пользу микроконтроллера AT89S52 потому, что при своей дешевизне относительно других вариантов, он имеет 32 порта ввода-вывода и встроенный АЦП.

 

    1. Структурная схема и алгоритм функционирования устройства

 

Структурная схема устройства приведена ниже на рисунке 4. Общий принцип работы устройства следующий: сигналы с трёх датчиков поступают на входы микроконтроллера, где преобразуются на АЦП в цифровые значения, которые затем передаются на семисегментные LCD-дисплеи.

Алгоритм работы устройства следующий. На вход микроконтроллера поступают прямоугольные импульсы, частота которых прямо пропорциональна частоте вращения вала двигателя, причём один импульс соответствует одному обороту. Самым простым решением было бы завести таймер на минуту, за это время считать импульсы с помощью счётчика, а по прерыванию по переполнению таймера выводить данные со счётчика на дисплей и обнулять счётчик. Однако такое решение не подходит, поскольку данные о количестве оборотов обновлялись бы раз в минуту, что, очевидно, слишком редко для оперативного управления автомобилем. Необходимо как-то на основании измерения за короткое время прогнозировать количество оборотов за целую минуту. Поэтому поступим следующим образом: установим таймер на одну пятую секунды (200 миллисекунд). Подсчитаем обороты за это время и занесём значение в первую переменную. Далее ещё дважды заведём таймер на такое же время и занесём соответствующее количество оборотов во вторую и третью переменную, а затем найдём среднее значение трёх переменных, которое будет довольно точным значением числа оборотов за одну пятую секунды. Потом это значение просто нужно будет умножить на 5, а потом на 60, получив тем самым искомое значение числа оборотов за минуту.   

Блок-схему алгоритма  работы устройства и полную принципиальную электрическую схему можно найти  в приложении 1.

Рисунок 4. Структурная схема  устройства

 

 

3. Выбор элементов  устройства, их технические характеристики

 

Принципиальная схема  автомобильного тахометра состоит из:

1. Резисторов 10 кОм, 270 Ом, 1500 Ом, 4700 Ом.

2. Трёх переменных резисторов на 10 кОм.

3. Двух конденсаторов на 27 пФ.

4. Стабилитрона 2С102А на 5,1 В.

5. Светодиода HIR204.

6. Фототранзистора L32P3C.

7. Кварцевого резонатора KX-13 на 24 МГц.

8. Температурного датчика LM-35

9. Трёх дисплеев LCD-016М02В

  • Интерфейс: I2C
  • Размер дисплея: 2х16 символов
  • Питание: 5 В (допускается 3,3 В).

Линии:

  • GND – земля
  • VDD – питание для логики
  • SCL – I2C последовательная линия тактирования
  • SDL – I2C последовательная линия данных
  • LED-/ LED+ – катод и анод подсветки.

10.  Кнопки включения/выключения устройства.

11.  Микроконтроллера AT89S52.

  • Частота: до 33 МГц.
  • 8 кБ флеш-памяти.
  • 32 порта ввода-вывода
  • Восемь источников прерываний.
  • Три 16-разрядных таймера-счётчика.
  • Питание: 4,0 .. 5,5 В.

 

 

Интерфейс I2C

 

I²C — последовательная  шина данных для связи интегральных  схем, разработанная фирмой Philips в  начале 1980-х как простая шина  внутренней связи для создания  управляющей электроники. Используется  для соединения низкоскоростных  периферийных компонентов с материнской  платой, встраиваемыми системами  и мобильными телефонами.

I²C использует две двунаправленных  линии, подтянутые к напряжению  питания и управляемые через  открытый коллектор или открытый  сток — последовательная линия  данных (SDA, англ. Serial DAta) и последовательная  линия тактирования (SCL, англ. Serial CLock), обе нагруженные резисторами.  Стандартные напряжения +5 В или  +3,3 В, однако допускаются и  другие.

Классическая адресация  включает 7-битное адресное пространство с 16 зарезервированными адресами. Это  означает до 112 свободных адресов  для подключения периферии на одну шину.

Основной режим работы — 100 кбит/с; 10 кбит/св режиме работы с  пониженной скоростью. Заметим, что  стандарт допускает приостановку тактирования для работы с медленными устройствами.

 

4. Разработка принципиальной схемы устройства

 

Принципиальная схема  устройства представлена в Приложении 1.

 

4.1 Подключение  LCD-дисплеев к микроконтроллеру

 

Для индикации измеренных величин удобно использовать семисегментные LCD-дисплеи 16х2, поскольку они недороги, компактны, потребляют мало энергии и просты в настройке:

Рисунок 5. LCD-016М02В, вид сбоку.

Рисунок 6. Распиновка LCD-дисплея.

 

LCD-дисплей имеет 16 входов: первые два, GND и Vcc, используются для питания – первый подключается к земле, второй – на +5 В. Вход Vee (на схеме – CONTR) нужен для регулировки контрастности и подключается к переменному резистору номиналом 10 кОм. Входы Rs и En являются управляющими и подключаются к микроконтроллеру напрямую – первый нужен для переключения между регистрами команд (низкий уровень) и данных (высокий уровень), второй, при подаче на него импульса, даёт команду обновить данные на дисплее. Вход R/W используется для переключения режимов записи в регистры дисплея (низкий уровень) и чтения из них (высокий уровень). Так как дисплей используется только как устройства вывода, для экономии ножек микроконтроллера можно сразу замкнуть вход R/W на землю. Входы Led+ и Led- (на рисунке 7 им соответствуют входы NC) используются для обеспечения подсветки и тоже подключаются к микроконтроллеру. Наконец, 8 входов DB0..DB7 используются для передачи данных и подключаются к соответствующим выводам микроконтроллера:

 

Рисунок 7. Принципиальная схема  подключения LCD к МК.

Таким образом, всего из 32 портов ввода-вывода микроконтроллера для вывода мы используем 28: 24 из них используются для передачи данных на соответствующий дисплей, остальные четыре являются управляющими и общими для каждого дисплея. Это можно объяснить тем, что данные на каждый из дисплеев поступают свои, а управление ими осуществляется централизованно – данные обновляются синхронно.

 

4.2 Подключение  датчиков и периферии к микроконтроллеру

 

          Таким образом, из четырёх оставшихся  портов ввода-вывода микроконтроллера  три используются для подключения  соответствующих датчиков:

Рисунок 8. Подключение к  микроконтроллеру датчиков и периферии.

 

         

 

Рассмотрим особенности  подключения датчиков к микронтроллеру. Как видно из рисунка 8, инфракрасный дачтик оборотов подключается в схему  через два резистора соответствующих  номиналов. Ток, протекающий через  светодиод LED1, заставляет его светиться. Количество света, поступающее на базу  фототранзистора T1, определяет напряжение на его коллекторе, которое поступает на вход P1.4 микроконтроллера для дальнейшего преобразования в цифровое значение.

Напряжение бортсети автомобиля поступает через делитель, построенный  на резисторах R4 и R5, на вход микроконтроллера P1.5. От возможных скачков напряжения застрахуемся стабилитроном D1 на 5,1 В.

Измерение температуры осуществляется микросхемой LМ35. Подключаем её согласно даташиту: два входа на плюс питания и землю, выход – на вход P1.7 микроконтроллера.

Последний универсальный  порт ввода-вывода МК P1.6 используется для подключения кнопки S1, предназначенной для включения/выключения устройства.

Входы Vcc и GND МК используются для его питания и подключаются на плюс источника питания и землю, соответственно. Питание всего устройства целиком можно осуществить как от батарейки, так и от аккумулятора автомобиля. Во втором случае для получения необходимых 5V нужно воспользоваться делителем либо трансформатором.

Наконец, входы XTAL1 и XTAL2 используются для подключения кварцевого резонатора Х1 на 24 МГц. Его подключение необходимо потому, что микроконтроллер AT89S52 не имеет встроенного генератора тактовой частоты.

 

 

 

 

 

5. Разработка программного обеспечения

   Листинг программы  работы микроконтроллера (язык - С):

#include <REGX51.h>

#include <math.h>

 

unsigned int clk_tmp,clk_tmp2,clk_sec,clk_sec2;

unsigned intex_pulses,rps,rps_tmp,temp,rps_avg,rps_max;

unsigned int rps_his[5];

char a,b,c,d,e;

unsigned char count1,count2;

unsigned char scale = 4;

 

delay(y){ // A function to make software delays

unsigned int i;

for(i=0;i<y;i++){;}

}

setup_interrupts(){ // This function initialises the TIMER and the COUNTER to

EA = 1;             // be used in in the trachometre

ET0 = 1;      //set the Timer/counter 0

TR0 = 1;      //Enable Timer/counter 0 to count

TMOD = 0X25;  //counter 0 in mode 1 (16 bit counter),

              //timer 1 in mode 2 (auto reload from TH1)

TH1 = 0;      //start counter from 0

ET1 = 1;      //enable timer 1

TR1 = 1;      //Enable Timer/counter 1 to count

PT0 = 1;      //Setup the priorities of timer 1 and timer 0, a 0 gives a

PT1 = 0;      //higher priority.

}

 

void int_to_digits(unsigned int number){ //store the 5 digits of an integer

float itd_a,itd_b;                       //number in the variable a,b,c,d,e

itd_a = number / 10.0;

e = floor((modf(itd_a,&itd_b)* 10)+0.5);

itd_a = itd_b / 10.0;

d = floor((modf(itd_a,&itd_b)* 10)+0.5);

itd_a = itd_b / 10.0;

c = floor((modf(itd_a,&itd_b)* 10)+0.5);

itd_a = itd_b / 10.0;

b = floor((modf(itd_a,&itd_b)* 10)+0.5);

itd_a = itd_b / 10.0;

a = floor((modf(itd_a,&itd_b)* 10)+0.5);

}

 

clk() interrupt 3        //timer 1 interrupt

{

clk_tmp++;          //Software counter for the timing of the tachometer readings

clk_tmp2++;         //Software counter for the display refresh rate

if (clk_tmp2 > (1236)){  // update display

clk_tmp2 = 0;

rps_avg = floor(((rps_his[0] + rps_his[1] + rps_his[2] + rps_his[3] + ___

          ___rps_his[4])/5)*60);

}

 

if (clk_tmp > (6584/scale)){ // update the measured RPM

clk_tmp = 0;

if (P2_0 == 0){

rps = TL0;

temp = TH0;

temp = temp * 256;

rps = (rps + temp)* scale;

rps_his[4] = rps_his[3];

rps_his[3] = rps_his[2];

rps_his[2] = rps_his[1];

rps_his[1] = rps_his[0];

rps_his[0] = rps;

}

TL0 = 0;

TH0 = 0;

}

}

 

count_pulses() interrupt 1 //counter 0 interrupt

{

if (scale < 10)      // If the pulses are so fast that the internal counter

scale++;             // overflows, increase the variable 'scale' so that

}                    // so that readings are recorded at a higher rate

 

void main(){

   scale = 10 ;

   P3_3 = 0; // ini proximity sensor, OFF

   P3_4 = 1; // ini sensor input

   P1_1 = 0; //turn LCD backlight ON

   P2_0 = 1; //ini count/hold button

   ini_lcd(); // ini the LCD

   setup_interrupts();

 

   while(1){

      P3_3 = ~P2_0;

         if (P2_0 == 1){

         scale= 4;

         }

   }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

В данной работе был проведен аналитический обзор различных  способов создания автомобильного тахометра. Исходя из условий задания и других причин, я остановился на варианте создания тахометра на основе микроконтроллера AT89S52.

В работе приведено подробное  описание принципиальной и структурной схем, а также листинг программы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованной литературы

 

 

1. Р. Трунин. Автомобильный тахометр. (Электроника в быту) — 1998, № 6, c. 47

2. Р. Жиздюк. Измерение электронных величин. (Электроника в быту) — 1999, № 6, c. 31

3. С. Кулешов. Автомобильный тахометр на микроконтроллере (Электроника в быту) — 1999, № 9, c. 30

4. Г. Дударев. Автомобильная электроника («Радио» — начинающим) — 2002, № 4, c. 51

5. А. М. Прыжевского.  Справочник по полупроводниковым  приборами их аналогам. Издательство  АО «РОБИ» 1992 г.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Информация о работе Автомобильный тахометр на микроконтроллере