发新帖本帖赏金 20.00元(功能说明)我要提问
12下一页
返回列表
打印
[电机应用]

关于中颖单片机PWM功能使用的一点经验1——定时器模拟PWM

[复制链接]
4074|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
blust5|  楼主 | 2022-2-18 17:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创#      @21小跑堂


作为一名电子工程师,用单片机引脚输出PWM波形这个事情大家肯定都做过。

而常用的两种PWM输出方式就是定时器模拟PWM信号和专用的PWM定时器生成PWM信号。

两种方式可以说是各有优劣。

使用定时器模拟PWM信号优点是不挑引脚,只要是具有输出功能的IO口就可以完成,非常灵活;而缺点就是占用定时器资源,且无法做到比较高的频率。

使用专用的PWM定时器的话,优点是编程简单,只需要配置相应的寄存器即可,频率可以做的相对比较高;缺点就是一般都需要特定的IO口进行输出。

前段时间我在中颖MCU上把两种方式都试了一下,并且遇到了一个小小的问题,在这里分享给大家。

我用的芯片型号是SH79F3214,这个芯片有一个12位的PWM定时器。


我首先做的是一个电机调速控制板,是在原有的电机开关控制的功能上增加调速功能。原有的电机驱动芯片用的是AT8870,之前用的是电平控制,很简单,需要的时候把其中一个控制脚拉高即可;拉高另一个控制脚,就是输出极性更换,即电机反转。
AT8870.pdf (715.21 KB)

AT8870这颗芯片的控制脚有PWM整流/限流功能,因此做电机调速直接把控制脚改成PWM输出即可,无需修改硬件电路。

由于控制电机调速无需太高的PWM频率,再加上现有的硬件条件IO口受限,因此我选用了定时器模拟PWM输出的方式进行。期望的PWM输出频率为5kHz,可分为20步调整,无需太精细的变化调整。

先选一个定时器,这里我选用的是定时器5,因为之前定时器5空闲。

首先初始化定时器5,定时时间设为10us。


注意,这部分代码要切换到BANK1里运行,因为这些寄存器地址在BANK1里。

其中CLOCK_10US是基于系统时钟16MHz和定时器时钟分频配置选择而定义的常量,HIBYTE()和LOBYTE()分别是取一个数据的高八位和低八位。


然后在定时器5中断里进行端口控制,完成PWM输出的模拟过程。


定时器5中断地址为interrupt 1,中断处理函数里面前后部分分别是压栈和出栈动作。
pwm_cnt是中断计数变量,通过这个变量来控制占空比。
PWM_ALL为整个PWM周期期间进入定时器5中断的次数,这里为20次(每次10us,即200us一个周期,频率为5kHz)。
PWM_High为高电平保持的中断次数,通过改变这个变量的值,即可控制PWM的占空比。
PWM_HIGH()和PWM_LOW()分别是IO端口输出高和输出低的宏定义。


完成这些配置,并完成中断配置(允许总中断和定时器5重点)之后,即可完成PWM信号的输出。
然后通过两个按键来完成PWM占空比的调整。


到这里,通过定时器模拟PWM输出的这部分功能就完成了。这部分代码加到原来的控制板代码里,整合之后即可完成电机调速功能。

至于使用PWM定时器输出PWM信号的部分,放到下一篇**里吧。


使用特权

评论回复

打赏榜单

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

评论
liuyinghao1991 2022-3-5 14:40 回复TA
挺好的,学习学习 
沙发
guijial511| | 2022-2-19 12:37 | 只看该作者
不错,学习了,谢谢分享。

使用特权

评论回复
板凳
chenqianqian| | 2022-2-19 13:09 | 只看该作者
板凳,支持一下。

使用特权

评论回复
地板
tpgf| | 2022-3-2 16:54 | 只看该作者
一般都是定时器模拟的吧

使用特权

评论回复
5
labasi| | 2022-3-2 17:03 | 只看该作者
非常不错 效果真是挺好的

使用特权

评论回复
6
paotangsan| | 2022-3-2 17:11 | 只看该作者
引脚能承受的最大速度是多少啊

使用特权

评论回复
7
blust5|  楼主 | 2022-3-2 17:15 | 只看该作者
tpgf 发表于 2022-3-2 16:54
一般都是定时器模拟的吧

现在基本上都有专用的PWM定时器了,就不需要模拟了

使用特权

评论回复
8
blust5|  楼主 | 2022-3-2 17:16 | 只看该作者
tpgf 发表于 2022-3-2 16:54
一般都是定时器模拟的吧

可以看下我的另外一贴。
https://bbs.21ic.com/icview-3198816-1-1.html

使用特权

评论回复
9
wakayi| | 2022-3-2 17:17 | 只看该作者
只可以模拟一个通道吗

使用特权

评论回复
10
renzheshengui| | 2022-3-2 17:20 | 只看该作者
在运行过程中可以更改占空比吗

使用特权

评论回复
11
wowu| | 2022-3-2 17:52 | 只看该作者
不是所有定时器都可以模拟的吧

使用特权

评论回复
12
blust5|  楼主 | 2022-3-2 18:10 | 只看该作者
wakayi 发表于 2022-3-2 17:17
只可以模拟一个通道吗

定时器模拟的话,只要频率不是很高,可以同时模拟多个通道,而且可以达到不同频率不同占空比的模拟,分别用各自的变量组来控制即可

使用特权

评论回复
13
blust5|  楼主 | 2022-3-2 18:11 | 只看该作者
renzheshengui 发表于 2022-3-2 17:20
在运行过程中可以更改占空比吗

只要控制占空比的变量是可变的,就可以在过程中更改占空比,甚至频率都可变,不过一般不需要改变频率就是了

使用特权

评论回复
14
blust5|  楼主 | 2022-3-2 18:11 | 只看该作者
wowu 发表于 2022-3-2 17:52
不是所有定时器都可以模拟的吧

基本上只要是中断时间能满足你的PWM信号配置的需求,就可以模拟

使用特权

评论回复
15
blust5|  楼主 | 2022-3-2 18:13 | 只看该作者
paotangsan 发表于 2022-3-2 17:11
引脚能承受的最大速度是多少啊

这个是足够的,定时器模拟的限制一般是在定时器中断时间上,因为定时器模拟的PWM周期时间是通过多个定时器中断叠加获取的(比如十次定时器中断作为一个PWM周期,其中高低电平按占空比配置),多以端口速度一般不是限制条件

使用特权

评论回复
16
mnynt121| | 2022-3-4 14:07 | 只看该作者
中颖单片机PWM分辨率是多少

使用特权

评论回复
17
blust5|  楼主 | 2022-3-4 14:08 | 只看该作者
mnynt121 发表于 2022-3-4 14:07
中颖单片机PWM分辨率是多少

不同型号分辨率是不一样的,具体参数要看对应的芯片手册

使用特权

评论回复
18
duo点| | 2022-3-4 14:47 | 只看该作者
支持原创

使用特权

评论回复
19
yujielun| | 2022-6-6 13:03 | 只看该作者
pwm周期和占空比是多少?

使用特权

评论回复
20
mituzu| | 2022-6-7 10:08 | 只看该作者
定时器模拟PWM使用计数器了吗  

使用特权

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

本版积分规则

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

72

主题

2825

帖子

11

粉丝