12下一页
返回列表 发新帖我要提问本帖赏金: 20.00元(功能说明)

[电机应用] 关于中颖单片机PWM功能使用的一点经验2——PWM定时器配置

[复制链接]
7212|41
 楼主| blust5 发表于 2022-2-18 17:33 | 显示全部楼层 |阅读模式
#申请原创#     @21小跑堂


上一篇**讲到了用通用定时器模拟PWM信号输出,这一篇就讲一下用PWM定时器进行PWM输出吧。平台还是中颖SH79F3214。


这次是另外一个需求,需要控制一个风机并进行调速,风机的输入控制信号为PWM信号,推荐频率为20kHz。

基于这个需求,首先频率并不是很低,然后就是硬件电路无限制,因此这里使用了PWM定时器来完成PWM的输出功能。

首先确认中颖SH79F3214芯片的PWM信号输出引脚为26脚,P0.3。


在硬件上,将这个引脚连接到风机的PWM输入脚上即可,中间可以串一个100欧姆的电阻做保护。

然后就是软件上的工作。基本的程序框架在这里就不写了,这里只写和PWM输出控制相关的内容。

首先是PWM定时器的初始化。


首先,这颗芯片的PWM寄存器是有保护寄存器PWMLO的,只有在PWMLO寄存器的值为0x55的情况下才可以修改其他相关寄存器的值,因此这里首先把PWMLO赋值为0x55,并在配置完成后清零PWMLO。

然后就是配置PWM模块的时钟和周期及占空比的初始值,以及启动PWM定时器。

这里我并没有打开PWM定时器的中断,因为PWM输出是自动的,无需在中断里进行处理,因此没有开启。
如果开启了PWM定时器的中断的话,这个中断完全可以当成一个通用定时器的中断来使用。

到这里其实就已经配置好PWM定时器了,只要初始化的时候调用了这部分,对PWM完成初始化之后,P0.3引脚上就应该有PWM信号输出了。

IO口无需进行额外配置,只要PWM输出功能开启,P0.3引脚就是PWM功能,这是这个引脚的优先功能。

实际测试一下看看效果,却发现并没有按照预想的情况输出PWM信号,引脚上电平保持不变。

然后修改PWM周期寄存器和占空比寄存器进行尝试,发现有时候会出现PWM信号输出,但是并不是按照计算好的周期和占空比进行输出的,感觉完全对不上配置值。

到这里就非常疑惑了,按理说这个配置比较简单,应该不会出错的啊……

后面经过咨询用中颖MCU比较多的同事,被告知了一个信息:中颖MCU的PWM寄存器,在配置的时候必须先配置低位,再配置高位,所有的配置信息才会完全生效,因为它是将寄存器高位的赋值信号作为写入信号,在接收到这个信号的时候,统一写入寄存器的高低位的。
因此如果先写高位后写低位的话,其实低位的写入动作是无效的。

然后我特意去芯片手册上找,结果也没找到这部分的说明……

不过总算找到问题所在,重新修改一下初始化代码。


然后再次进行测试,发现一切正常,完全按照预想的信号进行输出。

解决这一问题之后,继续写PWM占空比调整功能,这里也是通过按键进行调整,按键识别部分就不贴了,这里放上调整部分的代码。


首先,这里的占空比调整范围为0%到100%,即全范围调整,调整步长为5%,即整个档位分为20次调整量,每次调整5%。

在这里写入PWM占空比寄存器的时候,也要记得开启保护寄存器,即将PWMLO寄存器写入0x55,并在写入完成后清零该寄存器。同时记得占空比寄存器要先写低位再写高位。

代码写完之后编译下载,测试运行,效果非常不错,完全达到了预想的效果。
这次的分享就到这里了,下次再见。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

打赏榜单

21小跑堂 打赏了 20.00 元 2022-02-24
理由:恭喜通过原创文章审核!请多多加油哦!

评论

@liuyinghao1991 :每款单片机的引脚功能分布都不一样,要看芯片手册的。  发表于 2022-3-7 08:58
对于MCU的各个引脚能做什么功能的应用吗,这方面的总结有没有啊,想学习一下  发表于 2022-3-5 14:41
tpgf 发表于 2022-3-2 19:57 | 显示全部楼层
哪种定时器可以用于模拟pwm输出呢
木木guainv 发表于 2022-3-2 20:05 | 显示全部楼层
感觉这款很小巧
xiaoqizi 发表于 2022-3-2 20:10 | 显示全部楼层
每次调整有间隙要求吗
磨砂 发表于 2022-3-2 20:27 | 显示全部楼层
在运行中的任何时候都可以更改频率吗
晓伍 发表于 2022-3-2 20:34 | 显示全部楼层
非常有营养的一篇原创  值得学习啊
八层楼 发表于 2022-3-2 20:45 | 显示全部楼层
现在大众化的是多少位的pwm啊
 楼主| blust5 发表于 2022-3-3 09:31 | 显示全部楼层
tpgf 发表于 2022-3-2 19:57
哪种定时器可以用于模拟pwm输出呢

模拟的话基本上是定时器就可以,而像这种可以配置参数来直接控制引脚输出PWM的,需要专用的具有PWM输出功能的定时器。
 楼主| blust5 发表于 2022-3-3 09:31 | 显示全部楼层
xiaoqizi 发表于 2022-3-2 20:10
每次调整有间隙要求吗

理论上没有要求,但是你如果在一个周期内调整两次,肯定第一次调整的根本反应不到输出端口上
 楼主| blust5 发表于 2022-3-3 09:32 | 显示全部楼层
磨砂 发表于 2022-3-2 20:27
在运行中的任何时候都可以更改频率吗

理论上是可以的,可以修改频率和占空比
 楼主| blust5 发表于 2022-3-3 09:33 | 显示全部楼层
八层楼 发表于 2022-3-2 20:45
现在大众化的是多少位的pwm啊

8位 12位 16位的都有,具体看需求 来选择单片机型号
ayslwx 发表于 2022-3-9 21:16 | 显示全部楼层
其实中颖单片机还是满不错的
probedog 发表于 2022-3-16 11:15 | 显示全部楼层
支持原创
域微 发表于 2022-3-19 11:18 | 显示全部楼层
quickman 发表于 2022-7-3 14:10 | 显示全部楼层
很详细的开发板资料                                 
beacherblack 发表于 2022-7-3 14:24 | 显示全部楼层
以后多交流交流                  
vivilyly 发表于 2022-7-3 14:56 | 显示全部楼层
楼主,资料很好。谢谢楼主!                                 
tabmone 发表于 2022-7-3 15:10 | 显示全部楼层
正准备学习的朋友推荐下载。                                 
tabmone 发表于 2022-7-3 15:32 | 显示全部楼层
这些资料太全了!!!                 
lzbf 发表于 2022-7-3 15:46 | 显示全部楼层
以后学习就方便了                                 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:业精于勤荒于嬉,行成于思毁于随。

72

主题

3004

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部