本帖最后由 toofree 于 2018-9-14 08:47 编辑 3 ]9 }0 Z: p: |; ]4 N % H' [1 S5 P) Z& i 【STM32电机培训】——4、任务2电机设定程序修改PI参数 2 e( o' _7 Y: Y% f" R8 P6 v* h 任务目标: 1、程序中修改速度PI参数;* G3 F; \: [4 _1 w: } 2、修改为原始值的2倍,在Workbench中观察参数修改后的速度曲线; 3、修改为原始值的0.5倍,再次观察速度曲线 4、与原始参数的速度曲线对比 PPT文档中给出了必要的函数,及变量定义8 N3 w9 e* E5 q( V5 k " C) f a6 V" P, T; N- [ : c$ R% C: R% D$ O' V, M; `8 o 这次任务,本人额外使用了NUCLEO-F302R8板上的用户按键。 ( G9 K, [" x1 G" O8 ]1 p 程序是在上一贴基础上,做适当修改。 【STM32电机培训】——3、任务1电机设定速度、定时启动停止 https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617429&fromuid=307297 (出处: 意法半导体STM32/STM8技术社区)9 J+ j- ]9 o( C8 j4 K/ B # g0 v0 y3 K" [. R+ @8 f - D$ @- h# q5 {/ n- I# J" t 在main.c函数开关,增加一个头文件定义“#include "mc_tasks.h"”,并且增加必要的变量及结构体定义。* b" g7 M+ b8 h' y! H4 g ' l2 H+ S: {" @$ g' ?3 M( t: b 增加一个外部函数声明“extern MCT_Handle_t* GetMCT(uint8_t bMotor);”,因为在整个工程中,没有找到任何.h文件中声明过此函数。8 B$ W4 s7 v: |: P8 A7 L+ ^* i 增加一个内部函数声明“static void EXTI15_10_IRQHandler_Config(void);”,配置中断,PC13中断,即为NUCLEO-F302R8板上的用户按键中断。 " I% z/ I* r- I6 | 5 q8 ?( _6 ?) Y* D0 j7 q6 r PC13中断配置函数和中断回调函数定义。在中断回调函数中点个板上用户灯LD2,并且对class_cnt全局变量循环赋值,在主函数中要使用变量class_cnt,用作3种状态切换,详见变量定义处注释部分说明。 $ g! C7 A4 _3 i7 z; H; e 执行外部中断PC13的初始化,配置电机默认速度,读取默认Kp、Ki参数,初始化中间变量tmp_Kp、tmp_Ki。 : D: a. D2 O1 x; h9 d4 ` $ O2 J- l6 X: Q4 c L class_cnt为0时,正常P和I参数;为1时,2倍P和I;为2时一半的P和I。当然参数也可以在Workbench 中手动修改。8 p: k% C* n* ?! ~5 |4 s1 E3 U 每有一次用户按键操作,class_cnt加1,P和I参数设置变化一次。 下载程序到开发套件中。打开Workbench界面,并与目标板套件连接,& C* T; c* ]$ P8 R7 Y/ ^( q 3 }3 `3 H# e: b 在“监控”窗口下,在打开“Plotter”绘图窗口。当电机启动运行后,即可按一次NUCLEO-F302R8板上用户按键USER B1;在下一次电机启动时,新参数将生效;依次类推,每按下一次按键,状态变化一次。9 U- e* r$ a9 B' c% h7 s, B4 g8 N 下图为分别有连续三次按键,所产生的三种状态电机PI参数变化波形。. m( h- o( u& U2 P' ? k 2 Y8 U; _- Q \ D+ [ 放大原始波形+ u' x/ M, M1 x0 Z' o # H4 G6 r, v' c( i % _& s) B% j7 C; S 放大2倍P和I的波形 / ?5 x! }6 O9 N! X' i( M 放大0.5倍P和I的波形% X# m% a0 ?8 ^ 也可以在IAR下观察相应参数变量的变化。下图为原始参数" i6 _& z/ f2 s# j0 D. T 2倍P和I的参数 ! [ _2 j# ?) `9 C( K% b8 u 0.5倍P和I的参数 , _4 W& p! O! K% g7 m & b# Z* |) q2 W3 n7 l 至此,在程序中修改P和I参数任务完成。不知道什么原因,我的套件修改电机参数P和I,出来的现象不太明显,相比其他人的。 按照惯例,程序附上:8 c' P0 r0 N) D+ C |
& \' p4 P% |/ ^. I7 B
& t2 o* F5 q2 ]* Y! U
8 Q& N0 J2 S4 _; e
6 r% X! s* d5 n! w
1500转时,1、2、0.5波形分别如下:, s" Z' v7 ~2 Z, Q7 s: [3 B6 W$ [. \
2 f0 n+ B( b; K, _. ]
" o/ Q8 g; t6 A- I
在文件“stm32f30x_mc_it.c”中
3 c7 m- N' g) X4 n; }; H
请问波形图,红色设Speed Reference部分,结合了楼主上个帖子看了一下,应该是与电机启停的操作有关,可是电机停止的话,Speed Reference为什么不在0位呢?
软件生成的代码在电机停机后没有对speed reference变量进行清零操作
感谢回复,初步清楚了