你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32电机培训】——4、任务2电机设定程序修改PI参数

[复制链接]
七哥 发布时间:2018-9-10 00:57
本帖最后由 toofree 于 2018-9-14 08:47 编辑
& o0 x( N* r2 u- R
/ j" f; o3 R' f) N1 A7 F3 b1 u& d
【STM32电机培训】——4、任务2电机设定程序修改PI参数
- t0 U" B3 a- S

9 g3 E% u& \$ M
0 c1 H! q* Y( \" z) w" [& v
任务目标:6 ]4 U9 f8 @/ a! z  R
1、程序中修改速度PI参数;" u& F. x; ^3 M- K
2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线;" M6 z6 G/ D  ?% Q, V- p' K& Q' J
3、修改为原始值的0.5倍,再次观察速度曲线
+ q2 o4 E$ m8 S8 o( m4、与原始参数的速度曲线对比
" E4 t+ o* S, x1 V 01.jpg 2 N" F7 F5 o8 O, s8 C3 X

) T9 Q& Q0 [! \  B* ~9 S

7 S2 y! |  K+ }, T$ c% B& aPPT文档中给出了必要的函数,及变量定义
7 Q6 N- d% a  W) j/ n9 z9 j 02.jpg
2 J) L8 u! x; K" {' u# q# F' E% Q: ^1 H3 a; l

6 {/ Z+ g- b8 u4 j8 U! {9 p
7 t* L/ T) u8 i7 C. E5 L, Z* d
/ j4 I6 ?+ g9 ]& g
这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。
* ]& G/ [7 S+ y+ u& ?6 N2 Z% \ 03.jpg + U7 J! A- \, a

& G2 C1 v% k  @! c
& l; S+ x, D' z6 R
程序是在上一贴基础上,做适当修改。2 Y8 F3 |! p4 Z. c& T( H
【STM32电机培训】——3、任务1电机设定速度、定时启动停止
- g* ~) Z' f; L. k- H2 ?https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297. E( {7 I6 d. j2 J& z
(出处: 意法半导体STM32/STM8技术社区)
' d  N0 o  I$ w. G7 I
! N$ `# D% h0 s
, T$ o5 ]9 ~7 M6 R2 V; O9 `' ]' U
% I4 \' |5 z4 d
在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。& g2 Y5 T& V6 x* o5 ]
04.jpg 8 x, @. k* f# T- i. D1 Y7 y8 J

' a+ {# c& [5 R* \- K: @

1 y0 ]; E. z$ i% c4 d5 X5 t1 U增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。
3 Q8 n9 k( o: ]2 V4 |# y增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。
: K1 F! c; h) E  ^9 T& x 05.jpg
$ K; m1 r" d- J, n3 o, P/ O2 j. s4 ~( X
5 c9 n7 c2 d/ Q. H& n
PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。
$ z5 x0 d# ~5 N 06.jpg 8 y7 W5 R% m# Q+ J

8 H( D+ |8 F) r! X6 o+ ^
9 _+ D9 W) x$ c0 l  m7 ~! {; _
执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。6 [) T/ |/ ]8 B( W: K
07.jpg
! Q! V! y* x" R3 ^. c' A, E' D
+ d6 w) q8 U% P& ^- i. Z6 `3 H8 A- }
% z' u' _3 @( }9 z" a* ~. }* k0 t' A' R
class_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。
1 \9 s* _0 k/ O) J/ V  H+ _每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。
( ]) k: D) B* H+ L' [1 {7 [ 08.jpg 2 r7 J4 [. q; k* b+ s
2 M' q4 b; G: W/ Q4 {3 Z
# t) j- w. `, h
下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,7 S4 m- s, p; U8 ]
09.jpg
% a: E: k5 ~. x$ t: D- F' x7 p* z$ `0 r* W  [; K
; I8 a$ A; N/ ?2 S2 P2 @$ @# N( A. k
“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。
: L/ I* e! j, ~; P9 T( B* k$ {下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。2 H& I& p/ R: l" E. m8 a
10.jpg / H5 r4 I+ O9 I2 p# u
% \2 O( e7 q1 L# F" \
! S7 N' l: a1 M+ ]
放大原始波形3 {  i, T' k0 k* m, b2 t, x  v' K
11.jpg   t6 G6 g" z! i: y& a3 P- v4 n
8 u. R4 ~4 `- g, v& Y

+ I* j& J9 }0 ~: q放大2倍P和I的波形3 t5 Z4 }& J' W; u
12.jpg
6 d: ~, [9 p% S( a  m* E
$ W4 {( O, w% R8 p; E- g7 p
+ Y" d/ p/ w; f4 e% @, ^
放大0.5倍P和I的波形( `. b  A: @+ J8 r8 O
13.jpg
* d8 B) M) w4 }7 d  `( H8 v5 T: [( Z) w8 ~

$ ?7 s& Q2 W* L4 P/ L, f也可以在IAR下观察相应参数变量的变化。下图为原始参数$ [5 Y; V9 d7 ]
14.jpg 3 z$ C  X- I, Q% T
0 L1 b; a- S0 x( h: j- Z# \" P

: P/ u$ k% [6 }2 \3 j* ~2倍P和I的参数
/ K  L4 r3 r. V 15.jpg   Q& a# ^- d: w' \6 @' [) v
- T6 a% n3 ?: _
) H! T$ w0 V4 Z+ U
0.5倍P和I的参数
: P/ f2 }5 r. d: z: Y; e 16.jpg ( ?) D8 [" y8 J! X

2 f! V& e4 {4 X2 t. H1 W4 z6 B
) t* w' U# s& \, e
至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。% k; N) H! p9 W4 k+ r; F! v, a

" w/ X8 S! z6 p/ ?& Y' V: T- Q按照惯例,程序附上:" W0 y. J6 e; t  i3 F( _
P-NUCLEO-IHM001_PI.rar (8.99 MB, 下载次数: 37)
收藏 3 评论9 发布时间:2018-9-10 00:57

举报

9个回答
七哥 回答时间:2018-9-10 01:07:55
5000转时,1、2、0.5波形分别如下:/ [0 M: y7 e3 i' s
21.jpg 0 z# h5 @& G; Y* v* b
4 E+ V& m, r- W; s
1 E4 A; G% n$ G+ ~6 P0 H
22.jpg
. ^/ j( l7 c1 y1 M) y
+ J' v3 Y/ T6 G5 O- {1 X* h  }) m
5 C! t  D. ~" `. \0 ?. F 23.jpg 0 \3 Y- j6 E9 Z9 a
; \/ {4 i7 C) }- c

  D* D* v  \0 a7 Y' l1500转时,1、2、0.5波形分别如下:2 g( J" R; \1 a# B# r. F; ], g  b' R
