本帖最后由 toofree 于 2018-9-9 15:32 编辑 生成电机样例程序stmcx、ioc、IAR工程. }7 Z: A; J$ S' j- O5 A 本贴目的是,对于电机控制还处于两眼一抹黑的情况下,先跑个套路,从直观上对MotorControl Workbench 5.0.3软件及开发过程有个了解。# B9 }/ { O( s2 ~ 打开软件MotorControl Workbench 5.0.3 0 Y7 c/ w# d1 z( O+ H2 Z 在样例工程列表中,找到P-NUCLEO-IHM001-BullRunning样例,并双击打开8 H% Q7 H- r/ y ! F; k% j" h' a/ n7 e- Y 提示关闭前保存,先选是,往下走着看看, l; M3 a- b& b% J! b1 B( _ 9 D1 C: X% t: Z6 U" H 保存工程中,按默认名称“SDK50x-P-NUCLEO-IHM001-BullRunning.stmcx”,先不做修改 可以看到标题栏上stmcx工程名称为“SDK50x-P-NUCLEO-IHM001-BullRunning”。左边有4项,电机参数、电源阶段(硬件驱动)、驱动管理、控制阶段(MCU控制相关)。 b; _- [1 b, E 双击中间的大M,进度电机参数设置 可以看到,样例默认设置为下图,对参数暂不做改动。3 Q* p9 J7 q3 u7 c 1 a- Y1 u+ X: b. L6 P( J. c 对比之前电机参数识别时得到的结果,有一定的差别,暂不使用获得的结果代替上图中电机参数,供之后进阶阶段参考。 & k. t9 E7 I0 W! V( z; @* \1 N5 H 传感器设置,由于本实验套件没有相应外设,因此都不勾选 ( n/ e: V9 Q, u* ] 电源硬件驱动设置,暂不做任何修改。如要修改,需要对照硬件电机驱动电路参数。) z; I2 c6 E6 p! r! N% G6 z ; y0 {& O& D0 e6 d; `) q5 Q 驱动管理,有6个蓝色框,可以设置各种参数。暂不做任何修改$ b5 U6 _8 }6 E , E) a0 U9 A1 @2 Y% `, _' P8 K 如要修改,那么鼠标双击蓝色框内,将弹出相应设置选项,如下图 {% {3 u `; Y% B- Z 3 o9 ^4 n; |" f5 ]9 q0 Z 对于第4项比较重要,是电机控制时MCU相关资源参数的设置,不妨打开来看看。当然这些参数如果需要调理的话,将来的STM32CubeMX下也可以说完成。 双击MCU和时钟频率选项图标,弹出MCU型号,时钟类型,主时钟频率,电压等参数% d; J7 d4 ]. P, I P- u( h' B 设置输出工程类型,IDE及工具链。( n+ f. n$ c) G* z0 {% Q8 f5 a 可以有IAR、Keil4、Keil5、TrueSTUDIO、SW4STM32等,我们这里选择IAR,即EWARM。 ' \' A: {" N. U; |* J 生成工程文件。6 G1 D e, O: Y& n$ Q( b J$ e 当然也可以通过主菜单的Tools下拉菜单中,选择相应设置。9 X: x" O' ?" x 生成工程文件中……。生成工程文件成功后,过程窗口自动关闭。如没有任何错误提示,那么进行下一步,IAR下编译目标固件。 使用IAR for ARM 8.0以上,我这里安装了三个版本(8.20、8.22.2、7.80)的IAR for ARM,选择8.20,因为5.0的电机开发环境要求必须是IAR 8.0以上版本。 如果选择 7.80,那么在编译时会多一条警告,关键是生成的目标固件无法下载执行。我当了回小白鼠,其他小伙伴就没必须再去尝试了,给大家省点时间。 s/ g5 c) U( ^) q: `9 j' B 打开IAR 8.20后,找到并打开工程“Project.eww”$ y' B% M/ \1 {$ }4 L2 f+ ^ 把用户文件夹前的加号点开,可以看到文件后都有一个红色有点,这也表示相应文件未编译,当编译后红点将自行消失。打开main.c文件,可以看到主函数比较简洁明了,while中没有任何代码,这是因为样例工程中的程序在运行时通过USART与上位机通信来设置参数,都在中断中执行。 1 Z: P5 @; ]9 S3 E1 Z1 g# F' E 鼠标右键点工程,弹出菜单,选择“make”,编译工程。 编译完成,0错误、0警告/ n# m4 E- t6 l/ h" x: E) \& w* X 1 B# i% x; k1 b5 \3 \- P% u 下载并调试,或用快捷键ctrl+d/ n- I1 Y7 t: v* p8 X0 e + {! P9 B: p9 ^, ^; F- d2 F% V 下载成功,进入调试模式,程序运行指针指向main函数开头/ I- _3 |% ]; ~; ~( w 1 S- M2 n8 W% a/ M# c& z 点击全速运行程序图标,或者用快捷键F5 2 e8 W! u( s& N5 e: D1 p1 F 打开监控窗口 0 e& }; h c7 V- X9 n 设置相应串口参数,并连接串口. C! ~/ b# K2 P7 D: [6 l4 d 上位机与电机目标板固件已连接! P$ {/ Q: S* O 点“Start motor”按钮,电机开始运行/ \. u7 {: d% j! i$ j 电机开始运行效果; A2 Z/ w' W* ~0 G- g' v 可以看到设置转速与测量转速,测量转速是通过电机实时运行测量得到的结果。4 t& W; ^ y8 K7 @4 c! p# H- f $ n) g5 y' y' `9 N$ Z: S w- `& R) z9 G 高速电机设置转速,电机速度发生变化,测量转速反馈到的转速也相应变化。4 O+ r/ }) v$ O 在调整速转速、方向、或启动时,可能会发生错误。错误主要是电机速度反馈错误和电机超流错误。5 S) A7 A! k: @' u3 B2 r 电机速度反馈错误 O8 G- p6 {) i8 o! @* e / T7 q/ u6 O8 A* T/ ?* C 电机超流错误 右侧按钮的操作,将会在下面的“操作改变日志”中有显示 1 d! z. Y1 V T 打开plotter绘图窗口,可以看到设置转速与测量转速的变化波形。- r/ T0 \. D4 M% B( F+ Z 放大波形,可以看到实测波形在设置转速附近做上下往复,这是因为一直在做pid调节转速。 0 f& t0 V$ p# N* j 反馈的测量转速是通过USART串口发送到上位机的,并且相对发送采样速率不同,在低速时,反馈点多一些,高速时每个周期的反馈点要少一些。% Q( q# j9 O2 ^8 n( V5 j! N 电机速度有突变时,反馈速度会有过高的过冲,这也是PID的一个特征。 速度变大、变小,都会有反馈速度过冲 至此,一个基本的样例程序跑起来了,接下来需要完成其它的实验。将在此工程基础上,适当增减代码来实现。 |
6 I) x% V) H# P& T
按照本人惯例,本实验样例程序工程附上:
" i+ m& \- Z& j8 w( {0 d' Z7 J
附件删除了Obj文件夹中编译中间文件,IAR的应用目标板固件程序为“SDK50x-P-NUCLEO-IHM001-BullRunning.out”。
欢迎小伙伴们下载体验。3 p5 y- {# W: o6 C2 r ]# Y8 V
谢谢回复!* |6 y" l- s# N1 A7 J
我可能人品爆棚了,用7.8编译没问题的,下载时死活不行,唉!
环境的问题伤不起,直接换高版本,跳过
是的,三相直流无刷电机。7 O( H2 t' N* F* u/ o7 f1 ~
& i7 E. h6 d% d* j& Q
可能不太适合步进电机吧,步进电机不能失步。无刷电机则会有失步的情况。
不知道,没有工程。
工程名和工程路径不要以数字开头,不要有标点符号、特殊字符和中文,最好是全字母。2 y7 ^# b# K; }9 @
用STM32CubeProgrammer或STM32 ST-LINK Utility,先连了下,看看能不能识别器件STM32F302。! ~5 F6 x! F) @/ V3 b