|
@@ -1,6 +1,5 @@
|
|
|
#include <Myproject.h>
|
|
#include <Myproject.h>
|
|
|
|
|
|
|
|
-CurrentOffset xdata mcCurOffset;
|
|
|
|
|
|
|
|
|
|
void FOC_Init(void)
|
|
void FOC_Init(void)
|
|
|
{
|
|
{
|
|
@@ -80,7 +79,7 @@ void FOC_Init(void)
|
|
|
FOC_TSMIN = PWM_TS_LOAD; // 最小采样窗口
|
|
FOC_TSMIN = PWM_TS_LOAD; // 最小采样窗口
|
|
|
FOC_TRGDLY = 0x3B; // 采样时刻在中点,一般考虑开关噪声影响,会设置延迟;3B
|
|
FOC_TRGDLY = 0x3B; // 采样时刻在中点,一般考虑开关噪声影响,会设置延迟;3B
|
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
|
|
|
- FOC_CSO = mcCurOffset.Iw_busOffset;
|
|
|
|
|
|
|
+ FOC_CSO = currOffset.IwBusOffset;
|
|
|
}
|
|
}
|
|
|
// 双电阻采样,可设置死区补偿值,在下降沿结束前开始采样Ia,配置81
|
|
// 双电阻采样,可设置死区补偿值,在下降沿结束前开始采样Ia,配置81
|
|
|
#elif (Shunt_Resistor_Mode == Double_Resistor)
|
|
#elif (Shunt_Resistor_Mode == Double_Resistor)
|
|
@@ -91,9 +90,9 @@ void FOC_Init(void)
|
|
|
// 01为上升沿开始后第一个clock开始采样。根据实际情况调整。
|
|
// 01为上升沿开始后第一个clock开始采样。根据实际情况调整。
|
|
|
FOC_TBLO = PWM_DLOWL_TIME; //下桥臂最小脉冲,保证采样
|
|
FOC_TBLO = PWM_DLOWL_TIME; //下桥臂最小脉冲,保证采样
|
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
|
|
|
- FOC_CSO = mcCurOffset.IuOffset;
|
|
|
|
|
|
|
+ FOC_CSO = currOffset.IuOffset;
|
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
|
|
|
- FOC_CSO = mcCurOffset.IvOffset;
|
|
|
|
|
|
|
+ FOC_CSO = currOffset.IvOffset;
|
|
|
// 采样配置
|
|
// 采样配置
|
|
|
#if (DouRes_Sample_Mode == DouRes_1_Cycle)
|
|
#if (DouRes_Sample_Mode == DouRes_1_Cycle)
|
|
|
ClrBit(FOC_CR2, DSS);
|
|
ClrBit(FOC_CR2, DSS);
|
|
@@ -116,11 +115,11 @@ void FOC_Init(void)
|
|
|
SetBit(FOC_CR2, DSS);
|
|
SetBit(FOC_CR2, DSS);
|
|
|
#endif
|
|
#endif
|
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC0);
|
|
|
- FOC_CSO = mcCurOffset.IuOffset;
|
|
|
|
|
|
|
+ FOC_CSO = currOffset.IuOffset;
|
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, CSOC1);
|
|
|
- FOC_CSO = mcCurOffset.IvOffset;
|
|
|
|
|
|
|
+ FOC_CSO = currOffset.IvOffset;
|
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
|
|
SetReg(FOC_CR2, CSOC0 | CSOC1, 0x00);
|
|
|
- FOC_CSO = mcCurOffset.Iw_busOffset;
|
|
|
|
|
|
|
+ FOC_CSO = currOffset.IwBusOffset;
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
// SVPWM 配置
|
|
// SVPWM 配置
|
|
@@ -228,7 +227,7 @@ void Motor_Open(void)
|
|
|
ClrBit(FOC_CR1, ANGM); // 禁止估算器输出
|
|
ClrBit(FOC_CR1, ANGM); // 禁止估算器输出
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
- // 切入启动
|
|
|
|
|
|
|
+ // 切入启动
|
|
|
mcFocCtrl.State_Count = 1200;
|
|
mcFocCtrl.State_Count = 1200;
|
|
|
mcState = mcRun;
|
|
mcState = mcRun;
|
|
|
}
|
|
}
|
|
@@ -239,7 +238,7 @@ void Motor_Open(void)
|
|
|
FOC_RTHECNT = MOTOR_OPEN_ACC_CNT;
|
|
FOC_RTHECNT = MOTOR_OPEN_ACC_CNT;
|
|
|
SetReg(FOC_CR1, EFAE | RFAE | ANGM, RFAE);
|
|
SetReg(FOC_CR1, EFAE | RFAE | ANGM, RFAE);
|
|
|
|
|
|
|
|
- // 切入启动
|
|
|
|
|
|
|
+ // 切入启动
|
|
|
if (OpenRampCycles < (MOTOR_OPEN_ACC_CYCLE - 1))
|
|
if (OpenRampCycles < (MOTOR_OPEN_ACC_CYCLE - 1))
|
|
|
{
|
|
{
|
|
|
if (!ReadBit(FOC_CR1, RFAE))
|
|
if (!ReadBit(FOC_CR1, RFAE))
|
|
@@ -266,7 +265,7 @@ void Motor_Open(void)
|
|
|
FOC_EFREQMIN = MOTOR_OMEGA_ACC_MIN;
|
|
FOC_EFREQMIN = MOTOR_OMEGA_ACC_MIN;
|
|
|
FOC_EFREQHOLD = MOTOR_OMEGA_ACC_END;
|
|
FOC_EFREQHOLD = MOTOR_OMEGA_ACC_END;
|
|
|
SetReg(FOC_CR1, EFAE | RFAE | ANGM, EFAE | RFAE | ANGM);
|
|
SetReg(FOC_CR1, EFAE | RFAE | ANGM, EFAE | RFAE | ANGM);
|
|
|
- // 切入启动
|
|
|
|
|
|
|
+ // 切入启动
|
|
|
mcFocCtrl.State_Count = 2600;
|
|
mcFocCtrl.State_Count = 2600;
|
|
|
mcState = mcRun;
|
|
mcState = mcRun;
|
|
|
}
|
|
}
|
|
@@ -277,42 +276,3 @@ void Motor_Open(void)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- @function Get_Current_Offset
|
|
|
|
|
- @brief 采集电流偏置
|
|
|
|
|
- @date 2025-11-03
|
|
|
|
|
-*/
|
|
|
|
|
-void Get_Current_Offset(void)
|
|
|
|
|
-{
|
|
|
|
|
- if (!mcCurOffset.OffsetFlag)
|
|
|
|
|
- {
|
|
|
|
|
- SetBit(ADC_CR, ADCBSY); // 使能ADC
|
|
|
|
|
-
|
|
|
|
|
- while (ReadBit(ADC_CR, ADCBSY));
|
|
|
|
|
-
|
|
|
|
|
- mcCurOffset.IuOffsetSum += ((ADC0_DR & 0x7ff8));
|
|
|
|
|
- mcCurOffset.IuOffset = mcCurOffset.IuOffsetSum >> 4;
|
|
|
|
|
- mcCurOffset.IuOffsetSum -= mcCurOffset.IuOffset;
|
|
|
|
|
- mcCurOffset.IvOffsetSum += ((ADC1_DR & 0x7ff8));
|
|
|
|
|
- mcCurOffset.IvOffset = mcCurOffset.IvOffsetSum >> 4;
|
|
|
|
|
- mcCurOffset.IvOffsetSum -= mcCurOffset.IvOffset;
|
|
|
|
|
- mcCurOffset.Iw_busOffset = mcCurOffset.IvOffset;
|
|
|
|
|
- mcCurOffset.OffsetCount++;
|
|
|
|
|
-
|
|
|
|
|
- if (mcCurOffset.OffsetCount > 1000)
|
|
|
|
|
- {
|
|
|
|
|
- if (((mcCurOffset.IuOffset > 19959) || (mcCurOffset.IuOffset < 10107)) ||
|
|
|
|
|
- ((mcCurOffset.IvOffset > 19959) || (mcCurOffset.IvOffset < 10107)))
|
|
|
|
|
- {
|
|
|
|
|
- mcFaultSource = FaultIbusOffset;//进入偏置电压错误保护
|
|
|
|
|
- FaultProcess();
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- mcCurOffset.OffsetFlag = 1;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|