OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 57937|回复: 114

基于战舰STM32开发简易直流电机速度环PID闭环控制

  [复制链接]

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
发表于 2014-10-3 22:30:52 | 显示全部楼层 |阅读模式
首先感谢论坛里面各位大神的无私分享,帮助我解决在学习STM32过程中遇到的诸多问题。关注本论坛久了发现这里关于STM32的编码接口的程序比较少。 今天发个贴分享一下我最近在战舰STM32做的直流电机速度环PID闭环控制器。代码中 利用TIM1和TIM8输出8路PWM控制4台直流电机,TIM2、TIM3、TIM4、TIM5配制成编码器模式采集电机编码器的脉冲作为反馈,TIM7配制成定时器,用来提供一个固定的时间间隔来计算电机的速度。详细内容见源码、、、

基于战舰STM32开发简易直流电机速度环PID闭环控制.rar

4.25 MB, 下载次数: 210291

回复

使用道具 举报

  离线 

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2015-8-9 12:53:23 | 显示全部楼层
配合上uCOSIII,可以向SVPWM方向前进,控制交流电机,在融合uCGUI的专业化图形显示接口,做出来的东西非常不错的。。。指针式仪表盘显示转速变化的动态过程,以及数字式的精确显示。双CPU设计,一个用于专门的控制算法计算以及PWM的输出,另一个用于处理网络通讯以及人机接口等次要任务,运行uCOS III 和 uCGUI,做个远程可监控的控制系统还是不错的。
回复 支持 3 反对 0

使用道具 举报

  离线 

509

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
132820
金钱
132820
注册时间
2010-12-1
在线时间
1245 小时
发表于 2014-10-3 23:48:59 | 显示全部楼层
源码没看到哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

169

主题

919

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2013-4-13
在线时间
61 小时
发表于 2014-10-3 23:59:00 | 显示全部楼层
这是好东西。源码?
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

  离线 

2

主题

330

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1156
金钱
1156
注册时间
2012-5-8
在线时间
192 小时
发表于 2014-10-4 11:53:12 | 显示全部楼层
没有上传?
回复 支持 反对

使用道具 举报

  离线 

17

主题

341

帖子

0

精华

高级会员

Rank: 4

积分
526
金钱
526
注册时间
2014-4-24
在线时间
15 小时
发表于 2014-10-5 12:23:59 | 显示全部楼层
木有看到代码呀。。。。。。。
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2014-10-7 20:22:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不好意思! 已经上传了
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2014-10-7 20:26:31 | 显示全部楼层
回复【4楼】zuoyi:
---------------------------------
已上传
回复 支持 反对

使用道具 举报

  离线 

509

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
132820
金钱
132820
注册时间
2010-12-1
在线时间
1245 小时
发表于 2014-10-7 23:56:53 | 显示全部楼层
回复【7楼】jasonlin:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-9-5
在线时间
45 小时
发表于 2014-10-9 00:28:24 | 显示全部楼层
谢谢分享,UserFunction部分用寄存器代码写的;正在学库函数版,先顶一顶。
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2014-10-10 10:02:55 | 显示全部楼层
回复【9楼】Elmo:
--------------------------
基本上全是用库函数写的,也有想过用寄存器写,只是没那么方便、、、你有兴趣的话也可以改成寄存器的,然后分享一下  hehe
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-11-4
在线时间
0 小时
发表于 2014-11-4 13:17:22 | 显示全部楼层
谢谢分享,楼主是学自动化的?
回复 支持 反对

使用道具 举报

  离线 

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-2
在线时间
0 小时
发表于 2015-4-2 11:46:01 | 显示全部楼层
楼主你好,我现在在做毕业设计,题目是《基于STM32的4路直流电机驱动器设计》,设计内容:要求采用STM32F103系列ARM控制器,实现对至少4个直流电机的控制,完成自由调速、正转和反转控制,并在液晶屏上实施显示4个电机的运行状态。
请问楼主有没有相关的资料啊?我是菜鸟,刚开始学STM32。谢谢
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2015-4-3 11:09:13 | 显示全部楼层
回复【12楼】二月江南雪:
---------------------------------
版本更新了,你参考我分享的例子,移植原子哥的液晶显示的例程代码就能达到你需要的效果

