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

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

[复制链接]
七哥 发布时间:2018-9-10 00:57
本帖最后由 toofree 于 2018-9-14 08:47 编辑 ) }9 q" e( Q6 @( L! n) P) Z3 X  T  ^
3 C  S0 i2 z0 @- ]
【STM32电机培训】——4、任务2电机设定程序修改PI参数

* ^' {$ q8 V/ p) P2 u/ h) A; w3 K7 w; l

3 d4 _& d( m5 c' v/ ~  j0 X任务目标:
5 U) V! `3 x( A6 l" `- K1、程序中修改速度PI参数;7 f. X  {0 U" ]+ W5 \+ i" B
2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线;
9 Y: V0 z8 t' ^- F, a3、修改为原始值的0.5倍,再次观察速度曲线2 u- V% M# j/ i2 `6 i
4、与原始参数的速度曲线对比
- V* g" ~/ L; `0 W# `! B2 D( H* E 01.jpg 9 J* m5 U4 E/ y' U0 Z  x# Z

6 r$ Y9 Z2 Z& N1 x. `

! A1 \; u: j; T6 j' b, e7 Z8 I. sPPT文档中给出了必要的函数,及变量定义
" N! x5 Z4 o6 u 02.jpg
" ~1 H& [) a9 B5 e7 r5 E* B5 b
# O, w$ }0 e3 S
" L+ {% X) [+ Y
2 p  F7 o' X! \, u2 Y/ _) A/ K
( o# ^$ g0 A9 O5 @/ e6 _7 V5 Q
这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。2 e- P" G  \$ o4 Z
03.jpg 1 D6 n4 `4 x3 D4 x

+ K$ y# v- K3 k" U/ P/ O
/ U7 K, b4 ?9 M0 [: e8 W
程序是在上一贴基础上,做适当修改。
! j* f, D* V* e! `  N5 Y$ I, w【STM32电机培训】——3、任务1电机设定速度、定时启动停止1 d6 T% P- [7 n9 b. ]: a/ I/ e
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297% ~3 L7 z7 w& r* I+ N1 y- Q
(出处: 意法半导体STM32/STM8技术社区)
6 f7 B8 {2 a4 l2 ^( a! x4 Y$ z* v* W# e, O: V) Y+ A. U0 e5 l

7 a( y. U5 b: r( a
. J. m+ G% c" a# W
在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。+ l* H1 w: v8 _) d
04.jpg % m* U- I3 i; t  U" j
1 C( o, v! M: {/ [2 G8 y' R5 A

/ o8 l1 J8 L9 w/ p增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。
/ V" E  ?; p" _2 U2 v( c% F, m增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。
: O8 K4 |, Q1 o$ I/ y3 |4 }! m$ i/ R; E 05.jpg ; x0 l. ?  f0 S/ s

4 c9 d. `; o( O

2 o2 [* \3 z/ ~; T0 F( U1 APC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。& Q: d" \6 l2 ?1 b
06.jpg
: ~# e' ?; K6 x9 h9 ]: p; Z) V# Q) K' c1 P. e% O1 M

  N7 n! l: d3 Y0 Y+ t执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。
" T! \% n0 @2 A" v! }9 | 07.jpg
6 @6 M, A" d' ?: d7 U/ E: C5 T+ R6 V  Q& i1 v) I. X3 k
4 v9 R  _; _+ r. A' T/ y/ @
class_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。) C# a! l0 n6 J) \% E) M" X
每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。
; ~: y. ]2 w7 C4 G5 {$ i 08.jpg ' ~% r" F4 C# @! k; m3 W& C, s

' k" p3 R" n6 W) s- A4 L3 }0 Z
, @4 v& ^% b/ c# n. t! A
下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,7 K% l" ~6 u6 F6 s" O3 X
09.jpg
8 E" y* G& ^6 V3 H& R. P8 @5 G; k0 e  `
2 `; A& W. F) u8 {
“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。' D7 d. `% ~4 W% U4 G: }9 I
下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。
. j& D: Y7 n2 p0 j3 p! I 10.jpg
, `2 T. e3 _' Z# t) w
4 F6 o+ |. i& J" j# i/ L' O

8 X4 k4 J7 F$ D! m0 d( w9 @2 L放大原始波形8 t$ J8 C) d, ]& W  r; [2 b- ~
11.jpg 1 y/ m! m& h1 e3 x3 O  f
5 e$ p$ ]; U, n& U; q4 H& h( s; J
& p  m4 `0 _, [! e2 V+ q! ]( B
放大2倍P和I的波形0 H  g$ c& M  i0 N7 V
12.jpg
5 _0 T9 r+ S% I, K  u- Y5 V' n/ m5 h! p% V' P# l/ _! h
* r, S& M- V0 c  y' z, z
放大0.5倍P和I的波形0 c) F' {8 c4 E. m& ~+ R* |! K
13.jpg : W/ V$ l3 w, A4 d; K

8 c0 w: i- a9 ^4 x3 t1 S$ R

$ p6 [$ b6 P+ X1 N7 r也可以在IAR下观察相应参数变量的变化。下图为原始参数
* g* v. m& K* M 14.jpg 5 @" O3 {7 b$ }3 q

; n5 K& q& G" m6 `
$ M' ^/ E& x+ J' \0 I6 G6 Q6 P
2倍P和I的参数
9 p" c3 r9 Z* B% A7 j+ E, Q 15.jpg
. T' H# A* W! U. W; ]7 C/ R: T: _5 X9 `( _. g6 c

) b% t( h* H. h% d0.5倍P和I的参数+ b0 g" v( B- M! }: q
16.jpg
/ g# E2 R% e& v, B: T
6 b4 t" j0 R. f8 q( `7 C

! E( Z: F: R3 ~' Q5 Q. P至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。
$ N) }6 N+ S% S5 g# A
& g; @/ |1 ~- }按照惯例,程序附上:) r' O1 h7 Q* D8 v. ?% N, h
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波形分别如下:$ g+ Q/ D5 A' }) [
21.jpg
' T0 i0 k* c7 V" r) W" c( m; }6 D
, \) @' t8 n; j& Z  y
7 l" L2 ]; s. k: K% y 22.jpg
% S8 l1 v* m' \0 [( r& x
' ~1 t: P* t) Q
0 |4 \' d2 C& [6 ?( { 23.jpg . Q+ c9 V# {$ ^  @: _. R, R
+ _/ ?; ^2 W, o; w) T

