无刷电机FOC驱动

小于¥10000

  • 发布时间:2025-04-29项目周期:详谈
  • 现居地址:广东省 广州市 已有竞标:3
  • 剩余时间: 0天0时
  • 我要竞标

项目描述

简略描述:

电机FOC控制,硬件采用野火的 拂晓无刷电机驱动板,软件是网上自学的FOC算法,目前电机无法转起来,但用手去转有阻力;电机和硬件测试没有问题,因为采用六步换向和官方的FOC实例电机可以正常工作.

下面是电机的一些参数:

#define POLE_PAIR_NUM           3 /* Number of motor pole pairs */
#define RS                      0.24 /* Stator resistance , ohm*/
#define LS                      0.00003
#define MOTOR_MAX_SPEED_RPM     4890 /*!< Maximum rated speed */
#define MOTOR_VOLTAGE_CONSTANT  4.3 /*!< Volts RMS ph-ph /kRPM */

下面是程序的流程:

在ADC注入通道的中断中,直线FOC的算法,这个进入的频率和定时器的频率有关,目前是10K或16K

void ADC1_2_IRQHandler(void) { if(__HAL_ADC_GET_FLAG(&hadc1,ADC_FLAG_JEOC)) { __HAL_ADC_CLEAR_FLAG(&hadc1,ADC_FLAG_JEOC); Hw_Io_OutputCtrl(HW_MOTORSD_PIM,SET); myFocTest(); Hw_Io_OutputCtrl(HW_MOTORSD_PIM,RESET); }
if(__HAL_ADC_GET_FLAG(&hadc1,ADC_FLAG_EOC)) { __HAL_ADC_CLEAR_FLAG(&hadc1,ADC_FLAG_EOC); } }



float ftest = 0.0005f; float ftest2 = 2.0f;
void myFocTest(void) { if(ucMotorRunFlag == 0) { Hw_FocTim8SetCcr(0, 0, 0); return; } rtU.theta += ftest; if(rtU.theta >= 2.0f*PI) { rtU.theta -= 2.0f*PI; } rtU.Vd = 0.0f; rtU.V2 = ftest2; rtU.Tpwm = PWM_TIM_PULSE_TPWM; rtU.Udc = 12.0f; foc_algorithm_step();  //这个函数是matlab生成的。
Hw_FocTim8SetCcr((uint16_t)rtY.Tcmp1, (uint16_t)rtY.Tcmp2, (uint16_t)rtY.Tcmp3); //Hw_FocTim8SetCcr(900,900,900); }


用VOFA上位机打出 三路PWM的比较值,图形如下。是正常的马鞍波但电机就是动不起来;


fcch[0] = rtY.Tcmp1; fcch[1] = rtY.Tcmp2; fcch[2] = rtY.Tcmp3; Vofa_JustFloat(&vofa1, fcch, 3);




细节需求:

1.让电机转起来;

2.可以控制速度;



给发包方留言

  • 东西请尽快邮寄过来,请自带数据线