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

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

[复制链接]
七哥 发布时间:2018-9-10 00:57
本帖最后由 toofree 于 2018-9-14 08:47 编辑 3 ]9 }0 Z: p: |; ]4 N
% H' [1 S5 P) Z& i
【STM32电机培训】——4、任务2电机设定程序修改PI参数

, Z8 f$ d; \2 d6 ]" R4 j2 e( o' _7 Y: Y% f" R8 P6 v* h

5 ?( H6 b# B2 m0 x0 [0 N" W8 ]任务目标:
$ k; N( B5 x3 d( k5 ]+ s' C6 @1、程序中修改速度PI参数;* G3 F; \: [4 _1 w: }
2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线;
8 t. m1 y& a! U2 \3、修改为原始值的0.5倍,再次观察速度曲线
' Z2 m3 P" \# o: m4、与原始参数的速度曲线对比
! ~8 C; y7 o1 f5 e8 b* a. H6 v 01.jpg ; b0 P* L  b- w7 `6 W1 y1 }& e

3 ]' x) r2 `" R. w+ j) U

" Q9 v; L/ \/ |' l8 D9 F: zPPT文档中给出了必要的函数,及变量定义8 N3 w9 e* E5 q( V5 k
02.jpg : o/ u8 Q+ h* }" m+ s
" C) f  a6 V" P, T; N- [
: c$ R% C: R% D$ O' V, M; `8 o

! j0 T2 ]( S* i) Y0 R+ L

" s4 p! W9 t, u7 i! u" B3 B这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。
! b5 D, m& @7 @/ [ 03.jpg 8 f$ @/ C4 J- t
( G9 K, [" x1 G" O8 ]1 p

" c- S' O$ \( ?6 i8 c% X$ X% h程序是在上一贴基础上,做适当修改。
# o0 W* ~, [% H9 v4 \5 C- J  O【STM32电机培训】——3、任务1电机设定速度、定时启动停止
3 ~6 @, I/ u2 [, S7 Lhttps://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297
1 U, [  W% H$ v+ S/ L# m+ S(出处: 意法半导体STM32/STM8技术社区)9 J+ j- ]9 o( C8 j4 K/ B

7 O" J3 `4 y8 U3 {+ K6 @# g0 v0 y3 K" [. R+ @8 f
- D$ @- h# q5 {/ n- I# J" t
在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。* b" g7 M+ b8 h' y! H4 g
04.jpg : w' Z9 A6 ^! N
' l2 H+ S: {" @$ g' ?3 M( t: b

$ F6 h" }4 n: t5 g2 ?8 T6 {7 D" r增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。8 B$ W4 s7 v: |: P8 A7 L+ ^* i
增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。
% o5 {$ b. @+ Y: |% U0 N6 `; Z 05.jpg $ t9 r' H: o+ E0 Y3 t
" I% z/ I* r- I6 |
5 q8 ?( _6 ?) Y* D0 j7 q6 r
PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。
+ G- _2 b" D3 [4 T+ ^" K- ~ 06.jpg
5 ]& m# D' P' }, t. A
3 E9 x" s4 W: V: Q/ v
$ g! C7 A4 _3 i7 z; H; e
执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。
& X. \/ t7 w% J7 V/ i6 w 07.jpg
% J0 P: r1 ~" y7 ]2 ~3 a. W% _( V: D: a. D2 O1 x; h9 d4 `
$ O2 J- l6 X: Q4 c  L
class_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。8 p: k% C* n* ?! ~5 |4 s1 E3 U
每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。
; ^4 V( @6 o$ Z7 b; m3 s5 @( s9 ` 08.jpg
. f" ?( A, ?8 n. c9 {# O
) j6 Y* c5 t+ }

5 p/ S$ [2 v' K. q下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,& C* T; c* ]$ P8 R7 Y/ ^( q
09.jpg
# H: h- i0 |0 a! X$ \3 }3 `3 H# e: b

1 ]! ]7 Y% q" g! S$ C“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。9 U- e* r$ a9 B' c% h7 s, B4 g8 N
下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。. m( h- o( u& U2 P' ?  k
10.jpg
2 V/ I2 x# K0 X
! \6 e( ?! h2 `, P! P4 U/ z. ?
2 Y8 U; _- Q  \  D+ [
放大原始波形+ u' x/ M, M1 x0 Z' o
11.jpg
4 t. o* g- w4 ^) G$ s# H4 G6 r, v' c( i
% _& s) B% j7 C; S
放大2倍P和I的波形
/ V9 z3 W5 T( r 12.jpg
* f6 ]* \( x! Z, D# g6 e/ ?5 x! }6 O9 N! X' i( M

( V1 z) K3 r5 W0 {  l' y3 r放大0.5倍P和I的波形% X# m% a0 ?8 ^
13.jpg 2 P; T, ?$ s# C/ Y) g  _- y

1 q3 Q* p5 N* {! N

+ L9 `" W' d* l/ I; q也可以在IAR下观察相应参数变量的变化。下图为原始参数" i6 _& z/ f2 s# j0 D. T
14.jpg
5 ?9 b4 W* t/ ]1 {) i
- R" B3 s! t8 O( b7 e+ }% u+ U

) Y4 _6 ^% X. \* x% {( l2倍P和I的参数
9 `( F  c. R* M& x6 Y( h( d 15.jpg
% A) B7 O9 I0 q( E0 {" J
0 B  X* y4 B  o7 ^  ^
! [  _2 j# ?) `9 C( K% b8 u
0.5倍P和I的参数
+ W9 @0 E. R9 P3 ?2 J. {2 N 16.jpg
  C1 S+ v# x" [5 D, [0 C' [, _4 W& p! O! K% g7 m
& b# Z* |) q2 W3 n7 l
至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。
7 X2 }/ b, G& Z1 ?8 {9 P
! U9 q) K4 e6 [; H按照惯例,程序附上:8 c' P0 r0 N) D+ C
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波形分别如下:: c. C/ T% _# K" n2 Y
21.jpg
! I+ d$ e# [4 T- B$ E+ ?5 y& \' p4 P% |/ ^. I7 B
& t2 o* F5 q2 ]* Y! U
22.jpg : \& J. J2 |- F+ g. {8 E
8 Q& N0 J2 S4 _; e

+ f# U0 u8 ?, ? 23.jpg
- ]  k1 R* e2 f6 r% X! s* d5 n! w

# M7 X% U' A/ F1500转时,1、2、0.5波形分别如下:, s" Z' v7 ~2 Z, Q7 s: [3 B6 W$ [. \
24.jpg
# u: l1 i- _' X6 O" H; ~3 q2 f0 n+ B( b; K, _. ]
25.jpg
% W* E2 D, B) R% Z% N
( y4 x3 T% d) S( J 26.jpg ' T# \$ W( l/ [; U& c% {

' Q. V8 t# D8 D' s- a8 _
0 B, q4 W: {  D/ j: H! A" o/ Q8 g; t6 A- I
七哥 回答时间:2018-9-10 09:36:19
在中断处理文件中,需要加条中断10到15的服务,在主贴附件工程中已加,忘了在主贴中说明。
6 A6 z2 L- s$ L
在文件“stm32f30x_mc_it.c”中
; L% `6 Y; G, \' J! K
傲游截图20180910093205.png , V! b  [1 X# Q) r4 B: L

: v4 M1 J- x) }6 j( r) Z/ I3 c7 m- N' g) X4 n; }; H
  1. /* USER CODE BEGIN 1 */: _/ b( O6 f1 g! W/ q
  2. void EXTI15_10_IRQHandler(void)5 S1 v+ I; o, Y& r7 j0 j
  3. {% o5 h* O8 L1 q+ W! @
  4.   HAL_GPIO_EXTI_IRQHandler(Start_Stop_Pin);
    ( v) E8 f$ Z  K+ a
  5. }
    ! H* a; n; q+ X0 H4 M
  6. * r: k$ l1 w5 b& P

  7. ) d8 E1 {9 Z, T, g3 k
  8. /* USER CODE END 1 */
复制代码
一定要在“/* USER CODE BEGIN 1 */”与“/* USER CODE END 1 */”之间加,其它地方加的,再次生成CubeMX工程时可能会被干掉。
& s5 l0 P! S4 o' ^, K* _/ O
8 `( U0 k/ d/ l: f. I& _

/ r0 s/ Q+ N' k; N( z
阿青_STM32 回答时间:2018-9-10 09:48:45
学习了!
蒙面歌王 回答时间:2019-1-5 10:54:11
本帖最后由 YapRan 于 2019-1-5 11:01 编辑 5 C1 I" n1 `# J; T  o6 L& x

7 S& R7 w) z2 u( }9 W% t( _. a请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
子曰好人 回答时间:2019-1-6 09:45:28
YapRan 发表于 2019-1-5 10:54
6 L: G# V2 l1 p! `; p7 r1 d4 w: W3 ~请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是 ...

6 a; b3 h5 ~! B8 c软件生成的代码在电机停机后没有对speed reference变量进行清零操作
蒙面歌王 回答时间:2019-1-14 15:27:30
子曰好人 发表于 2019-1-6 09:45" D$ C: ~- `' y) I& h& o
软件生成的代码在电机停机后没有对speed reference变量进行清零操作

/ O' R( I/ E* o1 n/ B感谢回复,初步清楚了
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 手机版