STM32f103 SMO滑膜观测器的FOC驱动DIY
创始人
2024-02-09 20:12:23

        小时候玩航模了解到无刷电机,又从方波控制了解到FOC控制,在接触了一些开源项目的时候,感叹做的真好,不论是方波的还是Foc的启动都是那么丝滑,软件做的虽然好,但在这几年电机驱动芯片和部分型号的单片机价格都居高不下,做一个低成本的Foc驱动器利用网上开源资料已经不够用了。

        假期趁着有时间做一套Foc驱动器,从硬件到软件,从夏天到冬天,真是不容易,总算差不多了。

 

        硬件选用了STM32F103单片机,程序内容并不是很多,103c8,103rb都可以满足需求,为了后期可以扩展资源,我选用了rbt6,价格大约16元一颗,不是用的ST电机库,因此程序可以移植到国产芯片上,不过我没有移植过,毕竟我不太相信国产芯片(个人观点)。

        驱动芯片选用的EG2134,没什么可说的,就是图便宜,一颗大约1.5元,比国产的峰绍还要便宜个几毛钱,这难道不是我选它的理由吗?

         运放选用的是LM324,也是几毛钱的物料,追求更好的效果可以选用精度更高的运放,而不是我选用的这个玩具级,运放采样做的是一个差分输入的方式,看电流波形还可以。

          Mos用的是Irlr7843,性能很好的一颗mos,以前做航模的时候总用这个mos,就是假货比较多,我这个板子也没打算跑太大的电流,因此这个Mos不论从价格还是从性能,都能满足我的需求。

       三个控制按键,复位,开始,停止。实际的程序样式也是按start电机开始转动,按stop电机停止转动,复位键用于debug调试使用。预留一个电位器接口,用来调速。

       电阻采样用了三颗0.05R的采样电阻,通过三电阻采样的方式保证了电流采样的精度(当然,运放有些拉跨)。

        剩下的就是辅助电路了,预留了IIC接口,SPI接口,后期方便加传感器或者OLED。

        硬件介绍完了,剩下的就是软件部分了,当然也是最精彩的部分了,篇幅有限,我简单介绍一下功能,后面有时间我会在专栏里给大家详细的讲解一下Foc的控制方法。

        使用了SMO 滑膜观测器,SMO代码精简,性能稳定,值得多花一些时间对其进行改进。比如,在反电势滤波方法上。SMO参数调整相对来说比较简单,实际调试电机过程中能很快的调出让电机稳定运行的参数。有没有参数更容易调整的观测器?有的,对传统滑模观测器添加一个自适应律,得到自适应滑模观测器。当然,最重要的还是我比较擅长SMO,其他的都不重要。

        控制模式上写了三个模式,Hallloop(霍尔闭环),SMOloop(滑膜闭环),Openloop(开环)这三个模式。我先把这部分代码贴上来,后期测试的视频我在传上来。

        Openloop

void Motor_IFStart(void)
{Angle_Acc(Angle);AngleSin_Cos.IQAngle = Angle.Set;//角度pi_iq.Ref = IqStart; //启动电流设置ADC_Sample();//采集电流 得到UV电流AngleSin_Cos.IQSin = _IQsinPU(AngleSin_Cos.IQAngle);AngleSin_Cos.IQCos = _IQcosPU(AngleSin_Cos.IQAngle);/**************Clark变换****************/ClarkI.As = AdcValue.PhaseUCurr;ClarkI.Bs = AdcValue.PhaseVCurr;CLARK_MARCO(ClarkI);//clark变换 /**************Park变换****************/   ParkI.Alpha = ClarkI.Alpha;ParkI.Beta  = ClarkI.Beta;ParkI.Sine  = AngleSin_Cos.IQSin;ParkI.Cosine = AngleSin_Cos.IQCos;PARK_MARCO(ParkI);//Park变换 /************d轴控制器*******************/    pi_id.Ref = 0; //给定idpi_id.Fbk = ParkI.Ds;  //反馈id     PI_MACRO(pi_id);//  d轴控制器/************q轴控制器*******************/    pi_iq.Fbk = ParkI.Qs;  //反馈iq     PI_MACRO(pi_iq);//  q轴控制器 /************PARK逆变换*******************/     IparkU.Ds = pi_id.Out;IparkU.Qs = pi_iq.Out;IparkU.Sine = AngleSin_Cos.IQSin;//查表得到正弦值IparkU.Cosine=AngleSin_Cos.IQCos;//查表得到余弦值PARKinv_MARCO(IparkU) Svpwm.Ualpha = IparkU.Alpha;Svpwm.Ubeta =  IparkU.Beta;SMO_Angle(ClarkI.Alpha,ClarkI.Beta,IparkU.Alpha,IparkU.Beta); //滑膜估算角度SVPWM_Gen(&Svpwm); //得到占空比PWM_CMP(); //得到PWM比较值    
}

        SMOloop

