STM32C8无损移植simplefoc,实现对无刷电机转速,角度闭环及电压力矩控制

STM32C8无损移植simplefoc,实现对无刷电机转速,角度闭环及电压力矩控制
在B站上看到了稚晖君的无刷电机驱动器项目,对此颇有兴趣,对相关资料进行了查找和学习,也对比了各种代码包括TI,st官方的无刷电机代码以及simplefoc,其中个人觉得simplefoc开源项目是一个非常适合初学者入手的一个项目,0基础就可以完成对无刷电机的使用,但是基于本人对动手需求以及diy需求,非常不适应arduino的开发方式。在拿到simplefoc源码之后,对其进行了在stm32上的无损移植,当然,移植的部分仅针对于无刷电机,像步进电机等就暂时不考虑进行移植。目前已经完成了对stm32C8T6的适配工作。
话说了这么多,来看代码对比吧!

arduino的力矩控制
在这里插入图片描述
移植后的力矩控制:
在这里插入图片描述
看到这里是不是已经发现了,没错,我对simplefoc的代码框架在stm32上实现了用C语言的重构工作。为什么要这么做???
个人习惯了keil编译器,以及它的调试功能,我在使用arduino的时候就无从下手,对某些变量以及代码运行debug无法适应。当然arduino的功能还是非常强大的,只不过对我我这种习惯了stm32的人来说,就非常不适应了。因此我才有了对代码进行重构的想法。
接下来该说说了代码重构后的使用方式了。如何使用stm32对无刷电机进行控制呢?
没错,和arduino的创建对象一样,

	UART_HandleTypeDef huart1;
	void SystemClock_Config(void);
	static void MX_GPIO_Init(void);
	static void MX_USART1_UART_Init(void);
	iic i2c1;
	MagneticSensor_i2c  as5600;
	BLDCMotor           motor;
	BLDCDriver3PWM 		  driver;

	//target variable
	float target_angle = 0;

新建了一个IIC对象, 磁编码器对象,电机以及驱动对象,接下来在实现对对象的初始化,就可以像simplefoc那样完成对无刷电机的控制了,是不是非常方便。
当然,这个初始化也是非常智能的,iic的初始化只需要指定scl和sda引脚,pwm要用到的定时器也只需要指定定时器和相应的PWM 通道引脚和使能引脚。
最后只要在while循环中调用即可。

  motor.loopFOC(&motor);
  motor.move(&motor, target_angle);	

个人对这个项目的移植还是相对比较满意的。由于这次移植没有对电流环进行适配。相关驱动已经完成移植,后续再继续进行验证工作。

PS:目前暂不考虑开源,对于使用无刷电机控制,小伙伴可直接使用simplefoc即可。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>