24.jpg ' R" G4 s  c2 n: o* M( D4 J

4 D$ v9 r; W' |0 H% j( s 25.jpg
) w2 l/ |' }! z. i4 Z$ M
+ |0 c: |5 k5 V 26.jpg
- N! X" h) ^4 h1 C: e
; ]* G. n- n/ W. F/ I" e% l' Z! I4 C2 i$ o2 ^1 C
* R9 F; W' ~* b- N' d& x% v4 a
七哥 回答时间:2018-9-10 09:36:19
在中断处理文件中,需要加条中断10到15的服务,在主贴附件工程中已加,忘了在主贴中说明。, W' ]/ }5 N$ w, q# \& g
在文件“stm32f30x_mc_it.c”中
& Q  I5 l" d: U' V9 B5 H
傲游截图20180910093205.png
- Y; R9 \) k* Q
4 I9 c, y; J2 s+ s. i
0 A( v. x# v4 n
  1. /* USER CODE BEGIN 1 */
    / M% i+ ~/ Z" ?( _  _6 Z  F, ]0 E: Q7 |
  2. void EXTI15_10_IRQHandler(void)
    9 x: @% v# Y/ T+ E; K
  3. {: y7 ~* A8 s( x0 z; Q" a" ]
  4.   HAL_GPIO_EXTI_IRQHandler(Start_Stop_Pin);
    0 T4 {8 r& H* P( \$ _  R4 M. j; u
  5. }
    * j3 X# E# b+ _) v* X
  6.   T" Y, O/ A/ K+ H4 H

  7. # ~# p7 N) u# L- ^
  8. /* USER CODE END 1 */
复制代码
一定要在“/* USER CODE BEGIN 1 */”与“/* USER CODE END 1 */”之间加,其它地方加的,再次生成CubeMX工程时可能会被干掉。" S0 @2 g9 v8 S2 K' z$ h

; c# H$ k+ E2 |# M' N& f+ H4 G
: Q& E" n  e. X7 H" I2 ~
阿青_STM32 回答时间:2018-9-10 09:48:45
学习了!
蒙面歌王 回答时间:2019-1-5 10:54:11
本帖最后由 YapRan 于 2019-1-5 11:01 编辑
) @4 C0 W+ E7 T& t  z# F* X  ~* q: {  G& e+ N7 B/ j
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
子曰好人 回答时间:2019-1-6 09:45:28
YapRan 发表于 2019-1-5 10:546 n7 `0 T$ l% ^- {2 g/ `& y
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是 ...

3 d; g: c7 V9 ^! E软件生成的代码在电机停机后没有对speed reference变量进行清零操作
蒙面歌王 回答时间:2019-1-14 15:27:30
子曰好人 发表于 2019-1-6 09:45! ], ^) P' g8 B- V
软件生成的代码在电机停机后没有对speed reference变量进行清零操作

- C# ^: Z  P8 z9 P* R* d感谢回复,初步清楚了
muyouyouyu 回答时间:2019-2-26 19:07:25
感谢楼主提供的资料,收藏学习了,过段时间准备做个PI环的精调GUI小应用
goodgsq1 回答时间:2019-2-27 10:34:51
不错,讲解清晰
唐英tcy 回答时间:2019-7-1 14:58:33
不错,学习了

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版