1、信息与计算科学系课程设计报告课程设计报告课 程:智能测量仪表题 目:智能测量仪表学生姓名:XXXXXX 专业年级:2009 自动化 指导教师:XXXXXX XXXX信 息 与 计 算 科 学 系2013年3月25日智能测量仪表本次课程设计中智能温度测量仪表所采用的温度传感器为LM35DZ。其输出电压与摄氏温度成线性比例关系,无需外部校准,在0100温度范围内精度为0.40.75。,输出电压与摄氏温度对应,使用极为方便。灵敏度为10。0mV/,重复性好,输出阻抗低,电路接口简单和方便,可单电源和正负电源工作.是一种得到广泛使用的温度传感器.本次课程设计的主要目的在于让学生把所学到的单片机原理、电
2、子线路设计、传感器技术与原理、过程控制、智能仪器仪表、总线技术、面向对象的程序设计等相关专业课程的内容系统的总结,并能有效的使用到项目研发中来,做到学以致用.课程设计的内容主要分为三个部分,即使用所学编程语言(C或者汇编)完成单片机方面的程序编写、使用VB或VC语言完成PC机人机界面设计(也可以用C+API实现)、按照课程设计规范完成课程设计报告.目录1课程设计任务和要求311 设计任务322 设计要求32系统硬件设计321 STC12C5A60S2单片机A/D转换简介322 LM35DZ简介723 硬件原理图设计73系统软件设计1031 设计任务1032 程序代码1033 系统软件设计调试1
3、74系统上位机设计1841 设计任务1842 程序代码1843 系统上位机软件设计调试215系统调试与改善2251 系统调试2252 系统改善226系统设计时常见问题举例与解决办法247总结251. 课程设计任务和要求1。1课程设计任务本次课程设计要求设计出智能化温度测量仪表,要求该测量仪表能够将所测得的温度数据和当前电机设备的运行状况远传给上位机。仪表测量范围为0100;测量精度为1;可以进行温度整定,比如,温度30,启动压缩机外设;温度20,关闭压缩机外设;要求上位机和下位机都能显示温度值和电机设备的运行状态并且都能独立控制温度数据采集状态和电机设备的运行状态;通讯方式可以采用RS232C
4、或485。上位机要求人机界面在保证简单实用的基础上做的美观。 1。2课程设计要求(1)利用所学专业课相关知识合理的选择器材,使用Protel99se绘制出硬件原理图。(2)使用C语言或者汇编语言完成下位机程序驱动,并且要尽量保证系统的稳定性和可靠性以及实用性。(3)使用VB或VC语言或用C+API( 应用程序接口调用)实现上位机人机界面的设计,要求上位机发送的命令下位机能及时的给予响应,并且上位机能够实时准确的显示下位机所上传数据以及电机设备的运行状态。(4)按照课程设计规范撰写课程设计报告。2。 系统硬件设计2。1 STC12C5A60S2单片机A/D转换简介STC12C5A60S2单片机集
5、成有8路10位高速模数转换器(ADC),速度可达到250KHz(25万次/秒,可做温度检测、压力检测、电池电压检测、按键扫描、频谱检测等.STC12C5A60S2单片机片内集成8通道10位模数转换器(ADC).ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D 使用的口可继续作为I/O口使用。2。1.1 模数转换器的结构图STC12C5A60S2单片机的模数转换器由多路选择开关、比较器、逐次比较寄存器、10位ADC、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC控制寄存器ADC_CONTR构成。如
6、图21所示。图21 STC12C5A单片机内部A/D转换结构图2。1。2 模数转换器的参考电压STC12C5A60S2单片机A/D转换模块的参考电压源是输入工作电压Vcc,所以一般不用外接参考电压源。如三端稳压电路7805的输出电压是5V,但实际电压可能是4。88V到4。96V,如果用户需要的精度比较高,可在应用产品出厂前将实际测出的工作电压值记录在单片机内部的EEPROM里面,以供程序校正使用。如果Vcc不稳定(例如电池供电的系统中,电池电压常常在5。3V4。2V之间漂移), 则需要在8路A/D转换的一个通道外接一个稳定的参考电压源,来计算出此时的工作电压Vcc,再计算出其他几路A/D转换通
7、道的电压。例如,可在ADC转换通道的第七通道外接一个 1。25V的基准参考电压源,由此求出此时的工作电压Vcc,再计算出其它几路A/D转换通道的电压。2。1。3 与ADC相关的寄存器1、 P1口模拟功能控制寄存器P1ASF(地址为9DH,复位值为00H)P10ASFP11ASFP12ASFP13ASFP14ASFP15ASFP16ASFP17ASF位名称D0D1D2D3D4D5D6D7位号如果要使用相应口的模拟功能,需将P1ASF特殊功能寄存器中的相应位置为1.如,若要使用P1。6的模拟量功能,则需要将P16ASF设置为1.(注意,P1ASF寄存器不能位寻址,可以使用汇编语言指令ORL P1A
8、SF, 40H,也可以使用C语言语句P1ASF = 0x40;)2、 ADC控制寄存器ADC_CONTR(地址为BCH,复位值为00H)CHS0CHS1CHS2ADC_STARTADC_FLAGSPEED0SPEED1ADC_POWER位名称D0D1D2D3D4D5D6D7位号1)ADC_POWER:ADC电源控制位。0:关闭ADC电源。1:打开ADC电源。 2)SPEED1、SPEED0:ADC转换速度控制位。3)ADC_FLAG:A/D转换结束标志位。A/D转换完成后,ADC_FLAG = 1,要由软件清0.不管A/D转换完成后由该位申请产生中断,还是由软件查询该标志位判断A/D转换是否结
9、束,当A/D转换完成后,ADC_FLAG = 1,一定要软件清0。4)ADC_START:A/D转换启动控制位,ADC_START=1,开始转换;ADC_START=0,停止转换。5)CHS2、CHS1、CHS0:模拟输入通道选择,如表21所示。表21 模拟通道选择表CHS2CHS1CHS0Analog Channel Select (模拟输入通道选择)000选择 P1.0 作为A/D输入来用001选择 P1.1 作为A/D输入来用010选择 P1.2 作为A/D输入来用011选择 P1.3 作为A/D输入来用100选择 P1.4 作为A/D输入来用101选择 P1.5 作为A/D输入来用11
10、0选择 P1.6 作为A/D输入来用111选择 P1.7 作为A/D输入来用程序中需要注意的事项:由于是2套时钟,所以,设置ADC_CONTR控制寄存器后,要加4个空操作延时才可以正确读到ADC_CONTR寄存器的值,原因是设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。3、 A/D转换结果寄存器ADC_RES、ADC_RESL特殊功能寄存器ADC_RES(地址为BDH,复位值为00H)和ADC_RESL(地址为BEH,复位值为00H)用于保存A/D转换结果。A/D转换结果存储格式由辅助寄存器AUXR1(地址为A2H
11、,复位值为00H)中的ADRJ控制,ADRJ是AUXR1中的D2位.(1)当ADRJ=0时,10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器。存储格式如下:(2)当ADRJ=1时,10位A/D转换结果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器。存储格式如下:模/数转换结果计算公式如下:ADRJ = 0时,取10位结果 (ADC_RES7:0,ADC_RESL1:0) = 1024 Vin / VccADRJ = 0时,取8位结果 ADC_RES7:0 = 256 Vin / VccADRJ = 1时,取10位结果 (ADC
12、_RES1:0,ADC_RESL7:0) = 1024 Vin / VccVin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压.4、 与A/D转换中断有关的寄存器中断允许控制寄存器IE中的EADC位(D5位)用于开放ADC中断,EA位(D7位)用于开放CPU中断;中断优先级寄存器IP中的PADC位(D5位)和IPH中的PADCH位(D5位)用于设置A/D中断的优先级。在中断服务程序中,要使用软件将A/D中断标志位ADC_FLAG(也是A/D转换结束标志位)清0.2。2 LMDZ35简介TSLM35温度传感器是由LM35CZ/DZ 集成电路温度传感器外加金属
13、套密封组装而成,其输出电压与摄氏温度成线性比例关系,无需外部校准,在55+150温度范围内精度为0。40。75。,输出电压与摄氏温度对应,使用极为方便。灵敏度为10。0mV/,重复性好,输出阻抗低,电路接口简单和方便,可单电源和正负电源工作。是一种得到广泛使用的温度传感器。LM35技术特性: 温度范围:LM35DZ 0100;LM35CZ -40110 在摄氏温度下直接校准 线性刻度系数: +10。0mV/ 精度:0。5 (在25) 工作电压为430V 功耗:小于60uA 自热效应小于0.08 非线性:0。25 输出阻抗:0。1/1mA 输出电压:+6V1。0V适合于远程应用 输出电流 10m
14、A:2.3 硬件原理图设计该系统硬件原理图可大体分为这几个模块: 串行通信模块、模拟信号处理模块、47LED显示模块以及电源模块等。1、 串行通信模块原理图如下:本通信过程采用RS232方式进行,由于单片机中的UART和电脑串口RS232的区别仅在于电平的不同,电脑串口采用232电平,而单片机UART则采用TTL电平,如果不进行电平转换,单片机跟电脑串口就不能进行直接通信,RS232是UART的一种就意味着通信协议的格式是一样的,只要电平统一了,两者之间就可以直接通信,此处应用了MAX232这一芯片,MAX232对两者之间通信的数据没有任何作用,仅仅是中介而已,而其只是负责将两者之间的电平进行
15、统一,使两者之间没有通信障碍。另外,MAX232芯片采用单+5V电源供电,仅需几个外接电容即可完成从TTL到RS232电平的转换,共两路。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。2、 模拟信号处理模块原理图如下:此处,我们处理采
16、集到的模拟量电压信号是采用了LM324集成运算放大器管脚排列图见图2-2。LM324系列由四个独立的带有差动输入的,高增益,内部频率补偿运算放大器,其中专为从单电源供电的电压范围经营。从分裂电源的操作也有可能和低电源电流消耗是独立的电源电压的幅度.与单电源应用场合的标准运算放大器相比,它们有一些显著优点。该四放大器可以工作在低到3。0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性.每一组运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“为两个信号输入端,“V+”、“V”为正、负电源
17、端,“Vo为输出端.两个信号输入端中,Vi()为反相输入端,表示运放输出端Vo的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。图22 LM324集成运算放大器管脚排列图此模拟量处理模块设计的使用起来比较灵活,图中左边的两路放大器都设计成了电压跟随器的形式,这样就减少了输入信号的损失.我们可以将传感器所测得标准电压信号或者电流信号通过P9或者P10接入(也可以使用杜邦线通过J7或者J8接入信号)LM324的其中一路放大器,然后再经过第二级放大使得处理后的电压信号输出到J9。做此课程设计时我们采用的是LM35DZ温度测量传感器,我们把它的输出信号连
18、接到J8的2脚,由此出输入我们的采集到的信号。我们将上面的一路放大器的输入调至零,然后再经过后一级放大器,将两者之差放大5倍。3、 47LED显示模块原理图如下:由图中可以看出,我们将数码管的断码端接到了单片机的P2口,控制端接到了P0口的低四位.图中Q2、Q3、Q4、Q5为开关型三极管此处用作数码管的选通控制。3。 系统软件设计3。1程序代码根据下位机软件设计任务的要求,我们可以把程序代码分为一下几个模块:初始化模块、按键扫描模块、A/D转换数据获取模块、串行口通信模块、运算处理模块、延时模块等。其中初始化模块包括程序当中使用的变量的初始化和串行口通信方式初始化还有A/D转换模块的初始化,按
19、键扫描模块是用于按键控制系统时用来响应按键被按下时的,A/D转换数据获取模块部分可以用查询方式,也可以使用中断的方式实现,串行口通信模块用来接收上位机发送来的命令,以控制和监测系统状态,运算处理模块包括多字节之间的加减乘除运算,延时模块用于程序中一小段时间的等待。汇编语言编写的程序代码如下:14 INCLUDE (STC12C5A.INC);定义变量千百十个QIAN EQU 60HBAI EQU 61HSHI EQU 62HGEWEI EQU 63HTEMPMH EQU 64H TEMPML EQU 65H COUNT EQU 66HTEMPMMH EQU 67HTEMPMML EQU 68H
20、ORG 0000HLJMP MAINORG 0023HLJMP TONGXINORG 002BHLJMP ADC_ISR ORG 0080HMAIN: LCALL MAIN_INIT LCALL UART1_INIT LCALL ADC_INITAAA: LCALL SCANFKEYV LCALL DISPLAY SJMP AAAMAIN_INIT: MOV SP,70H MOV QIAN,00H MOV BAI,00H MOV SHI,00H MOV GEWEI,00H MOV COUNT,00H MOV KEYVALUE,00H MOV TEMPMH,00H MOV TEMPML,#00H
21、 MOV TEMPMMH,00H MOV TEMPMML,00H RETUART1_INIT: MOV AUXR,#11H MOV BRT,0FDH MOV SCON,#50H MOV PCON,00H SETB EASETB ESRETSCANFKEYV: MOV P1,0FFHMOV A,P1CJNE A,0FDH,KEYS2LCALL DELAY10MSMOV A,P1CJNE A,0FDH,KEYS2SETB EADCSJMP NOKEYKEYS2:CJNE A,0EFH,KEYS3LCALL DELAY10MSMOV A,P1CJNE A,0EFH,KEYS3CLR EADCSJMP
22、 NOKEYKEYS3:CJNE A,0DFH,KEYS4LCALL DELAY10MSMOV A,P1CJNE A,0DFH,KEYS4CLR P0。4CLR EAMOV R7,#04HA21: MOV A,01HMOV SBUF,AJNB TI,$CLR TIDJNZ R7,A21SETB EASJMP NOKEYKEYS4:CJNE A,#0BFH,NOKEYLCALL DELAY10MSMOV A,P1CJNE A,#0BFH,NOKEYSETB P0.4CLR EAMOV R7,04HA22: MOV A,02HMOV SBUF,AJNB TI,CLR TIDJNZ R7,A22SE
23、TB EASJMP NOKEYNOKEY:RETADC_INIT:MOV P1ASF,#01HMOV ADC_RES,#00HMOV ADC_RESL,#00HMOV AUXR1,#04HMOV ADC_CONTR,088HLCALL DELAY10MS;SETB EADCRETTONGXIN: CLR RIMOV A,SBUFCJNE A,46H,COMPENDSETB EADCCOMPEND:CJNE A,47H,STAR1CLR EADCSTAR1: CJNE A,#51H,STAR2CLR P0。4STAR2: CJNE A,03H,END1CLR P0。5END1: CJNE A,5
24、4H,END2SETB P0.4END2: CJNE A,04,OUTTONGXINSETB P0。5OUTTONGXIN:RETIADC_ISR: PUSH PSWPUSH ACCINC COUNTANL ADC_CONTR,#0EFHMOV TEMPMH,ADC_RESMOV TEMPML,ADC_RESLCLR CMOV A,TEMPMMLADD A,TEMPMLMOV TEMPMML,A MOV A,TEMPMMHADDC A,TEMPMHMOV TEMPMMH,A MOV A,COUNTCJNE A,20H,OUT0MOV COUNT,#00HMOV R6,TEMPMMHMOV R7
25、,TEMPMMLMOV R4,#00HMOV R5,20HLCALL DBDIVMOV TEMPMH,5FHMOV TEMPML,5CH MOV TEMPMMH,00H MOV TEMPMML,00HLCALL CONVERT MOV R7,4MOV R0,#60HSENDTEMP: MOV A,R0MOV SBUF,AJNB TI,$CLR TIINC R0DJNZ R7,SENDTEMPMOV R4,240A12:DJNZ R4,A11SJMP OUT0A11: LCALL SCANFKEYVLCALL DISPLAYSJMP A12OUT0:ORL ADC_CONTR,08HPOP AC
26、CPOP PSWRETICONVERT: MOV R2,TEMPMH MOV R3,TEMPML MOV R6,03H MOV R7,0E8H LCALL DBMUL MOV R3,56H MOV R4,57H MOV R5,58H MOV R2,04H MOV R1,#00H LCALL TDSDIV MOV R6,5BH MOV R7,5AH MOV R4,03H MOV R5,0E8H LCALL DBDIV MOV QIAN,5CH MOV R6,5DH MOV R7,5EH MOV R4,#00H MOV R5,#64H LCALL DBDIV MOV BAI,5CH MOV R6,
27、5DH MOV R7,5EH MOV R4,00H MOV R5,0AH LCALL DBDIV MOV SHI,5CH MOV GEWEI,5EHOUT: RET DBMUL: MOV A,R3 MOV B,R7 MUL AB XCH A,R7 MOV R5,B MOV B,R2 MUL AB ADD A,R5 MOV R4,A CLR A ADDC A,B MOV R5,A MOV A,R6 MOV B,R3 MUL AB ADD A,R4 XCH A,R6 XCH A,B ADDC A,R5 MOV R5,A MOV F0,C MOV A,R2 MUL AB ADD A,R5 MOV R
28、5,A CLR A MOV ACC。0,C MOV C,F0 ADDC A,B MOV R4,A MOV 56H,R7 MOV 57H,R6 MOV 58H,R5 MOV 59H,R4 RET TDSDIV: CLR C MOV 30H,0 MOV 31H,0 MOV 32H,#0 TDSDIV_LOOP: CLR C MOV A,R3 SUBB A,R1 MOV R3,A MOV A,R4 SUBB A,R2 MOV R4,A MOV A,R5 SUBB A,0 MOV R5,A JC TDSDIV_END _INC_SHANG: CLR C MOV A,30H ADDC A,1 MOV 3
29、0H,A MOV A,31H ADDC A,#0 MOV 31H,A MOV A,32H ADDC A,0 MOV 32H,A LJMP TDSDIV_LOOP TDSDIV_END: CLR C MOV A,R1 ADDC A,R3 MOV A,R2 ADDC A,R4 MOV R3,30H MOV R4,31H MOV 5AH,R3 MOV 5BH,R4 RET DBDIV: CLR C CLR A MOV R2,A MOV R3,A MOV B,10HLOOP: MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R3 RLC A
30、MOV R3,A MOV A,R2 RLC A MOV R2,A CLR C MOV A,R3 SUBB A,R5 PUSH ACC MOV A,R2 SUBB A,R4 JBC CY,LOOP0 MOV R2,A POP ACC MOV R3,A SETB C SJMP LOOP1LOOP0: POP ACCLOOP1: DJNZ B,LOOP MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R2 MOV R4,A MOV A,R3 MOV R5,A MOV 5CH,R7 MOV 5DH,R4 MOV 5EH,R5MOV 5FH,R
31、6 RETDISPLAY: MOV DPTR, #TABLE MOV A,GEWEI MOVC A,A+DPTR MOV P2,A CLR P0。0 LCALL DELAY10MS SETB P0。0 MOV A,SHI MOVC A,A+DPTR ORL A,80H MOV P2,A CLR P0。1 LCALL DELAY10MS SETB P0。1 MOV A,BAI MOVC A,A+DPTR MOV P2,A CLR P0。2 LCALL DELAY10MS SETB P0.2 MOV A,QIAN MOVC A,A+DPTR MOV P2,A CLR P0。3 LCALL DELA
32、Y10MS SETB P0.3 RET DELAY10MS: MOV R6,10D1: MOV R7,#248 DJNZ R7, DJNZ R6,D1 RETDELAY100MS: MOV R6,200D2: MOV R7,248 DJNZ R7, DJNZ R6,D1 RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH, ; 0 1 2 3 4 5 DB 7DH,07H7FH,6FH,00H,40H, ; 6 7 8 9 + - END 3。3 系统软件设计调试程序代码编写完成以后再开发环境中编译看是否通过,如检查到有错误编译系统就会报错,然后再根据提示进行修改,至没有错
33、误时,再重新编译文件并生成.hex文件。将此文件烧录到STC12C5A60S2单片机中,连接好硬件电路,给系统上电。观察四位共阴极数码管上面是否显示出我们想要显示的温度数据,如不能再修改程序代码,重新编译,重新烧录程序,观察结果此过程重复进行,直到所采集温度数据能在数码管上面稳定显示并且准确度较高。此模块疏通后再加入串行通信部分代码,首先用串口助手测试数据的收发,看单片机与上位机之间能否正常收发数据,如不能修改代码,再编译、烧录、观察,直到数据收发正常为止.最后将按键扫描部分加入,调试方法同上,直到下位机系统能正确的按照我们的意愿对某个按键进行响应为止。此三个模块都疏通之后,下位机的软件设计工
34、作也就基本完成,接下来要做的就是简化、优化程序代码。4. 系统上位机设计4。1 设计任务系统上位机设计可以使用VC或者VB语言编写上位机程序,也可以使用C+API(应用程序接口调用)实现。我们使用VB语言来完成系统上位机设计,可以将其分为窗体设计和程序设计。其中窗体设计出来也就是我们可以看到的上位机界面,上面应该能够实现最基本的功能包括:显示出下位机测量出来的温度值和能够发送命令给下位机。程序程序设计能够实现的功能:对下位机上传来的数据正确的分析并实时的在窗体上面显示。4。2 程序代码根据上位机软件设计任务的要求,我们将其过程分为窗体设计和代码编写。1、 根据设计要求我们可以在窗体上添加三个T
35、ext控件用来显示温度值和设定温度上下限值.添加六个Lable控件来作为提示信息显示比如“当前温度值(/)”、“温度上(下)限值(/)、“上(下)限报警提示”、“电动机运行状态监控(红色停止,绿色运转)。添加七个CommandButton控件作为控制按钮,其名称分别为“启动测量、“停止测量”、“启动1号电机”、“停止1号电机”、“启动2号电机、“停止2号电机、“结束系统”。再添加四个Shape控件,分别作为温度上下限报警提示和两个电动机的运行状态仿真。再在窗体的顶端居中位置添加一个Picture控件,在其里面放一个Lable控件其Caption属性为课程设计名称。然后再添加最为关键的一个控件,
36、那就是MSComm控件.最后再添加两个Timer控件,一个用来通过其Timer事件来定时的读取下位机上传来的温度数据并作处理,另一个则是通过其Timer事件来是Picture控件里面的Lable控件移动(达到程序运行时课程设计题目在窗体顶端从右往左移动的效果)。最终设计窗体效果如图4-1。7. 总结通过本次课程设计,使我们对之前所学的专业课程有了更进一步的学习,并且加强了课程之间的联系。此次课程设计更重要的意义就是增强了我们自己动手设计电路和编写程序的能力,这对于即将进入工作阶段的我们是尤为重要在此次课程设计中我们各小组成员都很认真的完成分配给自己的实验项目,当遇到问题时首先组内成员积极讨论,解决不了的问题然后再请教指导老师.老师认真的讲解使我们在这次课程设计中受益匪浅,掌握了常见问题的解决方法。遇到问题并不可怕,可怕的是不敢面对困难。我们要不怕失败,在不断的改进中和调试中收获更多的知识。在不断的问题中总结自己在日常学习中的不足之处。在理论知识的基础上把自己的实践能力提高,做到学以致用。