请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
damiaa 发布时间:2018-8-30 17:15
本帖最后由 damiaa 于 2018-8-31 15:07 编辑 3 V# ^6 d5 u- S. h' c
9 i+ ^, u) h6 m$ `8 z. t
【STM32电机培训online】+ P-NUCLEO-IHM002 修改PID参数
3 n2 o4 @/ N/ \
/ ~7 w9 R$ ^, p; P% y5 @. [接上面的例子开始修改PID参数实验:所谓的PID就是看稳定到一个速度是快是慢,稳定的时候会高一些,然后再降下来。
" F* T9 ^0 M, e7 U7 `% I8 @! I5 m
1,要在项目的main.c 中加入头文件
6 c/ B1 N0 a* @* K0 t) E0 F#include "mc_api.h"- j9 b) G5 C, R+ x& }
#include "mc_tasks.h"6 u$ ]3 O; @6 l

/ I4 r& C0 N; m- L' I2,写个函数  W6 K2 O5 \1 R0 E, _% h% t( Y. n
void modimotospeed(void)
1 T" f# ?/ g, I5 [{) U  r4 L, J( c2 f% ^* G" z) w
        MCT_Handle_t* pMctHdl;
7 e8 ]/ }: W6 E3 R1 V         static int16_t Speed_Kp,Speed_Ki;" Z( s: a* L$ E
        MC_ProgramSpeedRampMotor1(2000/6,3000);( R( v: T4 L  r7 H  M
  MC_StartMotor1();: J" Z2 i0 ]' h
        HAL_Delay(10000);
4 a. Y3 ?% ^( {7 \- z+ V        pMctHdl = GetMCT(M1);5 ^' ?/ V) `* J% O" |. Q7 b" M
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
7 [9 k4 p1 I4 Y& Y: ?+ @  f        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
* ?, s5 M5 y% [5 ^: p$ `! u6 t0 z        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
2 `. G. X8 e& W4 t" W' K$ R" J2 t        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);    //主要用到的函数,需要头文件
#include "mc_tasks.h"" k+ K8 U3 D) r2 t: i- s- O7 X
        HAL_Delay(5000);+ p+ U4 s( e* g
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);0 m$ H! a+ X3 y0 w: I4 Q
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
# S7 ~  x  z' A  G7 y: V& t        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
" X$ R2 v4 Y5 v  r8 _        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);
3 `+ ?! c* U* C& v, ^( i* P$ B        HAL_Delay(10000);2 j' d& [. w9 X' A$ `5 X& |
        MC_StopMotor1();//
2 w! [, \8 v7 _6 Y/ [) W- I        HAL_Delay(10000);
$ i8 O4 v, C: P, }6 a3 `9 E        MC_ProgramSpeedRampMotor1(1000/6,3000);
7 W4 v7 v  [- @  MC_StartMotor1();
; V" |  Y6 [& H        HAL_Delay(10000);1 B, t9 N' d& v( w5 y
        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
( X3 Q$ i2 Y) _4 l: S        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
* Z% @; U: P3 A        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);
- S1 q  x$ v! z% E! s# Y" d4 n        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
6 L' Z+ K' ]  y/ u        HAL_Delay(10000);
/ j3 m8 H. P! W0 l0 e% [        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);
! Y8 a& T, r' @6 i- `+ \! Q, v        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
6 i& e1 S* ~3 @' p2 D5 ~8 R3 q: n        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);% C' ?, T( d3 r0 n5 S
        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
7 |- d7 Y$ f+ f& N2 Y# @        HAL_Delay(10000);
; _/ X% N& M2 h$ T* t  n        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);- X0 B. m6 Y" o# t' \& I
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
" a% @% U: y3 N4 n: ?        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp/2);
: ^) D! e) l( T+ A7 \7 K        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki/2);
, i" s1 [* v- x        HAL_Delay(10000);
7 Y& a' H" F/ a2 {5 |  ~% y& Z- h        MC_StopMotor1();//8 s4 b5 K% j+ k& S
        while(1);
' B& Z2 S- F4 y- k( h7 i5 y4 Y}
5 z& t; M& v" x& d
' h- Y" N$ z$ A# t并在main.c 中调用,main.c 中main函数前声明外部函数extern MCT_Handle_t* GetMCT(uint8_t bMotor);然后编译运行,看是否跑得起来。 捕获18.PNG
$ H4 T2 H: a' K1 I/ L+ ?
9 ~* J* @: g+ r1 o 微信图片_20180827100256.jpg
$ s+ P2 G* I% w+ Z. z3,在MotorControl Workbench 5.0.3 中打开工程。
  V4 h8 c& R+ D7 O 捕获19.PNG
' P$ g  H5 s/ V2 J; Z# Z4,观察变化(这里注意,是MDK或IAR等的要观察的工程运行起来了后才能里连接串口观察),按下图1位置,打开监控,按2,连接,3,4部分看变化,可以看到电机的速度,电机的运行参数曲线等。$ u1 J- \6 b& p* f7 B* |2 ^
捕获20.PNG 捕获21.PNG
# N: T9 R% t/ } 捕获22.PNG / V9 {# C( o# c: y% i0 Z) @
5,最直观的方法还是在main.c中调用 下面的函数,然后改动红色部分的Speed_Kp*2,Speed_Ki*2  2为要改动的倍数,可以0.5,1.5等看看波形变化。
9 _/ y2 G: g) Z+ w& T& O7 b5 ?! evoid task2(void)
$ p8 x0 \6 k% t0 K- b0 ?8 O{7 |+ G$ W! w& w) M
//TASK2??  s6 g# g2 \7 A+ ]. x
  MCT_Handle_t* pMctHdl;% Q- B8 X/ K5 {' `6 V
  static int16_t Speed_Kp,Speed_Ki;: c0 P( e" O  N
        MC_ProgramSpeedRampMotor1(3000/6,3000);( v7 |! \; d. p4 `6 B2 T; l! e
  MC_StartMotor1();
8 b' o$ d5 n" J2 E% {+ T        pMctHdl = GetMCT(M1);
5 k# C  d* B+ |! o        Speed_Kp = PID_GetKP(pMctHdl->pPIDSpeed);% a3 u8 b( m; c6 j
        Speed_Ki = PID_GetKI(pMctHdl->pPIDSpeed);
# l4 g6 x, e$ N% ^        PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
) ]: e  F- u5 i9 R( t, |* c6 Q        PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);
% R& d! }" T& U) b. j* ?2 W; S- r; ~" k        while(1);, [0 m* B7 ^  e7 g( a
}        
5 r! R2 W: H" d改为0.5的波形:
( y( c6 s4 k. b 捕获25.PNG ' e; b0 y( V1 `9 M" r  }
改为1的波形:) \% o6 m! o9 G' u
捕获23.PNG
: H( \7 N# q1 ]. F2 V6 G, q! H改为2的波形
* }/ j& q3 U& q) ^& ^ 捕获24.PNG
! L' T: ~" W# g) {) s( O
5 K9 C0 Y/ }$ y( j$ b, s1 ^$ C1 R6,继续加油。0 X; A9 O2 d7 N

+ ]( f9 d6 K. T! d9 u8 W- ?9 }7 u$ {+ S: t# f$ y
0 |7 Y$ z2 s& u5 }8 W4 E% E; v
2 k; w6 K% d  b+ A* O2 {0 S7 d
: X0 T, E- h. }& ?" V, C7 L
捕获25.PNG
收藏 评论1 发布时间:2018-8-30 17:15

举报

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

所属标签

相似分享

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