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

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

[复制链接]
七哥 发布时间:2018-9-10 00:57
本帖最后由 toofree 于 2018-9-14 08:47 编辑
3 _) ^; T; b- L& U1 ^/ r5 b, Y8 x: B
【STM32电机培训】——4、任务2电机设定程序修改PI参数
7 u3 c& u+ K. `; w2 N

' y' R  M" ?1 N
( b3 a! ]$ j5 o% e" _! h6 K
任务目标:
2 r4 s% ^/ ^, W# }! I- \1、程序中修改速度PI参数;% W/ H3 v1 S) C
2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线;4 [% [- P3 I3 R4 |  Z; @/ p
3、修改为原始值的0.5倍,再次观察速度曲线
" Z& e. j- s% t" I* r$ L4、与原始参数的速度曲线对比
# n: t( K. f1 D 01.jpg 9 j9 Y, S; W$ u, ~+ |8 C
7 q/ |  C. \! L) L- k: t6 r( [7 c

! f6 ^1 Y) K1 d9 f% yPPT文档中给出了必要的函数,及变量定义9 M2 F4 ]# j- V- M# b1 V
02.jpg
; P* U! g+ P4 C! d+ V# |5 f' |1 h- V; r: n! M- z2 i9 M, @

, s: S) p- C3 k8 t* Y' u: N* r0 {. }
/ N8 d. F" k+ L5 s5 L
这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。
9 \5 T! U' z2 R& a9 r 03.jpg - K5 s; D3 ]3 a' w

/ [" k. j% S% b' w% X
7 T* x3 p8 y, Y& t" ]
程序是在上一贴基础上,做适当修改。
; H# G6 `  K& M& C- t【STM32电机培训】——3、任务1电机设定速度、定时启动停止; U/ i" N0 ]" y- B6 \! x+ s! s
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297
" b6 _- C, D5 ]8 d1 Z2 I% O1 @4 r(出处: 意法半导体STM32/STM8技术社区)2 d( W8 S4 ^6 r5 I" @: V; ]
5 u6 t; E( \2 T" |; ~7 J* G

& M8 z' |( O& y* D2 M! i) j
# D4 Z4 y9 p" s1 b! V
在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。
4 _8 U. j5 t; `- o  { 04.jpg ; C  P0 V3 h- P; m8 ^. V. m

$ Z3 R# R( T' P; M& Z$ ]3 N( ?

! S  u2 ]; E0 ?增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。
5 J7 L( |: e8 z; ?增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。
% E7 L" a; ]3 n# H' Q9 g/ Z 05.jpg * B3 a4 b. g( x) h  m/ Z
: i" @3 a+ c! W3 i! D3 y/ P, i6 q
7 Z& ?! r5 c' p) x; [- U
PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。3 F) k; D2 w  ~9 F6 h7 N
06.jpg
2 `/ b5 _! N0 {( B& V2 Q/ w" Y2 f8 W: a$ [- o% O6 ~

5 R' t7 p6 C* r: E, y7 \执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。
/ m" Q2 q) t; [* J  f6 D1 J$ H% N 07.jpg
3 O1 G& p( _: T7 Q. ]) ?
: h# H* Q0 p# }* w2 F0 `

2 y# E; s$ n2 R; |9 I% |$ oclass_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。& r4 z" ~' B0 |# Z, B3 b9 h
每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。2 n: g- P/ p- s/ x3 B
08.jpg
. i& \; m- L; f0 Y4 B  a) j
$ G' b% m# a9 q6 e

! j' ?0 f, W2 e6 K- L; L2 `; q下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,# ]; E  d, T$ t; _' B
09.jpg
, h3 {. g  I# p% X
  D, v. |! c9 x+ R

3 P" B2 b1 f" @- S/ |“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。' c( l; ~2 j  A& {
下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。
  p, L0 }$ }: J6 C# M 10.jpg
