提交 04e8dd8c 编写于 作者: DonovanZxq's avatar DonovanZxq

电压 功率计算有些小错误, 用移位取代了一些除法

上级 d011e910
......@@ -13,13 +13,13 @@ void ISR_20US(void)
//---------------------------------------------------------------------------------------------------------ADCSample(); ADC采样函数,采样输出电压电流等相关温度信息
static long VSum = 0,ISum = 0, RflxSum = 0;//滑动平均求和中间变量
long i32;
i32 = hadc1.Instance->JDR1; //电压u16 配置过采样4096*54>>2=65536
i32 = hadc1.Instance->JDR1; //电压u16 配置过采样4096*32>>1=65536
SADC.Vout = i32 = i32 + (i32 >> 1);//65535+32767=9830.2v 即电压为0.1v
VSum = i32 + VSum - (VSum >> 8);//输出电压平均 256*21.45us=5.5ms
SADC.VAvg = VSum >> 8;
i32 = hadc2.Instance->DR; //电流u14,配置过采样4096*64>>4=16384
SADC.Iout = i32 = i32 + (i32 >> 2);//16383+4095=2.0478A,电流为0.1mA
i32 = hadc2.Instance->DR; //电流u14,配置过采样4096*64>>3=32768
SADC.Iout = i32 = i32 - (i32 >> 3) - (i32 >> 2);//32767-4095-8191=2.0481A,电流为0.1mA
ISum = i32 + ISum - (ISum >> 8);//输出电流采样滑动求平均
SADC.IAvg =ISum >> 8;
......@@ -68,7 +68,7 @@ void ISR_20US(void)
else if(VIntegral > 488064465){VIntegral = 488064465;}//积分量限制,积分量最大值限制,10A数字量对应Q15
if(i32 < 0){i32 = 0;}//输出最小限制 当输出电压小于限压值时,限压环输出为零
else if(i32 > 14895){i32 = 14895;} //当输出电压大于限压值时,限压环输出为正 限制输出最大电流 10A
else if(i32 > 10000){i32 = 10000;} //当输出电压大于限压值时,限压环输出为正 限制输出最大电流 10A
//其输出叠加在电流环的电流参考值上面,通过降低电流环参考值,降低输出电流的方式从而限制输出电压
CtrlLLC.Vlimit = i32;
//---------------------------------------------------------------------------------------------------------ILoopCtlPI(); 输出恒流PI环路计算
......@@ -77,7 +77,8 @@ void ISR_20US(void)
//该寄存器是16位的!!!
//计算电流误差量,当参考电流大于输出电流,频率往小调,周期量往大调,输出量增加
i32 = CtrlLLC.IoRef - CtrlLLC.Vlimit - SADC.Iout;
//i32 = CtrlLLC.IoRef - CtrlLLC.Vlimit - SADC.Iout;
i32 = CtrlLLC.IoRef - SADC.Iout; // for test
IIntegral = IIntegral + i32 * DSP_I_PI_KI; //积分量=积分量 + KI*误差量
//电流环路输出 = KP*误差量+积分量
i32 = (i32 * DSP_I_PI_KP + IIntegral) >> 15;
......@@ -86,11 +87,11 @@ void ISR_20US(void)
if(IIntegral > (CtrlLLC.MaxPD << 15)){IIntegral = CtrlLLC.MaxPD << 15;}//积分量最大值限制,软启限制
if(RsingInitFlag == 0)//待机状态下环路量清0, 软起正式开始以后=1
{
IIntegral = MIN_INTE;
i32 = MIN_LOOPOUT;
}
//if(StateMRise)//待机状态下环路量清0, 软起正式开始以后=1 RsingInitFlag == 0
//{
// IIntegral = MIN_INTE; //for test
// i32 = MIN_LOOPOUT;
//}
if(i32 < MIN_LOOPOUT){i32 = MIN_LOOPOUT;}
if(i32 > MAX_LOOPOUT){i32 = MAX_LOOPOUT;}
......@@ -103,8 +104,8 @@ void ISR_20US(void)
{
if (CtrlLLC.PD == MIN_LOOPOUT)
{
if(isBursting == 0){CtrlLLC.BeforBurstDT = CtrlLLC.DT;CtrlLLC.DT = MAX_DT;}
isBursting = 1;
if(isBursting == 0){CtrlLLC.BeforBurstDT = CtrlLLC.DT; CtrlLLC.DT = MAX_DT;}
isBursting = 1; //死区最大,意味着没有输出
}//恒压环的数量足够小的,则关闭PWM < MIN_BURST
else if(isBursting)
{
......@@ -117,10 +118,8 @@ void ISR_20US(void)
//当环路输出量大于设定最大值时,MaxPD值启动时逐渐减小,用以高频和小占空比启动,限制启动电流过冲
if(CtrlLLC.PD > CtrlLLC.MaxPD){CtrlLLC.PD = CtrlLLC.MaxPD;}
if(getRegBits(DF.CtrFlag, F_OUT_EN) == 0) //禁止输出了,这里不调用函数,仅仅让脉冲发不出来
{CtrlLLC.PD = MIN_LOOPOUT; CtrlLLC.DT = MAX_DT; }
{CtrlLLC.PD = MIN_LOOPOUT; CtrlLLC.DT = MAX_DT; }
if(SYS.u16_DebugT != 0){CtrlLLC.PD = SYS.u16_DebugT;} //for test
if(SYS.u16_DebugD != 0){CtrlLLC.DT = SYS.u16_DebugD;}
LED0_GPIO_Port->ODR ^= LED0_Pin;
//to do 每个通道的前馈!
hhrtim1.Instance->sTimerxRegs[3].PERxR = hhrtim1.Instance->sTimerxRegs[4].PERxR = hhrtim1.Instance->sTimerxRegs[5].PERxR = CtrlLLC.PD;
......@@ -128,7 +127,7 @@ void ISR_20US(void)
MODIFY_REG(hhrtim1.Instance->sTimerxRegs[3].DTxR, (HRTIM_DTR_DTR | HRTIM_DTR_DTF), ((CtrlLLC.DT & HRTIM_DTR_DTR) | ((CtrlLLC.DT << 16U) & HRTIM_DTR_DTF)));
MODIFY_REG(hhrtim1.Instance->sTimerxRegs[4].DTxR, (HRTIM_DTR_DTR | HRTIM_DTR_DTF), ((CtrlLLC.DT & HRTIM_DTR_DTR) | ((CtrlLLC.DT << 16U) & HRTIM_DTR_DTF)));
MODIFY_REG(hhrtim1.Instance->sTimerxRegs[5].DTxR, (HRTIM_DTR_DTR | HRTIM_DTR_DTF), ((CtrlLLC.DT & HRTIM_DTR_DTR) | ((CtrlLLC.DT << 16U) & HRTIM_DTR_DTF)));
/*
//--------------------------------------------------------------------------------------------------------- FastProtection(); //模块快速保护函数,输出短路 原边硬件过流封波
if(DF.SMFlag > LLC_Wait)
{
......@@ -182,7 +181,7 @@ void ISR_20US(void)
}
//----------------------------------------------------- PFC OK?
}
} for test*/
}
/*
......
......@@ -10,28 +10,18 @@ struct _ADI
{
long Iout;//输出电流
long IAvg;//输出电流平均值
long Vout;//输出电电压
long VAvg;//输出电电压平均值
long Rflx;//反射 ,配置为注入通道
long RfAvg;//
long NowPower1s;
long VaAvg;//滑动变阻器电压平均值
long SinkT1;//散热器温度1
long SinkT1Avg;//散热器温度1平均值
long SinkT2;//散热器温度2
long SinkT2Avg;//散热器温度2平均值
//long MosDeg;//MOS实际温度值
//long DioDeg;//二极管温度值
};
/***********************函数声明*********************/
void ISR_20US(void);
void ADCSample(void);
void VLimitCtlPI(void);
void ILoopCtlPI(void);
void BurstCtl(void);
void FastProtection(void);
#endif /* ISR1_H_ */
......@@ -28,7 +28,7 @@ const int Temper[512] =
SState_M STState = SSInit ;
unsigned char RsingInitFlag = 0;
void setLLC_RegPara(u16 PD, u16 DT)
void setLLC_Reg(u16 PD, u16 DT)
{
__disable_irq();
hhrtim1.Instance->sTimerxRegs[3].PERxR = hhrtim1.Instance->sTimerxRegs[4].PERxR = hhrtim1.Instance->sTimerxRegs[5].PERxR = PD;
......@@ -41,7 +41,7 @@ void DIS_PWM(void)
{
clrRegBits(DF.CtrFlag, F_BURST); //关Burst
clrRegBits(DF.CtrFlag, F_OUT_EN); //关闭PWM
setLLC_RegPara(MIN_LOOPOUT,MAX_DT);//设置成最高频率和最大死区,其实也不会输出
setLLC_Reg(MIN_LOOPOUT,MAX_DT);//设置成最高频率和最大死区,其实也不会输出
HAL_HRTIM_WaveformOutputStop(&hhrtim1,HRTIM_OUTPUT_TD1 | HRTIM_OUTPUT_TD2);//关闭输出
HAL_HRTIM_WaveformOutputStop(&hhrtim1,HRTIM_OUTPUT_TE1 | HRTIM_OUTPUT_TE2);//关闭输出
HAL_HRTIM_WaveformOutputStop(&hhrtim1,HRTIM_OUTPUT_TF1 | HRTIM_OUTPUT_TF2);//关闭输出
......@@ -119,7 +119,7 @@ void StateMRise(void)
CtrlLLC.PD = MIN_LOOPOUT + 1;
//更新寄存器
setLLC_RegPara(CtrlLLC.PD,CtrlLLC.DT);
setLLC_Reg(CtrlLLC.PD,CtrlLLC.DT);
STState = SSRun;//跳转至软启状态
setRegBits(DF.CtrFlag, F_BURST);//使能Burst模式
setRegBits(DF.CtrFlag, F_OUT_EN);//整个程序,set F_OUT_EN仅此一处
......@@ -168,8 +168,8 @@ void StateMRun(void)
if(Magnetron.u16_CtrlMode == MagnetronCtrlMode_MAGN)
{i32 = Magnetron.u16_01mA_Center;} //如果是磁场控制型,目标电流就是理论电流
else
{i32 = (POW.u16_InternalSetPower << 17) / SADC.VaAvg;} //无磁控,获得目标电流
{i32 = (POW.u16_InternalSetPower << 17) / SADC.VAvg;} //无磁控,获得目标电流, 此电压为0.1v5ms
//------------------------i32现在是目标电流
//在原来基础上微调
if (i32 > (CtrlLLC.IoRef + IREF_K)){i32 = CtrlLLC.IoRef + IREF_K;}
else if (i32 < (CtrlLLC.IoRef - IREF_K)){i32 = CtrlLLC.IoRef - IREF_K;}
......@@ -187,9 +187,20 @@ void StateMRun(void)
if(su16_oldInternalSetPower != POW.u16_InternalSetPower) //计算量较大,一般不算
{
su16_oldInternalSetPower = POW.u16_InternalSetPower;
static u32 su32_Sl16_VeachW = 0;
if(su32_Sl16_VeachW == 0)
{
//设3kv<<16 /5kw = 40000, 小于16位
su32_Sl16_VeachW = ((Magnetron.u16_hiPowerV - Magnetron.u16_loPowerV) << 16) / (Magnetron.u16_Top_Power - Magnetron.u16_initPower);//设25kw=25000,10000v
}
// (75kw * 3kv = 225kk = 2.25亿 *10 = 22.5亿),所以大功率时,电压差需要小于3kv!!!
i32 = ( (POW.u16_InternalSetPower - Magnetron.u16_initPower) * (Magnetron.u16_hiPowerV - Magnetron.u16_loPowerV) )
/ (Magnetron.u16_Top_Power - Magnetron.u16_initPower) + Magnetron.u16_loPowerV;
//i32 = ( (POW.u16_InternalSetPower - Magnetron.u16_initPower) * (Magnetron.u16_hiPowerV - Magnetron.u16_loPowerV) )
// / (Magnetron.u16_Top_Power - Magnetron.u16_initPower) + Magnetron.u16_loPowerV;
//
i32 = (((POW.u16_InternalSetPower - Magnetron.u16_initPower) * su32_Sl16_VeachW ) >> 16) + Magnetron.u16_loPowerV;
POW.u16_InterSetHighVolt = i32; //v4 没啥用,为了兼容
CtrlLLC.VoRef = i32 * 10 + 3000; //软起完成以后,该目标电压成为限幅,比理论值高300v ??
}
......@@ -298,7 +309,7 @@ unsigned int UVPCnt = 0;
inline void SwUVP(void)
{
//当输出电流小于*V,且保持*毫秒
if ((SADC.VAvg < Magnetron.u16_MinV) && (DF.SMFlag == LLC_Run))
if ((SADC.VAvg < Magnetron.u16_MinV * 10) && (DF.SMFlag == LLC_Run))
{
if(++UVPCnt> 100)//条件保持*毫秒
{
......@@ -319,8 +330,8 @@ inline void SwUVP(void)
unsigned int OTPCnt = 0; //mos过温保护计时
void SwOTP(void)
{
POW.temperature[0] = Temper[SYS.NTC3950[0] >> 6] * 10 ; //获取Mos实际的散热器温度值,以度数为单位
POW.temperature[1] = Temper[SYS.NTC3950[1] >> 6] * 10; //获取Dio实际的散热器温度值,以度数为单位
POW.temperature[0] = Temper[SYS.NTC3950[0] >> 6] * 10 ; //获取Mos实际的散热器温度值,以0.1度数为单位
POW.temperature[1] = Temper[SYS.NTC3950[1] >> 6] * 10; //获取Dio实际的散热器温度值,以0.1度数为单位
//D2D mos过温保护
if((POW.temperature[0] > 500) || (POW.temperature[1] > 800) )
......
......@@ -55,7 +55,7 @@ typedef enum
#define MAX_DT 425 //最大死区 5us @170MHZ/2
#define MIN_LOOPOUT 27200 //环路输出最小量限制,最高频率,最小周期量,最小占空比,100kHz 27200/(170Mhz*32)是半波=5us
#define MAX_LOOPOUT 60444 //环路输出最大量限,最低频率,最大周期量,最大占空比,45kHz 60444/(170Mhz*32)=11.1us*2=波长22us
#define MAX_LOOPOUT 65500 //环路输出最大量限,最低频率,最大周期量,最大占空比,45kHz 60444/(170Mhz*32)=11.1us*2=波长22us
/*****************************故障类型*****************/
#define F_NOERR 0x0000//无故障
......@@ -96,6 +96,6 @@ void StateMRise(void);
void StateMRun(void);
void StateMErr(void);
void setLLC_RegPara(u16 PD, u16 DT);
void setLLC_Reg(u16 PD, u16 DT);
#endif /* __Events_H*/
......@@ -10,7 +10,6 @@
#include "adc.h"
#include "ISR1.h"
#
#include "flash_Para.h"
u16 u16_SetFilamentByPower(u16 u16_TargetPower);
......@@ -31,7 +30,8 @@ void each5msADC(void){
long i32;
//val每5ms, avg160ms
static u8 su8_160msCnt = 16;
static u8 su8_160msCnt = 32;
static u32 su32MagnI_Sum = 0;
static u32 su32Reflx_Sum = 0;
static u32 su32HighU_Sum = 0;
......@@ -41,7 +41,7 @@ void each5msADC(void){
//2W*10W=20亿,(15+17=32,signed表达21.47亿) 0.1V*0.1mA=0.01mw
//日立 2kw->59% 5kw->64% 9kw->67%
//松下 2kw->67% 6kw->70% 10kw->71%
POW.u16_NowPower = (SADC.IAvg * SADC.VaAvg) >> 17; // 131072 ~~ 137500; //数太大,变成w
POW.u16_NowPower = (SADC.IAvg * SADC.VAvg) >> 17; // 131072 ~~ 137500; //数太大,变成w
su32MagnI_Sum += hadc3.Instance->DR >> 3;//每3ms过采256>>8=4096获得12位 >>3=5.12A
su32Reflx_Sum += SADC.RfAvg;//16位 过采32>>1=65536,
......@@ -49,6 +49,21 @@ void each5msADC(void){
su32HighI_Sum += SADC.IAvg;//实际电流 电流0.1mA 5ms
su32Power_Sum += POW.u16_NowPower;
static u8 su8_Cnt41 = 41;
if(--su8_Cnt41 == 0)//5ms*41次=205ms
{
su8_Cnt41 = 41;
//电压 10000v=10w码*41 = 410w
//i32 = su32HighU_Sum / 410;
i32 = su32HighU_Sum;
//为了达到/410的效果,>>9+>>11= /409.6,少除了点
i32 = (i32 >> 9) + (i32 >> 11) - (i32 >> 19);//1wV计算结果大2v, 5000v大1v
if(i32 < 300){i32 = 0;}
POW.HighU_u16_avg = i32; //似乎这个变量也没什么快速场合,
su32HighU_Sum = 0;
}
if(--su8_160msCnt == 0)
{
su8_160msCnt = 32; //2^5
......@@ -64,9 +79,11 @@ void each5msADC(void){
su32Reflx_Sum = 0;
//电压 10000v=10w码*32 = 320w
i32 = su32HighU_Sum / 320;//其实最高测到9830V
if(i32 < 200){i32 = 0;}
POW.HighU_u16_avg = i32;
//i32 = su32HighU_Sum / 320;//
//=BITRSHIFT(H5,9)+BITRSHIFT(H5,10)+BITRSHIFT( H5,13)+BITRSHIFT( H5,14)+BITRSHIFT( H5,16)
//if(i32 < 200){i32 = 0;}
//POW.HighU_u16_avg = i32;
//su32HighU_Sum = 0;
//电流 2A=2w码*32 = 64w
i32 = su32HighI_Sum >> 5; //
......@@ -78,7 +95,7 @@ void each5msADC(void){
i32 = su32Power_Sum >> 5;
if(i32 < 100){i32 = 0;} //100
POW.u16_AvgPower = i32;
su32HighU_Sum = 0;
su32Power_Sum = 0;
//显示
if(POW.u16_AvgPower){POW.u16_PowerShow = Fake(POW.u16_AvgPower, POW.u16_SetPower);}
else{POW.u16_PowerShow = 0;}
......
......@@ -116,9 +116,9 @@ __flash st_CommVar_bigTable_Typedef thCommVar2MainBigTable[MAX_XB_COMM2MAIN + 1]
{&SYS.DiagnosticRecord[0], en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 2
{&POW.HighU_u16_avg, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 3 电压
{&POW.HighI_u16_avg, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 4 电流
{&POW.u16_FilamentU, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 5 灯丝电压
{&POW.u16_FilamentI, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 6 灯丝电流
{&POW.u16_M_Code6Wave, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 7 母线电压码值6波平均值 20ms
{(u16 *)&SADC.Iout, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 5 灯丝电压 POW.u16_FilamentU
{(u16 *)&CtrlLLC.PD, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 6 灯丝电流 POW.u16_FilamentI
{(u16 *)&CtrlLLC.DT, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 7 母线电压码值6波平均值 20ms POW.u16_M_Code6Wave
{&POW.MagnI_u16_avg, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000}, // 8 磁场电流 4.00A
{&POW.u16_OnChipPIDout, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000},// 9 3895的输出AD码值,
{&POW.magneticOutput, en_Readonly_U16, 0, 0x0000, 0xffff, 0x0000},// 10
......
......@@ -142,7 +142,7 @@ void MX_ADC2_Init(void)
hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc2.Init.OversamplingMode = ENABLE;
hadc2.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_64;
hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_3;
hadc2.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
hadc2.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
if (HAL_ADC_Init(&hadc2) != HAL_OK)
......
......@@ -79,56 +79,56 @@ inline void getHFMB_Var(void);
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* USER CODE BEGIN 1 */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END SysInit */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();
MX_ADC5_Init();
MX_COMP1_Init();
MX_COMP2_Init();
MX_COMP3_Init();
MX_DAC3_Init();
MX_HRTIM1_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_SPI3_Init();
MX_UART4_Init();
MX_UART5_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
MX_FDCAN2_Init();
MX_RTC_Init();
MX_IWDG_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();
MX_ADC5_Init();
MX_COMP1_Init();
MX_COMP2_Init();
MX_COMP3_Init();
MX_DAC3_Init();
MX_HRTIM1_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_SPI3_Init();
MX_UART4_Init();
MX_UART5_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
MX_FDCAN2_Init();
MX_RTC_Init();
MX_IWDG_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
HAL_COMP_Start(&hcomp1); //开比较器,封波并计数
......@@ -223,15 +223,22 @@ int main(void)
Comm_LED_ON;
}
*/
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_IWDG_Refresh(&hiwdg);
HAL_IWDG_Refresh(&hiwdg);
setRegBits(DF.CtrFlag, F_OUT_EN);
DF.SMFlag = LLC_Run;
CtrlLLC.MaxPD = MAX_LOOPOUT;
CtrlLLC.IoRef = SYS.u16_DebugT ;
CtrlLLC.DT = SYS.u16_DebugD;
if(gu32SysFlag & SYS_FLAG_1MS_INT)
{
......@@ -250,61 +257,59 @@ int main(void)
}
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* USER CODE END 3 */
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV5;
RCC_OscInitStruct.PLL.PLLN = 68;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV6;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV5;
RCC_OscInitStruct.PLL.PLLN = 68;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV6;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}
}
/* USER CODE BEGIN 4 */
......@@ -383,12 +388,12 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
//////////////////////////////////////////////////////////////////////////
void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
{
{/*
if(hcomp == &hcomp1){setRegBits(DF.ErrFlag,F_COMP1_OCP);}
else if(hcomp == &hcomp2){setRegBits(DF.ErrFlag,F_COMP2_OCP);}
else if(hcomp == &hcomp3){setRegBits(DF.ErrFlag,F_COMP3_OCP);}
setRegBits(DF.ErrFlag,F_COMP_OCP);//总标志
for test */
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -396,33 +401,33 @@ void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
此差异已折叠。
此差异已折叠。
......@@ -18,14 +18,14 @@
<StLinkDriver>
<stlinkserialNo>I</stlinkserialNo>
<stlinkfoundProbes />
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
<CStepIntDis>_ 0</CStepIntDis>
<stlinkResetStyle>0</stlinkResetStyle>
<stlinkResetStrategy>2</stlinkResetStrategy>
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
<CStepIntDis>_ 0</CStepIntDis>
</StLinkDriver>
<ArmDriver>
<EnableCache>0</EnableCache>
<EnforceMemoryConfiguration>1</EnforceMemoryConfiguration>
<EnableCache>0</EnableCache>
</ArmDriver>
<Trace1>
<Enabled>0</Enabled>
......@@ -53,11 +53,6 @@
<ITMportsLogFile>0</ITMportsLogFile>
<ITMlogFile>$PROJ_DIR$\ITM.log</ITMlogFile>
</SWOTraceHWSettings>
<LogFile>
<LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ "$PROJ_DIR$\LogFile1.log"</LogFile>
<Category2>_ 2</Category2>
</LogFile>
<Trace2>
<Enabled>0</Enabled>
<ShowSource>0</ShowSource>
......@@ -103,16 +98,21 @@
<ShowTimeSum>1</ShowTimeSum>
<SumSortOrder>0</SumSortOrder>
</EventLog>
<TermIOLog>
<LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ ""</LogFile>
</TermIOLog>
<LogFile>
<LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ "$PROJ_DIR$\LogFile1.log"</LogFile>
<Category2>_ 2</Category2>
</LogFile>
<DisassembleMode>
<mode>0</mode>
</DisassembleMode>
<Breakpoints2>
<Count>0</Count>
</Breakpoints2>
<TermIOLog>
<LoggingEnabled>_ 0</LoggingEnabled>
<LogFile>_ ""</LogFile>
</TermIOLog>
<Aliases>
<Count>0</Count>
<SuppressDialog>0</SuppressDialog>
......
此差异已折叠。
......@@ -34,7 +34,7 @@ ADC2.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC2.OversamplingMode=ENABLE
ADC2.Rank-1\#ChannelRegularConversion=1
ADC2.Ratio=ADC_OVERSAMPLING_RATIO_64
ADC2.RightBitShift=ADC_RIGHTBITSHIFT_4
ADC2.RightBitShift=ADC_RIGHTBITSHIFT_3
ADC2.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_6CYCLES_5
ADC3.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_12
ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册