单片机课设正弦交流信号有效值的测量Word文件下载.docx
《单片机课设正弦交流信号有效值的测量Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机课设正弦交流信号有效值的测量Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
Keywords:
RMSmeasurement,modulusconversioncircuit,singlechipmicrocomputercontrol
1电路设计
为了测得正弦信号的有效值,硬件电路的设计应包括信号的输入采集电路,模拟量与数字量转换电路,单片机控制电路与数字显示电路。
1.1信号采集与转换电路设计
本次设计所使用的A/D转换芯片是TLC549,它是一个串行8位A/D转换器,通过三线与通用微处理器进行串行接口。
因为是使用的串行接口电路,电路设计较简单,但是传输数据较慢。
通过阅读TLC549的资料手册,可以知道其具有4MHz片内系统时钟和软、硬件控制电路,转换时间最长17微秒,本次设计要求检测的是50Hz的正弦波信号,其转换时间完全可以满足电路设计要求,因此不用担心串行电路的传输速率较慢的问题。
TLC549所允许的输入电压不超过5v,设计要求能够检测的正弦波幅值为0到15v,所以在测量超过5v的正弦波信号时,需要先将信号分压到5v以下,才能输入TLC549。
电路图如下图所示,当所测信号在5v以下时,SW3开关接上,信号不需要分压直接输入芯片;
当信号在5到10v之间时,SW3开关接中,信号经由电阻R3和R4分压后,将R4两端电压作为输入信号输入芯片;
当信号在10到15v之间时,SW3开关接下,信号经由R5、R6和R7分压后,将R7两端的电压作为输入信号输入芯片。
这样的设计满足了TLC549对输入信号的要求,只需在后续设计中将结果线性放大就可以得到正确测量值。
图1信号采集与转换电路
1.2单片机控制电路设计
控制电路系统采用AT89C52作为主控制器,单片机具有体积小,方便操作,应用灵活,运行稳定准确等特点,现已广泛应用于各方各面。
单片机控制电路如下图所示,P1.0接收经TLC549转换后的数字信号,P1.1用于控制TLC549的工作状态,P1.2给TLC549提供时钟信号,P1.3与P1.4用于控制LCD显示屏的工作状态,P1.5与P1.6用于选择还原分压信号的放大系数,开关S1放大2倍,开关S2放大3倍,具体使用哪个开关视情况而定,P0口接LCD显示器。
图2单片机控制电路
1.3显示电路设计
显示电路主要由LCD显示器构成,R/W端口用于控制数据的操作是读取还是写入,因为本次设计中LCD显示器只用来显示数据,所以将R/W端接地即可。
RS与E端与AT89C52相应端口相连接,E端口是启动信号端口,RS端为高电平时,功能为数据输入,低电平时为指令代码输入。
D0到D7端口与AT89C51的P0口相连,单片机将要显示的数据传送到LCD显示器,因为在此处,P0口作为普通的I/O口使用,因此需要在外部加上拉电阻才可以使用。
图3显示电路
1.4总体电路
总体电路如下图:
图4总体电路
正弦波信号经过合适的处理后,经由A/D转换芯片,将模拟量转化为数字信号,交由AT89C52处理,最后将处理结果通过P0口传输到LCD显示器,至此,完成了正弦波模拟信号的采集,数字转换,软件处理以及显示的过程。
2软件设计
本次设计要求是测量50Hz的正弦波信号,一个周期为20毫秒,而我们所需要的是正弦波的峰值,在20毫秒内,将采集的数据等时间间隔采样50个,然后比较这50个数据的大小,将最大的那一个数据作为该周期内的峰值,将峰值除以根号2作为该正弦信号的有效值。
程序系统框图如下:
否
是
图5程序系统框图
程序代码如下:
#include<
reg52.h>
math.h>
#include"
TLC549.h"
LCD1602.h"
sbitS1=P1^5;
sbitS2=P1^6;
ucharTable[50],times=0;
bitflag=0;
voidinitT0();
voidmain()
{
ucharj;
ucharMax,Result;
initLCD();
initT0();
while
(1)
{
if(flag)
{
Max=Table[0];
for(j=1;
j<
50;
j++)
{
if(Table[j]>
Max)
Max=Table[j];
}
if(S1==0)
Max=2*Max;
if(S2==0)
Max=3*Max;
Result=Max/sqrt
(2);
writeLCD_com(0x80+11);
writeLCD_data(Result/100+48);
writeLCD_data(Result%100/10+48);
writeLCD_data('
.'
);
writeLCD_data(Result%10+48);
V'
flag=0;
TR0=1;
}
}
}
voidinitT0()
TMOD=0x01;
TH0=(65536-400)/256;
TL0=65136%256;
ET0=1;
TR0=1;
EA=1;
voidT0_time()interrupt1
Table[times]=ADConvert();
times++;
if(times==50)
TR0=0;
times=0;
flag=1;
TLC549转换源代码如下:
intrins.h>
sbitcs=P1^1;
sbitclk=P1^2;
sbitdout=P1^0;
uintADConvert()
uchari,temp;
uintshuju;
cs=1;
clk=0;
cs=0;
_nop_();
for(i=0;
i<
8;
i++)
_nop_();
clk=1;
temp=(temp<
<
1)|dout;
clk=0;
shuju=5.0/255*10*temp+0.5;
return(shuju);
LCD显示源代码如下:
#include<
#defineLCD_DATAP0
ucharRMSV[]="
RMSVol:
"
;
sbitRS=P1^3;
sbitEN=P1^4;
voiddelayms(uintdelaytime)
uchari;
for(;
delaytime>
0;
delaytime--)
for(i=124;
i>
i--);
voidwriteLCD_com(ucharcom)
RS=0;
LCD_DATA=com;
delayms(5);
EN=1;
EN=0;
//EN=1;
voidwriteLCD_data(uchardat)
RS=1;
LCD_DATA=dat;
voidwrite_string(ucharcol,ucharline,uchar*table)
if(col==0)
writeLCD_com(0x80+line);
while(*table!
='
\0'
)
writeLCD_data(*table++);
elseif(col==1)
writeLCD_com(0xc0+line);
}
elsereturn;
voidinitLCD()
writeLCD_com(0x38);
writeLCD_com(0x0c);
writeLCD_com(0x06);
writeLCD_com(0x01);
write_string(0,2,RMSV);
3仿真结果
图6仿真结果
图7仿真结果
图8仿真结果
图9仿真结果
图10仿真结果
图11仿真结果
可以看到,仿真显示结果基本符合输入信号的有效值。
4心得体会
通过本次课程设计,我明白了模拟量与数字量之间的转换,模拟量的采集,单片机控制的工作原理,定时器的工作方式以及显示电路的设计与原理。
在本次课程设计过程中,遇到的问题首先是芯片的使用,例如,TLC549的使用,LCD显示器的使用等。
通过查找芯片资料解决了芯片使用上的问题。
这些问题在课程设计之前,都不清楚,通过查资料,相关书籍,以及问同学,将这些问题一一解决,为电路的设计做好了铺垫。
在设计电路过程中,设计的思路很重要,例如,如何得到正弦波的峰值成为本次课程设计的关键,在获得正弦波峰值的方案上也有很多,为了简化设计,采用了本次设计的方案。
在芯片的选取上也有很多方案,A/D转化芯片种类繁多,本次设计选取的TLC549在硬件电路的搭建上有很多方便之处。
当然,本次课程设计存在一些不足之处,例如,TLC549的输入电压有一定范围,小于设计要求的电压,对于一个未知的电压容易超出量程,需要在设计中加入超量程报警电路。
软件编程设计上仍然存在很多不足,在查阅资料,请教同学之后,才完成了软件的设计。
这次课程设计,我收获很大,提高了我遇到问题解决问题的能力,加强了与同学就学习问题的交流讨论,加强了自己的动手能力,明白了团队合作的作用,同时也认识到了自己不足,在电路设计,元件参数的选取,芯片的选取,软件编程的问题上仍然存在不足,最重要的是认识到了光有理论知识是远远不够的,理论需要结合实践才能发挥最大的作用。
这些问题的暴露让我知道了以后努力的方向,在加强理论学习的基础上,提高自己解决问题的能力,提高自己动手实践的能力。
参考文献
[1]李群芳.单片微型计算机.北京:
电子工业出本社,2008
[2]伍时和.数字电子技术基础.北京:
清华大学出版社,2009
[3]胡乾斌.单片微型计算机原理与应用.武汉:
华中科技大学出版社,2006
[4]李刚.51系列单片机系统设计与应用技巧.北京:
北京航空航天大学出版社,2004
[5]孙育才,MCS-51系列单片微型计算机及其应用.南京:
东南大学出版社,1997