' h+ M. x0 Z6 R2 m' |4 W  N. @8 s1500转时,1、2、0.5波形分别如下:/ W' Q, I) ]" f/ S+ x- Q* t$ B
24.jpg . G) r4 _  w  Z1 e4 A
% V) r% T. @5 h, l8 k
25.jpg 5 s9 p3 b- b( P! F. k, d! i

" o8 y  ]$ G8 A) s3 X- t8 U 26.jpg 2 M6 V, O- z& y  g) g: s$ j
  z# r! o! ~5 z# t  G
7 J, w: W( d. U  Z9 O6 B& B
* v& P! f. A: b3 e! H
七哥 回答时间:2018-9-10 09:36:19
在中断处理文件中,需要加条中断10到15的服务,在主贴附件工程中已加,忘了在主贴中说明。
& a* k# j! z4 L5 }
在文件“stm32f30x_mc_it.c”中
2 e7 c$ v- n. r5 W) T
傲游截图20180910093205.png
9 @7 |$ s: g) N2 T- f7 {9 [
. j6 U$ U7 b1 e$ C5 I3 q- ~+ A2 J
: L2 F) c; h# |& \) N
  1. /* USER CODE BEGIN 1 */
    ) F' k: M' G& }1 a; h
  2. void EXTI15_10_IRQHandler(void)
    ( @9 U& n$ V" a4 ^
  3. {
    , a4 z7 i% r; o  W& f$ k; I( M
  4.   HAL_GPIO_EXTI_IRQHandler(Start_Stop_Pin);
    8 o% y( T. N* j4 M
  5. }4 i% w1 ^# ?3 V8 G
  6. + X6 J: J$ v5 A) y& V6 ~
  7. , o" a: a. N7 F5 I8 ^* k$ Z
  8. /* USER CODE END 1 */
复制代码
一定要在“/* USER CODE BEGIN 1 */”与“/* USER CODE END 1 */”之间加,其它地方加的,再次生成CubeMX工程时可能会被干掉。
: @# S6 ?, m( Y* w8 d0 d) h; e4 D% H5 {6 ~$ S

, F" `2 v9 ]8 T% c0 E
阿青_STM32 回答时间:2018-9-10 09:48:45
学习了!
蒙面歌王 回答时间:2019-1-5 10:54:11
本帖最后由 YapRan 于 2019-1-5 11:01 编辑 9 o' |% ]# ?" r: ~0 ^
5 b# h& Z  P% k- g  m) H" Z
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
子曰好人 回答时间:2019-1-6 09:45:28
YapRan 发表于 2019-1-5 10:54/ D- E$ P* e* R5 b* F. U4 h! p3 N
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是 ...

) d6 H: c. o+ o3 w, r软件生成的代码在电机停机后没有对speed reference变量进行清零操作
蒙面歌王 回答时间:2019-1-14 15:27:30
子曰好人 发表于 2019-1-6 09:45
$ s' T+ k/ e/ v, I8 c+ h/ \软件生成的代码在电机停机后没有对speed reference变量进行清零操作
! l' @- F7 W3 I' K! m: i1 p
感谢回复,初步清楚了
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 手机版