Автор работы: Пользователь скрыл имя, 21 Января 2014 в 02:45, курсовая работа
Цель работы: разработка многофункционального устройства на базе микроконтроллера. Данное устройство включает в себя тахометр для измерения оборотов двигателя, термометр для измерения температуры двигателя и вольтметр для измерения напряжения борт сети автомобиля. Вывод информации осуществляется на три LСD-дисплея.
Задание на курсовой проект 2
Реферат 4
Основные сокращения 5
Содержание 6
Введение 7
Аналитический обзор 8
Разработка структурной схемы и алгоритма функционирования 12
Выбор элементов устройства, их технические характеристики 14
Разработка принципиальной схемы устройства 16
Разработка программного обеспечения 21
Заключение 25
Список используемой литературы 26
2. Разработка структурной
схемы и алгоритма
2.1 Обоснование и выбор схемы РТУ
Для создания автомобильного тахометра, обеспечивающего условия технического задания, на основе проведенного анализа была выбрана схема реализации на микроконтроллере, представленная в пункте 1.1.
Выбор был сделан в пользу микроконтроллера AT89S52 потому, что при своей дешевизне относительно других вариантов, он имеет 32 порта ввода-вывода и встроенный АЦП.
Структурная схема устройства приведена ниже на рисунке 4. Общий принцип работы устройства следующий: сигналы с трёх датчиков поступают на входы микроконтроллера, где преобразуются на АЦП в цифровые значения, которые затем передаются на семисегментные LCD-дисплеи.
Алгоритм работы устройства следующий. На вход микроконтроллера поступают прямоугольные импульсы, частота которых прямо пропорциональна частоте вращения вала двигателя, причём один импульс соответствует одному обороту. Самым простым решением было бы завести таймер на минуту, за это время считать импульсы с помощью счётчика, а по прерыванию по переполнению таймера выводить данные со счётчика на дисплей и обнулять счётчик. Однако такое решение не подходит, поскольку данные о количестве оборотов обновлялись бы раз в минуту, что, очевидно, слишком редко для оперативного управления автомобилем. Необходимо как-то на основании измерения за короткое время прогнозировать количество оборотов за целую минуту. Поэтому поступим следующим образом: установим таймер на одну пятую секунды (200 миллисекунд). Подсчитаем обороты за это время и занесём значение в первую переменную. Далее ещё дважды заведём таймер на такое же время и занесём соответствующее количество оборотов во вторую и третью переменную, а затем найдём среднее значение трёх переменных, которое будет довольно точным значением числа оборотов за одну пятую секунды. Потом это значение просто нужно будет умножить на 5, а потом на 60, получив тем самым искомое значение числа оборотов за минуту.
Блок-схему алгоритма
работы устройства и полную принципиальную
электрическую схему можно
Рисунок 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В
Линии:
10. Кнопки включения/выключения устройства.
11. Микроконтроллера AT89S52.
Интерфейс I2C
I²C — последовательная
шина данных для связи
I²C использует две
Классическая адресация включает 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, инфракрасный
дачтик оборотов подключается в схему
через два резистора
Напряжение бортсети автомобиля поступает через делитель, построенный на резисторах 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_
unsigned
intex_pulses,rps,rps_tmp,temp,
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;
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. А. М. Прыжевского.
Справочник по
Информация о работе Автомобильный тахометр на микроконтроллере