基于STM32简易电机伺服控制器.rar

3.65 MB, 下载次数: 31013

回复 支持 反对

使用道具 举报

  离线 

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-2
在线时间
0 小时
发表于 2015-4-3 13:41:29 | 显示全部楼层
回复【13楼】jasonlin:
-------------------------------
非常感谢。之前没有时间学习STM32,现在才刚起步,所以感觉很难入手。我们老师要求通过按键来对电机进行调速。他之前跟我说的是用六个按键,有两个按键是复合用的,按一下选择电机一,四下就是选择电机4.另外四个就是对电机进行正反转和调速的。请问在你的程序基础上怎么进行修改啊?谢谢!!!
回复 支持 反对

使用道具 举报

  离线 

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-2
在线时间
0 小时
发表于 2015-4-3 13:49:13 | 显示全部楼层
回复【13楼】jasonlin:
---------------------------------
另外再请教一下,你这个程序是直接输出PWM脉冲实现电机控制吗?需不需要接L298之类的驱动啊?
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2015-4-4 10:23:28 | 显示全部楼层
你就写个按键值读取的函数,然后进入判断后给对应电机写入速度值就可以了,电机驱动肯定是要的,L298太弱了,建议自己用半桥芯片+MOS做一个H桥驱动
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2015-4-4 10:26:35 | 显示全部楼层
回复【15楼】二月江南雪:
---------------------------------
你就写个按键值读取的函数,然后进入判断后给对应电机写入速度值就可以了,电机驱动肯定是要的,L298太弱了,建议自己用半桥芯片+MOS做一个H桥驱动
回复 支持 反对

使用道具 举报

  离线 

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2014-11-16
在线时间
1 小时
发表于 2015-4-18 14:25:57 | 显示全部楼层
“利用TIM1和TIM8输出8路PWM控制4台直流电机”这个8路PWM波怎么控制4太电机,不是控制8台吗?
回复 支持 反对

使用道具 举报

  离线 

16

主题

117

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2349
金钱
2349
注册时间
2015-4-18
在线时间
249 小时
发表于 2015-4-18 20:24:09 | 显示全部楼层
下来好好研究一下了。。。
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2015-4-19 21:02:50 | 显示全部楼层
回复【18楼】电子蛋:
---------------------------------
两路控制一台电机,正反转各一路
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-5-13
在线时间
0 小时
发表于 2015-5-15 17:11:48 | 显示全部楼层
回复【20楼】jasonlin:
---------------------------------
楼主用的多少线的编码器?如果用12线的编码器需要修改哪些参数吗?
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-5-13
在线时间
0 小时
发表于 2015-5-15 17:22:29 | 显示全部楼层
回复【20楼】jasonlin:
---------------------------------
TIM_TimeBaseStructure.TIM_Period = 7200; // WM周期,占空比可调节范围值:0-7200
比如码盘用的12线10ms采集一次,速度稳定时GetEncoder.V5为200左右,如果想要GetEncoder.V5为220,即PidSpeedTypeOne.errNow为20;
TIM_SetCompare1(TIM1,speed); // 更新占空比 speed :0-7200
speed应该为千数量级;
speed和PidSpeedTypeOne.errNow不在一个数量级;怎么处理errNow、speed关系,有些疑惑?
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-5-5
在线时间
0 小时
发表于 2015-5-18 11:08:27 | 显示全部楼层
好资料,正需要着
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-5-23
在线时间
1 小时
发表于 2015-5-23 11:12:13 | 显示全部楼层
好资料,正需要着
回复 支持 反对

