这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 89c52中断的怪问题

共15条 1/2 1 2 跳转至

89c52中断的怪问题

助工
2013-09-18 17:23:16     打赏

最近我搞了个项目,用89C52测频(不能改变的),单片机工作频率为12MHz,测量范围15HZ~16000Hz(这是没法子的,重点型号,只能用52),要求测量精度大于0.56%采用可变多周期测量法,并使测量精度不低开0.03%,测量的总周期数可变。采样用的是INT0口,下降沿触发。编程采用KEIL51 9.00版本。proteus7.8。

 设计要求:

测量范围15HZ~16000Hz

测量精度全量程0.56%

主频12MHz

看门狗使用timer1

等精度测量使用timer0

电机驱动使用timer2

掉电检测INT1

掉电检测50ms,超过保护,使用timer1

硬件很简单,输入整形,经光偶输入89C52,如下图,因为硬件资源全部用完,串行用的是移位寄存器方式,方式0  1MHz。所以没有用处。proteus中省去了输入电路,我需要的验证软件问题

 



 




 问题出现了:在7000Hz以下,用KEIL51的仿真测量结果与理论值相近,误差小于0.03%,在7000Hz以上误差可怕,如下图输入频率14109Hz:

 



  

可结果为14280,为正差,在装上产品后发现为负差,误差都很大,我日这不完了,硬件不是我搞的,一查光偶的输出变形。可下图中KEIL51仿真问题在哪?

 


 


 

 

脉冲不正常,在外部中断0的引脚上有太多的空白,导致多周期测周法失败,误差太大(1.2%)。

以前我用KEIL51基本上是在计算机上软件仿真搞定,这次问题大了,不管硬件如何,软件我自己都有问题。


与理论值相差太大了,项目基本玩蛋,想了个办法,用proteus仿真(版本7.8),电路如下图:

 


 

 

超级简单,频率设置为14.109KHz,上升及下降沿时间设置为0ns


 


 

 

上图左边鼠标处2FCB371D差距太大,右边图中是INT0引脚的波形,可是为什么少了脉冲,有哪么多空白?这其实与Keil51中仿真结果一样,在INT0(P3.2)引脚上丢失了脉冲。

边上有个小弟问:脉冲与正弦有什么区别,传感器输出是什么?头一热,传感器是正弦,试下设置如下:


 


 


 


 

 

正弦波输入时,输出正常了,鼠标处有连续的3718数值,为什么??可是传感器输出是要整形为方波的,用正弦没用!

 

想到了正弦波不就是上升下降沿是斜的么???设置中断信号如下图(上升下降沿1ns):


 


 

 

修改中断参数上升及下降沿时间设置为1ns,结果如下图,中断脉冲正常了,得到的数据误差为万分之几,完全满足要求。

采用KEIL51+Proteus联合调试,结果如下:


 


 

 

蓝色的脉冲是测试用的数INT0中断次数的输出(一次中断输出一个)用以观察是否出错,将中断与响应组合后如下图:


 


 

 

显然,响应非常正确,而KEIL51中结果如何呢?在Proteus中输入频率14109Hz时,在KEIL51中输出如下图:


 


 

 

结过联调测试,软件仿真的结果表示,软件设计的误差为0.00036,满足设计要求。

总结:KEIL51Proteus应该比较真实的反应了89C52系列的时序问题:

1、在KEIL51 logic analyzer分析中,上升及下降沿应是0ns,而89C52的引脚不能响应上升及下降沿是0ns的脉冲,我试了一下,换为其它引脚上升及下降沿是0ns时,问题相同。

2、我还需要在硬件改进后验证:

a、在测量频率时,整形为方波太好反而不利?

b、与低频测量的区别

c、整形波形的转换速率就是多少最好?

SM8952(军级)就量这特性?能有更好的东西吗?这只有DIP40的!

我日啊!何时可以让我能选择贴片的????????????????

3、在keil51中改变主频为24MHz时高频误差减小约为12MHz的1/3,看来经典的89C52是太慢了,可是在设计中,测频时我关了其它的中断,测完又关了测量中断,只做计算,相互没影响,在protues中程序正常,但产品中误差很大。无法解释。

4、高频下INT0引脚上脉冲为何会丢失!

5、最高主频只能达到24MHz,指令周期0.5us。如何减小设计误差(不可能选择高主频的芯片的)。





关键词: 89c52     测频    

高工
2013-09-18 18:01:24     打赏
2楼
东西太长手机看的费劲,但是51用12M时钟频率,系统频率只有1M,也就是时钟分辨率只有1微秒~理论上高频测量精度就没有多高~

院士
2013-09-18 20:50:27     打赏
3楼
求救了半天,图片呢?

高工
2013-09-20 22:35:45     打赏
4楼
图全挂了。。。

高工
2013-09-21 22:56:04     打赏
5楼
图……

院士
2013-09-21 23:55:38     打赏
6楼
先看帖子,等图出来后再看一遍。

菜鸟
2013-09-23 06:56:13     打赏
7楼
请做出实物,好调试,等精度频率测量

助工
2013-09-24 06:49:22     打赏
8楼
产品出了问题,找不到原因,所以用软件仿真。产品晶振为12MHz,用keil51 9.0版时,6000KHz以下误差正常,我的响应频率达要求20KHz,现在硬件响应带宽满足要求1Hz~16KHz,但高频测量误差太大,不知是软件还是硬件的问题。多周期测量时误差在实验室中应是负差,可产品的输出值在6000Hz以下为正差,以上为负差,当然6000Hz以下误差满足0.56%的要求,以上就不行了。
改变Keil51中主频为24KHz,误差会下降,与预期一样,但达不到protues中的效果。


助工
2013-09-25 06:41:10     打赏
9楼
频率测量,用单片机中断时有问题的,低频时无所谓,单当频率过高,会把CPU累死的!你可以CPU内部计数器与外部硬件计数器同步工作。采用T/M法,使用timer对外部频率进行计数,使用timer比较输出中断,当计数一定值时,使能外部引脚信号,启动外部计数器对固定参考频率计数,这样可以的!

助工
2013-09-26 07:08:28     打赏
10楼
我不能用T/M法的!现在的计算方法在低频和高频时精度很高,只是当输入频率高时,比如我只测量255个脉冲,在测量时其它子程序是关了的,测量完成,会关掉测量,只进行运算。 软件仿真中,这种方法是成功的,精度很高,但在产品中误差很大,找不到原因。
我说下吧:我测量后转换为步进电机的旋转角度,驱动指针,指示精度要求很高,0.56%,我软件的设计精度确实达到了0.05%,可产品在高频时就不行,还要搞个分段补偿,晕死了!!!

也就是就说线性测量,测量结果成了非线性。


共15条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]