OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16171|回复: 31

STM32PWM波通过PID控制对直流电机进行调速

[复制链接]

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
发表于 2016-6-7 16:19:42 | 显示全部楼层 |阅读模式
在网上灌水的时候看见了一个说要做pwm直流电机调速的帖子,之前学习过pwm波的产生,我也知道pwm波能够调速但具体怎么实现没有深究过。看到这个帖子突然就想弄明白pwm波到底是怎么来对电机进行调速的,无论是从硬件方面还是软件方面都想有一个大致的了解。因此,我开始了一周的学习苦旅。当然了,学习就是自学嘛!内事不明问老婆,外事不明问度娘啊!在百度上找了半天找了一个关于直流电机调速的程序。这个程序是用的高级定时器TIM1TIM8做的8PWM波输出。之前我只是用过通用定时器的定时器功能和PWM波功能,但PWM波功能也大抵忘却了。因此,对着STM32的手册开始看起来。其实这个PWM波跟通用的差不多喽!都是设置一个比较值,当计数器的值小于这个值的时候输出高电平(或低电平),大于这个值时输出低电平(或高电平)。我看的是库函数版本的,但是我不懂的就会打开库函数的定义去看它到底改的是哪个寄存器,再对照STM32用户手册来看这个寄存器的功能,我感觉这个办法还不错对于库函数中参数设置的原因基本都有了解。如果你还是不清楚的话,你可以看用户手册中相应的部分比如PWM波输出模式,这些都有讲解的。说了半天怎么学的问题,还是回到正题吧!当然在设置PWM波之前,你还要设置定时器的时钟,就是设置分频器的值;还要设置计数周期,你不可能让计数一直计数下去吧(总是吃它也会撑死的)!还有向上计数向下计数啊等等。如此这般你的PWM就算配置好了。但是你仔细看STM32的用户手册你会发现高级定时器的功能是与通用定时器有区别的——死区和刹车。当然我们控制直流电机一般不会用到刹车功能,但是出于对刹车好奇,我还是看了下来。其实软件刹车呢,就是把输出都置0,当你输出的PWM波都为0时,你控制的外设就没电了然后不就停止了嘛!当然,要注意的是TIM_AutomaticOutput这个量一定要设置为ENABLE,如果你设置为DISABLE的话,当你的刹车信号量为从1变为0(假如你设置的是1为刹车使能量)的时候,PWM波还是不能输出的。下来再说说死区的功能,我一开始看到这个东西的时候也没想明摆它是干什么的,但后来我学到了控制电机的驱动H桥控制电路的时候,我想明白了。H桥控制电路主要是由四个三极管来完成的,其中对角的三极管构成一个通路,也就是说在一个边上的两个三极管是不能同时导通的,而我们通过软件的PWM波来控制三极管的通断的时候,硬件是有延迟的这就不可避免地会出现一个边的两个三极管会同时导通,这时候死区就有用处了。死区就是对有效信号进行了延时(注意是有效信号),从而避免了两个三极管的同时导通。当然死区时间的设置也是有一定讲究的,这在数据手册中都有说明。死区和刹车的设置都是用在一个结构体中设置的。直流电机还是不要设置刹车了,听论坛大神的说法是刹车可能会影响PWM波的输出波形。电机调速嘛,你得知道速度才能调啊!所以我们这里的测速工具就是增量编码器。增量编码器的原理就是电机带着光栅转动,光栅转动会导致光的通断,也就是脉冲信号,将其转换成电信号就能得到方波,从而我们可以对脉冲信号进行计数就能得到电机的转速。这样,问题就来了——我们怎么对脉冲信号进行计数呢?答案就是定时器的编码器模式(之前也没用过,研究了半天才弄明白)。通过TIM_EncoderInterfaceConfig这个函数可以设置定时器为编码器模式,同时可以设置哪个通道在哪种情况下进行计数。我理解的编码器模式就是通道采集增量式编码器发来的脉冲信号,然后对脉冲信号的上升沿或下降沿进行计数,当计数达到我们设置的计数器的自动装载值时,产生中断。当然,如果进行测速的话,我们只通过编码器模式得到电机运动的总路程S是不能得到速度,因此我们还需要一个定时器来计时,这样有路程有时间我们就可以得到电机的转速了。定时器的问题在这里就不赘述了,因为它是PWM模式和编码器模式的基础,不懂的同学自己去看吧!转速有了,那我们的下一步就是调速了。调速的话,就是学过自动化的同学都知道的PID控制,通过我们预想达到的速度与测得的电机速度的差值作为PID控制的输入,通过PID控制来逐渐缩小实际速度与预想速度的差值,最后达到预想速度。关于这个问题的大致理解就是这样的,如果自己想写PID控制的程序的话,我建议你还是好好看看这方面的书籍吧!毕竟我对这个控制也不会很理解,只是找到了一些这方面的资料。我也不能甄别真伪,所以就请大家自己去看吧!这里还要说的一个问题就是PID控制中参数的整定问题,我看了一些资料也不知道是怎么整定的,如果哪位大神知道这个东西,请赐教!!!!对了,还有一个问题是电机转向的问题。一个问题是怎么测得现在电机的转向问题,这在增量编码器中的原理中有的,是根据两个脉冲信号到达高电平的先后来判断的,反映到我们程序里面对应的就是编码器模式下定时器寄存器CR中的DIR位,读取DIR位是向上计数还是向下计数就可以判断是正转还是反转了。令一个问题是如何改变电机现有的转向。这个问题还要归结到硬件知识的H桥控制电路,H桥控制电路不仅能控制调速还能控制转向。一般情况下的H桥控制电路是要两路输入的,而这两路输入只能有一个来进行输入作为电机的电源,这两路输入的切换主要是改变电机线路的正负极接线方式从而改变电机的转向。因此,当需要改变电机的转向时,我们只需要把控制电机的这两路PWM信号进行切换就OK了。
以上这些基本就是我这5天时间里自己理解整理的关于PWM直流电机调速的一些想法。它只是为大家提供了一些编程思路以及控制流程,对于一些实际的代码我想还是大家自己去实现吧!关于硬件的东西,我个人的理解就是要设计一个控制电机的H桥控制电路还有一个就是把电机的增量编码器和STM32IO口连接好。
这就是我对于STM32定时器和直流电机调速软硬件的一些想法,请各位大神多指正同时也期待与各位同仁的交流!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
 楼主| 发表于 2016-6-7 16:20:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-3-27
