本帖最后由 opp1234 于 2012-2-29 22:26 编辑
最近用ADC0809采样50Hz的正弦波信号(0~4V),面包板搭好电路后,信号发生器输入经过精密整流给AD采样,采样方式为定时采样(见以下C程序),均方根值计算后送串口显示。现在问题来了:直流信号时显示正常,交流输入时收到的数值不正确,而且不稳定。调了两天,还是不行。不知是AD问题,还是程序问题。MCU为51
采样部分程序如下:
unsigned long getdata()
{
uchar adval=0;
unsigned long sum=0;
for(i=0;i<100;i++) //预算是一个周期采样100点
{ P1=0xff;
ST=0;
ST=1;
ST=0; //启动AD转换
ALE=0;
ALE=1; //地址锁存
delayms(); //这里“大概”延时189μs(用Keil看的),用作转换
//0809转换时间最慢 128μs,CLK外接ALE二分频后的方波
OE=1;
adval=P1; //读P1口AD数据
OE=0;
sum=sum+adval*adval;
}
return sum;
}
………………
………………
usigned long a;
float t_rms ;
a=getdata()*5/255/100;
t_rms=sqtr(a); //转换为0~5V,并进行均方根算法
烦请各路大侠指点出问题啊,本人只是入门者。还有,一般这样的交流采样都采用什么AD,算法?查过论坛中的帖,有说滤波的,过零的,那么具体程序应该怎样啊? |