讨论用PIC实现1-1KHZ方波产生

2020-02-10 08:51发布

我想用PIC16F877做一个波形发生器,要求频率在1HZ到1KHZ连续可调,以1HZ步进,占空比恒定为50%,我用定时器做的, 用电位器调节,A/D采样的值做频率值,用频率值来计算周期,用TMR0做的定时,基准时间设为1MS,累计定时时间,达到半周期的时间就把I/O口电平取反,现在的问题就是频率只能以最小基准时间的整数倍步进,而我想要的结果是以1HZ步进,我算了一下1KHZ与999HZ就差1us,用我的方法是不可能实现,那位大侠有没有好的方法能够实现?麻烦指点一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
eduhf_123
1楼-- · 2020-02-10 09:37
20M晶体,用3个表分别装载T2CKPSn、CCPR1L、PR2,利用PWM功能输出波形。
eduhf_123
2楼-- · 2020-02-10 12:41
那3个表大小均为1K个字,可以考虑将每个表拆成4个,每个大小为250个字。
xiaorenren
3楼-- · 2020-02-10 13:42
 精彩回答 2  元偷偷看……
computer-xu
4楼-- · 2020-02-10 16:57
TO 【2楼】 eduhf_123 经历
T2CKPSn是什么寄存器,我好像没找到这个寄存器,还有你讲到(那3个表大小均为1K个字,可以考虑将每个表拆成4个,每个大小为250个字。)能讲具体点吗?要怎么样切换频率,
eduhf_123
5楼-- · 2020-02-10 20:08
T2CKPSn是T2CON寄存器中的低两位,用来确定TMR2的输入分频比。

至于表,是这样的,对于1Hz~1kHz中的每个频率,事先算好用什么样的值来装载我说的那三个寄存器,然后根据A/D采样结果得到的频率值来查常数表,用查到的常数装载入这三个寄存器,就可以让他自己工作了;可是877中的查表是通过ADDWF   PCL,    F指令来实现的,W中的值最大不超过255,也就是说只能查最大256个单元的表,所以要分段,频率在1~250Hz的时候查第一个表,频率在251~500的时候,用频率值减250作为索引值来查第二个表,以此类推。

对了,另外还有一个问题,那就是这样的方法对“高频段(频率接近1kHz时)”没有问题,在“低频段(频率接近1Hz时)”周期过长超过PR2的范围,就需要采用另外的办法了(如在中断服务程序中对某一变量计数,以实现定时器扩展)。

总之,需要分段处理。
wellqueen
6楼-- · 2020-02-11 00:28
厉害~~~~~~~~

一周热门 更多>