标题: 89C52单片机PWM误差有多大 [打印本页]

作者: ZMRGHY    时间: 2019-4-30 01:17
标题: 89C52单片机PWM误差有多大
看一下,52单片机的多慢吧。。。
PWM误差有多大吧。
33M  12分频
如果PWM频率166.66 KHz 时哪么一个
一个PWM周期 约6uS.
把高低电平都设置成 3uS.

52单片机的误差太大了吧。

程序如下。
没有什么错呀。
误差120%。。。。





作者: wulin    时间: 2019-4-30 06:43
51单片机在12M晶振条件下用普通方法极限输出脉冲宽度3us,周期6us。通常小于10us的控制不适合用定时器。因为执行每一条语句都需要时间,这会造成中断响应被迫延时。以下是12M晶振单片机输出167KHz方波的程序和仿真。
  1. #include <reg51.h>

  2. sbit OUT=P1^0;

  3. void main(void)
  4. {
  5.         while(1)
  6.         {
  7.                 OUT=~OUT;
  8.         }
  9. }
复制代码








作者: 1xiaosun    时间: 2019-4-30 07:04
你的计算不对,又定时器中断产生PWM,要考虑中断响应时间
其实现在很多51带PWM了
作者: Y_G_G    时间: 2019-4-30 08:40
你基础不好
1:把仿真的东西当实际来说事
2:89C52不是12T,是6T
3:PWM频率太高,一个定时器的中断时间只有7个机器周期,两三条指令就超过7个指令了,用汇编都得小心,用C占用的时间就更多了
作者: Hi℡    时间: 2019-4-30 08:47
确实是这样的  我搞了个定时器中断 也是不对的  程序中断一次1us 100次是1ms  出来的周期根本不是1ms  日了
作者: 1xiaosun    时间: 2019-4-30 09:20
定时器中断可以用自动重装,很准的
作者: cy002    时间: 2019-4-30 09:25
程序中断一次1us 100次是1ms
作者: 笨笨兔    时间: 2019-4-30 10:07
现在ARM流行,怎么嫌弃起来89C52了?
没有PWM的时代,自己想办法来实现PWM功能,89C52可是一个宝贝。。。。。。
作者: yzwzfyz    时间: 2019-4-30 16:11
地板说的对!
你把PWM的频率做成166.66 KHz,用它做什么呢?
如果必须使用超过此频率的PWM,也有解决方案,但不一定与你的方案一样!
你用一个不确当的方案,去假设一个不确当的事件了,而后又想求解……

作者: ZMRGHY    时间: 2019-4-30 20:24
Y_G_G 发表于 2019-4-30 08:40
你基础不好
1:把仿真的东西当实际来说事
2:89C52不是12T,是6T

汇编不会呀。。。。
作者: ZMRGHY    时间: 2019-4-30 20:28
cy002 发表于 2019-4-30 09:25
程序中断一次1us 100次是1ms

33M 12T
机器周期是  0.36363636636363636363 微秒。。。。。
作者: ZMRGHY    时间: 2019-4-30 20:32
1xiaosun 发表于 2019-4-30 09:20
定时器中断可以用自动重装,很准的

自动重装,
如何改变频率,
如何改变点空比呀。
作者: cy002    时间: 2019-5-2 17:27
ZMRGHY 发表于 2019-4-30 20:28
33M 12T
机器周期是  0.36363636636363636363 微秒。。。。。

0.36363636363636363636363636363636 * 8 = 2.9090909090909090909090909090909
这个是定时器累加的时间
但是进出中断,用户中断处理语句这些时间呢?
作者: Y_G_G    时间: 2019-5-3 13:46
ZMRGHY 发表于 2019-4-30 20:32
自动重装,
如何改变频率,
如何改变点空比呀。

哥们还不明白呀,一共才7个时钟的高电平,用C的话基本上就是什么事都做不了了,就是用汇编也是一样的呀,你要这么高的频率有什么意义呢?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1