回复
Highlighted
发帖数: 17
注册日期: ‎08-18-2017
已接受解答

PWM的硬件配置输出求教

我用Simplicity Studio4想要实现一个1.25us为周期的PWM波,占空比可以在1/3与2/3调节,我试着用PCA但是发现可以调占空比时频率最高只有96KHZ左右,我又试着直接用timer0中断,结果用模式2试验发现重装时间要10us左右,有没有大神给些建议,万分感谢!我使用的系统时钟频率24.5MHZ,附上两种方法的设置截图。

发帖数: 2,326
注册日期: ‎10-14-2014

回复: PWM的硬件配置输出求教

采用PCA 模块:

8-bit模式的frequency大概是

24.5/256 = 95.7kHz, 和你的结果大致一致。

 

采用Timer mode 2 模式:

24.5*10^6*10*10^6=245.

-------------

结果用模式2试验发现重装时间要10us左右.

------------

没有完全理解你这里什么意思。你的重装TH0设置的值是多少?

 

1.25uS的1/3大概是5/12 uS, 如果用24.5MHz (1/24.5 uS) SYSCLK并在中断模式下,只有10.2个SYSCLK就产生一次中断,可能中断响应不过来。

 

这个要求可能难以实现。

WeiguoLu
发帖数: 17
注册日期: ‎08-18-2017

回复: PWM的硬件配置输出求教

我在timer1中设置成定时器工作方式2,他是自动重装的,我设置的初始值是0xf6(246),就是想要大约400ns一次溢出,但是他显示的reload period是10us。而我是想要得到一串以1.25us为周期的信号,信号的01码是1/3高电平2/3低电平和1/3低电平2/3高电平来实现的,可能是我的思路错了,能给我些建议吗,谢谢

发帖数: 2,326
注册日期: ‎10-14-2014

回复: PWM的硬件配置输出求教

如上所说,这个需求可能在24.5MHz 主频的芯片上不能实现。

1.25uS/3 = 416.7nS.

24.5MHz 主频的周期大约为40nS,  所以每个interrupt要在416.7/40nS = 10.42个SYSCLK 内处理完ISR(进入及退出)不太现实。加上你在ISR中还要操作I/O并且判断并且重新load新的timer reload值(2/3, 和1/3)。

 

我们有几篇关于中断延迟的KB article,你可以看看。

http://community.silabs.com/t5/8-bit-MCU-Knowledge-Base/Interrupt-Latency/ta-p/110437

 

http://community.silabs.com/t5/8-bit-MCU-Knowledge-Base/Pin-Interrupts-Latency-of-EFM8LB1/ta-p/17767...

还有另外几个相关的。

另外你的1.25uS周期有没有允许的误差要求。24.5MHz产生1.25uS的周期也不是整数 (24.5*10^6*1.25*10^6=30.625),也就是30.625个24.5MHz的时钟才是1.25uS。

 

这个项目是做什么用途的,可以考虑使用32bit EFM32芯片来实现,那个里面对产生PWM更flexible一些,并且硬件可以直接产生PWM,不怎么需要CPU 参与(不用ISR)。

WeiguoLu
发帖数: 17
注册日期: ‎08-18-2017

回复: PWM的硬件配置输出求教

我做的这个是WS2812灯条的控制,要求可以输入控制输出颜色和图案。

这是WS2812的规格书文件链接

https://wenku.baidu.com/view/8764815f240c844769eaee8b.html

发帖数: 2,326
注册日期: ‎10-14-2014

回复: PWM的硬件配置输出求教

可以直接gpio bit bang控制试试。
WeiguoLu
发帖数: 17
注册日期: ‎08-18-2017

回复: PWM的硬件配置输出求教

多谢了