我用的FOC电机库的版本是5.4.7,软件的获取大家可以去csnd上找一下,需要的话也可以私信我,我就不在这放百度网盘的链接了。
稍微了解一下FOC电机库的话会知道一个叫api的函数,这里面会有一些函数涉及到开启关闭电机,设置电机启动速度和启动时间这些,因此我这次的目的串口使能电机开闭就是调用MC_STARTMOTOR1()与MC_STOPMOTOR1();以及MC_ProgramSpeedRampMotor1();这三个函数,注意这里的速度指令要写在启动指令前面。
具体来看下步骤首先是FOC电机库的配置,具体配置大家可以看下大佬的博客ST MC SDK WorkBench设置参数与程序之间的对应_Jachin Li、的博客-CSDN博客
之后生成代码
到这里其实可以烧录进板子里来通过监视器来看一下是否能驱动电机,之后就是配置串口协议了,在写之前需要先做一些准备工作,因为我们需要串口中断使能,如果你直接写的话其实你会发现要么是串口不接收要么接收之后无法进入while循环,这个就是难点,我尝试了一些方法突然想到,我用的405板子但是FOC里没有405这个芯片,所以用的407替代,那么FOC生成的代码里的USART3串口对我的板子来说是无效的,所以我单独用CUBEMX这个软件生成了一份405RGT6的中断程序。
配置好这些之后就可以生成代码了
注意所有的保存路径和名称都不要包含中文,FOC电机库生成代码里面也不要出现中文。
生成代码之后打开路径,打开FOC电机库生成的文件夹以及CUBEMX生成的文件夹打开两者的inc和src文件夹,把CUBEMX里inc和src文件夹里的stm32f4xx_it和usart文件拷贝到FOC电机库里的inc和src文件夹中,之后就是修改代码。
打开FOC电机库文件夹中的keil文件,直接编译,会报错三个函数重复定义,在下图中的两个中。
将红标2处的函数从stm32f4xx_it里删除掉,同理将void SysTick_Handler(void)函数也删掉从stm32f4xx_it里,这时候还剩一个报错,是
这个USART3_IRQHandler(void)这个函数,这个函数要保留在stm32f4xx_it里,将它从stm32f4xx_mc_it里删除掉,因为这个是串口,我们不需要电机库的串口,我也试过把这三个重复定义的函数全部从一个文件里删除,但是发现不可以,要么是无法接收,要么是接收但是api函数无法调用,之后再编译会发现不再报错,之后烧录到板子里。
哦,对了还有串口的通讯协议我放在下面,串口助手有需要的话也可以私信我,串口协议全部都写在main函数的里面。
之后电机就可以跑起来了
我的运行视频还在上传,上传成功大家可以自行看一下,写的不好,大家看个乐呵就行