1、目录第一章 系统概要 11.1 系统背景 11.2 系统功能框图 1第二章 系统硬件设计 22.1 系统原理图 22.2 单片机(MCU)模块 .22.2.1 MC908GP32 单片机性能概述 .22.2.2 内部结构简图与引脚功能 32.2.3 GP32 最小系统 .52.3 传感器模块 62.4 信号放大模块 72.5 A/D 转换模块 .72.5.1 进行 A/D 转换的基本问题 .72.5.2 A/D 转换模块的基本编程方法 .82.5.3 A/D 芯片 TCL2543 概述 .82.6 串行通信模块 112.6.1 串行通信常用概念 112.6.2 RS-232C 总线标准 .12
2、第三章 系统软件设计 133.1 MCU 方(C )程序 133.1.1 A/D 转换子程序 .143.1.2 串行通信子程序 173.2 PC 方(VB)程序 .193.3 PC 方界面 .23第四章 系统测试 24第五章 总结展望 245.1 总结 245.2 展望 25参考文献 25第一章 系统概要1.1 系统背景温度是日常生活、工业、医学、环境保护、化工等领域遇到的一个物理量。温度测量的基本方法是使用温度计直接读取。最常见的测量温度的工具是各种各样的温度计,它们常常以刻读的形式表示温度的高低,人们必须通过读取刻度的多少来测量温度。由于单片机在检测和控制系统中得到广泛的应用,利用单片机和
3、温度传感器构成的电子式智能温度计就可以直接测量温度,得到温度的数字值并显示出来,既简单方便,又直观准确。本次课程设计的目的是以 MC908GP32 单片机为核心设计出一个路温度测量系统。设计将温度传感器采样得到的模拟信号转换成数字信号,通过串口在 PC的界面显示出来。本次课程设计用温度传感器将被测温度转换为电量,经过放大滤波电路处理后,由模数转换器将模拟量转换为数字量,再与单片机相连,通过可编程键盘显示接口芯片实现温度限值的设定。.被测量经过温度传感器转换为电量,再放大后送给 A/D 转换器。电量经过 A/D 转换为二进制数值,单片机根据设计目的完成相应的软件处理。处理完毕后,送键盘显示处理芯
4、片,然后再由数码管显示。这是一种低成本的利用单片机 I/O 口实现的温度检测电路, 该电路非常简单, 易于实现, 并且适用于几乎所有类型的单片机。1.2 系统功能框图数据采集与传输系统一般由信号调理电路,多路开关,采样保持电路,A/D,单片机,电平转换接口,接收端(单片机、PC 或其它设备)组成。被测物理量传感器预处理ADC输入接口M C UL E D键盘电平转换接口P CA/D 转换模块即模/数转换模块,功能是将电压信号转换为对应的数字信号。实际应用中,这个电压信号可能由温度,湿度,压力等实际物理量经过传感器和相应的交换电路转换而来。经过 A/D 转换后,MCU 就可以处理这些物理量。 第二
5、章 系统硬件设计2.1 系统原理图整个系统软件设计分为两个部分,作为主控的 PC 端的软件设计及作为数据采集器的单片机终端节点的软件设计。系统采用模块化编程,将各部分功能分别实现,主要的功能子程序有:数据采集、标度变换、数制转换、数值显示、发送、接收和部分中断子程序。图 2.1 系统原理图2.2 单片机(MCU)模块2.2.1 MC908GP32 单片机性能概述MC908GP 系列单片机是 HC80 系列单片机大家族中具有通用性的一族,MC908GP32 是 MC908GP 系列中的一个型号,MC908GP32 单片机具有 3 种封装形式,分别为 40 脚、42 脚、44 脚。MC908GP3
6、2 单片机的主要特点如下:(1)512B 片内 RAM;32KB 片内 Flash 程序存储器,具有在线编程能力和保密功能。(2)时钟发生器模块,具有 PLL 电路,可产生各种工作频率;内部总线频率最高可达 8MHz。(3)增强的 HC50 CPU 结构,16 种寻址方式(比 HC50 多 8 种) ,16 位变址寄存器和堆栈指针,存储器至存储器数据传送,快速 8*8 指令,扩展的循环控制功能,BCD 功能。(4)33 根通用 I/O 脚,包括 26 根多功能 I/O 脚和 5 或 7 根专用 I/O 脚;PTA、PTC 和 PTD 的输入口有可选择的上拉电阻;PTC0PTC4 有 25mA
7、吸流和放流能力,其他口有 15mA 吸流和放流能力(总体驱动电流应小于 150mA) ;所有口有最高 5mA 输入电流保护功能。(5) 增强型串行通信口 SCI;串行外围接口 SPI;两个16位双通道定时器接口模 块(TIM1和 TIM2) ,每个通道可选择为输入捕捉、输出比较和 PWM,其 时钟 可 分 别 选 为 内 部 时 钟 的 1、 2、 4、 8、 16、 32和 64的 分 频 值 ; 带 时 钟 预 分频 的 定 时 基 模 块 有 8种 周 期 性 实 时 中 断 (1、 4、 16、 256、 512、 1024、 2048和 4096Hz), 可 在 STOP 方 式 时
8、 使 用 外 部 32KHz 晶 振 周 期 性 唤 醒 CPU; 8位 键盘 唤 醒 口 。(6)系 统 保 护 特 性 : 计 算 机 工 作 正 常 (COP)复 位 ; 低 电 压 检 测 复 位 , 可 选 为3V 或 5V 操 作 ; 非 法 指 令 码 检 测 复 位 ; 非 法 地 址 检 测 复 位 。(7)具 有 PDIP40、 SDIP42和 QFP44封 装 形 式 。(8)优 化 用 于 控 制 应 用 ; 优 化 支 持 C 语 言 。2.2.2 内部结构简图与引脚功能1. 内部结构简图(44 引脚)单 片 机 (以 下 简 称 GP32 单 片 机 )的 三 种
9、封 装 形 式 只 是 引 脚 数 量 和 形 式 有所 区 别 , 其 它 方 面 是 一 致 的 。 图 中 I/O 口 是 按 44 引 脚 的 GP32 给 出 的 , 对于 42 引 脚 的 GP32 单 片 机 则 没 有 PTC5、 PTC6 两 个 引 脚 , 对 于 40 引 脚 的GP32 单 片 机 则 没 有 PTC5、 PTC6 及 PTD6/T2CH0、 PTD7/T2CH1 四 个 引 脚 。从 内 部 结 构 简 图 可 以 看 出 , GP32 内 部 有 以 下 主 要 部 分 : CPU08、 存 储器 、 定 时 器 接 口 模 块 、 定 时 基 模
10、块 、 看 门 狗 模 块 、 通 用 I/O 接 口 、 串 行 通信 接 口 SCI、 串 行 外 设 接 口 SPI、 断 点 模 块 、 A/D 转 换 模 块 、 键 盘 中 断 模 块 、时 钟 发 生 模 块 及 锁 相 环 电 路 、 低 电 压 禁 止 模 块 、 复 位 与 中 断 模 块 、 监 控 模 块MON 和 系 统 设 置 模 块 。2. GP32 单片机的引脚功能40引 脚 的 MC908GP32单 片 机 的 引 脚 图 , 引 脚 功 能 分 类 简 介 如 下 :(1) 电 源 类 引 脚VDD、 VSS(20脚 、 19脚 ): 电 源 供 给 端 。
11、VDDAD /VREFH、 VSSAD /VREFL(31脚 、 32脚 ): 内 部 A/D 转 换 器 的 电 源 供 给 及参 考 电 压 输 入 端 。VDDA、 VSSA(1脚 、 2脚 ): 时 钟 发 生 器 模 块 (CGM)的 电 源 供 给 端 。(2) 控 制 类 引 脚(6脚 ): 外 部 低 有 效 复 位 输 入 或 输 出 脚 , 有 内 部 上 拉 电 阻 。RT(14脚 ): 外 部 中 断 输 入 脚 , 有 内 部 上 拉 电 阻 。IQ(3) I/O 类 引 脚PTA7/KBD7 PTA0/KBD0(40 33脚 ): 8位 通 用 双 向 I/O 口
12、, 每 个 可 编 程为 键 盘 输 入 脚 。PTB7/AD7 PTB0/AD0(30 23脚 ): 8位 通 用 双 向 I/O 口 , 也 可 作 为 8路 8位 A/D 转 换 输 入 脚 。PTC4 PTC0(11 7脚 ): 5位 通 用 双 向 I/O 口 。PTD5/T1CH1 PTD0/ (22、 21、 18 15脚 ): 6种 特 殊 功 能 、 双 向SI/O 口 , 其 中 T1CH1、 T1CH0用 于 定 时 器 模 块 (TIM1)。SPSCK、 MOSI、 MISO、 用 于 串 行 外 围 接 口 (SPI)。PTE0/TxD、 PTE1/RxD(12脚 、
13、 13脚 ): 2位 双 向 I/O 口 或 串 行 通 讯 口 。(4) 其 它CGMXFC(3脚 ): CGM 的 外 部 滤 波 电 容 连 接 脚 。OSC1、 OSC2(5脚 4脚 ): 片 内 振 荡 器 引 脚 。2.2.3 GP32 最小系统最小系统图是能够保证单片机正常工作的最小模块,它使用了最少的器件,芯片,并组合了温度测量的一些必备组件,如蜂鸣器,电阻,二极管,电容等。各部件相互配合,共同完成了温度测量系统全部工作。GP32 最小系统1.电源供给与滤波GP32 芯片的 20、19 脚(VDD、VSS)为芯片的电源输入端,1、2 脚(VDDA、VSSA)为内部 PLL 模块
14、的电源供给。接在电源与地之间的0.1F 电容为滤波电容。PLL 电路目的在于由频率小的外部晶振产生较大频率的内部总线时钟,提高芯片的抗干扰性。由于这部分内容涉及的编程内容很少,但原理较难理解,所以放入第 14 章介绍。这里只要知道 GP32 内有 PLL电路就可以了,而且 GP32 内的 PLL 电路模块需要外接电源。在 MCU 的第 3 脚,接有内部 PLL 模块的外部滤波电路。滤波电路的作用主要是增强电路工作稳定性。2.晶振电路接 MCU 第 4、5 脚(OSC2、OSC1)之间的电路为晶振电路,这里选用的晶振频率为 f=32.768KHz。通过内部 PLL 电路模块,可获得小于等于 8M
15、Hz 的内部总线频率。电路及其元件参数是由 GP32 参考手册确定的。实际开发中,嵌入式应用工程师往往根据参考手册提供的电路及参数,通过自己的实践,构筑 MCU的外围支撑电路,而不深究其工作原理。3.复位电路接在 MCU 第 6 脚( )的电路为芯片硬件复位电路。正常工作时该脚通过 10K 电阻接到电源正极(这里设为 5V 电源供电) ,所以应为高电平。若按下复位按钮RST,则第 6 脚通过 51接地,为低电平,芯片复位。2.3 传感器模块温度传感器采用的是 NS 公司生产的 LM35,它具有很高的工作精度和较宽的线性工作范围,该器件输出电压与摄氏温度线性成比例。LM35 与用开尔文标准的线性
16、温度传感器相比更有优越之处,LM35 无需外部校准或微调,可以提供1/4的常用的室温精度。工作电压:直流 430V;工作电流:小于 133A输出电压:+6V-1.0V输出阻抗:1mA 负载时 0.1;精度:0.5精度(在+25时) ;漏泄电流:小于 60A;比例因数:线性+10.0mV/;非线性值:1/4;校准方式:直接用摄氏温度校准;使用温度范围:-55+150额定范围。基于 LM35开发的温控系统,工作稳定可靠,具有体积小、灵敏度高、响应时间短、抗干扰能力强等特点。LM35的输出电压与摄氏温度的线形关系可用下面公式表示,0时输出为0 V,每升高1,输出电压增加10 mV。其电源供应模式有单
17、电源与正负双电源两种。正负双电源的供电模式可提供负温度的测量,单电源模式在25下电流约为50 mA,非常省电。2.4 信号放大模块由于温度传感器 LM35输出的电压范围为00.99 V,虽然该电压范围在AD 转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进行 AD 转换则会导致转换成的数字量太小、精度低。系统中选用通用型放大器 A741对 LM35输出的电压信号进行幅度放大,还可对其进行阻抗匹配、波形变换、噪声抑制等处理。系统采取同相输入,电压放大倍数为5倍,电路图如图所示:信号放大电路图2.5 A/D 转换模块2.5.1 进行 A/D 转换的基本问题A/D 转换模块(Ana
18、log To Digital Convert Module),即模/数转换模块,是将电压信号转换为对应的数字信号。这个电压量是由压力传感器把压力转换过来,传到 MCU 处理。(1)采样精度:是指数字量变化一个最小量时模拟信号的变化量,即通常所说的采样位数。 (2)采样速率:是指完成一次 A/D 采样所要花费的时间。 (3)滤波:为了使采样的数据更准确,对采样的数据进行筛选去掉误差较大的毛刺。通常采用中值滤波和均值滤波来提高采样精度。中值滤波是取 3 次采样的中间值,均值滤波是取多次采样的算术平均值。 (4)物理量回归:把 A/D 采样值与实际物理量对应起来。2.5.2 A/D 转换模块的基本编
19、程方法(1)A/D 转换初始化:对 ADCLK 写入控制字节,决定时钟输入源是内部总线还是外部晶振,决定分频系数等。 (2)启动 A/D 转换:对 ADSCR 写入控制字节,选取要转换的通道、决定转换结束数据获取的方式、设置是连续转换还是一次转换等。 (3)获 A/D 转换结果:若是中断方式,在 A/D 中断程序中取得,若是查询方式,通过ADSCR 的第 7 位(COCO 位)取得,当 COCO=1 时可从 ADR 中取数。2.5.3 A/D 芯片 TCL2543 概述一、引脚:TLC2543为20脚 DIP 封装,引脚图如下图所示。2.5.3.1 TLC2543引脚图TLC2543具有4线制
20、串行接口,分别为片选端(CS),串行时钟输入端(I/O CLOCK),串行数据输入端(DATA IN)和串行数据输出端(DATA OUT)。它可以直接与 SPI 器件进行连接,不需要其他外部逻辑。同时,它还在高达4MHz 的串行速率下与主机进行通信。TLC2543除了具有高速的转换速度外,片内还集成了14路多路开关。其中n 路为外部模拟量输入,3路为片内自测电压输入。在转换结束后,EOC 引脚变为高电平,转换过程中由片内时钟系统提供时钟,无需外部时钟。在 AD 转换器空闲期间,可以通过编程方式进入断电模式,此时器件耗电只有25pA。AD 芯片 TLC2543是一种12位开关电容逐次逼近式模数转
21、换器,带有SPI(Serial Peripheral Interface)接口。它消除了以往许多 AD 芯片并行输出、连线复杂的缺点,并在 AD 转换结果串行输出的同时,可以串行输入下次AD 转换位的控制字。TLC2543的管脚如图所示。它有三个输入控制端:片选() 、 IO 时钟(IOclock )以及数据输入端(Data Input) ,同时还可以通cs过一个串行的三态输出端与主处理器及其外围串行口进行通讯,以输出转换结果。除了高速的转换功能和通用的控制能力外, TLC2543的片内还具有14通道多路器,可以选择11个模拟输入通道(AIN0AIN10)或3个内部自测电压(selftest)
22、中的一个。转换结束时,EOC 输出端变高,指示转换完成。二、控制字:TLC2543的工作过程如下:首先在8、12或16时钟周期里向片内控制寄存器写入8位的控制字,控制字中的2位决定时钟长度,在最后一个时钟周期的下降沿启动AD 转换过程,经过一段转换时间,在随后的8、12或16个时钟周期里,从 DATA OUT 脚读出数据。控制字的定义见下表:控制字的前四位(D7-D4)代表11个模拟通道的地址;当其为1100-1110时,选择片内检测电压;当其为1111时,为软件选择的断电模式,此时,AD 转换器的工作电流只有25uA。控制字的第3位和第4位(D3一 D2)决定输出数据的长度,01表示输出数据
23、长度为8位;11表示输出数据长度为16位;X1表示输出数据长度为12位,X 可以为1或0。制字的第2位(D1)决定输出数据的格式,0表示高位在前,1表示低位在前。控制字的第1位(D0)决定转换结果输出的格式。当其为0时,为无极性输出(无符号二进制数),即模拟电压为 Vnef+,时,转换的结果为0FFFH;模拟电压为 Vnef-时,转换的结果为0000H。其为1时,为有极性输出(有符号二进制数),即模拟电压高于(Vnef+-Vnef-)/2时符号位为0;模拟电压低于(Vnef+-Vnef-)/2时符号位为1;模拟电压为 Vnef+时,转换的结果为03FFH;模拟电压为 Vnef-时,转换的结果为
24、0800H。模拟电压为(Vnef+-Vnef-)/2时,转换的结果为0000H。三、工作时序 :以 MSB 为前导, 用 CS 进行12个时钟传送的工作时序如下图所示。1.上电时,EOC=“1” ,CS=“1”2.使 CS 下降,前次转换结果的 MSB 即 A11位数据输出到 Dout 供读数。3.将输入控制字的 MSB 位即 C7送到 Din,在 CS 之后 tsu=1.425us 后,使 CLK 上升,将 Din 上的数据移入输入寄存器。4.CLK 下降,转换结果的 A10位输出到 Dout 供读数。5.在第4个 CLK 下降时,由前4个 CLK 上升沿移入寄存器的四位通道地址被译码,相应
25、模入通道接通,其模入电压开始时对内部开关电容充电。6.第8个 CLK 上升时,将 Din 脚的输入控制字 C0位移入输入寄存器后,Din 脚即无效。7.第11个 CLK 下降,上次 AD 结果的最低位 A0输出到 Dout 供读数。至此,I/O数据已全部完成,但为实现12位同步,仍用第12个 CLK 脉冲,且在其第12个CLK 下降时,模入通道断开,EOC 下降,本周期设置的 AD 转换开始,此时使 CS上升。8.经过时间 tconvj) tmp=i; i=j; j=tmp; if (k=j)tmp=j;elseif (k=i) tmp=k;else tmp=i;return tmp;/*ad
26、ave:1 路 A/D 转换函数(均值滤波)-*功能:对通道 channel 的 A/D 转换结果求 n 次平均值 *参数:n=平均次数,channel=通道号 *返回:该通道均值滤波后的 A/D 转换结果 *-*/ unsigned char adave(unsigned char n,unsigned char channel) /求 n 次 A/D 转换的平均值unsigned char i;unsigned int j;j=0;for (i=0;i= 0xfbbb)i = 0xff;*p = 0x01;return i;/SCIreN:HC08 串行接收 N 个字节-*/功能:接收 N
27、 个字节数据,并存放在 ch 数组中 /-*INT8U SCIreN(INT8U n, INT8U ch) int m;INT8U fp; m = 0;while (m sx Then Timer1.Enabled = True: Timer2.Enabled = False: Shape1.Visible = True: Shape2.Visible = True: Shape2.BackColor = &H808080If Text1.Text = xx Then Timer1.Enabled = False: Timer2.Enabled = False: Shape1.Visible
28、= True: Shape2.Visible = Truex(i) = i * 5If i = 0 Thengraph1.Line (-95, 0)-(x(i) - 90), buf(i), RGB(255, 255, 255)Elsegraph1.Line (x(i - 1) - 90), buf(i - 1)-(x(i) - 90), buf(i), RGB(255, 255, 255)End Ifi = i + 1If i = 35 Theni = 0buf(1) = 0buf(2) = 0buf(3) = 0buf(4) = 0buf(5) = 0buf(6) = 0buf(7) =
29、0buf(8) = 0buf(9) = 0buf(10) = 0buf(11) = 0buf(12) = 0buf(13) = 0buf(14) = 0buf(15) = 0buf(16) = 0buf(17) = 0buf(18) = 0buf(19) = 0buf(20) = 0buf(21) = 0buf(22) = 0buf(23) = 0buf(24) = 0buf(25) = 0buf(26) = 0buf(27) = 0buf(28) = 0buf(29) = 0buf(30) = 0buf(31) = 0buf(32) = 0buf(33) = 0buf(34) = 0grap
30、h1.ClsEnd IfText2.Text = NowIf bc = 1 Thenrs!cysj = Text2.Textrs!caz = Text1.Textrs.Update: bc = bc + 1Elsers.AddNewrs!cysj = Text2.Textrs!caz = Text1.Textrs.UpdateEnd IfEnd SelectEnd SubPrivate Sub sxwd_Click()Dim bbb As IntegerDim str_xx As Stringstr_xx = InputBox(“请设置上限报警温度“, “上限报警温度“, 30)If Len(
31、str_xx) 0 Thensx = Int(str_xx)If MSComm1.PortOpen = True ThenMSComm1.PortOpen = FalseMSComm1.PortOpen = TrueElseMSComm1.PortOpen = TrueEnd IfElsebbb = MsgBox(“报警温度没有设置,将不能采集数据!“, 0, “提示“)End IfEnd SubPrivate Sub Timer1_Timer()Shape1.Visible = Not Shape1.VisibleBeepEnd SubPrivate Sub Timer2_Timer()Sh
32、ape2.Visible = Not Shape2.VisibleBeepEnd SubPrivate Sub Timer3_Timer()graph1.Scale (-100, 100)-(100, -100)graph1.CurrentX = -95graph1.CurrentY = 0graph1.Line (-95, 100)-(-95, -100), RGB(255, 255, 255)graph1.Line (100, 0)-(-100, 0), RGB(255, 255, 255) End Su3.3 PC 方界面第四章 系统测试传统的温度测量系统中,一般选用模拟式传感器,其特点
33、是输出为模拟量,因此在测量中必须经过 AD 转换才能成为计算机处理的数字量。本系统由温度传感器通过 AD 转换器及 FPGA 传输到上位机,最终输出模拟温度数值。A/D 转换器应是一种低噪声高精度模数转换器,适用于低频测量应用的完整模拟前端,可以直接接在传感器上,简化系统设计,降低整体成本.应用中需要重点注意内部缓冲器、数字滤波器、校准模式三个方面的使用,能大幅度提高测量精度。第五章 总结展望5.1 总结在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,只有将这两方面的知识融会贯通和有机结
34、合,才能设计出优良的应用系统。学习单片机这门课程,要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术。使我从硬件软件的结合上理论联系实际,提高动手能力,从而全面掌握单片机的应用。在这次课程设计中,我认识到我有很多不足得地方。首先,以前汇编学的不是很扎实,所以一些汇编程序不是很容易理解,看起来更费力。其次,现在普遍的动手能力不足,拿到了题目往往不知道向什么方向去做。后来我通过老师的指导以及同学的讨论下,在克服了重重的困难后,终于基本调试成功了此次课程设计所要求做的温度传感器。通过这次的课程设计,我认识到学好计算机
35、要重视实践操作,对知识的学习,不能浅尝辄止,要深入去学习,去了解,这样才会有所收获。有许多东西,许多事,不是想像中的那么容易,不去实践,永远也不会有提高不仅仅是学习单片机原理,还是其它的课程,以及其它的计算机方面的知识都要重在实践,不能只是学习重视书本上的理论知识,所以日后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机这门课程。5.2 展望在温度传感器多个领域的研究中,很多内容没有得到统一的结论,这还需要在以后的研究中进一步探讨。嵌入式系统中不可避免地受到外界因素的影响,使测量结果与实际有偏差。如何减少干扰是工作中需要解决的问题。温度测量系统要求其输出的温度值有一定的精确性,本系统
36、试图找到一种精确方法解决这个问题,但仍然显得很是不足。具体表现在输出数值精度不高,一般系统可可以精确到 0.01,但此系统到不到此要求。另外,系统可靠性也是对本系统的一大考验,本系统在此方面还有待提高。还有一点就是对模数转换的要求,要求模数转换精确。目前,国内对温度传感器的研究由于技术水平滞后于发达国家和实验设备的限制,其探索的深度和广度还不够,有待于进一步研究探索。参考文献1王宜怀 刘晓升 嵌入式技术基础与实践【M】 清华大学出版社 20092邵贝贝 单片机嵌入式应用在线开发方法【N】 清华大学出版社 20043陈长顺 嵌入式基础【M】 北京航空航天大学出版社 20094 周六顺 基于 VB 编程的微机温度采集系统设计 化工设计通讯 20025 ADAM 采集模块使用手册 研华科技股份有限公司6马文华 嵌入式系统设计与开发 科学出版社 2006