FOC开环驱动电机(开源小项目==FOC控制BLDC电机)

本文详细阐述了SVPWM算法的原理,包括如何利用α-β坐标系进行计算,以及逆变电路中如何通过8种开关模式合成电压矢量。重点介绍了FOC核心函数的实现步骤,涉及角度归一化、参考电压矢量确定、扇区划分、开关时间计算,并给出了C代码实例。
摘要由CSDN通过智能技术生成

在这里插入图片描述

FOC核心函数
  • SVPWM算法
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 逆变电路三相导通有8种开关量模式因此,任意电压矢量均可以由最近的两个基本电压矢量合成,从而获得近似圆形的定子磁链
  • SVPWM理论基础,平均值等效原理
  • 基于坐标系:α-β坐标系
    SVPWM实现步骤
    • 计算参考电压矢量
    • 判断参考电压矢量Vref所在扇区
    • 计算相邻电压矢量和零矢量作用时间
    • 计算各相桥臂功率器件的开关时间

画圈子里面的代码实现

  • SVPWM模块是电机控制系统实现的核心内容,通过uα和uβ来计算得出6路PWM控制信号,

  • 下面是park逆变换的计算方法
    在这里插入图片描述

#include <tim.h>
#include <math.h>/*正余轩计算*/

#define PWM_Period 100      /*tim定时器*/
#define _PI 3.14159265359
#define _PI_2 1.57079632679
#define _PI_3 1.0471975512
#define _2PI 6.28318530718
#define _3PI_2 4.71238898038
#define _PI_6 0.52359877559
#define _SQRT3 1.73205080757


/******************************************/
float voltage_power_supply;/*直流的母线电压24v*/
float sensor_offset=0;
float zero_electric_angle=0;

/******************************************/
//将角度规定在一个范围内
float _normalizeAngle(float angle)
{
	float a=fmod(angle,_2PI);/*ȡģ*/
	return a>=0 ? a:(a + _2PI);
}
/******************************************/
//FOC核心函数,输入Ud、Uq和电角度,输出PWM
void setPhaseVoltage(float Uq,float Ud,float angle_el)
{
	float Uref;/*²Î¿¼µçѹ*/
	float U_alpha,U_beta;
	
	uint32_t sector;
	
	float T0,T1,T2;
	
	float Ta,Tb,Tc;

	float V1,V2,V3;
	
	int A,B,C;/*计算扇区的中间变量,布尔类型*/
	int N;/*判断扇区的变量*/
	
	
//(1)计算Vref
	angle_el=_normalizeAngle(angle_el+_PI_2);/*½«½Ç¶È¶¨Ò»¸ö·¶Î§ÄÚ*/
	U_alpha=Ud*cos(angle_el)-Uq*sin(angle_el);//·´park±ä»»==½«Ud/Uqת³ÉU¦Á/U¦ÂµÄ²Î¿¼µçѹ
	U_beta=Ud*sin(angle_el)+Uq*cos(angle_el);
	
	Uref=_sqrt(U_alpha*U_alpha+U_beta*U_beta)/voltage_power_supply;
	if(Uref>0.577)Uref=0.577;/*Áù±ßÐεÄÄÚÇÐÔ²£¨SVPWM×î´ó²»Ê§ÕæÐýתµçѹʸÁ¿¸³Öµ ¸ùºÅ3  / 3*/
	if(Uref<-0.577)Uref=-0.577;
	
//(2)判断参考电压的扇区
	sector=(angle_el / _PI_3)+1;
	
	
//(3)计算相邻电压矢量和零矢量作用的时间
	T1=_SQRT3*sin(sector*_PI_3-angle_el)*Uref;/*¼ÆËãÁ½¸öÏàÁÚµçѹ×÷ÓÃʱ¼ä*/
	T2=_SQRT3*sin(angle_el-(sector-1.0)*_PI_3)*Uref;
	T0=1-T1-T2;/*ÁãʸÁ¿×÷ÓÃʱ¼ä*/
	
	
//(4)计算各相桥臂开关时间
	switch(sector){
		
		case 1:
				Ta=T1+T2+T0/2;
				Tb=T2+T0/2;
				Tc=T0/2;
				break;
		case 2:
				Ta=T1+T0/2;
				Tb=T1+T2+T0/2;
				Tc=T0/2;
				break;
		case 3:
				Ta=T0/2;
				Tb=T1+T2+T0/2;
				Tc=T2+T0/2;
				break;
		case 4:
				Ta=T0/2;
				Tb=T1+T0/2;
				Tc=T1+T2+T0/2;
				break;
		case 5:
				Ta=T2+T0/2;
				Tb=T0/2;
				Tc=T1+T2+T0/2;
				break;
		case 6:
				Ta=T1+T2+T0/2;
				Tb=T0/2;
				Tc=T1+T0/2;
				break;
		default://possible error state
			Ta=0;
			Tb=0;
			Tc=0;
	}
	
	//PWM信号输出,占空比配置
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Ta*PWM_Period);//AÏà
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Ta*PWM_Period);
	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_3,Ta*PWM_Period);
	
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值