请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28069M Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
大家好、我不理解 这个过程、请帮我!
空 HALLBLDC_State_Check (空)
{
// Hall_A、Hall_B、Hall_C
gHall_GpioData =(~HAL_readGpio (halHandle、(GPIO_Number_e) HAL_HallGpio_C)& 0x1)<< 2; /CAP1->J10/J4_1->绿色
gHall_GpioData +=(~HAL_readGpio (halHandle、(GPIO_Number_e) HAL_HallGpio_B)& 0x1)<< 1; //CAP2->J10/J4_2->绿色和白色
gHall_GpioData +=(~HAL_readGpio (halHandle、(GPIO_Number_e) HAL_HallGpio_A)& 0x1); //CAP3->J10/J4_3->灰色和白色
{
// Hall_A、Hall_B、Hall_C
gHall_GpioData =(~HAL_readGpio (halHandle、(GPIO_Number_e) HAL_HallGpio_C)& 0x1)<< 2; /CAP1->J10/J4_1->绿色
gHall_GpioData +=(~HAL_readGpio (halHandle、(GPIO_Number_e) HAL_HallGpio_B)& 0x1)<< 1; //CAP2->J10/J4_2->绿色和白色
gHall_GpioData +=(~HAL_readGpio (halHandle、(GPIO_Number_e) HAL_HallGpio_A)& 0x1); //CAP3->J10/J4_3->灰色和白色
gHall_State = gHall_GpioData;
if (gHall_State!= gHall_PrevState)
{
gHall_timer_now = HAL_readTimerCnt (halHandle、2);
gHall_Time_delta_now = gHall_timer_prev - gHall_timer_now;
gHall_timer_prev = gHall_timer_now;
{
gHall_timer_now = HAL_readTimerCnt (halHandle、2);
gHall_Time_delta_now = gHall_timer_prev - gHall_timer_now;
gHall_timer_prev = gHall_timer_now;
gHall_Time_delta =(gHall_Time_delta_now + gHall_Time_delta_prev)>1;
gHall_Time_Delta_prev = gHall_Time_Delta_Now;
gHall_Time_Delta_prev = gHall_Time_Delta_Now;
gHall_speed_FDB_0p01Hz = gHall_speed_scale/gHall_Time_delta;
gHall_speed_FDB_pu = gHall_speed_FDB_0p01Hz*gHall_Speed_0p01hz_TO_pu_SF;
gHall_speed_FDB_pu = gHall_speed_FDB_0p01Hz*gHall_Speed_0p01hz_TO_pu_SF;
// if (TRAJ_getIntValue (trajHandle_SPD)<_IQ (0.0))
// {
// gHall_speed_FDB_pu =-gHall_speed_FDB_pu;
// }
// {
// gHall_speed_FDB_pu =-gHall_speed_FDB_pu;
// }
//方向检查
gHall_State_Delta = gHall_PwmIndex[gHall_State]- gHall_PwmIndex[gHall_PrevState];
gHall_State_Delta = gHall_PwmIndex[gHall_State]- gHall_PwmIndex[gHall_PrevState];
if ((gHall_State_Delta =-1)||(gHall_State_Delta = 5))
{
gHall_dir = 1; //正向
}
否则、如果((gHall_State_Delta = 1)||(gHall_State_Delta =-5))
{
gHall_dir = 2; //负方向
gHall_speed_FDB_pu =-gHall_speed_FDB_pu;
}
其他
{
gHall_dir = 0; //方向变化
}
{
gHall_dir = 1; //正向
}
否则、如果((gHall_State_Delta = 1)||(gHall_State_Delta =-5))
{
gHall_dir = 2; //负方向
gHall_speed_FDB_pu =-gHall_speed_FDB_pu;
}
其他
{
gHall_dir = 0; //方向变化
}
//检查是否有驱动。
//如果方向改变,速度反馈被复位。
if (gHall_dir!= gHall_dir_prev)
{
gHall_speed_FDB_pu =_IQ (0.0);
gHall_dir_change = 1;
}
//如果方向改变,速度反馈被复位。
if (gHall_dir!= gHall_dir_prev)
{
gHall_speed_FDB_pu =_IQ (0.0);
gHall_dir_change = 1;
}
gHall_LastState = gHall_PrevState;
gHall_PrevState = gHall_State;
gHall_dir_prev = gHall_dir;
gHall_PrevState = gHall_State;
gHall_dir_prev = gHall_dir;
gHall_Flag_State_Change = true;
gHall_PwmCnt = 0;
}
其他
{
gHall_PwmCnt++;
IF (gHall_PwmCnt > gHall_PwmCntMax)
{
gHall_speed_FDB_pu =_IQ (0.0);
gHall_PwmCnt = 0;
}
}
gHall_PwmCnt = 0;
}
其他
{
gHall_PwmCnt++;
IF (gHall_PwmCnt > gHall_PwmCntMax)
{
gHall_speed_FDB_pu =_IQ (0.0);
gHall_PwmCnt = 0;
}
}
返回;
}
}