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

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

[复制链接]
2491|41
手机看帖
扫描二维码
随时随地手机跟帖
blust5|  楼主 | 2022-2-18 17:33 | 显示全部楼层 |阅读模式
#申请原创#     @21小跑堂


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

82471620f674f7655e.png

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

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

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

77361620f675b7bd09.png

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

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

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

59162620f67653a5c3.png

首先,这颗芯片的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寄存器,在配置的时候必须先配置低位,再配置高位,所有的配置信息才会完全生效,因为它是将寄存器高位的赋值信号作为写入信号,在接收到这个信号的时候,统一写入寄存器的高低位的。
因此如果先写高位后写低位的话,其实低位的写入动作是无效的。

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

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

37128620f67712c036.png

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

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

49900620f677d57d9f.png

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

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

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

使用特权

评论回复

打赏榜单

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

评论
blust5 2022-3-7 08:58 回复TA
@liuyinghao1991 :每款单片机的引脚功能分布都不一样,要看芯片手册的。 
liuyinghao1991 2022-3-5 14:41 回复TA
对于MCU的各个引脚能做什么功能的应用吗,这方面的总结有没有啊,想学习一下 
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 | 显示全部楼层
以后学习就方便了                                 

使用特权

评论回复
发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则