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

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

[复制链接]
七哥 发布时间:2018-9-10 00:57
本帖最后由 toofree 于 2018-9-14 08:47 编辑 2 Q# i, n# Z" {5 {! K

; P7 [( Q2 M( }5 R
【STM32电机培训】——4、任务2电机设定程序修改PI参数

' }+ N" s3 [2 c. C  r* h8 o; i! l( b

8 @) n% I* i  N任务目标:, ]; U# E0 h% z. a% e
1、程序中修改速度PI参数;$ o  b1 s+ B7 T* h; x$ d) B
2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线;
# e% a" w6 f; ~, x& h3、修改为原始值的0.5倍,再次观察速度曲线
3 O; Z' B* X# V9 Q- A1 V4、与原始参数的速度曲线对比3 Y* o( u- O; P8 m2 t9 D
01.jpg
( }/ Y1 u# r8 A5 Z: H/ s( o
3 Z5 S; j" D4 H
3 [. s0 ]6 p7 \! Y) Z
PPT文档中给出了必要的函数,及变量定义
' `; ]5 @, L  k# {- V! D$ L 02.jpg
& }) G, Z# g7 D6 T/ d) ~
* T+ u" y1 I1 m0 j

4 D+ a: G2 w* A: a* e" _' e
; c! s" ?* c( f
) D% t, D, R+ d& Z
这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。( Q( F! ^/ ~9 c/ b# x
03.jpg ! t+ t- u. W  @9 D8 U

$ R+ q- {( A4 ^* M4 ^2 S+ T
" E$ X# W4 ?" E% Y8 [
程序是在上一贴基础上,做适当修改。; w8 H) z4 a1 q0 S" C+ @
【STM32电机培训】——3、任务1电机设定速度、定时启动停止/ F$ J" H3 H1 C2 m7 @
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297" O5 l  Z2 v  k: {. l- k  B( B5 u
(出处: 意法半导体STM32/STM8技术社区)- n: D6 d8 _' t% i9 O; a

  ^. c6 Z* y( t$ B) z2 R% F( K' G0 \5 _) l- Z# g

7 C7 T: [, }6 q6 j2 D在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。
* U2 h5 z4 ~3 ]3 h 04.jpg
3 h4 B4 S8 O1 s0 K( O" t. N# S* ]5 F: {; @9 T% S$ K, H
0 Z& ^; G+ Z' H' x$ _/ P/ w" y' Z
增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。
; a6 S: f$ Y/ d增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。3 g6 y+ P8 f% E$ R( i4 U0 d5 g
05.jpg 4 k9 g4 X: C6 y4 y4 I" n

: o* I! A' z: p* I" w" }
& N& Y0 A9 E( q1 v$ S
PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。
' n) O; c  {9 } 06.jpg 2 ^7 s- H$ C, m5 F+ G
4 n2 J7 [3 Y8 g8 E0 I/ w3 r

' _& g8 c: W* F4 D1 j: ^执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。
# |) J0 X$ Z' S& l: { 07.jpg ! ?( z* o7 F; K) D
2 r' c7 R! G+ x* a

7 T) t% `0 f2 @8 c0 Z. A) Hclass_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。1 c  R, m8 v0 c( }
每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。. T, G# [: H- o& z+ U( F9 b
08.jpg
: |4 I  }  \6 u: z
1 W( k& `9 f" f3 H% Z7 t6 D- c" J
7 v4 f% _' h' f& C
下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,( H& b4 d2 ?& o8 o8 X' A
09.jpg * x% W" }0 U: M! z$ F
* k/ `! H9 J. v
; q4 o0 L+ a9 j& \2 H
在“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。3 u" m1 \) w9 r2 e& V/ V
下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。8 `# s5 Q8 @( y+ J  U$ B( G  X
10.jpg
; S  U) [7 _; y' i: k7 _. m% q. ]# j1 L2 c9 i6 G/ r8 o
( k0 e6 U9 q% k! j3 @
放大原始波形# H9 N* W4 T7 y( C) T6 G1 Y- B
11.jpg
8 X/ r8 ?/ Y( Y0 A) t
* M! B: I1 c. S) @8 V
3 H: X8 q& X; x
放大2倍P和I的波形! ^6 x# J2 y7 Z6 E
12.jpg
$ E! b; P+ j3 ?7 S# v8 @8 c3 E$ V) p9 h
  P/ H6 s, Y" Z& u

+ `3 c4 g3 o3 U放大0.5倍P和I的波形
) k2 `% e/ E6 M# X  X0 l1 s$ Z 13.jpg
" v/ m  a0 A, i5 `
- W# k: b* t$ k: c/ v

" s: g5 m" h2 u! I/ \也可以在IAR下观察相应参数变量的变化。下图为原始参数
, p1 ?6 q/ }: C) p" C" d 14.jpg
! H/ h7 Q, p( i: _! a# a& {# ]1 ^0 s8 y

' Q, c1 ~* [+ `# W- g4 Z% |2倍P和I的参数4 }0 |2 H/ t: v9 d3 b- m* z7 Y  O
15.jpg 4 P. h& X& O4 c+ H' \
& @6 D& F" b$ s( o8 M+ q3 u* l/ T

! W2 M. E9 p2 ~7 y0.5倍P和I的参数# t' g. k% b9 f: b. z( b
16.jpg ; X% o1 q" b* q# S
  @: n1 J/ g- E- W4 e

9 d6 r  b, S: I. t至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。' H1 _0 n: u9 v" D: h* K" D7 v
, ~7 ~7 `+ Q0 N' P
按照惯例,程序附上:) `- }( k! R7 {' p
P-NUCLEO-IHM001_PI.rar (8.99 MB, 下载次数: 38)
赞 收藏 3 评论9 发布时间:2018-9-10 00:57

举报

9个回答
七哥 回答时间:2018-9-10 01:07:55
5000转时,1、2、0.5波形分别如下:4 r: T& o3 x( \7 S! ^& g& K/ T
21.jpg ' f! J3 |; y) Z1 ^6 C8 B, F

- i7 }3 \% }; _7 {. Q" H7 u- L$ ?3 u# w! V4 ^0 Z4 k1 b
22.jpg
5 U9 z/ ~, z( `# B, j; _1 r  G

& n6 o8 Q) b( E5 y: J+ Z, ? 23.jpg 7 g5 v4 l; e5 p( u7 I
0 t, H( ^3 r% I: `5 g) F
! S1 s7 n0 U$ y
1500转时,1、2、0.5波形分别如下:
5 L( T4 b* D! z2 k% u$ t; ` 24.jpg
) x/ U$ e5 y& J* v$ K9 J1 q" A
( c; F' ~6 R  p; N# l 25.jpg # U4 e  v5 H9 d: I3 a

& P% l7 t, x$ }) O& O 26.jpg
# Z, K8 Z, ^1 t9 N4 {/ d+ F, j$ ^1 `% m3 I
/ P* R$ {$ ~' o

; L6 r. {1 Y9 z8 @8 }, _  z
七哥 回答时间:2018-9-10 09:36:19
在中断处理文件中,需要加条中断10到15的服务,在主贴附件工程中已加,忘了在主贴中说明。8 ?6 @2 @% z1 g: ]. O
在文件“stm32f30x_mc_it.c”中
( E; d. Z  B! t% @8 l, \- J( p
傲游截图20180910093205.png 6 m9 S, T1 d* b6 h0 S9 h) {( d- ?

9 _' D, v/ V9 i; w- Z% |6 D* F2 K8 Z/ ^2 G% |) _
  1. /* USER CODE BEGIN 1 */3 w9 [0 `5 w; L# J& j
  2. void EXTI15_10_IRQHandler(void)
    & c  _% [4 m! U# S& l0 ^
  3. {
    8 B$ q! t" A* Y: ?8 C4 K! ^' S; Z$ G
  4.   HAL_GPIO_EXTI_IRQHandler(Start_Stop_Pin);+ J: |1 C+ |1 b" W* m0 H+ M! f( S
  5. }& R; {( |" t! V7 _
  6. % q0 F- M+ ?% y' I

  7. 8 m3 i, Y$ O/ l4 O2 [2 q" _: x
  8. /* USER CODE END 1 */
复制代码
一定要在“/* USER CODE BEGIN 1 */”与“/* USER CODE END 1 */”之间加,其它地方加的,再次生成CubeMX工程时可能会被干掉。
' C) F3 {: L) A/ n
( `) k% `0 Z/ {; w8 k5 P
4 }% z3 a3 k9 ]; t
阿青_STM32 回答时间:2018-9-10 09:48:45
学习了!
蒙面歌王 回答时间:2019-1-5 10:54:11
本帖最后由 YapRan 于 2019-1-5 11:01 编辑 * |) K% @5 ~9 S0 ?5 }# W, W

8 p$ y; x# T% r" d+ g" K& C% S请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
子曰好人 回答时间:2019-1-6 09:45:28
YapRan 发表于 2019-1-5 10:54
, [( a5 P: y/ _请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是 ...

+ R, k1 o4 a# n8 C6 p8 C. Z! i软件生成的代码在电机停机后没有对speed reference变量进行清零操作
蒙面歌王 回答时间:2019-1-14 15:27:30
子曰好人 发表于 2019-1-6 09:45
6 y* m8 F6 g! c; y5 u软件生成的代码在电机停机后没有对speed reference变量进行清零操作
8 F! p; ~8 v# k) Q) z0 }, R
感谢回复,初步清楚了
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版