+ s% D$ H( N! i0 p, e+ z+ x$ _: A! o( L/ {8 \; K( q+ O

' k, m# D4 S& R1 |* V放大原始波形" F2 R3 q; i: m% Q. t* q
11.jpg ) T! e$ G% q+ F
% C9 U, i) L% {( C' w( {

# f8 d; b, m7 s. _放大2倍P和I的波形
" {: b3 _, h, B 12.jpg 2 @- z' v3 f) m& J$ y" j" e
9 X( P; s% w% n7 l/ E0 t
; Z7 C5 ^1 |! l  p: j
放大0.5倍P和I的波形
% t5 r1 J3 D0 a4 ]8 L4 } 13.jpg 5 m# e% H% ^0 j2 |
( g. B# `& S3 r

, R2 H% v- N5 N1 B; S- c也可以在IAR下观察相应参数变量的变化。下图为原始参数. u% W3 Y' R- w& a: \% g
14.jpg ( K/ _: f/ x: x* }6 Z5 s
5 f+ Z9 P# I5 D& U8 t

% t: [- D3 k" [2倍P和I的参数3 G1 _: b: [) n# t! W' F8 g2 C
15.jpg " l; b5 u( Q; D1 h# \# c

" V" y$ {8 e2 R! h/ z

7 S; l9 |) H8 V+ T+ @) A0.5倍P和I的参数# u, ]" s4 w9 {) h. r' f
16.jpg
8 k5 E1 I3 G' Q8 }5 Y& L( }
  y# W% O2 S0 W" I! A

7 m& @, H1 a) F6 h1 B2 J至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。. M  F% B; v) H/ ~& k9 F

% `( R; q: ~1 t* z- D/ K4 f按照惯例,程序附上:, d: |3 E5 z6 L- o1 q1 C9 ?
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波形分别如下:! T. `0 B! Z" _, _
21.jpg $ J; e# Q- T/ r4 w- e

! x+ a3 R8 G3 h" H7 f! r( ^
$ I( i# t+ Z; p# f8 I0 G 22.jpg : O4 u- K- ]/ p, C  M/ k; g  H2 M5 n

( p4 R& W+ c8 O" L2 Q! L: X  _; w& A5 a) }4 F  E. V: Q
23.jpg
. d5 h# g1 E  m/ C; V: M9 O+ q4 n$ ]1 {* x
% M  ^$ M! K& U: N) V: b
1500转时,1、2、0.5波形分别如下:
4 c; @/ @+ k3 ?$ o" w" x) c& ` 24.jpg 4 F* \9 W0 c* Q& L" e

; T% F" F/ ~2 ^8 w7 q, a) h 25.jpg
7 w5 o9 f2 c- b& j( s+ k! }- i8 s  d& m: }
26.jpg
) H' S( S( W' W- q6 Q: F( H* s" v
+ n/ n7 O; c) E9 T- n' p& s
% u: k7 E0 N1 T* v! c: c. J; V/ Y$ F+ e& B+ h8 @
七哥 回答时间:2018-9-10 09:36:19
在中断处理文件中,需要加条中断10到15的服务,在主贴附件工程中已加,忘了在主贴中说明。0 _6 l/ s) @7 g5 |1 ?5 U
在文件“stm32f30x_mc_it.c”中4 e% B& @0 ~, Y% u: o' f
傲游截图20180910093205.png
! I" }/ p+ E7 \* X
. r8 ~! A/ e. z" ^( _' M* [
9 v8 d' N/ Z. G- `
  1. /* USER CODE BEGIN 1 */3 o( Q9 i2 o5 f
  2. void EXTI15_10_IRQHandler(void)
    ' R, T- d2 k; b9 N* W' D& i# o
  3. {
    " d6 [: q0 v# T+ L$ s# J1 g8 h- b
  4.   HAL_GPIO_EXTI_IRQHandler(Start_Stop_Pin);
    , K2 a, Z  u% B- r0 X# R$ k
  5. }
    8 T6 q4 w6 v! `' {
  6. ' R( h. C* h$ |( \# T6 }

  7. ( V) P% \4 Y$ ?. J4 C
  8. /* USER CODE END 1 */
复制代码
一定要在“/* USER CODE BEGIN 1 */”与“/* USER CODE END 1 */”之间加,其它地方加的,再次生成CubeMX工程时可能会被干掉。$ d0 U0 B6 O/ g4 P- W. p* q# O

& l. a' f4 g3 p% V, q
; k& K4 S& T' I; E5 O; e
阿青_STM32 回答时间:2018-9-10 09:48:45
学习了!
蒙面歌王 回答时间:2019-1-5 10:54:11
本帖最后由 YapRan 于 2019-1-5 11:01 编辑
) T* T( \2 f' ]6 e2 H& i1 V  o. l" ^3 \3 u
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
子曰好人 回答时间:2019-1-6 09:45:28
YapRan 发表于 2019-1-5 10:54
  d! A5 P( \& v% P0 u* e请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是 ...

: ]; w8 q  x/ e) Z* [软件生成的代码在电机停机后没有对speed reference变量进行清零操作
蒙面歌王 回答时间:2019-1-14 15:27:30
子曰好人 发表于 2019-1-6 09:454 N7 T" P6 U4 E6 c6 E2 n, G- L
软件生成的代码在电机停机后没有对speed reference变量进行清零操作
; D3 V( Z, y# B" `1 q( C
感谢回复,初步清楚了
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 手机版