对50HZ正弦交流信号有效值的测量 单片机.docx
《对50HZ正弦交流信号有效值的测量 单片机.docx》由会员分享,可在线阅读,更多相关《对50HZ正弦交流信号有效值的测量 单片机.docx(19页珍藏版)》请在冰豆网上搜索。
对50HZ正弦交流信号有效值的测量单片机
目录
摘要I
AbstractII
1设计任务1
1.1设计要求1
1.2理论分析1
2硬件电路设计2
2.1有效值测量模块2
2.2A/D转换模块3
2.3单片机控制模块4
2.4显示模块5
2.5总体电路设计6
3程序设计7
3.1程序框图7
3.2源程序8
4软件仿真13
5心得体会15
参考文献16
摘要
在实际使用中,有效值是应用最广泛的参数,电压表的读数除特殊情况外,几乎都是按正弦波有效值进行定度的。
有效值获得广泛应用的原因,一方面是由于它直接反映出交流信号能量的大小,这对于研究功率、噪声、失真度、频谱纯度、能量转换等是十分重要的;另一方面,它具有十分简单的叠加性质,计算起来极为方便。
本次课程设计以STC89C51单片机为控制核心,利用有效值测量芯片AD736对正弦交流信号的有效值进行测量,测量结果由放大器放大,经TLC549芯片A/D转换后,由单片机控制LCD液晶显示器显示有效值。
关键字:
有效值、AD736、TLC549
Abstract
Inactualuse,theRMSisthemostwidelyusedparameters,voltagemeterinadditiontothespecialsituation,almostallisaccordingtothesetofsinusoidalRMS.Thecauseofthevalidvaluesbeingwidelyapplied,ontheonehand,becauseitisdirectlyreflectthesizeoftheacsignalenergy,forthestudypower,noise,distortion,frequencyspectrumpurity,energyconversionandsoonisveryimportant;Ontheotherhand,ithasaverysimplesuperpositionnature,extremelyconvenienttocalculate.
ThiscoursedesignwiththeSTC89C51microcontrollerasthecore,usingRMSmeasurementchipAD736ofsinusoidalacsignaleffectivevaluemeasure,themeasuredresultsbytheamplifieramplification,aftereightbitsA/Dconversionchip,theLCDdisplayRMSwascontrolledbysinglechipmicrocomputer.
Keywords:
currenteffectivevalue,AD736,TLC549
1设计任务
1.1设计要求
设计并实现对50HZ正弦交流信号有效值的测量,要求输入信号0-15V,测量显示的分辨率为0.01,误差<0.02。
1.2理论分析
方案一:
利用数字测量技术对交流信号有效值进行准确测量。
测量交流信号的数字测量方法主要有峰值测量法、平均值测量法和纯计算法。
其中纯计算法公式为:
方案二:
利用采用有效值检测芯片AD736直接将交流信号转换直流有效值信号。
方案比较:
方案一中峰值测量法和平均值测量法只能用于无谐波的纯正弦信号场合,其测得的值不是真有效值。
纯计算法只要满足奈奎斯特采样频率条件就可测得真有效值,但在使用传统的纯计算法时,数字测量系统必须满足所谓的整周期采样条件,即交流信号的周期必须等于采样周期的整数倍或有理分数倍,否则该方法求得的值就不符合真有效值的定义。
这使整个工作过程变得复杂,同时加大了时间滞后和测量误差。
方案二设计精度比较高,能够符合设计要求。
故综合考虑选择方案二。
设计流程图如图1所示
图1设计流程图
2硬件电路设计
2.1有效值测量模块
有效值测量模块以AD736芯片为核心,根据初始信号的大小选择不同衰减倍数后输入AD736,初始信号在0—200mV内不衰减,200mV—2V内衰减10倍,2V—15V内衰减100倍。
AD736是经过激光修正的单片精密真有效值AC/DC转换器。
其主要特点是准确度高、灵敏性好(满量程为200mVRMS)、测量速率快、频率特性好(工作频率范围可达0~460kHz)、输入阻抗高、输出阻抗低、电源范围宽且功耗低。
最大的电源工作电流为200μA,用它来测量正弦波电压的综合误差不超过±3%。
AD736各引脚功能如下:
+Vs:
正电源端,电压范围为2.8~16.5V;
-Vs:
负电源端,电压范围为-3.2~-16.5V;
COM:
公共端;
图2AD736引脚图
Vo:
输出端;
CF:
输出端滤波电容,一般取10μF;
Cc:
低阻抗输入端,用于外接低阻抗的输入电压(≤200mV),通常被测电压需经耦合电容Cc与此端相连,通常Cc的取值范围为10~20μF。
当此端作为输入端时,第2脚VIN应接到COM;
VIN:
高阻抗输入端,适合于接高阻抗输入电压,一般以分压器作为输入级,分压器的总输入电阻可选10MΩ,以减少对被测电压的分流。
该端有两种工作方式可选择:
第一种为输出AC+DC方式。
该方式将1脚(Cc)与8脚(COM)短接,其输出电压为效流真有效值与直流分量之和;第二种方式为AC方式。
该方式是将1脚经隔直电容Cc接至8脚,这种方式的输出电压为真有效值,它不包含直流分量。
CAV:
平均电容。
它是AD736的关键外围元件,用于进行平均值运算。
其大小将直接响应到有效值的测量精度,尤其在低频时更为重要。
多数情况下可选33μF。
有效值测量模块电路如下图所示,AD736有多种典型应用电路,包括低输入阻抗方式、高输入阻抗方式下的双电源供电电路和9V单电源供电电路。
本方案采用高输入阻抗下的双电源供电方式,该电路中的+Vs与COM、-Vs与COM之间均并联一只0.1μF的电容以便滤掉该电路中的 高频干扰。
CC与COM之间并联一个10μF的电容起隔直作用。
若将图中1脚与8脚短接而使Cc失效,则所选择的就是AC+DC方式;去掉短路线,即为AC方式。
R为限流电阻, D1、D2为双向限幅二极管,超过压保护作用,选IN4148高速开关二极管。
图3有效值测量模块电路图
2.2A/D转换模块
A/D转换模块的核心是TLC549芯片,TLC549是一款8位串行A/D转换芯片,可与通用微处理器、控制器通过CLK、CS、DATA OUT三条口线进行串行连接。
具有4MHz片内系统时钟和软硬件控制电路,转换时间最长17μs, TLC549为40 000次/s。
总失调误差最大为±0.5LSB,典型功耗值为6mW。
采用差分参考电压高阻输入,可按比例量程校准转换范围,REF-接地,
,可用于较小信号的采样。
有效值在输入TLC549前需经过同相放大器,计算其放大倍数为:
TLC549工作原理如下:
其SDO、
、SCLK引脚分别与单片机P2.1、P2.2、P2.0相连,由单片机控制其状态。
当
为高时,数据输出SDO端处于高阻状态,此时SCLK不起作用。
这种CS控制作用允许在同时使用多片TLC549时,共用SCLK,以减少多路(片)A/D并用时的I/O控制端口。
当
为低时,内部电路在测的
下降沿后,再等待两个内部时钟周期,然后自动将前一次转换结果的最高位(D7)位输出到SDO端上。
在SCLK第4个下降沿开始采样模拟输入,第8个下降沿前一次的转换结果全部移出,保持功能持续4个内部时钟周期后,开始进行32个内部时钟周期的A/D转换。
图4A/D转换模块
2.3单片机控制模块
AT89C51集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等计算机所需要的基本功能部件,其构成的最小系统由单片机、时钟电路、复位电路等构成,具有简单可靠的优点。
如图5所示为89C51单片机构成的最小系统,采用内部振荡方式产生时钟信号,复位电路采用开关复位。
RP1为P0口的上拉电阻,P0口输出LCD液晶显示器显示的相关信息,P2口一部分控制TLC549进行A/D转换,一部分控制液晶显示器,P3.2口与独立按键相连,控制量程转换。
图5单片机控制模块
2.4显示模块
显示模块通过液晶显示器显示输出的波形和频率,其电路图如下图所示。
LM016L的8位数据端接单片机的P0口,三个控制端RS、RW、E也分别与单片机的P2口相连。
图6液晶显示模块
2.5总体电路设计
由上述模块电路的设计,设计总体电路如下图所示。
根据输入信号的大小选择不同程度的衰减,由AD736将交流信号的有效值测量出来,并经过放大器放大后输入A/D转换器TLC549,TLC549将数据模数转换后输入到单片机,由单片机控制LCD液晶显示器显示有效值。
图7总体电路设计
表1资源分配表
I/0口分配
具体分配内容
P0
输出液晶显示屏显示内容
P2.0
TLC549外部时钟输入
P2.1
串行输出口
P2.2
芯片使能端
P2.5-P2.6
液晶显示屏控制端
P3.2
量程切换
3程序设计
3.1程序框图
初始化显示
启动外部中断INT0
将A/D转换后的结果进行量程转化
num=0
num=2
num=1
将结果乘以10
将结果乘以100
显示量程0—2V
显示量程0—20V
显示有效值
EX0=0,num++
否
是
num=0
EX0=1
图8程序设计框图
3.2源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitclk=P2^0;//TLC549外部时钟输入
sbitout=P2^1;//转换结果数据串行输出端
sbitcs=P2^2;//芯片选择输入端
sbitRS=P2^5;//LCD控制
sbitRW=P2^6;
sbitEN=P2^7;
sbitkey=P3^2;//外部中断口,量程选择
ucharnum;//量程标志
ucharAD_data;
uintAD_data1;
ucharcodestr1[]={"value:
"};
ucharcodestr2[]={"range:
"};
ucharcodestr3[]={"0-200mv"};
ucharcodestr4[]={"0-2v"};
ucharcodestr5[]={"0-20v"};
ucharbuffer[5]={"00000"};
uchardanwei[]={"mv"};
ucharADOUT(void)//A/D转换
{
uchari,x;
clk=0;
out=1;
cs=0;
for(i=0;i<8;i++)//串行数据移位输入
{
clk=1;
x<<=1;//x的值左移一位后赋值给x
x|=out;//x与out位或后将值赋值给x
clk=0;
}
cs=1;
for(i=0;i<8;i++)//等待TCL549保持和转换工作的完成
_nop_();
returnx;
}
voiddelay1ms(uintms)//延时1毫秒
{unsignedinti,j;
for(i=0;ifor(j=0;j<100;j++);
}
voidwr_com(ucharcom)//1602写指令
{
delay1ms
(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms
(1);
EN=1;
delay1ms
(1);
EN=0;
}
voidwr_dat(uchardat)//1602写数据
{
delay1ms
(1);;
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms
(1);
EN=1;
delay1ms
(1);
EN=0;
}
voidlcd_init()//1602初始化设置
{
delay1ms(15);
wr_com(0x38);delay1ms(5);//设置16*2显示,5*7点阵,8位数据接口
wr_com(0x08);delay1ms(5);//关显示,不显示光标
wr_com(0x01);delay1ms(5);//显示清0,数据指针清0
wr_com(0x06);delay1ms(5);//写一个字符后地址指针加1
wr_com(0x0c);delay1ms(5);//设置开显示,不显示光标
}
voiddisplay(uchar*p)//显示
{
while(*p!
='\0')//当指针所指的地址的值不是空字符时,执行程序
{
wr_dat(*p);
p++;
delay1ms
(1);
}
}
init_play()//初始化显示
{
lcd_init();//1602初始化显示
wr_com(0x80);//显示value:
display(str1);
wr_com(0xc0);//换行显示range:
display(str2);
wr_com(0x80+0x0c);//显示mv
display(danwei);
wr_com(0xc0+0x07);//显示0-200mv
display(str3);
}
voidshow(uintdate)//显示子函数
{
buffer[0]=date/10000+'0';//将各个位上的数转换成ASCLL码
buffer[1]=date/1000%10+'0';
buffer[2]=date/100%10+'0';
buffer[3]=date/10%10+'0';
buffer[4]=date%10+'0';
wr_com(0x80+0x07);//显示有效值数值
display(buffer);
}
voidmain()
{
init_play();//初始化显示
IE=0x81;//允许总中断中断,使能INT0外部中断
IT0=1;//触发方式为脉冲负边沿触发
key=1;//I/O口初始化
while
(1)
{
AD_data=ADOUT();
AD_data1=(unsignedint)((unsignedlongint)AD_data*500/255);//将结果进行量程转化
if(num==1)
{
AD_data1=AD_data1*10;
wr_com(0xc0+0x07);//将量程显示改为0-2v
display(str4);
}
if(num==2)
{
AD_data1=AD_data1*100;
wr_com(0xc0+0x07);//将量程显示改为0-20v
display(str5);
}
show(AD_data1);//显示有效值
}
}
voidINTV0()interrupt0//外部中断INT0
{
EX0=0;
num++;
if(num==3)
num=0;
EX0=1;
}
4软件仿真
将由上述C语言程序通过Keil软件生成的HEX文件下载到Proteus电路图中的单片机上进行仿真,仿真结果如下:
当输入信号有效值150mV时,液晶显示如图9。
图9输入信号有效值150mV
当输入信号有效值1.5V时,液晶显示如图10。
图10输入信号有效值1.5V
当输入信号有效值12V时,液晶显示如图11。
图11输入信号有效值12V
表2仿真电压数据
输入有效值
(V)
显示有效值
(V)
绝对误差
(V)
相对误差
(%)
0.1
0.101
0.001
1
0.2
0.201
0.001
0.5
0.5
0.500
0
0
1
1.010
0.01
1
2
2.010
0.01
0.5
5
5.000
0
0
10
10.100
0.1
1
12
12.100
0.1
0.5
15
15.000
0
0
随机输入0—15V范围内的50Hz正弦信号,部分有效值转化后有误差,如输入有效值0.5V,显示0.5mV,输入有效值12V,显示12.1V。
但基本能保证在0.02的误差范围内。
5心得体会
古人云:
“纸上得来终觉浅,绝知此事要躬行。
”学习单片机知识与学习其他任何知识一样,仅从理论上去求知,而不去实践、探索是不够的,一定要动手尝试才行。
不能光看。
多想,多思考,多尝试,才是正路。
通过这次课程设计加深了我对单片机应用的认识
本课题是设计并实现对50HZ正弦交流信号有效值的测量,有效值广泛应用于各种电子设备参数。
根据设计中要实现的功能,我们经过自己认真地分析实践,确立方案,设计出电路,书写文档,在设计过程中翻阅了大量资料,通过对所得的各种资料的综合分析,提炼出自己需要的信息,从而提高自己的分析能力;通过对主要技术指标的分析,认真体会了设计时的各项技术政策;通过对设计时出现的各种问题分析与解决,锻炼了独立分析,进行工程设计的能力;通过对电路设计中的某些问题的较为深入的探索,培养了自己的科研工作能力;通过设计论文的书写,进一步锻炼了绘图技巧,文字表达能力和对工作的认真态度。
在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。
实验中暴露出我在理论学习中所存在的问题,有些理论知识还处于懵懂状态,通过课程设计加深了我对所学知识的理解。
从中我发现自己并不能很好的去使用我所学到的知识,在以后学习中我要加强对使用电路的设计和选用能力,锻炼自己的动手实践能力。
在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜悦。
虽然这个设计做的不怎么好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。
作为一个电信专业的学生,我深知课程设计的重要性。
这次课程设计我从刚开始的什么都不懂不会不敢不碰,到现在的基本了解了一个电路是如何构成,电路仿真也让我对以前学习的电路知识有了详细地了解。
这次课程设计让我学到了很多,不仅是巩固了先前学的模电理论知识,而且也培养了我的动手能力。
参考文献
[1]李群芳,张士军.单片微型计算机与接口技术.北京:
电子工业出版社,2008.
[2]郭天祥.51单片机C语言教程.北京:
电子工业出版社,2009
[3]徐爱钧.单片机搞基语言C51应用程序设计.北京:
电子工业出版社,1998
[4]吴友宇.模拟电子技术基础.北京:
清华大学出版社,2009
[5]马忠梅.单片机C语言应用程序设计.北京:
北京航空航天大学出版社,1997