当前位置:文档之家› 汽车温度监控系统设计

汽车温度监控系统设计

汽车温度监控系统设计
汽车温度监控系统设计

电子科技大学信息科技学院《汽车微控制器应用》实训报告

学号

姓名

指导教师:

实训题目:汽车温度监控系统设计

1 系统设计

1.1 设计要求

1.1.1 设计任务

用温度传感器(18B20)进行温度采集,实现汽车温度监控。

1.1.2 性能指标要求

(1)

用温度传感器(18B20)进行温度测量,并显示温度值。 (2)

设计风扇驱动电路。 (3)

通过按键设置温度报警值,超过设置温度可发出声光报警。 (4)

超过设置温度可自动开启风扇,温度越高,风扇转速越快。 (5) 其他创新功能。

1.2 设计思路及设计框图

1. 2.1设计思路

使用DS18B20进行温度采集,使用L9110H 控制风扇运作,使用两个按键分别控制温度额定值的加减,PWM 调节风扇速度。

1.2.2总体设计框图

2 各个模块电路及程序的设计

测温部分:

按键输入 MC9S12XS 单片机 控制器 PWM 调速

数码管显示 温度传感器

void display_buff(void)

{

int dat ;

Start_DS18B20(); //启动温度转换

wd=Get_Temp(); //读取温度

dat=wd/16;

if(dat<80)shice=dat;

disbuff_tab[2]=shice%10;

disbuff_tab[3]=shice/10;

disbuff_tab[5]=set%10;

disbuff_tab[6]=set/10;

}

风扇部分:

void PWM_Init(void) //PWM初始化

{

PWME=0x00; //禁止模块

PWMPRCLK=0x03; //分频因子8分频

PWMSCLA=50; //SA的分频因子设定植0~255 PWMCLK=0x02; //通道1

PWMPER1=200; //通道1周期系数200

PWMDTY1=0; //占空比

PWMPOL=0x01;

PWMPOL_PPOL1=1;

PWMCAE=0x00; //左对齐

PWMCTL=0x00; //不级联

PWME=0X02; //使能通道1 }

按键部分:

void scan_anjian(void)

{

if(k1==0)

{delay(500);

if(k1==0)

{

set++;

if(set>90)set=90;

}

}

if(k2==0)

{delay(500);

if(k2==0)

{

set--;

if(set<5)set=5;

}

}

}

3 调试过程

首先,检查电路板是否连对,是否有焊错的地方,用万用表测量各VCC与GND之间是否导通,检查无误后接通电路,查看电源指示灯是否亮起。其次,程序每编写完一个模块编译一次,查看是否通过,并验证程序功能是否实现。最后,接通实验箱连接电路板下载程序,查看风扇是否随温度的变化而变化,数码管是否能正常显示额定温度与实测温度。

4 功能测试

4.1 测试仪器与设备

万用表,计算机,飞思卡尔实验箱。

4.2 性能指标测试

(1)用温度传感器(18B20)进行温度测量,能正常显示温度值。

(2)风扇能正常运转。

(3)可通过按键设置温度报警值。

(4)超过设置温度可自动开启风扇,温度越高,风扇转速越快。

4.3 误差分析

采样精确度低,仪器间不精密都是造成误差的原因。

5 实训心得体会

通过这次实训,让我更加深入的了解了飞思卡尔MC9S12XS128单片机,也让我认识了温度传感器DS18B20和电机驱动芯片L9110H。这次实训不仅加强了我们的动手能力,还让我们学到了一些基本的编程能力,其中PWM通道时钟周期与分频因子间的计算关系是让我最混乱的,在反复计算与换算后也终于弄懂了。

6 参考文献

[1] 自美.电子线路设计·实验·测试(第二版).:华中科技大学,2000

[2]阳.单片机原理及嵌入式系统开发.电子工业,2013

[3]新民.微型计算机控制技术(第二版).电子工业,2011

附录

附录1:原理图,实物图

附录2:程序清单

#include

#include "derivative.h"

#include "CRG.h"

#include "DS18B20.h"

#define k1 PORTB_PB1

#define k2 PORTB_PB2

#define k1_dir DDRB_DDRB0

#define k2_dir DDRB_DDRB1

#define uchar unsigned char

const uchar smg_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; const uchar wx_tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchar disbuff_tab[8];

static int wd;

unsigned static int shice;

uchar set=25;

void SetBusCLK_32M(void);

void delay(long t)

{

unsigned static int x,y;

for(x=0;x

for(y=1000;y>0;y--);

void scan_anjian(void)

{

if(k1==0)

{delay(500);

if(k1==0)

{

set++;

if(set>90)set=90;

}

}

if(k2==0)

{delay(500);

if(k2==0)

{

set--;

if(set<5)set=5;

}

}

}

void display_buff(void)

{

int dat ;

Start_DS18B20(); //启动温度转换wd=Get_Temp(); //读取温度dat=wd/16;

if(dat<80)shice=dat;

disbuff_tab[2]=shice%10;

disbuff_tab[3]=shice/10;

disbuff_tab[5]=set%10;

disbuff_tab[6]=set/10;

}

void display(void)

{

uchar i;

PTH=0x00;

for(i=0;i<8;i++)

{

PORTA=smg_tab[disbuff_tab[i]];

PTH=wx_tab[i];

delay(25);

}

}

void PWM_Init(void) //PWM初始化

{

PWME=0x00; //禁止模块

PWMPRCLK=0x03; //分频因子8分频PWMSCLA=50; //SA的分频因子设定植0~255 PWMCLK=0x02; //通道1

PWMPER1=200; //通道1周期系数200 PWMDTY1=0; //占空比

PWMPOL=0x01;

PWMPOL_PPOL1=1;

PWMCAE=0x00; //左对齐

PWMCTL=0x00; //不级联

PWME=0X02; //使能通道1

}

void kongzhi(void)

{

if(shice>set)

PWMDTY1=(shice-set)*4+50;

else PWMDTY1=0;

}

相关主题
文本预览
相关文档 最新文档