温度传感器的简单设计.docx
《温度传感器的简单设计.docx》由会员分享,可在线阅读,更多相关《温度传感器的简单设计.docx(21页珍藏版)》请在冰豆网上搜索。
温度传感器的简单设计
单片机原理
课
程
设
计
课 题:
温度传感器的简单设计
班 级:
宿迁学院
姓 名:
学 号:
07
指导教师:
二○一○年六月
第一章前言
1.1传感器简介
1.2热敏电阻传感器
1.3MCU与嵌入式系统
第二章系统硬件设计
2.1系统原理图
2.2单片机(MCU)模块
2.2.1MC908GP32单片机性能概述
2.2.2GP32最小系统
2.2.3MC68HC908GP32内部结构
2.2.4GP32MCU的引脚功能
2.3A/D转换模块
2.3.1进行A/D转换的基本问
2.3.2数字控制系统框图
2.3.3A/D转换模块的基本编程方法
2.4串行通信模块
2.4.1RS-232C总线标准
2.4.2SCI电平转换电路设计
第三章系统软件设计
3.1MCU的程序设计
第四章编辑程序
第五章系统测试
4.1接硬件电路
4.208C语言程序调试
第六章心得总结
参考文献
基于GP32温度传感器的设计
第一章前言
1.1传感器简介
传感器是一种把物理量或化学量转变成便于利用的电信号的器件,其实质是一种功能块,其作用是将来自外界的各种信号转变为电信号。
它是实现测试与自动控制系统的首要环节。
如电子计价秤中所安装的称重传感器,它是电子计价秤的重要部件,它担负着将重量转换成电信号的任务,它所输出的电信号被放大器放大并经A/D转换后由相关电路显示出称重信息。
如果没有传感器对原始参数进行精确可靠的测量,哪么无论是信号转换或信息处理,或者最佳数据的显示和控制都将无法实现。
在现代电子信息系统中,信息采集传感器技术、信息传感痛惜技术、信息处理微处理器技术是现在电子信息技术的3大核心技术。
1.2热敏电阻传感器
温度传感器利用一些金属、半导体等材料与温度有关的特性而制成的,这些特性包括热膨胀、电阻、电容、磁性、热电势、热噪声、弹性及光学特征。
根据制造材料将其分为热敏电阻传感器、半导体热电偶传感器、PN结温度传感器和集成温度传感器等类型。
热敏电阻传感器,其最基本电气特性是随着温度的变化自身阻值也随之变化。
热电阻材料热电阻测温是基于金属导体的电阻值随温度的增加而增加这一特性。
1.3MCU与嵌入式系统
MCU的基本含义:
在一块芯片上集成了中央处理器单元(CPU)、存储器(RAM/ROM)、定时器/计数器及多种输入/输出(I/O)接口的比较完整的数字处理系统。
MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计,能很好地满足应用系统的嵌入,面向测控对象和现场可靠运行等方面的要求。
因此由MCU构成的系统是发展最快、品种最多、数量最大、应用最广的嵌入式系统。
由于MCU有嵌入式应用的专用体系结构与指令系统,而且具有体积小、可靠性高等特点,同时具有各种各样的型号,可以满足不同的需求,实际应用时,开发者可根据具体要求选用最佳型号的MCU嵌入到所需的应用系统中。
一个以MCU为核心,比较复杂的嵌入式产品或实际嵌入式应用系统,包含模拟量的输入、模拟量的输出,开关量的输入、开关量的输出以及数据通信部分。
如图1为一个典型的嵌入式应用系统框图:
实际模拟信号一般来自相应的传感器。
但是,一般传感器将实际模拟信号转成的电信号都比较弱,MCU无法直接获得该信号,需要将起放大,然后经过模/数(A/D)转换变为数字信号,进行处理。
目前许多MCU内部包含A/D转换模块,实际应用时也可根据需要外接A/D转换芯片。
常见的模拟量有:
温度、湿度、压力、质量、气体浓度、液体浓度、流量等。
对MCU来说,模拟信号通过A/D转换变成相应的数字序列进行处理。
实际开关信号一般也来自相应的开关类传感器。
如光电、电磁开关、干簧管、声控、红外开关等,在一些儿童电子玩具就有一些类似的开关。
手动开关也可以作为开关信号送到MCU中。
对MCU来说,开关信号就是只有“0”和“1”两种可能值的数字信号。
在执行机构中,有开关量执行机构,也有模拟量执行机构。
开关量执行机构只有“开”、“关”两种状态。
模拟量执行机构需要连续变换的模拟量控制。
MCU一般不能直接控制这些执行机构,需要通过相应的驱动电路实现。
还有一些执行机构,即不是通常的开关量控制,也不是通常的D/A转换量控制,而是“脉冲”量控制,如控制空调电动机,MCU则通过软件对其控制。
第二章系统的硬件设计
2.1系统原理图如下图所示:
该系统的设计步骤是按照一般嵌入式产品的开发步骤设计的。
第一步输入输出分析
本系统的输入量有:
传感器采集入口。
该信号是由传感器流向B口。
输出量有:
串口输出、温度传感信号输出。
第二步设计并制作硬件系统
该系统是选用MC68HC908GP32MCU,该芯片是集成了8位A/D转换器,只要接传感器就可以工作,同时开发系统已经接好串口通信线路,MAX232芯片是集成在开发板上的。
只要连接温度传感器电路的输出。
第三步系统软件设计
该系统的软件很简单,直接就可分成每个小模块,如:
A/D转换电路、小灯循环点亮模块、单片机系统等。
在定义好系统寄存器后,针对各模块进行详细设计编码,最后测试各个模块,完成MCU软件设计。
第四步系统测试
在软件和硬件系统都设计完成后,把程序通过专用编译器和写入工具写到MCU中,运行系统。
在系统运行中,不断发现系统的不足之处,并改进它,使系统更加完善,对环境的适应能力更强。
2.2单片机(MCU)模块
2.2.1MC908GP32单片机性能概述
(1)512B片内RAM;32K片内Flash程序存储器,具有在线编程和保密功能。
(2)时钟发生器模块,具有32KHz晶振PLL电路,可产生各种工作频率;8MHz
内部总线频率。
(3)增强的HC05CPU结构;16种寻址方式(比HC05多8种);16位变址寄存器和堆栈指针;存储器至存储器数据传送;快速8×8乘法指令;快速16/8除法指令;扩展的循环控制功能;BCD功能.
(4)33根通用I/O脚,包括26根多功能I/O脚和5或7根专用I/O脚;PTA、PTC和PTD的输入口有可选择的上拉电阻;PTC0—PTC4有15mA吸流和放流能力,其他口有10mA吸流和放流能力(总体驱动电流应小于150mA);所有口有最高5mA输入电流保护功能。
(5)增强型串行通讯口SCI;串行外围接口SPI;两个16位双通道定时器
接口模块(TIM1和TIM2),每个通道可选择为输入捕捉、输出比较和PWM,其时钟可分别选为内部时钟的1、2、4、8、6、32和64的分频值;带时钟预分频的定时基模块有8种周期性实时中断(1、4、16、256、512、1024、2048和4096Hz),可在STOP方式时使用外部32KHz晶振周期性唤醒CPU;8位键盘唤醒口。
(6)系统保护特性:
计算机工作正常(COP)复位;低电压检测复位,可选为3V或5V操作;非法指令码检测复位;非法地址检测复位。
(7)具有PDIP40、SDIP42和QFP44封装形式。
(8)优化用于控制应用;优化支持C语言。
2.2.2GP32最小系统
硬件结构,但仅有一个MCU是无法工作的,它必须与以MC908GP32单片机为原型的HC08系列MCU的其他相应的外围电路一起,才能构成一个最小系统。
MC908GP32芯片(以40脚封装为例)最小系统的外围支撑电路包括电源与滤波电路、晶振电路和复位电路。
图MC908GP32最小系统电路图
1、电源供给与滤波
GP32芯片的20、19脚(Vdd,Vss)为芯片的电源输入端,1、2脚为内部PLL的电源供给。
接在电源与地之间的0.1uF电容为滤波电容,PLL电路目的在于由频率小的外部晶振产生较大频率的内部时钟,提高芯片的抗干扰性。
在MCU的第三脚,接有内部PLL模块的外部滤波电路。
滤波电路的作用是增强电路工作稳定性。
2、晶振电路
接在MCU第4、5脚之间的电路为晶振电路,这里选用的晶振频率为f=32.768Hz.。
通过内部PLL电路模块,可获得小于等于8MHz的内部总线频率。
电路及其元件参数是由GP32参考手册确定的。
实际开发中,嵌入式应用工程师往往根据参考手册提供的电路及参数,通过自己的实践,构筑MCU的外围支撑电路,而不深究其工作原理。
3、复位电路
接在MCU第6脚的电路为芯片硬件复位电路,正常工作时该脚通过10千欧姆电阻正极(这里设为5v电源供电),所以应为高电平。
若按下复位按钮RST,则第6脚通过51欧姆电阻接地,为低电平,芯片复位。
2.2.3MC68HC908GP32内部结构
MC68HC908GP32MCU(以下简称GP32MCU)的三种封装形式只有引脚数量和形式有所区别,其他方面是一致的。
图4给出了GP32的内部结构框图。
图4中I/O接口是按44引脚的GP32给出的,对于42引脚的GP32MCU则没有PTC5、PTC6两个引脚,对于40引脚的GP32MCU则没有PTC5、PTC6及PTD6/T2CH0、PTD7/T2H1四个引脚。
从内部结构简图可以看出,GP32内部有以下主要部分:
M68HC08CPU、存储器、定时接口模块、定时基模块、看门狗模块、并行I/O接口、串行通信接口SCI、串行外设接口SPI、断点模块、A/D转换模块、键盘中断模块、时钟发生模块及锁相环电路、低电压禁止模块、复位与中断模块、鉴控模块MON、系统设置模块。
2.2.4GP32MCU的引脚功能
右图给出了42引脚的MC68HC908GP32MCU的引脚图,引脚功能分类简介如下
(1)电源类引脚:
VDD、VSS(20引脚、19引脚):
电源供给端。
VDDAD/VREFH、VSSAD/VREFL(31引脚、32引脚):
内部A/D转换模块的电源供给及参考电压输入端。
VDDA、VSSA(1引脚、2引脚):
时钟发生器模块(CGM)的电源供给端。
(2)控制类引脚:
(6引脚):
外部低有效复位输入或输出引脚,有内部上拉电阻。
(14引脚):
外部中断输入引脚,有内部上拉电阻。
(4)I/O类引脚:
PTA7/KBD7-PTA0/KBD0(42-35引脚):
8位通用双向I/O接口,每个可编程为键盘输入引脚。
PTB7/AD7-PTBO/AD0(32-25引脚):
8位通用双向I/O接口,也可作为8位A/D转换输入引脚。
PTC4-PTC0(11-7引脚):
5位通用双向I/O接口。
PTD7/T2CH1-PTD0/SS(24-21引脚、18-15引脚):
8种特殊功能、双向I/O接口,其中PTD4-PTD7用于定时器模块(TIM1和TIM2)。
SPSCK、MOSI、MISO、SS用语串行外围接口(SPI)。
PTE1/TxD、PTE0/RxD(12引脚、13引脚):
2位双向I/O接口或串行通信。
(4)其他:
CGMXFC(3引脚):
CGM的外部滤波电容连接引脚。
OSC1、OSC2(5引脚、4引脚):
芯片内振荡器引脚。
2.3A/D转换模块
2.3.1进行A/D转换的基本问题
(1)采样精度:
数字量变化一个最小量时模拟信号的变化量,即采样位数。
(2)采样速率:
是指完成一次A/D采样所要花费的时间。
(3)滤波:
为了使采样的数据更准确,对采样的数据进行筛选去掉误差较大的毛刺。
通常采用中值滤波和均值滤波来提高采样精度。
中值滤波是取3次采样的中间值,均值滤波是取多次采样的算术平均值。
(4)物理量回归:
把A/D采样值与实际物理量对应起来。
2.3.2数字控制系统框图
被测参量模拟量数字量数字量模拟量
图2数字控制系统框图
2.3.3A/D转换模块的基本编程方法
(1)A/D转换初始化对ADCLK写入控制字节,决定时钟输入源是内部总线还是外部晶振,决定分频系数等。
(2)启动A/D转换对ADSCR写入控制字节,选取要转换的通道、决定转换结束数据获取的方式、设置是连续转换还是一次转换等。
(3)获A/D转换结果若是中断方式,在A/D中断程序中取得,若是查询方式,通过ADSCR的第7位(COCO位)取得,当COCO=1时可从ADR中取数。
2.4串行通信模块
2.4.1RS-232C总线标准
MCU引脚一般输入/输出使用TTL电平,而TTL电平的“1”和“0”的特征电压分别为2.4V和0.4V,适用于板内数据传输。
为了使信号传输得更远,美国电子工业协会EIA(ElectronicIndustryAssociation)制订了串行物理接口标准RS-232C。
RS-232C采用负逻辑,-3V~-15V为逻辑“1”,+3V~+15V为逻辑“0”。
RS-232C最大的传输距离是30m,通信速率一般低于20Kbps。
RS-232接口,简称“串口”,它主要用于连接具有同样接口的室内设备。
目前几乎所有计算机上的串行口都是9芯接口。
右图给出了9芯串行接口的排列位置,相应引脚含义见表。
引脚号
功能
1
接收线信号检测(载波检测DCD)
2
接收数据线(RxD)
3
发送数据线(TxD)
4
数据终端准备就绪(DTR)
5
信号地(SG)
6
数据通信设备准备就绪(DSR)
7
请求发送(RTS)
8
清除发送
9
振铃指示
表1芯串行接口引脚含义表
图2.6(a)芯串行接口排列图图2.6(b)MAX232芯片引脚图
在MCU中,若用RS-232C总线进行串行通信,则需要外接电路实现电平转换。
在发送端需要用驱动电路将TTL电平转换成RS-232C电平,在接收端需要用接收电路将RS-232C电平转换成TTL电平。
电平转换器不仅可以由晶体管分立元件构成,也可以直接使用集成电路。
该系统使用MAX232芯片,该芯片使用单一+5V电源供电实现电平转换。
图给出了MAX232的引脚。
MAX232芯片引脚含义说明如下:
•VCC(16脚):
正电源端,一般接+5V
•GND(15脚):
地
•VS+(2脚):
VS+=2VCC-1.5V
•VS-(6脚):
VS-=-2VCC-1.5V
•C2+、C2-(4、5脚):
一般接1μF的电解电容
•C1+、C1-(1、3脚):
一般接1μF的电解电容
输入输出引脚分两组,基本含义见表2。
在实际使用时,若只需要一路SCI,可以使用起中的任何一组。
组别
TTL电平引脚
方向
典型接口
RS-232电平引脚
方向
典型接口
1
11
12
输入
输出
接MCU的TxD
接MCU的RxD
13
14
输入
输出
连接到接口与其他设备通过RS-232相接
2
10
9
输入
输出
接MCU的TxD
接MCU的RxD
8
7
输入
输出
连接到接口与其他设备通过RS-232相接
表2MAX232芯片I/O引脚分类与基本接法
2.4.2SCI电平转换电路设计
具有SCI接口的MCU,一般具有发送引脚(TxD)与接收引脚(RxD),不同公司或不同系列的MCU,使用的引脚缩写名可能不一致,但含义相同。
SCI的电平转换电路,主要目的是将MCU的发送引脚TxD与接收引脚RxD的TTL电平,通过RS-232电平转换芯片转换为RS-232电平。
MCU的串行通信引脚12(TxD)、13(RxD)分别接MAX232的11(T1IN)、12(R1OUT),MAX232的13(R1IN)、14(T1OUT)分别为RS-232电平的2(接收RxD)与3(发送TxD)引脚。
基本过程是:
发送过程——MCU的12(TxD)(TTL电平)经过MAX232的11(T1IN)送到MAX232内部,在内部TTL电平被“提升”为RS-232电平,通过14(T1OUT)发送出去。
接收过程——外部RS-232电平经过MAX232的13(R1IN)进入到MAX232的内部,在内部RS-232电平被“降低”为TTL电平,经过12(R1OUT)送到MCU的13(RxD),进入MCU内部。
详细原理图如图
图SCI电平转换电路
第三章系统软件设计
3.1MCU的程序设计
在MCU上的程序包括头文件定义、温度驱动子程序、系统初始化子程序、串口通信子程序等,通过专用编译器和写入工具写到MCU中。
系统的软件部分用C语言编程,采用模块化结构,主要由A/D转换模块、单片机内部数据处理模块、温度显示模块等3部分构成,便于修改和维护。
系统的所有程序文件,见下表:
温度测量系统工程文件
文件类型
文件名
功能简介
头文件
GP32C.h
GP32MCU映像寄存名定义头文件
EnDisInt.h
开放或禁止MCU各模块中断头文件
Type.h
类型别名定义头文件
Includes.h
总头文件
AD.h"
A/D转换头文件
SCI.h
串行通信头文件
C语言
子函数文件
Setup.c
芯片初始化文件
SCI.c
串口通信文件
AD.c
A/D转换文件
C语言主函数
Main.c
主函数文件
第四章编辑程序代码
1.系统主函数模块
#include"Includes.h"//总头文件
INT8ULight_Pin;
voidmain(void)
{DisableMCUInt();//禁止总中断
MCUInit();//芯片初始化
//在此处添加用户程序
LEDinit();
FMQinit();
SCIinit();
ADCinit();
EnableMCUInt();
EnableSCIreInt();
while
(1)
{SCISend1(ADCave(0,200));
Light_Pin=0;
if(ADCave(0,200)<=0x40)
{LED_L_A('L');
Delay(15000);
LED_L_A('A');
Delay(15000);
FMQSOUND(ADCave(0,200));
Delay(15000);
}
elseif(ADCave(0,200)>0x40)
{Light_Pin=1;
LED_L_A('L');
Delay(15000);
LED_L_A('A');
Delay(15000);
FMQSOUND(ADCave(0,200));
}
}
}
1.2GP32系统初始化程序
#include"GP32C.h"//映像寄存器名定义
voidMCUInit(void)
{//1.设置CONFIG2,CONFIG1
//1.1设置CONFIG2
CONFIG2=0b00000001;
//||_SCIBDSRC=1内部总线时钟用作SCI时钟
//|__OSCSTOPENB=0在stop模式下禁止振荡器工作
//1.2设置CONFIG1
CONFIG1=0b00111101;
//||||||||_COPD=1禁止COP模块
//|||||||__STOP=0禁止STOP指令
//||||||___SSREC=132个CGMXCLK周期退出STOP模式
//|||||____LVI5OR3=1LVI工作在5V
//||||_____LVIPWRD=1禁止LVI模块电源
//|||______LVIRSTD=1允许LVI复位信号
//||_______LVISTOP=0在stop模式下禁止LVI
//|________COPRS=0COP溢出范围使用长的时间
//2.PLL编程
PCTL=0x00;//
(1)禁止PLL:
清零PLL控制寄存器PCTL
PCTL=0x01;//
(2)将P,E写入PTCL,置VCO的参考频率为2
PMSH=0x01;//(3)将N写入PMSH,PMSL,置VCO的倍频因子$12C
PMSL=0x2C;
PMRS=0b10000000;//(4)将L写入PMRS,置VCO的输出频率范围系数为$80
PRDS=0x01;//(5)将R写入PRDS
PCTL|=(1<<5);//(6)置PCTL.PLLON=1,启动PLL电路
PBWC|=(1<<7);//(7)PBWC自动带宽控制位=1,选择自动控制方式
PCTL|=(1<<4);//(8)PCTL.BCS=1,选择PLL电路为时钟源
}
1.3串行通信子函数
//[SCI.h]串行通信头文件
#include"GP32C.h"
#include"Type.h"
#defineReSendStatusRSCS1
#defineReTestBit5
#defineSendTestBit7
#defineReSendDataRSCDR
voidSCIinit(void);
voidSCISend1(INT8Uo);
voidSCISendN(INT8Un,INT8Uch[]);
INT8USCIre1(INT8U*P);
INT8USCIreN(INT8Un,INT8Uch[]);
//[SCI.c]串行通信驱动文件
#include"SCI.h"
voidSCIinit(void)
{SCBR=0b00000010;
SCC1=0b01000000;
SCC2=0b00001100;
}
voidSCISend1(INT8Uo)
{while
(1)
if((ReSendStatusR&(1<=0)
{ReSendDataR=o;
break;
}
}
voidSCISendN(INT8Un,INT8Uch[])
{inti;
for(i=0;iSCISend1(ch[i]);
}
INT8USCIre1(INT8U*p)
{INT16Uk;
INT8Ui;
for(k=0;k<0xfbbb;k++)
if((ReSendStatusR&(1<=0)
{i=ReSendDataR;
*p=0x00;
break;
}
if(k>=0xfbbb)
{i=0xff;
*p=0x01;
}
returni;
}
INT8USCIreN(INT8Un,INT8Uch[])
{intm;
INT8Ufp;
m=0;
while(m{ch[m]=SCIre1(&fp);
if(fp==1)
{
return1;
}
m++;
}
return0;
}
1.4小灯循环被点亮模块
//[LED.h]小灯驱动头文件
#include"GP32C.h"
#include"Type.h"
#defineLight_PPTA
#defineLight_DDDRA
voidLEDinit(void);
voidLED_L_A(INT8Uflag);