汽车温度监控系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
桂林电子科技大学信息科技学院《汽车微控制器应用》实训报告
学号
姓名
指导教师:
实训题目:汽车温度监控系统设计
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 <hidef.h>
#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<t;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;
}
void main(void) {
DDRA=0XFF;
DDRH=0XFF;
k1_dir=0;
k2_dir=0;
PUCR_PUPBE=1;
PWM_Init();
SetBusCLK_32M(); EnableInterrupts; for(;;) {
scan_anjian(); display_buff(); display();
kongzhi();
_FEED_COP();
}
}。