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转换采样回来的值最好用软件滤波一下,这样比较精准,可以参考《十大滤波算法》。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)