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

【STM32电机培训online】+ P-NUCLEO-IHM002 修改PID参数

[复制链接]
damiaa 发布时间:2018-8-30 17:15
本帖最后由 damiaa 于 2018-8-31 15:07 编辑
7 I6 ?. ^& V7 k+ \+ \  w
! d  m; k' f2 Y- k# ?  \【STM32电机培训online】+ P-NUCLEO-IHM002 修改PID参数
" i) w& J* ~; Q* x) _) a
$ q. k  d5 z- j7 v) V& e7 q1 \接上面的例子开始修改PID参数实验:所谓的PID就是看稳定到一个速度是快是慢,稳定的时候会高一些,然后再降下来。: h6 g8 |& q3 r4 z$ N! t1 `
; T) k3 q- ]- _) `# k1 Q' b& @1 ~
1,要在项目的main.c 中加入头文件. J! G2 w! F, n$ u0 b
#include "mc_api.h"9 z8 @7 k- A2 m- E
#include "mc_tasks.h"* ]* q7 J5 {/ }& z, ?7 s

- m, G5 f/ E. z% i# [$ P2,写个函数
! R, Q: o8 F! A& E/ l2 \void modimotospeed(void)$ P( X; _* t) r2 T8 m. k* Q
{8 K" f! V! D6 Z  y
        MCT_Handle_t* pMctHdl;5 F1 E/ S! D! v
         static int16_t Speed_Kp,Speed_Ki;
. M/ R) R. x6 [8 [* d3 b! V# u3 A        MC_ProgramSpeedRampMotor1(2000/6,3000);5 e# `. K: m1 L2 H* S
  MC_StartMotor1();
4 T" }; }! m$ x& @- H2 J% F/ \        HAL_Delay(10000);
+ G0 Q, b7 @* h. d6 {1 t  C        pMctHdl = GetMCT(M1);. b2 `5 Y  O( d0 ?& U
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
  o/ t: Y! I7 ~; x) D1 U1 ]        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);. K: j6 R; x: Z+ @) X- l
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);/ ~. B0 N) z" z/ x
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);    //主要用到的函数,需要头文件
#include "mc_tasks.h"
* }9 e1 V7 n- f        HAL_Delay(5000);: `% k. K4 ~/ ?8 G- i, L2 Z
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);0 D+ E4 v7 N- _* {+ ?# ^- C0 |: v
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);9 U, q& I! Q* a# I
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
1 j' ~, c) R6 B8 L% L" j) I        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);0 k2 v- v6 u/ k% h# ^$ @
        HAL_Delay(10000);) I5 B2 L% n* D. g
        MC_StopMotor1();//8 E; b/ |% r, ?# D5 l
        HAL_Delay(10000);" K2 ]5 j/ x3 P8 k0 G
        MC_ProgramSpeedRampMotor1(1000/6,3000);
9 u! B' H/ s3 }9 U3 u+ d4 P1 w2 n  MC_StartMotor1();) P$ P" K: K4 ^+ [/ [+ q
        HAL_Delay(10000);5 t0 H$ {; C8 ]1 W
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
: ^! G. @1 V+ S1 a        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
) \* Z. \! _- _2 o        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);
& @6 o6 C& V) G% Z% P        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);' w( d! Y  W6 I  I, J3 ~9 _/ l2 q: C
        HAL_Delay(10000);
  Q, d6 }2 I/ o$ M        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
) |6 J& O$ r/ ~1 h. }8 A0 I) l        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);/ c6 k+ ]4 l3 i* g
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);" p& \0 k" ?/ B; ~; q$ P: N# W1 x8 b
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);$ N' |: V1 j; ]6 Y2 c9 d3 j$ E9 j
        HAL_Delay(10000);) v" y4 i# q0 }6 J! m$ ^8 F- \+ H3 C
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);( y6 J. P+ U- g& E' b9 r2 w, H
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
* b2 P1 V; B0 ~7 u1 |. {3 |        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);$ i* h0 m( M5 l
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
9 X- }% V! F. p- g* G  q        HAL_Delay(10000);6 D' L/ S0 N7 O7 l1 @# L
        MC_StopMotor1();//1 g% {- ?& W" i
        while(1);* g% k1 g5 h" G0 G
}/ F3 k1 L) k8 s* d  a
! j6 F# A( F' T, l
并在main.c 中调用,main.c 中main函数前声明外部函数extern MCT_Handle_t* GetMCT(uint8_t bMotor);然后编译运行,看是否跑得起来。 捕获18.PNG 7 u! U' Y% M5 d+ J* C# S7 L
4 U: W! b! W- L
微信图片_20180827100256.jpg ! ~0 X' k  ~1 E# W" H
3,在MotorControl Workbench 5.0.3 中打开工程。
' B  z. t9 ~- K  U 捕获19.PNG - x1 @5 v& S8 |( @' J$ w% ]( q; o
4,观察变化(这里注意,是MDK或IAR等的要观察的工程运行起来了后才能里连接串口观察),按下图1位置,打开监控,按2,连接,3,4部分看变化,可以看到电机的速度,电机的运行参数曲线等。
* M* w+ E& O7 w 捕获20.PNG 捕获21.PNG $ {! v+ o- }0 p8 z
捕获22.PNG
( \: l8 F' O  ^8 J- Z5,最直观的方法还是在main.c中调用 下面的函数,然后改动红色部分的Speed_Kp*2,Speed_Ki*2  2为要改动的倍数,可以0.5,1.5等看看波形变化。8 s* ~+ f% p( ?- d+ i1 L  J* ]
void task2(void)
' P5 Z  _5 R* J7 E4 z{
( F7 ]: ~) p) R  _, f//TASK2??' X# Z) m. B- i' X6 m5 J
  MCT_Handle_t* pMctHdl;
* U. ]. u1 T* l) T1 u/ C  static int16_t Speed_Kp,Speed_Ki;
0 W! k, @$ }2 a9 c        MC_ProgramSpeedRampMotor1(3000/6,3000);
/ e9 u! T; t& ~# v  MC_StartMotor1();/ f5 D* n7 P! `
        pMctHdl = GetMCT(M1);* f: T+ s/ F7 N1 F! @
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
! C: D1 m6 o$ r4 r# ~+ [9 o3 r% A        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);: j6 ^& r+ P, F: Y; e' `/ y6 W
        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);7 Z+ j$ `( {8 `2 r; r( A0 n, k. n
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);1 T! `3 i9 R% F3 y2 V
        while(1);' v1 l2 F! P  f% V; z
}        # `+ S) a( ?( D% T- h1 u/ e
改为0.5的波形:
$ v1 H- t5 t) Q 捕获25.PNG % p- A  g9 r1 o9 S
改为1的波形:+ j2 }0 {6 X+ K& @/ I
捕获23.PNG 0 L1 d! ~4 D6 w3 O* f* A2 z6 l
改为2的波形4 m2 L. ~( ]# `2 r" n# q/ C
捕获24.PNG + l& W8 k! D% z- m% ^

9 x# f  l" o. w! ^* k6,继续加油。
4 Z: X0 T) F3 D. w: G  G; U+ ^5 J2 ]! m% p* Z, P& g- h
  W( @3 g5 v0 _0 a% _; \& m
7 P& Y0 C6 j# q
6 c9 I* D; u: o* \- g0 S& s
+ S6 i3 M( e$ o1 H
捕获25.PNG
收藏 评论1 发布时间:2018-8-30 17:15

举报

1个回答
zero99 回答时间:2018-8-31 13:15:48
谢谢分享

所属标签

相似分享

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