打印
[MCU]

单片机定时器做的模拟PWM有抖动

[复制链接]
5697|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
huangxz| | 2014-3-31 22:35 | 只看该作者
pwm我觉的必须是硬件的,如果硬件不满足还是考虑换方案吧,
用中断控制的pwm肯定是不是很稳定的,中断之前会互相影响的,虽然很小

使用特权

评论回复
板凳
ayb_ice| | 2014-4-1 07:07 | 只看该作者
模拟的抖动正常

使用特权

评论回复
地板
86hupeng| | 2014-4-1 07:56 | 只看该作者
抖动多大?是周期性的么?
如果是周期性的,说明程序没写好

使用特权

评论回复
5
handcosmos|  楼主 | 2014-4-1 09:11 | 只看该作者
本帖最后由 handcosmos 于 2014-4-1 09:13 编辑

抖动不是周期性的,感觉有点像累计误差一样,抖动从十几us到200us左右,然后又跳到十几us。

使用特权

评论回复
6
yanwen217| | 2014-4-1 09:40 | 只看该作者
楼主分析是对的,就是累计误差,因为MCU的clock的累计误差

使用特权

评论回复
7
handcosmos|  楼主 | 2014-4-1 10:03 | 只看该作者
上传一张示波器图在附件。条纹的粗细表示在抖动。
@ yanwen217 :请教有没有办法解决这个问题呢?

QQ图片20140401100052.jpg (82.33 KB )

QQ图片20140401100052.jpg

使用特权

评论回复
8
lanmp| | 2014-4-1 10:59 | 只看该作者
这与单片机的中断机制有关。有些单片机从终端信号产生到进入中断处理程序的延时是不固定的,和最后一条指令有关系。

使用特权

评论回复
9
coody| | 2014-4-1 13:03 | 只看该作者
估计是程序问题,我做的12路LED驱动,模拟PWM,不会抖动。

使用特权

评论回复
10
yanwen217| | 2014-4-1 13:16 | 只看该作者
handcosmos 发表于 2014-4-1 10:03
上传一张示波器图在附件。条纹的粗细表示在抖动。
@ yanwen217 :请教有没有办法解决这个问题呢?  ...

如果你程序是正确的话,这个无解。
我当年用HT的MCU试验过,程序只有一段输出PWM的代码,却会有很细微的抖动

使用特权

评论回复
11
handcosmos|  楼主 | 2014-4-1 15:23 | 只看该作者
本帖最后由 handcosmos 于 2014-4-1 15:25 编辑

我重新写了一下程序,MCU在上电之后初始化切换外部晶振之后直接跑延时程序输出PWM,没有开任何中断,发现PWM的波形还是如同之前一样抖动。
@coody :方便说下你使用的是哪家的什么MCU吗?

使用特权

评论回复
12
ayb_ice| | 2014-4-1 15:58 | 只看该作者
将模拟PWm的中断设为最高优先级,其次在进入中断就输出信号,

将计算部分放在后面处理

使用自动重装载方式

使用特权

评论回复
13
mfkyygt| | 2014-4-1 16:30 | 只看该作者
或者试试选一个合适的分频,尽量缩小定时器计数初值的误差,个人觉得倾向于累积误差

使用特权

评论回复
14
cjseng| | 2014-4-1 21:11 | 只看该作者
"抖动从十几us到200us左右,然后又跳到十几us"这个肯定是程序问题。

使用特权

评论回复
15
handcosmos|  楼主 | 2014-4-2 11:28 | 只看该作者
这个是一个测试程序。也出现类似的情况,抖动几个us.
//===================
void main()
{
        sys_status_init();
        sys_varible_init();
        while(1)
        {
        sys_varible_init();
          sys_timer_100us=~sys_timer_100us;
         P0=sys_timer_100us;
         delay(10);
        }
}
//==============
void delay(unsigned char delay_count)
{
unsigned char temp1,temp2;
for(temp1=0;temp1<delay_count;temp1++)
        for(temp2=0;temp2<250;temp2++);

}
//=====================

使用特权

评论回复
16
cjseng| | 2014-4-2 11:32 | 只看该作者
对了,你的示波器采样频率可能还不够,同步触发可能也不是很稳定。

使用特权

评论回复
17
wh6ic| | 2014-4-2 16:48 | 只看该作者
你用了RTX吧,10mS的周期看得到抖动,应该是它的影响了
定时器有精确的IO翻转模式和常用的中断软件翻转模式,IO翻转模式(很有些51核的定时器有这个功能,你找找)的误差是一个机器周期;中断软件翻转模式,保证中断优先时,误差通常也不会超过十几个周期。

使用特权

评论回复
18
旭日东起| | 2014-4-2 16:55 | 只看该作者
不会误差那么大的,一般误差只有几条指令的时间,因为进中断和判断的时候有几知指令时间误差的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

21

帖子

0

粉丝