打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于STC89C51单片机的数据采集有效值测量系统

基于STC89C51单片机的数据采集有效值测量系统

1 前言

单片微型计算机简称单片机,又称微控制器(MCU),它的出现是计算机发展史上的一个重要的里程碑,它以体积小、功能全、性价比高等诸多优点独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占鳌头。

本次课设采用的STC89C51单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最广泛的一种单片机之一。单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计的基础课。

2 单片机系统板的介绍

本次课设所使用的单片机最小系统板包括以下器件:电源端子(DC +5V),可以USB供电,也可独立电源供电。通用异步串口,采用MAX232做电平转换。STC89C51单片机,支持串口下载和单步调试 ZLG7290管理芯片,是IIC总线通信的键盘扫描和数码管显示芯片,自带8M晶振,最多可扫描64个键盘和8个数码管。各种颜色的LED发光二极管共9个,其中8个接于P1口做LED显示,还有一个做电源灯显示。TLC549,8位串行AD。TLC5615,10位串行DA。还有其他电阻电容若干,系统板一个,大按键开关两个,用于中断控制和通信开关。

利用STC51系列特有的ISP在线编程,方便我们初学者的二次开发,省去大量芯片烧写时间。USB电源线供电和外接供电并存,方便学生在寝室使用。电源保护电路,有效防止电源接反对CPU造成的损害。增加专门的键盘扫描和数码管显示芯片,只占用2个I/O口和一个外部中断就能完成8个数码管显示和最多64个键盘扫描。增加了I/O口键盘扫描,2种扫描方式可通过跳线由用户自己选择。所有I/O口均用引脚引出,方便用户扩展。外部中断0和外部脉冲记数按键复用,通过跳线,用户即可以进行外部中断实验,也可以进行外部T0记数实验。增加了串行的AD和DA芯片,可直接在开发板上进行AD和DA的实验。

3 有效值测量程序流程图

本次课设的任务是利用自己亲手做的单片机最小系统,通过编程和调试,实现正弦波的有效值测量,并用数码管将测量的有效值显示出来。其过程是先通过A/D采样取出最大值,然后根据定义计算出有效值,通过进制转换将16进制转换称10进制BCD码,把查表得到的码形值通过STC89C51单片机的IIC总线方式写到ZLG7290中用数码管显示,流程图如图3.1所示。

图3.1  有效值测量程序流程图

4 A/D转换部分

本次课设的任务是实现正弦波有效值的测量,一般有效值的测量主要有平均值法峰值法,真有效值转换芯片测量等方法。本次课程设计采用TI公司的串行A/D转换芯片TLC549测量交流信号,再根据有效值的定义式求得其有效值。

4.1 TLC549功能简介

TLC549 是以8 位开关电容逐次逼近A/D 转换器为基础而构造的CMOS A/D 转换器。它设计成能通过3 态数据输出和模拟输入与微处理器或外围设备串行接口。TLC549 仅用输入/输出时 钟 (I/O CLOCK )和芯片选择 (CS )输入作数据控制。TLC549 的I/O CLOCK 输入频率最高可达 1.1MHz。转换结果有DOUT脚读出。其外围管脚如图4.1所示。

图4.1 TLC549的外围管脚图

当输入的模拟电压大于REF+端电压时,TCL549输出为FFH,当输入的模拟电压小于REF-端电压时,TCL549输出00H。使用时通常将REF-端与GND相连。TCL549的工作时序如图4.2所示。

图4.2 TCL549的工作时序图

 端为高电平时,DOUT端为高阻态。当
 跳变为低电平经过1.7us后,上次转换结果的D7位被放置在DOUT端。在随后的4个I/O CLOCK的下降沿,分别输出D6、D5、D4、D3位。在输出D3位的同时,启动片内采样电路,对模拟输入采样,在其后的3个I/O CLOCK的下降沿,分别输出D2、D1、D0位,第8个I/O CLOCK的下降沿启动片内的保持电路,在DOUT端输出的数据无效。此后,应将
 端拉为高电平,并至少保持17us,以使TLC549完成一次A/D转换。重复上述过程可读出本次转换的结果,其过程如图4.3所示。


图4.3  AD转换原理框图