在线时间
12 小时
发表于 2016-6-11 11:04:08 | 显示全部楼层
回复 支持 反对

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
 楼主| 发表于 2016-6-12 08:59:42 | 显示全部楼层
这里还要说的一个问题就是PID控制中参数的整定问题,我看了一些资料也不知道是怎么整定的,如果哪位大神知道这个东西,请赐教!!!!
回复 支持 反对

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
 楼主| 发表于 2016-6-13 16:15:00 | 显示全部楼层
怎么没人回一下啊?
回复 支持 反对

使用道具 举报

17

主题

237

帖子

0

精华

高级会员

Rank: 4

积分
925
金钱
925
注册时间
2012-2-27
在线时间
393 小时
发表于 2016-6-13 16:44:11 | 显示全部楼层
写得不错,顶一个
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-3-27
在线时间
12 小时
发表于 2016-6-15 19:37:38 | 显示全部楼层

回复 支持 反对

使用道具 举报

8

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2015-4-24
在线时间
85 小时
发表于 2016-7-18 13:35:51 | 显示全部楼层
airuoshahen 发表于 2016-6-13 16:15
怎么没人回一下啊?

楼主淡定,我来顶贴
回复 支持 反对

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
 楼主| 发表于 2016-7-19 16:11:28 | 显示全部楼层
bruellyyang 发表于 2016-7-18 13:35
楼主淡定,我来顶贴

不是顶帖,帖子里的问题还需要大神给回复一下呢!PID参数的整定是如何完成的?
回复 支持 反对

使用道具 举报

8

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2015-4-24
在线时间
85 小时
发表于 2016-7-19 21:04:50 | 显示全部楼层
airuoshahen 发表于 2016-7-19 16:11
不是顶帖,帖子里的问题还需要大神给回复一下呢!PID参数的整定是如何完成的?

我也是刚需要编码器,才看到的。抱歉没有用过PID。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
10 小时
发表于 2016-7-19 22:25:05 | 显示全部楼层
我用过,但是也不是很会,都是慢慢调,拼感觉
回复 支持 反对

使用道具 举报

4

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2015-11-3
在线时间
31 小时
发表于 2016-7-20 00:12:49 | 显示全部楼层
PWM位数有个疑问,为什么我给2000,输出占空比就是100%了,不是16位65535吗?
回复 支持 反对

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-20 09:19:44 | 显示全部楼层
moreStrong 发表于 2016-7-20 00:12
PWM位数有个疑问,为什么我给2000,输出占空比就是100%了,不是16位65535吗?

void Motor_Init(uint16_t arr, uint16_t psc)
arr是自动重装载周期,占空比为x/arr,如果你的arr等于2000,当然是100%
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复 支持 反对

使用道具 举报

