新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 如何无冒险更新PWM数值?

如何无冒险更新PWM数值?

作者: 时间:2025-01-08 来源:TsinghuaJoking 收藏

一、前言

本文引用地址:https://www.eepw.com.cn/article/202501/466097.htm

在刚才的实验中,使用 GP8500,将单片机发送的波形转换成。在这个过程中,会发现输出有一些毛刺。信号中的毛刺主要是因为输出的波形出现了抖动。可以看到,在抖动前面和后面的占空比不同。由此可以知道,在这中间,单片机对PWM的比较单元进行了数值更新。更新前后,GP8500输出的电压不同。那么问题来了,如何能够避免PWM中寄存器更新的过程中,出现输出脉冲抖动的情况呢?下面讨论一下这个问题的解决方案。

▲ 图1.1.1 输出信号中的毛刺

二、解决方案

数据手册中,对于更新PWM模块中 CCR寄存器有相应的说明。需要对 CCMR寄存器中的 OCnPE位进行设置。如果设置为0,则更新后的数值会立即生效。否则,只有当PWM模块出现更新事件之后,CCR寄存器才会更新写入的数据。可以看到,在程序中,之前对于比较寄存器预装使能位没有置1,疏忽了。现在将它修改过来,重新测试,就会发现,前面遇到的输出毛刺信号就消失的无影无踪了。

▲ 图1.2.1 修改之后,输出波形就没有毛刺了

※ 总  结 ※

本文记录了 单片机中 PWM 比较寄存器更新的问题。如果使能比较寄存器预存功能,可以避免输出PWM波形出现抖动现象。这就会让 GP8500 这颗PCA芯片的输出信号中不会出现毛刺。那么问题来了,既然PWM 比较寄存器的预存功能如此重要,为何还会存在一种设置,来取消这种预存功能呢? 这种预存功能取消之后,会适合应用在什么情况下呢?

参考资料

[1]利用PWM输出模拟电压:STC32G 驱动 GP8500: https://zhuoqing.blog.csdn.net/article/details/144979365



关键词: STC32G PWM 模拟信号

评论


相关推荐

技术专区

关闭