若定义STC89C51单片机的P1.2口为片选信号控制,P1.3口为A/D转换后输出结果读取端,P1.4口为TLC549的时钟输入端,则TCL549与单片机的硬件连接如图4.4所示。

图4.4 TCL549与单片机的硬件连接

4.2 A/D转换的驱动程序

AD:MOV  R2,#08H       ;第一次采样CLOCK的8个脉冲

CLR   P1.2        ;CS变为低电平

NOP

NOP

NOP

L 3:MOV C,P1.3           ;对模拟输入采样,读出结果OUT

MOV A,20H

RLC A

MOV 20H,A

LCALL PULSE      ;调用产生CLK时钟脉冲子程序

DJNZ R2,L3

MOV R2,#24H       ;A/D转换的36个时钟周期

SETB  P1.2         ;CS变为高电平,开始保持和转换

L 4:LCALL  PULSE

DJNZ R2,L4

RET

PULSE:SETB  P1.4         ;p1.4输出高电平,CLOCK时钟

NOP

NOP

NOP

CLR   P1.4

RET

5 有效值的计算

根据有效值的定义,有效值等于最大值除以
 ,为了计算方便,程序中取
 为1.414,A/D转换输出的结果(设为M)是16进制的数,最大为#0FFH,对应的是基准电压,约为4.2V,所以每个十六进制的单位1对应的电压是
 ,有效值为                      。在实验程序中先取出采样结果M,然后乘以12(即#0CH),再将所得的结果(也是十六进制)转换成十进制BCD码,其计算和转换的流程图如图5.1所示。


图5.1 有效值计算的流程图

按照上面介绍的有效值近似计算方法和结果进制转换的过程,可以编写出计算有效值的实验程序如下:

MOV A,21H      ;A/D转换的结果存于21H中

MOV B,#0CH

MUL AB

MOV 39H,B     ;得到的新的16进制数高字节放39H中,低字节放40H中

MOV 40H,A

HUAN:MOV A,39H    ;将存放于39H单元中待转换的16进制数高字节存于A

MOV B,#0AH   

DIV AB   

MOV 41H,A      ;商送41H单元暂存

MOV A,B       ;余数送回A

MOV 42H,40H   ;待变换16进制数的低字节送42H单元暂存

ANL 42H,#0F0H  ;屏蔽低半字节

ADD A,42H      ;高字节除#0AH后余数与低字节的前半字节相加,

;后半字节换位使上次除法余数仍在高位

SWAP A   

MOV B,#0AH

DIV AB   

MOV 43H,A      ;商送43H单元暂存

MOV A,B         ;余数送到A

SWAP A         ;使余数处在高半字节位数

ANL 40H,#0FH   ;屏蔽待转换数低字节的高半字节

ADD A,40H

MOV B,#0AH   

DIV AB   

MOV 7FH,B      ;得到待转换的最低位的BCD码值

MOV 44H,A      ;商送44H单元暂存

MOV A,41H

SWAP A   

ADD A,43H

MOV B,#0AH   

DIV AB   

MOV 41H,A

MOV A,B      

SWAP A   

ADD A,44H

MOV B,#0AH   

DIV AB   

MOV 42H,A         ;以上是将前面计算所得到的商再除以#0AH,

;以得到倒数第二位的BCD码值

MOV 7EH,B

MOV A,41H

SWAP A   

ADD A,42H

MOV B,#0EH

DIV AB   

MOV 7DH,B

MOV 7CH,A

RET

6 显示部分

6.1 ZLG7290介绍

本次课程设计的单片机系统板采用ZLG7290管理芯片来控制键盘和LED数码管,ZLG7290芯片负责LED显示及键盘扫描,它与单片机采用IIC总线方式进行通信。ZLG7290的IIC接口传输速率可达32kbit/s, 容易与处理器接口,并提供键盘中断信号,提高主处理器时间效率.ZLG7290的从地址(slave address)为70H(01110000B).

ZLG7290 内可通过IIC总线访问的寄存器地址范围为 00H到17H,任一寄存器都可按字节直接读写,也可以通过命令接口间接读写或按位读写。它的控制和状态查询全部都是通过读/写寄存器实现的,用户只需像读24C02内的单元一样,即可实现对ZLG7290 的控制。ZLG7290与数码管的连接如图6.1所示。其中ZLG7290的引脚SCL和SDA分别与STC89C51单片机的P1.0和P1.1相连,实现IIC总线方式通信。


图6.1 ZLG7290与数码管的连接图

6.2 IIC通信的原理

 通信总线是串行传输总线,通过定义单片机两根引脚(串行时钟线SCL和串行数据线SDA)能实现全双工同步数据传送。在数据传输时,发送开始后,主器件送出8位控制字节,以选择从器件并控制总线传送方向,其后再传送数据。每传送完一个字节后,接收器都必须发一位应答信号ACK,发送器确定后,再发下一数据。每一数据都是先发高位,再发低位,在全部数据传送结束后主控制器发送停止信号。还要注意写时钟SCL和SDA的发送起始和停止条件程序时,要根据单片机晶振来确定NOP指令条数,由于我们用的外部时钟晶振是11.0592M,需要四个NOP指令。
 通信程序设计流程图如图6.2所示。


图6.2 

 通信程序设计流程图

6.3 ZLG7290的驱动程序

    ZLG7290与单片机是通过IIC总线方式通信的,所以只需要一根数据线和一根时钟线即可完成通信。而在通信之前和之后需要编写满足起始和停止条件的程序,为保证数据成功传输,要有发送应答位和非应答位子程序。实验程序如下:


多个字节数据发送子程序:

WRNBYT:  PUSH  PSW

WRNBYT1: SETB RS0

     SETB RS1

     CALL STA

     MOV A,SLA

     CALL WRB

     CALL CACK

     JB  F0,WRNBYT

     MOV  R0,#MTD

     MOV  R5,NUMBYT

WRDA:  MOV  A,@R0

     LCALL  WRB

     LCALL    CACK

     JB  F0,WRNBYT1

     INC  R0

     DJNZ  R5,WRDA

     LCALL  STOP

     POP  PSW

     RET

发送一个字节子程序:

WRB:   MOV  R7,#8

WLP:   RLC  A

     JC  WR1

     CLR  SDA

     SETB  SCL

     NOP

     NOP

     NOP

     NOP

     CLR  SCL

     DJNZ  R7,WLP

     RET

WR1:   SETB  SDA

     SETB  SCL

     NOP

     NOP

     NOP

     NOP

     CLR  SCL

     CLR  SDA

     DJNZ  R7,WLP

     RET

应答位检查子程序:

CACK:  SETB  SDA

    SETB  SCL

    NOP

    NOP

    MOV  C,SDA

    MOV  F0,C

    CLR  SCL

    NOP

    NOP

    RET

发送起始位子程序:

STA:  SETB  SDA    

SETB  SCL

    NOP

    NOP

    NOP

    NOP

    CLR  SDA

    NOP

    NOP

    NOP

    NOP

    CLR  SCL

    RET

发送停止位子程序:

STOP: CLR  SDA 

    SETB  SCL

    NOP

    NOP

    NOP

    NOP

    SETB  SDA

    NOP

    NOP

    NOP

    NOP

    CLR  SCL

    RET


7 刷新频率的计算

刷新频率即数据更新一次所需要的时间,也就是一个完整的抽样周期。在一个抽样周期内完成很多个A/D转换的抽样取值,抽样的次数由R3和R4确定,程序中R3为#0AH,R4等于#0C8H,所以抽样次数为2000次,即每进行2000次A/D转换之后取出最大值,并且计算出有效值加以显示,然后进行下一轮抽样,也是取2000次/AD转换的最大值,并且计算出有效值加以显示(这样显示的数据就得到了更新)。

而这2000次的A/D转换中每两次A/D转换的之间的间隔时间由定时器决定,由于TH0为#0FFH,TL0为#0A4H,所以每次AD抽样间隔约为100us,这样每一轮AD转换之后取最大值计算出有效值并显示的时间间隔约为200ms。

8 误差分析

通过单片机测量有效值的方法有多种,如利用有效值的定义式

 通过积分来求,以
 为采样间隔对
 连续采样转换N次,且
 ,则有

式中

 为各采样值的瞬时值,就其原理而言,在不考虑AD转换精度的情况下,只要保证采样时间间隔
 的准确度,得到的有效值即具有较高的精度。但是此方法要求的程序比较复杂,而且计算转换过程较多,为了使实验程序简单易懂而精度要求在允许的误差范围内,我们采用一种近似算法,也就是取最大值,然后除以
 得到有效值。

经过反复实验采集数据分析,得到误差分析如表1所示。

表1  测量差误分析

单 位:V

一组

二组

三组

四组

五组

六组

七组

八组

九组

十组

输入电压

0.36

0.76

1.32

1.56

1.88

2.28

2.6

3.0

3.32

3.72

实际有效值

0.27

0.54

0.9

1.12

1.41

1.69

1.94

2.24

2.51

2.81

测量有效值

0.28

0.56

0.94

1.18

1.47

1.70

1.96

2.23

2.52

2.96

误  差

3.6%

3.6%

4.3%

5.1%

4.1%

0.6%

1.0%

0.4%

0.4%

5.1%

本次实验的AD转换芯片输入的基准电压约为4.2V,测量的正弦波信号的最大值不得超过4V,由实验结果可知,当输入的信号的最大值越接近基准电压,其测量结果误差越大。

9 小结与体会

通过这次单片机课程设计,使我的编程能力得到了很大的提高,在大脑里面形成了初步的体系结构,以致于在编程时能够灵活的运用和变更。回顾整个设计过程,从硬件焊接到软件编程,从小程序的编写调试到整个单片机功能的了解,从分析到实际运用,都经过了许多思考过程。

刚开始对整个系统板不是很熟悉,有很多芯片的用法都了解,以至于编程调试时遇到了很多的困难,失败了很多次。后来上网查资料和一些技术文献,在图书馆借了很多有关单片机的书,慢慢分析调试,最后问题都一一解决了。总结下来,这三周学会了很多东西,例如知道了在编写大程序的时候要把握一些原则,要不然很容易出错,而且很难查出错在哪里,还学会了ZLG7290键盘和数码管管理芯片的使用,以及A/D转换芯片TLC549的使用和驱动程序的编写,觉得自己的专业知识又得到了丰富。

参考文献

[1] 李群芳主编.单片微型计算机与接口技术.北京:电子工业出版社,2005

[2] 宋  浩主编.单片机原理及应用.北京:清华大学出版社,2005

[3] 凌玉华编著.单片机原理及应用系统设计.北京:中南大学出版社,2006

[4] 蒋力培编著.单片微机系统实用教程.北京:机械工业出版社,2004

[5] 潘  昊编著.单片机十六进制数与BCD码转换新探讨(摘要),1997

[6] 佟为明主编. TLC549在交流有效值测量中的应用(摘要),2006

附录一  设计总体电路图


附录二  设计总程序

NUMBYT  EQU  5DH      ;发送的个数,包括第一位地址

SLA     EQU  5EH      ;控制字或7290的地址

MTD     EQU  5FH      ;7290存“显示的数字”的寄存器的地址10H

SCL     EQU  P1.0     ;时钟脉冲

SDA     EQU  P1.1     ;发送数据


ORG  0000H

AJMP  MAIN

ORG  0030H

MAIN:MOV SP,#30H

      MOV 21H,#0

         MOV R3,#0AH   

         MOV R4,#0C8H

      LCALL AD

      MOV TMOD,#01H

         MOV TH0,#0FFH

         MOV TL0,#0A4H

         SETB EA

         SETB ET0

SS:  SETB TR0

     JNB TF0,$

         CLR TF0

      LCALL AD

         MOV A,21H

         CJNE  A,20H,SS2

         JMP SS3

SS2: JNC SS3

     XCH A,20H

         MOV 21H,A

SS3: MOV TH0,#0FFH

        MOV TL0,#0A4H

     DJNZ R4,SS

        MOV  R4,#0C8H

        DJNZ R3,SS

        MOV A,21H

        MOV B,#0CH

        MUL AB

        MOV 39H,B           

        MOV 40H,A

     LCALL HUAN            

        LCALL MA            

        LCALL XIAN        

        MOV TH0,#0FFH

        MOV TL0,#0A4H

        MOV 21H,#0

        MOV R3,#0AH

        MOV R4,#0C8H

        SJMP SS

查表程序

MA: MOV DPTR,#TAB  

        MOV R0,#7FH

        MOV A,@R0

        MOVC A,@A+DPTR

        MOV 60H,A

        DEC R0

        MOV A,@R0

        MOVC A,@A+DPTR

        MOV 61H,A

        DEC R0

        MOV A,@R0

        MOVC A,@A+DPTR

        MOV 62H,A

        MOV DPTR,#TAB1

        DEC R0

        MOV A,@R0

        MOVC A,@A+DPTR

        MOV 63H,A

     RET

TAB:DB

0FCH,60H,0DAH,0F2H,66H,

0B6H,0BEH,0E0H,0FEH,0E6H

TAB1:DB 0FDH,61H,0DBH,0F3H,67H,0B7H,

0BFH,0E1H,0FFH,0E7H

进制转换程序

HUAN:MOV A,39H

MOV B,#0AH     

DIV AB        

MOV 41H,A 

MOV A,B            

MOV 42H,40H    

ANL 42H,#0F0H

ADD A,42H 

SWAP A        

MOV B,#0AH     

DIV AB        

MOV 43H,A 

MOV A,B            

SWAP A        

ANL 40H,#0FH

ADD A,40H 

MOV B,#0AH     

DIV AB        

MOV 7FH,B 

MOV 44H,A 

MOV A,41H 

SWAP A        

ADD A,43H 

MOV B,#0AH     

DIV AB        

MOV 41H,A 

MOV A,B            

SWAP A        

ADD A,44H 

MOV B,#0AH     

DIV AB        

MOV 42H,A 

MOV 7EH,B

MOV A,41H 

SWAP A        

ADD A,42H 

MOV B,#0AH     

DIV AB        

MOV 7DH,B

MOV 7CH,A

RET

单片机读A/D转换结果

AD: MOV  R2,#08H    

      CLR   P1.2    

      NOP

      NOP

      NOP

L3:MOV C,P1.3    

           MOV A,20H

           RLC A

           MOV 20H,A

           LCALL PULSE

           DJNZ R2,L3

           MOV R2,#24H   

           SETB  P1.2   

L4:    LCALL PULSE

           DJNZ R2,L4

           RET

PULSE:   SETB  P1.4 

           NOP

               NOP

               NOP

               CLR   P1.4

               RET

显示子程序

XIAN::  MOV  MTD,#10H             

               MOV  NUMBYT,#05H

               MOV  SLA,#70H

            LCALL  WRNBYT

               RET

WRNBYT: PUSH  PSW

WRNBYT1:SETB RS0

           SETB RS1

           CALL STA

               MOV A,SLA

               CALL WRB

               CALL CACK

               JB  F0,WRNBYT

               MOV  R0,#MTD

               MOV  R5,NUMBYT

WRDA: MOV  A,@R0

           LCALL  WRB

           LCALL       CACK

              JB  F0,WRNBYT1

              INC  R0

              DJNZ  R5,WRDA

              LCALL  STOP

              POP  PSW

              RET

WRB:   MOV  R7,#8

WLP:   RLC  A

          JC  WR1

           CLR  SDA

           SETB  SCL

           NOP

           NOP

           NOP

           NOP

           CLR  SCL

           DJNZ  R7,WLP

           RET

WR1:  SETB  SDA

       SETB  SCL

          NOP

          NOP

          NOP

          NOP

          CLR  SCL

          CLR  SDA

          DJNZ  R7,WLP

          RET

CACK:SETB  SDA

      SETB  SCL

          NOP

          NOP

          MOV  C,SDA

          MOV  F0,C

          CLR  SCL

          NOP

          NOP

          RET

STA: SETB  SDA  发送起始位

      SETB  SCL

          NOP

          NOP

          NOP

          NOP

          CLR  SDA

          NOP

          NOP

          NOP

          NOP

          CLR  SCL

          RET

STOP:CLR  SDA  发送停止位

      SETB  SCL

          NOP

          NOP

          NOP

          NOP

          SETB  SDA

          NOP

          NOP

          NOP

          NOP

          CLR  SCL

          RET

END


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
24C02使用详解
E2PROM芯片24C02的读写程序
iic
单片机和Pc机串口通信<转>_飞鸟留痕
时钟芯片PCF8583应用
射频卡读写源代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服