|
本帖最后由 toofree 于 2018-9-14 08:47 编辑 2 Q# i, n# Z" {5 {! K 【STM32电机培训】——4、任务2电机设定程序修改PI参数 * h8 o; i! l( b 任务目标:, ]; U# E0 h% z. a% e 1、程序中修改速度PI参数;$ o b1 s+ B7 T* h; x$ d) B 2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线; 3、修改为原始值的0.5倍,再次观察速度曲线 4、与原始参数的速度曲线对比3 Y* o( u- O; P8 m2 t9 D
3 [. s0 ]6 p7 \! Y) Z PPT文档中给出了必要的函数,及变量定义
) D% t, D, R+ d& Z 这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。( Q( F! ^/ ~9 c/ b# x
" 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 2 R% F( K' G0 \5 _) l- Z# g 在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。
# 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文件中声明过此函数。 增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。3 g6 y+ P8 f% E$ R( i4 U0 d5 g
& N& Y0 A9 E( q1 v$ S PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。
4 n2 J7 [3 Y8 g8 E0 I/ w3 r 执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。
2 r' c7 R! G+ x* a class_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
7 v4 f% _' h' f& C 下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,( H& b4 d2 ?& o8 o8 X' A
* 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
: 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
3 H: X8 q& X; x 放大2倍P和I的波形! ^6 x# J2 y7 Z6 E
放大0.5倍P和I的波形
也可以在IAR下观察相应参数变量的变化。下图为原始参数
# a& {# ]1 ^0 s8 y 2倍P和I的参数4 }0 |2 H/ t: v9 d3 b- m* z7 Y O
& @6 D& F" b$ s( o8 M+ q3 u* l/ T 0.5倍P和I的参数# t' g. k% b9 f: b. z( b
@: n1 J/ g- E- W4 e 至此,在程序中修改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)
|
微信公众号
手机版
" H7 u- L$ ?3 u# w! V4 ^0 Z4 k1 b
# B, j; _1 r G
0 t, H( ^3 r% I: `5 g) F
! S1 s7 n0 U$ y
1500转时,1、2、0.5波形分别如下:
+ F, j$ ^1 `% m3 I
/ P* R$ {$ ~' o
在文件“stm32f30x_mc_it.c”中
6 D* F2 K8 Z/ ^2 G% |) _
4 }% z3 a3 k9 ]; t
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
软件生成的代码在电机停机后没有对speed reference变量进行清零操作
感谢回复,初步清楚了