匿名四轴【任务六(20Hz)】
任务六
static void Loop_20Hz(void)
{
Power_UpdateTask(50);
Thermostatic_Ctrl_Task(50);
}
电压相关任务
Power_UpdateTask(50);
void Power_UpdateTask(u8 dT_ms)
{
static s16 voltage_s16;
float cut_off_freq;
voltage_s16 = AdcValue *8.8653f;
if(voltage_init_ok == 0)
{
cut_off_freq = 2.0f;
if(voltage_f >2000 && ABS(voltage_s16 - voltage_f) <200)
{
voltage_init_ok = 1;
}
}
else
{
cut_off_freq = 0.02f;
}
LPF_1_(cut_off_freq,dT_ms*1e-3f,voltage_s16,voltage_f);
Plane_Votage = voltage_f *0.001f;
if(Plane_Votage<Ano_Parame.set.lowest_power_voltage)
{
flag.power_state = 3;
}
else
{
flag.power_state = 1;
}
if(Plane_Votage<Ano_Parame.set.warn_power_voltage)
{
LED_STA.lowVt = 1;此时相应的灯光就会亮起
}
else if(Plane_Votage>Ano_Parame.set.warn_power_voltage+0.2f)
{
LED_STA.lowVt = 0;
}
if(Plane_Votage<Ano_Parame.set.return_home_power_voltage)
{
}
}
恒温控制
Thermostatic_Ctrl_Task(50);
void Thermostatic_Ctrl_Task(u8 dT_ms)
{
if(flag.unlock_sta == 0)
{
if(Ano_Parame.set.heatSwitch == 1)
{
if(thermostatic_en == 0)
{
thermostatic_en = 1;
flag.mems_temperature_ok = 0;
sensor.acc_z_auto_CALIBRATE = 1;
sensor.gyr_CALIBRATE = 2;
ANO_DT_SendString("Thermostatic ON......");
}
}
else
{
if(thermostatic_en)
{
thermostatic_en = 0;
ANO_DT_SendString("Thermostatic OFF,Please Restart ANO_Pioneer_pro!");
}
}
}
if(thermostatic_en)
{
temperature_fb[1] = temperature_fb[0];
temperature_fb[0] = sensor.Tempreature_C;
temperature_diff = (temperature_fb[0] - temperature_fb[1]) *1000/dT_ms;
temperature_fb[2] = temperature_fb[0] + temperature_diff *TEMPERATURE_KD ;
temperature_err = EXP_TEMPERATURE - temperature_fb[2];
if(1)
{
temperature_err_i += LIMIT(temperature_err,-10,10) *dT_ms *0.001f;
temperature_err_i = LIMIT(temperature_err_i,-20,20);
}
temperature_ctrl_val =
TEMPERATURE_KP *temperature_err
+ TEMPERATURE_KI *temperature_err_i;
temperature_ctrl_val = LIMIT(temperature_ctrl_val ,0,100);
Drv_HeatingSet((u8)temperature_ctrl_val);
if(flag.mems_temperature_ok == 0)
{
if(temperature_fb[0] > (EXP_TEMPERATURE-0.3f) && temperature_fb[0] < (EXP_TEMPERATURE+0.3f))
{
if(temperature_cnt<1500)
{
temperature_cnt += dT_ms;
}
else
{
flag.mems_temperature_ok = 1;
ANO_DT_SendString("Thermostatic OK!");
}
}
else
{
temperature_cnt = 0;
}
}
}
else
{
flag.mems_temperature_ok = 1;
Drv_HeatingSet((u8)0);
}
}