先楫半导体HPMicro
直播中

jf_76924617

1年用户 15经验值
擅长:嵌入式技术
私信 关注
[问答]

pwm 驱动 ws2812 问题

你好,我想用pwm 控制ws2812,但是reload 开到199(1.25us) 关掉pwm输出是高电平,reload 1999的时候 关掉pwm是正常的低电平,这个是bug吗?

我是调用函数关闭pwm的,pwm_enable_output, pwm_disable_output

7683bf834f33f84ac1ae91f13815c12.png

4d9a37b7748d36e20498e2c2d461ec9.png

回帖(5)

zjgmin

2023-9-13 16:38:30

最佳答案

或者用pwm_stop_counter关闭
1 举报
  • jf_76924617: 之前是参考的例程不对,不应该参考RGB例程的,,,使用pwm_stop_counter 可以关闭输出。 现在遇到的问题是,最后一次关闭的时候,立刻执行了,我希望能在CNT重载之后停止输出,而不是写入reload值后立即执行。

zjgmin

2023-9-16 10:37:56
关闭时附带加上    pwm_set_reload(PWM, 0, 0);    pwm_set_start_count(PWM, 0, 0); 看看呢
举报

zjgmin

2023-9-16 10:52:43
你是不是开着 GCR寄存器的CEN,如果是,试试 pwm_stop_counter(PWMx)。另外把RLD,STA,用到的CMPx清零试试?
举报

王越建

2023-9-21 16:12:16
根据你的描述,情况可能是正常的,因为WS2812  的数据传输时序比较特殊,一个位是由时间上的高电平和低电平组成的,低电平具体对应的时间比高电平短,而且WS2812 对时间的精度要求很高(每个位的误差不能超过 150ns),因此 PWM 频率需要设置为准确的数据传输频率,通常约为 800KHz。在您的情况下,可能是因为您的 PWM 输出时序没有正确地匹配数据传输时序,导致在不同的 reload 值下,输出的信号水平不同。建议您检查 PWM 输出的时序是否正确,并将频率设置为适当的值,以实现正确的数据传输。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分