请教PIC单片机高手,本人用PIC做了一个频率计

请教PIC单片机高手,本人用PIC做了一个频率计,第1张

八位单片机存储的数据是八位,两个字节16位。不姿拆过你不用关心这问题,对你来说他就是一个整兆友数而已,你的编译器会帮你搞定。

hundreds = temp/100//百位

decade = temp/10%10//十位

units = temp%10//个位

此外:temp=TMR1H*256+TMR1L这一句改改

temp=TMR1H<<8+TMR1L

现在很多编译器会帮你改成这样,不过自己写成族册槐这样总不会错的。

用LZ的方法,肯定会存在误差。数字方式都会有误差,误差范围可以接收就是好的设计。

用AD方法误差形成的原因:

无法在正弦波周期极值点正好是采样时刻而准确的采样到这个极值数据。采样点越多,精度才更高。

程序程序执行、计算的时间没有准确统计。

解决方法:

采用硬件方式,将正弦波转成方波送如PIC的一个端口,程序中定时计数就可以了。运算速度快,精度好控制。编程可能也容易些。甚至可以用外围电路组成0.1秒或者1秒闸门的计数器,程序中定时对计数器清零读数就可以了。缺点是硬件投入大一些,电路复杂一些坦镇碧。

仍采用让举AD方式,也是可以的,需要在预测频率的几个周期内AD采样点足够多才能找出比较准确的极值点。这就需要AD的速度够旅笑快,采样的频率要可知(知道每2个采样点的时间间隔,或者一个数组的总时间消耗),程序上要效率高。

AD转换可以放进定时器中断里面执行,例如100uS定时器中断一次去读取AD采样回来的值。

AD转换采样回来的值最好用软件滤波一下,这样比较精准,可以参考《十大滤波算法》。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12239934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存