使用道具 举报

  离线 

13

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-9-11
在线时间
14 小时
发表于 2015-5-23 16:42:23 | 显示全部楼层
mark一下
回复 支持 反对

使用道具 举报

  离线 

10

主题

140

帖子

0

精华

高级会员

Rank: 4

积分
580
金钱
580
注册时间
2015-7-11
在线时间
91 小时
发表于 2015-7-12 21:40:07 | 显示全部楼层
楼主  正在学习您的代码中 但其中的Vbreak   prd   的含义不是很理解   这句代码CNT2_temp = rcnt2 * prd + cnt2;也不理解 请您解惑一下 可以吗?  谢谢
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-7-10
在线时间
0 小时
发表于 2015-7-13 09:29:16 | 显示全部楼层
学习一下,谢谢
回复 支持 反对

使用道具 举报

  离线 

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-7-14
在线时间
0 小时
发表于 2015-8-2 17:34:00 | 显示全部楼层
回复【20楼】jasonlin:
---------------------------------
一路pwm波可以控制电机正反转吗
回复 支持 反对

使用道具 举报

  离线 

2

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-12-7
在线时间
3 小时
发表于 2015-8-4 18:49:05 | 显示全部楼层
回复【28楼】闯闯闯:
---------------------------------
不可以吧。两路需要,正转反转。
回复 支持 反对

使用道具 举报

  离线 

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-4-16
在线时间
11 小时
发表于 2015-8-6 19:11:33 | 显示全部楼层
回复【26楼】jorry:
---------------------------------
请问楼主现在懂了么,我看到这里也不是很明白啊
回复 支持 反对

使用道具 举报

  离线 

26

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2015-7-24
在线时间
0 小时
发表于 2015-8-8 09:27:58 | 显示全部楼层
请问楼主是用什么型号的步进电机,还有驱动芯片是什么?
M4小白菜,求各位大牛多多指导
回复 支持 反对

使用道具 举报

  离线 

10

主题

199

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-3-12
在线时间
104 小时
发表于 2015-8-8 20:20:19 | 显示全部楼层
楼主的电机买哪里的???驱动买哪里的??可否给个链接什么的,让我们做出实物出来玩玩啊!
回复 支持 反对

使用道具 举报

  离线 

29

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2014-9-11
在线时间
8 小时
发表于 2015-9-26 11:38:33 | 显示全部楼层
如果我想具有速度环,又有位置环应该怎么做?
回复 支持 反对

使用道具 举报

  离线 

29

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2014-9-11
在线时间
8 小时
发表于 2015-10-8 14:38:29 | 显示全部楼层
[C] 纯文本查看 复制代码
void UserMotorSpeedSetOne(s32 control)//电机1转速/转向设置(TIM1)
{ 
 s32 MotorSpeed,PwmOne_Set,PwmOne_Mode;

 MotorSpeed = control;//读取PID的输入值
   
 if(MotorSpeed > PWMPeriod)  MotorSpeed =   PWMPeriod-1 ;//上限 CCR的值必须小于或等于ARR的值
 if(MotorSpeed <-PWMPeriod)  MotorSpeed = -(PWMPeriod-1);//下限 

 if(MotorSpeed<0) { PwmOne_Set = -MotorSpeed; PwmOne_Mode = MotorOneBack;}
 else { PwmOne_Set = MotorSpeed; PwmOne_Mode = MotorOneForward;}
 
 if(PwmOne_Mode) {TIM1->CCR1 = MotorSpdZero; TIM1->CCR2 = PwmOne_Set;} //MotorOneForward
 else { TIM1->CCR1 = PwmOne_Set; TIM1->CCR2 = MotorSpdZero;} //MotorOneBack 
}
///////////////////////////////////////////

楼主,请问这段代码是什么意思?
回复 支持 反对

