|
本帖最后由 toofree 于 2018-9-14 08:47 编辑 【STM32电机培训】——3、任务1电机设定速度、定时启动停止 目标任务:设定速度3000转,启动工作10秒,停止工作5秒;再启动,再停止,速度保持不变,如此往复。
在电机参数测试时,得到过电机的参数。 【STM32电机培训】——1、实验电机参数测量及极数对解疑 https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617371&fromuid=307297 (出处: 意法半导体STM32/STM8技术社区)
本贴实验工程基于前一贴工程进行修改。前一贴链接:【STM32电机培训】——2、生成电机样例程序stmcx、ioc、IAR工程 https://www.stmcu.org.cn/module/foru ... 7427&fromuid=307297 (出处: 意法半导体STM32/STM8技术社区) 将电机工程设置中的参数按照,之前测得的参数设置。
由于最大电流有变化,因此电机驱动管理中的启动参数也得对应做出改变,否则不能生成新的工程。
本实验,打算顺带闪个灯,从原理图看出,X-NUCLEO-IHM07M1板上的LED灯D11,使用的是PB2,高电平有效点亮。
对照NUCLEO-F302R8板原理图,确认是PB2无误。同时在NUCLEO-F302R8板上本身也有一路LED,用的是PB13,高电平有效点亮。
打开电机工程下的,stm32cubemx工程文件“SDK50x-P-NUCLEO-IHM001-BullRunning.ioc”
在IO管脚图中设置,PB2为输出,同时更改别名为“LED_Motor”,程序中使用更直观。
检查IO配置,确认LED_motor管脚模式设置正确无误。
重新生成IAR应用工程。成功生成后,打开工程。
在生成的工程中,main.h中可以找到,LED_motor的相关管脚宏定义。
程序中使用GPIO状态翻转,来闪灯。
找到设置电机速度参数的函数MC_ProgramSpeedRampMotor1()在mc_api.c中
在主函数main.c中包含进“mc_api.h”头文件,一定要放在“/* USER CODE BEGIN Includes */”与“/* USER CODE END Includes */”,否则重新生成工程文件时,将会被冲掉。
定义循环变量“i”。同上,用户添加内容,一定要放在“/* USER CODE BEGIN N */”与/* USER CODE BEGIN N */,之后同理。
添加电机转速参数设置函数“MC_ProgramSpeedRampMotor1(3000/6,1000);”。 引入switch语句,来进行电机启动、停止控制。这样分时工作,可以使用LED正常闪灯。
编译IAR工程,并下载最新代码(Ctrl+D),全速跑程序(F5)。 打开“Motor Profiler 5.0.3”软件,通过串口连接电机开发套件,打开“监控”窗口。
在“监控”窗口下,在打开“Plotter”绘图窗口。可以看到,电机启动一段时间,停止一段时间。但是时间宽度好像有点问题,D11闪烁频率为1Hz。经查看,启动5秒,停止2.5秒。原因是SysTick的的基础时钟为500us。
修改代码,改为每隔2000个单位,一个节拍。修改后D11闪烁为0.5Hz,符合预期。
重新运行程序,查看“Plotter”绘图窗口波形,这次时间正确无误。
main.c中修改过的代码,贴入:
对于电机参数设置、启动、停止操作,还是比较简单的。这主要得力于ST的工程师,把大量繁杂的代码打包,给用户的就是非常明了的控制函数。 按照惯例,程序工程附上:
P-NUCLEO-IHM001_StartStop.rar
(8.98 MB, 下载次数: 67)
|
微信公众号
手机版
stm32cubemx
好资料,非常感谢!
好资料,非常感谢!