void SMO_SpeedLoop(void)
{  PWMZD_count++;if(PWMZD_count==25){PWMZD_count=0; SMO_Speedcale();pi_spd.Ref = SpeedRef;pi_spd.Fbk = Speed_estPare.Speed_RPM;PI_SPEED_MACRO(pi_spd);//速度环PI  } AngleSin_Cos.IQAngle =  IQAtan_Pare.IQAngle;//估算角度pi_iq.Ref = pi_spd.Out; //速度输出ADC_Sample();//采集电流 得到UV电流AngleSin_Cos.IQSin = _IQsinPU(AngleSin_Cos.IQAngle);AngleSin_Cos.IQCos = _IQcosPU(AngleSin_Cos.IQAngle);/**************Clark变换****************/ClarkI.As = AdcValue.PhaseUCurr;ClarkI.Bs = AdcValue.PhaseVCurr;CLARK_MARCO(ClarkI);//clark变换 /**************Park变换****************/   ParkI.Alpha = ClarkI.Alpha;ParkI.Beta  = ClarkI.Beta;ParkI.Sine  = AngleSin_Cos.IQSin;ParkI.Cosine = AngleSin_Cos.IQCos;PARK_MARCO(ParkI);//Park变换 /************d轴控制器*******************/    pi_id.Ref = 0; //给定idpi_id.Fbk = ParkI.Ds;  //反馈id     PI_MACRO(pi_id);//  d轴控制器/************q轴控制器*******************/    pi_iq.Fbk = ParkI.Qs;  //反馈iq     PI_MACRO(pi_iq);//  q轴控制器 /************PARK逆变换*******************/     IparkU.Ds = pi_id.Out;IparkU.Qs = pi_iq.Out;IparkU.Sine = AngleSin_Cos.IQSin;//查表得到正弦值IparkU.Cosine=AngleSin_Cos.IQCos;//查表得到余弦值PARKinv_MARCO(IparkU) Svpwm.Ualpha = IparkU.Alpha;Svpwm.Ubeta =  IparkU.Beta;SMO_Angle(ClarkI.Alpha,ClarkI.Beta,IparkU.Alpha,IparkU.Beta); //滑膜估算角度SVPWM_Gen(&Svpwm); //得到占空比PWM_CMP(); //得到PWM比较值    
}

Hallloop

void Mode_Hall_loop(void) 
{PWMZD_count++;if(PWMZD_count==25){PWMZD_count=0;Hall_Three_Speedcale(); pi_spd.Ref = SpeedRef;pi_spd.Fbk = Hall_Three.Speed_RPM;PI_SPEED_MACRO(pi_spd);//速度PI控制器 }ThreeHallanglecale();//得到角度AngleSin_Cos.IQAngle = Hall_Three.ele_angleIQ;ADC_Sample();//采集电流 得到UV电流AngleSin_Cos.IQSin = _IQsinPU(AngleSin_Cos.IQAngle);AngleSin_Cos.IQCos = _IQcosPU(AngleSin_Cos.IQAngle);/*****************************************************************************//**************Clark变换****************/ClarkI.As = AdcValue.PhaseUCurr;ClarkI.Bs = AdcValue.PhaseVCurr;CLARK_MARCO(ClarkI);//clark变换 /**************Park变换****************/   ParkI.Alpha = ClarkI.Alpha;ParkI.Beta  = ClarkI.Beta;ParkI.Sine  = AngleSin_Cos.IQSin;ParkI.Cosine = AngleSin_Cos.IQCos;PARK_MARCO(ParkI);//Park变换 /************d轴控制器*******************/    pi_id.Ref = 0; //给定idpi_id.Fbk = ParkI.Ds;  //反馈id     PI_MACRO(pi_id);//  d轴控制器/************q轴控制器*******************/    pi_iq.Ref = pi_spd.Out; //速度输出pi_iq.Fbk = ParkI.Qs;  //反馈iq     PI_MACRO(pi_iq);//  q轴控制器 /************PARK逆变换*******************/     IparkU.Ds = pi_id.Out;IparkU.Qs = pi_iq.Out;IparkU.Sine = AngleSin_Cos.IQSin;//查表得到正弦值IparkU.Cosine=AngleSin_Cos.IQCos;//查表得到余弦值PARKinv_MARCO(IparkU) Svpwm.Ualpha = IparkU.Alpha;Svpwm.Ubeta =  IparkU.Beta;SMO_Angle(ClarkI.Alpha,ClarkI.Beta,IparkU.Alpha,IparkU.Beta); //滑膜估算角度SVPWM_Gen(&Svpwm); //得到占空比PWM_CMP(); //得到PWM比较值}

        增加了一个上位机接口,用于观测电流波形Iabc,SMO和speed。上位机用的是VOFA,一个开源的上位机。

 这是Iabc的波形。

这是SMO波形 

这是 速度speed波形

整体测试还算好吧,后续还有很多工作需要做。最后是测试视频 

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...