5555|6

87

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】关于F149测正弦波频率,测量值在正常值和另外一个值之间跳 [复制链接]

用430单片机做一个课程设计,需要用单片机测量正弦波频率。
正弦波经过一个简单的处理将其负半波削掉,然后送入单片机的比较器输入端与二极管参考电压进行比较,输出结果送定时器A的捕获/比较器1,捕获比较寄存器设置为上升沿触发。
现在的问题是测量值一次是对的,下一次是错的,再下一次又是对的,反复这样,不知道是为什么。请各位大虾帮忙。
...
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer
P5DIR |= 0x30; // P5.5,P5.4 outputs
P5SEL |= 0x30; // P5.5,P5.4 options
P1DIR |= 0X07; // CS_7289 = P1.0 ; CLK_7289 = P1.1 ; DIO_7289 = P1.2
P1OUT = 0X01; // CS_7289 = 1;
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG;
Delay(255);
}
while((IFG1&OFIFG) != 0); // Change the system clock
BCSCTL2 |= SELM1 + DIVM1 + SELS + DIVS0 + DIVS1; // MCLK = (1/4)XT2;SMCLK = (1/8)XT2
CACTL1 |= CARSEL + CAREF_3 + CAON;
CACTL2 |= P2CA0 + CAF;
for(i = 0; i < 200; i ++)
Delay(255); //waiting for zlg7289 ready;
DisInit();
CCTL1 = CM_1 + CCIS_1 + SCS + CAP + CCIE; // &sup2;&para;&raquo;&ntilde;±&Egr××e;&frac12;&Iuml;&iquest;&Oslash;&Ouml;&AElig;&frac14;&Auml;&acute;&aelig;&AElig;÷1
TACTL = TASSEL_2 + TACLR + TAIE; // Timer_A &iquest;&Oslash;&Ouml;&AElig;&frac14;&Auml;&acute;&aelig;&AElig;÷
TACTL |= MC1;
_EINT();
while(1)
{
DataDisplay(MeasureF());
for(i = 0;i < 255;i ++)
Delay(255);
}
}
...
ULONG MeasureF(void)
{
ULONG tmp;
UINT *p;
while(finishFlag == 0);
finishFlag = 0;
if(timerMeasure.num == 0)
tmp = timerMeasure.timeEnd - timerMeasure.timeStart;
else
{
MPY = timerMeasure.num;
OP2 = 65535;
p = (UINT *) &(tmp);
*p = RESLO;
*(p+1) = RESHI;
tmp = tmp + timerMeasure.timeEnd - timerMeasure.timeStart;
}
return (tmp);
}

#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch(TAIV)
{
case 2:
{
if(flag == 0)
{
flag = 1;
timerMeasure.timeStart = TACCR1; //存开始时间
CCTL1 &= ~COV;
}
else
{
timerMeasure.timeEnd = TACCR1; //存结束时间
CCTL1 &= ~COV;
timerMeasure.num = number; //存在开始和结束时间之间timerA溢出次数
flag = 0;
number = 0;
finishFlag = 1;
}
break;
}
case 10:
{
if(flag == 1)
number ++;
break;
}
}
}

最新回复

我用比较器座信号调理电路时,也碰到类似问题,低频信号经过比较器输入430捕获错误。请问用什么信号调理电路没有这种问题?  详情 回复 发表于 2005-8-24 11:38
 
点赞 关注

回复
举报

55

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
用比较器的时候,要注意 + 端 与 - 端输入的不平衡性。
将半波交流信号滤波后用 ADC12 进行采样,再查平均值对照表,也可以实现交流采样。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
半波交流信号从比较器的正端输入,比较器的负端接的是单片机内部的二极管参考电压。
嗯,这个正弦波现在是信号发生器产生的。只要能得到其频率信息就可以了,别的信息都不需要。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
注意比较器的输出有振荡的,即使用内部滤波,也有频率限制的,最好将输出信号引出自己滤波
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
嗯,要测的频率都不高,最多到3000Hz
好,我去试试,谢谢
还有一个问题
当频率比较低时(<10Hz),我发现捕获比较寄存器cov总是1(溢出),一来中断我就读捕获比较寄存器的值,不知道为什么还溢出~~~
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

6
 
这就是我上面讲得问题,没错的,如果有条件的话可以不用比较器,自己做个发生器
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
我用比较器座信号调理电路时,也碰到类似问题,低频信号经过比较器输入430捕获错误。请问用什么信号调理电路没有这种问题?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表