如何无冒险更新PWM数值?

如何无冒险更新PWM数值?
2025年01月08日 15:51 电子产品世界

一、前言

本文引用地址:

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

▲ 图1.1.1 输出信号中的毛刺
▲ 图1.1.1 输出信号中的毛刺▲ 图1.1.1 输出信号中的毛刺

二、解决方案

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

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

※ 总  结 ※

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

参考资料

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

PWM
新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

0条评论|0人参与网友评论
最热评论
--------

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片