有幸收到了EEWORD的B-G431B-ESC1开发套件,这次购买的零件除了B-G431B-ESC1,还买了一个C0116-DK作为摇杆控制,一个串口记录仪用来调试。
本次测评的重点在于MotorControl Workbench 软件的调试应用,下面先快速入门一下开发环境的搭建
软件为MotorControl Workbench6.2.1 和MOTOR PILOT6.2.1
打开后新建工程:
由于要用到是单个无刷电机,这里用FOC控制:
主控选择本次测评的重点:G431
至于电机,这里我选择了最常用的2804,要注意这个BELL RUNNING 的是无人机用的,转速非常快,需要注意不要划到手
也可以选择另一个电机,这里预算不够先不考虑
经过一个简单的配置,就可以进行参数的基本调制:
由于我这里没有合适的电池,故先用一个9V的电源作为供电,
同理,电机的供电电压也要改成9V
先保存之后生成代码,软件会自动打开CUBEMX, 在这里可以看到ge
主函数主要由MotorControl_Init() 来初始化
__weak void MX_MotorControl_Init(void)
{
/* Reconfigure the SysTick interrupt to fire every 500 us. */
(void)HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / SYS_TICK_FREQUENCY);
HAL_NVIC_SetPriority(SysTick_IRQn, uwTickPrio, 0U);
/* Initialize the Motor Control Subsystem */
MCboot(pMCI);
mc_lock_pins();
}
MCboot()该代码是电机控制系统的启动函数,负责初始化PWM控制、电流和速度传感器、PID控制器、FOC变量等组件,确保电机能够按照设定的参数进行精确控制。
__weak void MCboot( MCI_Handle_t* pMCIList[NBR_OF_MOTORS] )
{
/* USER CODE BEGIN MCboot 0 */
/* USER CODE END MCboot 0 */
if (MC_NULL == pMCIList)
{
/* Nothing to do */
}
else
{
bMCBootCompleted = (uint8_t )0;
/**********************************************************/
/* PWM and current sensing component initialization */
/**********************************************************/
pwmcHandle[M1] = &PWM_Handle_M1._Super;
R3_2_Init(&PWM_Handle_M1);
ASPEP_start(&aspepOverUartA);
/* USER CODE BEGIN MCboot 1 */
/* USER CODE END MCboot 1 */
/**************************************/
/* Start timers synchronously */
/**************************************/
startTimers();
/******************************************************/
/* PID component initialization: speed regulation */
/******************************************************/
PID_HandleInit(&PIDSpeedHandle_M1);
/******************************************************/
/* Main speed sensor component initialization */
/******************************************************/
STO_PLL_Init (&STO_PLL_M1);
/******************************************************/
/* Speed & torque component initialization */
/******************************************************/
STC_Init(pSTC[M1],&PIDSpeedHandle_M1, &STO_PLL_M1._Super);
/****************************************************/
/* Virtual speed sensor component initialization */
/****************************************************/
VSS_Init(&VirtualSpeedSensorM1);
/**************************************/
/* Rev-up component initialization */
/**************************************/
RUC_Init(&RevUpControlM1, pSTC[M1], &VirtualSpeedSensorM1, &STO_M1, pwmcHandle[M1]);
/********************************************************/
/* PID component initialization: current regulation */
/********************************************************/
PID_HandleInit(&PIDIqHandle_M1);
PID_HandleInit(&PIDIdHandle_M1);
/********************************************************/
/* Bus voltage sensor component initialization */
/********************************************************/
(void)RCM_RegisterRegConv(&VbusRegConv_M1);
RVBS_Init(&BusVoltageSensor_M1);
/*************************************************/
/* Power measurement component initialization */
/*************************************************/
pMPM[M1]->pVBS = &(BusVoltageSensor_M1._Super);
pMPM[M1]->pFOCVars = &FOCVars[M1];
/*******************************************************/
/* Temperature measurement component initialization */
/*******************************************************/
(void)RCM_RegisterRegConv(&TempRegConv_M1);
NTC_Init(&TempSensor_M1);
pREMNG[M1] = &RampExtMngrHFParamsM1;
REMNG_Init(pREMNG[M1]);
FOC_Clear(M1);
FOCVars[M1].bDriveInput = EXTERNAL;
FOCVars[M1].Iqdref = STC_GetDefaultIqdref(pSTC[M1]);
FOCVars[M1].UserIdref = STC_GetDefaultIqdref(pSTC[M1]).d;
MCI_Init(&Mci[M1], pSTC[M1], &FOCVars[M1],pwmcHandle[M1] );
Mci[M1].pScale = &scaleParams_M1;
MCI_ExecSpeedRamp(&Mci[M1],
STC_GetMecSpeedRefUnitDefault(pSTC[M1]),0); /* First command to STC */
pMCIList[M1] = &Mci[M1];
/* Applicative hook in MCBoot() */
MC_APP_BootHook();
/* USER CODE BEGIN MCboot 2 */
/* USER CODE END MCboot 2 */
bMCBootCompleted = 1U;
}
}