diff --git a/app/by_fan_control.c b/app/by_fan_control.c index ea2571b..f9f7397 100644 --- a/app/by_fan_control.c +++ b/app/by_fan_control.c @@ -6,11 +6,11 @@ #define FAN_LL_PWM_PIN TIM8_PWM_MAP1_CH1_B6 // 左升力风扇 #define FAN_RL_PWM_PIN TIM8_PWM_MAP1_CH2_B7 // 右升力风扇 // M4 -#define FAN_RB_PWM_A_PIN TIM10_PWM_MAP3_CH2_D3 // 左后 -#define FAN_RB_PWM_B_PIN TIM10_PWM_MAP3_CH4_D7 // 左后 +#define FAN_RB_PWM_A_PIN TIM10_PWM_MAP3_CH4_D7 // 后 +#define FAN_RB_PWM_B_PIN TIM10_PWM_MAP3_CH2_D3 // you后 // M1 -#define FAN_LB_PWM_A_PIN TIM4_PWM_MAP1_CH1_D12 // 右后 -#define FAN_LB_PWM_B_PIN TIM4_PWM_MAP1_CH3_D14 // 右后 +#define FAN_LB_PWM_A_PIN TIM4_PWM_MAP1_CH3_D14 // zuo后 +#define FAN_LB_PWM_B_PIN TIM4_PWM_MAP1_CH1_D12 // 后 // M3 #define FAN_RS_PWM_B_PIN TIM10_PWM_MAP3_CH1_D1 // 右侧 #define FAN_RS_PWM_A_PIN TIM10_PWM_MAP3_CH3_D5 // you侧 @@ -65,9 +65,9 @@ void by_pwm_init(void) pwm_init(FAN_LS_PWM_B_PIN, 20000, 0); pwm_init(FAN_RS_PWM_A_PIN, 20000, 0); pwm_init(FAN_RS_PWM_B_PIN, 20000, 0); - pwm_init(FAN_LB_PWM_A_PIN, 20000, 0); + pwm_init(FAN_LB_PWM_A_PIN, 20000,1000); pwm_init(FAN_LB_PWM_B_PIN, 20000, 0); - pwm_init(FAN_RB_PWM_A_PIN, 20000, 0); + pwm_init(FAN_RB_PWM_A_PIN, 20000, 1000); pwm_init(FAN_RB_PWM_B_PIN, 20000, 0); while (1); #endif diff --git a/app/jj_motion.c b/app/jj_motion.c index 9b46cc1..56f1b25 100644 --- a/app/jj_motion.c +++ b/app/jj_motion.c @@ -18,23 +18,23 @@ float ci_Ki0 = 0; float ci_Kd0 = 0; float out_ci; // 弯道后面风扇角度环 -float an_Kp0 = 45.0f; +float an_Kp0 = 54.0f; float an_Ki0 = 0.0f; float an_Kd0 = 0.0f; // 直道后面风扇角度环 -float an_Kp1 = 35.0f; +float an_Kp1 = 45.0f; float an_Ki1 = 0.0f; float an_Kd1 = 0.0f; // 圆环后面风扇角度环 -float yu_Kp0 = 51.0f; +float yu_Kp0 = 53.0f; float yu_Ki0 = 0.0f; float yu_Kd0 = 0.0f; // 弯道侧面风扇角度环 -float cn_Kp1 = 400.0f; +float cn_Kp1 = 300.0f; float cn_Ki1 = 0.f; float cn_Kd1 = 0.0f; // 直道侧面风扇角度环 -float po_Kp1 = 400.0f; +float po_Kp1 = 250.0f; float po_Ki1 = 0.0f; float po_Kd1 = 0.0f; // 期望和当前量 @@ -46,15 +46,15 @@ float out_pos; float set_pos = 0.0f; float out_cal; // 弯道角速度环 -float gy_Kp0 = 4.80f; +float gy_Kp0 = 8.80f; float gy_Ki0 = 0.0f; float gy_Kd0 = 0.0f; // 直道角速度环 -float gy_Kp1 = 6.0f; +float gy_Kp1 = 7.0f; float gy_Ki1 = 0.0f; float gy_Kd1 = 0.0f; // 圆环角速度环 -float ygy_Kp0 = 6.0f; +float ygy_Kp0 = 7.0f; float ygy_Ki0 = 0.0f; float ygy_Kd0 = 0.0f; // 当前和输入量 @@ -63,7 +63,7 @@ float out_gyro; // float set_gyro = 0.0f; // 速度环 float sp_Kp = 10.0f; -float sp_Ki = 100.f; +float sp_Ki = 80.f; float sp_Kd = 0.0f; float in_speed; @@ -73,7 +73,7 @@ float set_speed; float set_speed0 = 900.0f; float set_speed1 = 1100.0f; float set_speed2 = 830.f; -float set_speed3 = 1000.f; +float set_speed3 = 900.f; int cnt1 = 0; int cnt2 = 0; int cnt3 = 0; @@ -198,14 +198,14 @@ void sport_motion() } // 输出限幅 if (in_state == 0 || in_state == 2) { - pwm_duty_ls = (int32_t)myclip_f(-out_pos, 0.0f, 6500.f); - pwm_duty_rs = (int32_t)myclip_f(out_pos, 0.0f, 6500.f); + pwm_duty_ls = (int32_t)myclip_f(-out_pos, 0.0f, 7000.f); + pwm_duty_rs = (int32_t)myclip_f(out_pos, 0.0f, 7000.f); pwm_duty_lb = (int32_t)myclip_f(out_speed + out_gyro, 0.0f, 7000.f); pwm_duty_rb = (int32_t)myclip_f(out_speed - out_gyro, 0.0f, 7000.f); } else if (in_state == 1 || in_state == 3 || in_state == 4 || in_state == 5) { - pwm_duty_ls = (int32_t)myclip_f(-out_cal, 0.0f, 6500.f); - pwm_duty_rs = (int32_t)myclip_f(out_cal, 0.0f, 6500.f); + pwm_duty_ls = (int32_t)myclip_f(-out_cal, 0.0f, 7000.f); + pwm_duty_rs = (int32_t)myclip_f(out_cal, 0.0f, 7000.f); pwm_duty_lb = (int32_t)myclip_f(out_speed + out_gyro, 0.0f, 7000.f); pwm_duty_rb = (int32_t)myclip_f(out_speed - out_gyro, 0.0f, 7000.f); } @@ -223,14 +223,14 @@ void sport_motion() cnt3++; if (in_state == 3) { - if (cnt3 >= 300) // 200ms + if (cnt3 >= 400) // 200ms { bt_printf("to 环内"); cnt3_flag = 2; cnt3 = 0; } } else if (in_state == 1) { - if (cnt3 >= 450) // 200ms + if (cnt3 >= 500) // 200ms { bt_printf("to 弯道"); cnt3_flag = 2; @@ -245,19 +245,24 @@ void sport_motion() } } if (in_speed > set_speed - 100) { - qd_down = 8* fabs(in_pos); - } else if(in_speed > set_speed - 250){ - qd_down = 4* fabs(in_pos); - }else{ - qd_down=0; + qd_down = 5 * fabs(in_pos) + 50; + } else if (in_speed > set_speed - 200) { + qd_down = 2.5 * fabs(in_pos)+10; + } else { + qd_down = 0; } by_pwm_update_duty(bt_fly + 500 - qd_down, bt_fly + 500 - qd_down); } else { + if(in_state==1) { + qd_down = 15; + }else{ + qd_down=0; + } if (in_state == 4) { - by_pwm_update_duty(bt_fly + 515, bt_fly + 515); + by_pwm_update_duty(bt_fly + 500 - qd_down, bt_fly + 500 - qd_down); set_speed = set_speed3; } else { - by_pwm_update_duty(bt_fly + 500, bt_fly + 500); + by_pwm_update_duty(bt_fly + 500 - qd_down, bt_fly + 500 - qd_down); } } } @@ -278,12 +283,12 @@ void sport_pid_init() PID(&str_angle_pid, &in_angle, &out_pos, &set_pos, po_Kp1, po_Ki1, po_Kd1, _PID_P_ON_E, _PID_CD_REVERSE); PID_SetMode(&str_angle_pid, _PID_MODE_AUTOMATIC); PID_SetSampleTime(&str_angle_pid, 20); - PID_SetOutputLimits(&str_angle_pid, -6500.0f, 6500.0f); + PID_SetOutputLimits(&str_angle_pid, -6000.0f, 6000.0f); // 弯道侧面曲率环 PID(&tur_cal_pid, &in_angle, &out_cal, &set_pos, cn_Kp1, cn_Ki1, cn_Kd1, _PID_P_ON_E, _PID_CD_REVERSE); PID_SetMode(&tur_cal_pid, _PID_MODE_AUTOMATIC); PID_SetSampleTime(&tur_cal_pid, 20); - PID_SetOutputLimits(&tur_cal_pid, -6500.0f, 6500.0f); + PID_SetOutputLimits(&tur_cal_pid, -6000.0f, 6000.0f); // // 圆环 // PID(&cir_pos_pid, &in_angle, &out_ci, &set_pos, ci_Kp0, ci_Ki0, ci_Kd0, _PID_P_ON_E, _PID_CD_REVERSE); // PID_SetMode(&cir_pos_pid, _PID_MODE_AUTOMATIC); diff --git a/app/jj_motion.h b/app/jj_motion.h index b148c3f..6be084c 100644 --- a/app/jj_motion.h +++ b/app/jj_motion.h @@ -45,7 +45,8 @@ extern float out_speed; extern float set_speed0; extern float set_speed1; extern float set_speed2; -extern float set_speed ; +extern float set_speed3; +extern float set_speed; extern int32_t pwm_duty_ls; extern int32_t pwm_duty_rs; extern int32_t pwm_duty_lb; diff --git a/app/jj_param.c b/app/jj_param.c index dd1b3b8..bb1aa2f 100644 --- a/app/jj_param.c +++ b/app/jj_param.c @@ -61,7 +61,7 @@ void jj_param_eeprom_init(void) PARAM_REG(speed_Kd, &sp_Kd, EFLOAT, 1, "sp_D:"); PARAM_REG(param_set_speed2, &set_speed2, EFLOAT, 1, "rate2:"); - + PARAM_REG(param_set_speed3, &set_speed3, EFLOAT, 1, "rate3:"); jj_param_read(); // 注冊 } /** diff --git a/app/jj_param.h b/app/jj_param.h index 0c7c714..30a3e82 100644 --- a/app/jj_param.h +++ b/app/jj_param.h @@ -61,6 +61,7 @@ typedef enum { speed_Kd, param_set_speed2, + param_set_speed3, DATA_IN_FLASH_NUM, delta_x, diff --git a/app/jj_voltage.c b/app/jj_voltage.c index e1454f3..c66b14a 100644 --- a/app/jj_voltage.c +++ b/app/jj_voltage.c @@ -9,5 +9,5 @@ void vol_init(void) } void get_vol() { - now_vol=0.003377f*adc_convert(GET_VOL_PIN)+0.16f; + now_vol=0.003377f*adc_convert(GET_VOL_PIN)+0.36f; } \ No newline at end of file