本帖最后由 toofree 于 2018-9-14 08:47 编辑 ) }9 q" e( Q6 @( L! n) P) Z3 X T ^ 3 C S0 i2 z0 @- ] 【STM32电机培训】——4、任务2电机设定程序修改PI参数 2 u/ h) A; w3 K7 w; l 任务目标: 1、程序中修改速度PI参数;7 f. X {0 U" ]+ W5 \+ i" B 2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线; 3、修改为原始值的0.5倍,再次观察速度曲线2 u- V% M# j/ i2 `6 i 4、与原始参数的速度曲线对比 PPT文档中给出了必要的函数,及变量定义 " L+ {% X) [+ Y 2 p F7 o' X! \, u2 Y/ _) A/ K ( o# ^$ g0 A9 O5 @/ e6 _7 V5 Q 这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。2 e- P" G \$ o4 Z / U7 K, b4 ?9 M0 [: e8 W 程序是在上一贴基础上,做适当修改。 【STM32电机培训】——3、任务1电机设定速度、定时启动停止1 d6 T% P- [7 n9 b. ]: a/ I/ e https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297% ~3 L7 z7 w& r* I+ N1 y- Q (出处: 意法半导体STM32/STM8技术社区) * v* W# e, O: V) Y+ A. U0 e5 l . J. m+ G% c" a# W 在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。+ l* H1 w: v8 _) d 1 C( o, v! M: {/ [2 G8 y' R5 A 增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。 增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。 PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。& Q: d" \6 l2 ?1 b ) V# Q) K' c1 P. e% O1 M 执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。 5 T+ R6 V Q& i1 v) I. X3 k 4 v9 R _; _+ r. A' T/ y/ @ class_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。) C# a! l0 n6 J) \% E) M" X 每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。 , @4 v& ^% b/ c# n. t! A 下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,7 K% l" ~6 u6 F6 s" O3 X 3 H& R. P8 @5 G; k0 e ` 2 `; A& W. F) u8 { 在“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。' D7 d. `% ~4 W% U4 G: }9 I 下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。 放大原始波形8 t$ J8 C) d, ]& W r; [2 b- ~ 5 e$ p$ ]; U, n& U; q4 H& h( s; J & p m4 `0 _, [! e2 V+ q! ]( B 放大2倍P和I的波形0 H g$ c& M i0 N7 V ! p% V' P# l/ _! h * r, S& M- V0 c y' z, z 放大0.5倍P和I的波形0 c) F' {8 c4 E. m& ~+ R* |! K 也可以在IAR下观察相应参数变量的变化。下图为原始参数 $ M' ^/ E& x+ J' \0 I6 G6 Q6 P 2倍P和I的参数 : _5 X9 `( _. g6 c 0.5倍P和I的参数+ b0 g" v( B- M! }: q 至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。 按照惯例,程序附上:) r' O1 h7 Q* D8 v. ?% N, h |
+ _/ ?; ^2 W, o; w) T
1500转时,1、2、0.5波形分别如下:/ W' Q, I) ]" f/ S+ x- Q* t$ B
% V) r% T. @5 h, l8 k
z# r! o! ~5 z# t G
7 J, w: W( d. U Z9 O6 B& B
* v& P! f. A: b3 e! H
在文件“stm32f30x_mc_it.c”中
. j6 U$ U7 b1 e$ C5 I3 q- ~+ A2 J
: L2 F) c; h# |& \) N
0 d) h; e4 D% H5 {6 ~$ S
5 b# h& Z P% k- g m) H" Z
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
软件生成的代码在电机停机后没有对speed reference变量进行清零操作
感谢回复,初步清楚了