4

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2015-11-3
在线时间
31 小时
发表于 2016-7-20 13:50:28 | 显示全部楼层
wszdxmh 发表于 2016-7-20 09:19
void Motor_Init(uint16_t arr, uint16_t psc)
arr是自动重装载周期,占空比为x/arr,如果你的arr等于20 ...

感谢楼主,我今天突然明白过来了,问题已经解决,是我把定时器初值设置成2000 所以我给CCR最大只能为2000
回复 支持 反对

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
 楼主| 发表于 2016-8-16 11:28:18 | 显示全部楼层
bruellyyang 发表于 2016-7-19 21:04
我也是刚需要编码器,才看到的。抱歉没有用过PID。

编码器不是用来测速的吗?你测速之后不就是调速吗?你调速的话不是用PID调节吗?用PID调节不就用到参数整定了吗?
回复 支持 反对

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
 楼主| 发表于 2016-8-16 11:29:04 | 显示全部楼层
LinaC 发表于 2016-7-19 22:25
我用过,但是也不是很会,都是慢慢调,拼感觉

所谓的凭感觉就是看输出的波形吗?那什么样的波形就是可以的了呢?
回复 支持 反对

使用道具 举报

8

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2015-4-24
在线时间
85 小时
发表于 2016-8-16 17:03:42 | 显示全部楼层
airuoshahen 发表于 2016-8-16 11:28
编码器不是用来测速的吗?你测速之后不就是调速吗?你调速的话不是用PID调节吗?用PID调节不就用到参数整 ...

我的编码器不是用来测速的,就是面板上的一个旋转按钮。
回复 支持 反对

使用道具 举报

东辉 该用户已被删除
发表于 2016-9-17 22:44:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-3-16
在线时间
29 小时
发表于 2016-9-18 15:05:25 | 显示全部楼层
楼主,我配置完PWM输出,低电平咋是1.6v,不应该是0吗。高电平是3.3
回复 支持 反对

使用道具 举报

0

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2015-10-15
在线时间
39 小时
发表于 2016-11-19 12:10:06 来自手机 | 显示全部楼层
本帖最后由 jpaekeo 于 2016-11-19 12:13 编辑

低电平是逻辑0,但不是实际输出电压为0。多谢楼主关于pwm对直流电机调速的分享
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2016-1-30
在线时间
22 小时
发表于 2016-11-28 21:20:30 | 显示全部楼层
感谢楼主的分享,真的实用。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-11-27
在线时间
2 小时
发表于 2016-11-28 23:25:47 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2016-5-20
在线时间
25 小时
发表于 2016-12-1 13:51:24 | 显示全部楼层
airuoshahen 发表于 2016-6-12 08:59
这里还要说的一个问题就是PID控制中参数的整定问题,我看了一些资料也不知道是怎么整定的,如果哪位大神知 ...

建模,各种传递函数算出来的Kp,Ki,Kd。算出来的不一定好用。但是可以在这个上下调整调整。
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-11-13
在线时间
21 小时
发表于 2016-12-1 16:00:47 | 显示全部楼层
moreStrong 发表于 2016-7-20 00:12
PWM位数有个疑问,为什么我给2000,输出占空比就是100%了,不是16位65535吗?

这要看你设置的重载值ARR是多少
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
379
金钱
379
注册时间
2016-6-2
在线时间
59 小时
发表于 2016-12-16 17:13:59 | 显示全部楼层
写的不错啊
回复 支持 反对

使用道具 举报

18

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
302
金钱
302
注册时间
2016-10-1
在线时间
77 小时
发表于 2016-12-24 00:05:41 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-18
在线时间
10 小时
发表于 2017-10-15 17:04:49 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2017-9-9
在线时间
15 小时
发表于 2017-11-5 17:56:54 | 显示全部楼层
牛b
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-6-11
在线时间
9 小时
发表于 2018-6-11 23:21:03 | 显示全部楼层
airuoshahen 发表于 2016-6-12 08:59
这里还要说的一个问题就是PID控制中参数的整定问题,我看了一些资料也不知道是怎么整定的,如果哪位大神知 ...

用MATLAB的simulink仿真去模拟。来调定,要是计算的话有本书 叫电机与控制系统 里面有
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2018-3-8
在线时间
24 小时
发表于 2018-7-3 16:22:31 | 显示全部楼层
15行是“明白”不是“明摆”(不是挑刺,表示我认真看了),写的很好实用
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-2-4
在线时间
17 小时
发表于 2018-7-4 18:41:12 | 显示全部楼层
写的真全面。顶一个。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-10-1
在线时间
0 小时
发表于 2019-10-1 21:47:45 | 显示全部楼层
nbnbnbnbnbnbn
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 12:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表