使用道具 举报

  离线 

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-9-17
在线时间
16 小时
发表于 2015-10-12 11:27:13 | 显示全部楼层
请问大神,什么是绝对式PID算法?!!?
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-10-21
在线时间
0 小时
发表于 2015-10-19 12:32:25 | 显示全部楼层
回复【31楼】我就知道我的会员名已被使用:
---------------------------------
https://2.taobao.com/item.htm?spm=2007.1000622.0.0.sr2WRs&id=523127555216
回复 支持 反对

使用道具 举报

  离线 

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2014-11-18
在线时间
5 小时
发表于 2015-10-29 10:27:44 | 显示全部楼层
谢谢分享...
http://happygenius.taobao.com
回复 支持 反对

使用道具 举报

  离线 

25

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2014-2-10
在线时间
49 小时
发表于 2015-11-2 09:14:41 | 显示全部楼层
请问楼主,这个程序具体实现了怎么样的功能,即正常运行有什么反应呢?
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2015-12-8 10:25:55 | 显示全部楼层
回复【36楼】liuweihejia:
---------------------------------
绝对式PID会对历史所有的误差都累加,关注的是历史所有的误差总和;增量式只关心当前的误差,不对历史遗留的误差进行累加。理解有误的话,希望指正!
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2014-10-3
在线时间
4 小时
 楼主| 发表于 2015-12-8 10:32:15 | 显示全部楼层
回复【34楼】心染红尘:
---------------------------------
那你应该做嵌套处理,增加一个插值算法,把位置分割成N段,每一段是代表单周期的速度,最终运行就相当于对速度积分得到位置。效果就是以某个速度到达某个位置,然后伺服停住。希望能帮到你
回复 支持 反对

使用道具 举报

  离线 

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-9-23
在线时间
0 小时
发表于 2015-12-14 21:22:50 | 显示全部楼层
回复【41楼】jasonlin:
---------------------------------
请问用TB6612驱动电机硬件怎么连接,电机是带AB相编码器的
回复 支持 反对

使用道具 举报

  离线 

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-5-11
在线时间
0 小时
发表于 2015-12-22 15:54:16 | 显示全部楼层
请问 你的速度单位是什么? 度/秒?
回复 支持 反对

使用道具 举报

  离线 

3

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-23
在线时间
39 小时
发表于 2016-1-14 22:12:04 | 显示全部楼层
cnt2、CNT2、V2、rcnt2、Vbreak分别代表什么呢?
我还是没有找到rcnt2在哪里定义的,希望楼主能满足我的好奇心,谢谢楼主。
回复 支持 反对

使用道具 举报

  离线 

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2015-5-14
在线时间
10 小时
发表于 2016-2-15 09:24:09 | 显示全部楼层
楼主,能留下联系方式吗,直流无刷电机PID闭环控制 ,有问题请教
小金科技工作室:https://shop72353947.taobao.com/?spm=a313o.7775905.1998679131.d0011.XKY4h0
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
33
金钱
33
注册时间
2013-5-28
在线时间
3 小时
发表于 2016-2-23 11:27:45 | 显示全部楼层
MARK 一下  
回复 支持 反对

使用道具 举报

  离线 

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-1-17
在线时间
9 小时
发表于 2016-2-25 18:07:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

  离线 

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-1-17
在线时间
9 小时
发表于 2016-2-25 19:36:15 | 显示全部楼层
麻烦你问一下 你编码器类型 型号 谢谢啦
回复 支持 反对

使用道具 举报

  离线 

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2016-1-22
在线时间
19 小时
发表于 2016-3-3 10:18:04 | 显示全部楼层
KnightLi 发表于 2016-2-25 19:36
麻烦你问一下 你编码器类型 型号 谢谢啦

应该是和STM32配套的AB编码器
回复 支持 反对

使用道具 举报

  离线 

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2016-3-4
在线时间
9 小时
发表于 2016-3-8 09:11:40 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

必看,必学:"原子哥”力荐上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-9-22 01:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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