R2_NEW/User/Module/config.c

212 lines
4.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "config.h"
#include "flash.h"
#include "string.h"
#define DEBUG
#define CONFIG_BASE_ADDRESS (ADDR_FLASH_SECTOR_11)
#define DEG_TO_RAD(x) ((x) * (3.141592653 / 180.0)) //角度转弧度
#ifdef DEBUG
ConfigParam_t param ={
#else
static const ConfigParam_t param ={
#endif
.up={
/*上层pid参数*/
.Shoot_M2006_angle_param = {
.p = 25.0f,
.i = 0.0f,
.d = 1.5f,
.i_limit = 1000.0f,
.out_limit = 3000.0f,
},
.Shoot_M2006_speed_param = {
.p = 5.0f,
.i = 0.3f,
.d = 0.0f,
.i_limit = 2000.0f,
.out_limit = 3000.0f,
},
.Pitch_M2006_angle_param = {
.p = 600.0f,
.i = 0.0f,
.d = 3.0f,
.i_limit = 2000.0f,
.out_limit = 3000.0f,
},
.Pitch_M2006_speed_param={
.p = 5.0f,
.i = 0.3f,
.d = 0.0f,
.i_limit = 2000.0f,
.out_limit = 3000.0f,
},
.Pitch_Angle_M2006_speed_param={ //俯仰跑速度环
.p = 20.0f,
.i = 0.05f,
.d = 0.0f,
.i_limit = 500.0f,
.out_limit = 3000.0f,
},
.Dribble_M3508_speed_param={ //三摩擦速度环
.p = 30.0f,
.i = 0.45f,
.d = 0.0f,
.i_limit = 3000.0f,
.out_limit = 5000.0f,
},
.Dribble_translate_M3508_speed_param={//平移用3508速度环
.p = 5.0f,
.i = 0.3f,
.d = 0.0f,
.i_limit = 2000.0f,
.out_limit = 3000.0f,
},
.Dribble_translate_M3508_angle_param= { //平移用3508角度环
.p = 25.0f,
.i = 0.0f,
.d = 1.5f,
.i_limit = 1000.0f,
.out_limit = 3000.0f,
},
.go_cmd={
.id =0,
.mode = 1,
.K_P = 1.0f,
.K_W = 0.05,
.Pos = 0,
.W = 0,
.T = 0,
},
/*上层其他参数*/
/*运球*/
.DribbleConfig_Config = {
.dribble_flag=0,
.m3508_init_angle = 50,
.m3508_translate_angle = -930,
.m3508_dribble_Reverse_speed=-3500,
. m3508_dribble_speed= 4000, // 转动速度
.m3508_dribble_init_speed=0,
.light_3508_flag=0,//3508平移处的光电0初始1到位置
.light_ball_flag=0,//检测球的flag
},
/*投球*/
.PitchConfig_Config = {
.m2006_init_angle =-170,
.m2006_trigger_angle =0,
.go1_init_position = -50,
.go1_release_threshold =-210,
.m2006_Screw_init=0,
.Pitch_angle =56,
},
},
.chassis = {/**/
.M3508_param = {
.p = 15.1f,
.i = 0.02f,
.d = 3.2f,
.i_limit = 200.0f,
.out_limit =6000.0f,
},
/*视觉*/
.chassis_PICKWzPID_HIGN_param ={ //高响应
.p = 1.0f,
.i = 0.03f,
.d = 0.03f,
.i_limit = 100.0f,
.out_limit =2000.0f,
},
.chassis_PICKWzPID_LOW_param ={ //高精度
.p = 0.5f, //1.0 0.5
.i = 0.5f, //0.01 0.04
.d = 0.0f, //0.02 0.02
.i_limit = 50.0f,
.out_limit =1000.0f,
},
},
.can = {
.motor_CHASSIS3508 = BSP_CAN_1,
. motor_UP3508_shoot= BSP_CAN_2,
.motor_UP3508_Dribble= BSP_CAN_2,
.chassis5065 = BSP_CAN_1,
.sick = BSP_CAN_2,
.encoder=BSP_CAN_2,
},
};
const ConfigParam_t *Config_ChassisGet(void)
{
return &param;
}
///*获取导航地图*/
//void set_ops_path(ConfigParam_t *config, const point_t *path, int8_t path_num) {
// config->ops.path = path;
// config->ops.path_num = path_num;
//}
/**
* \brief 从Flash读取配置信息
*
* \param cfg 配置信息
*/
void Config_Get(Config_t *cfg) {
BSP_Flash_ReadBytes(CONFIG_BASE_ADDRESS, (uint8_t *)cfg, sizeof(*cfg));
// /* 防止第一次烧写后访问NULL指针 */
cfg->config = &param;
if (cfg->config == NULL) cfg->config = &param;
/* 防止擦除后全为1 */
if ((uint32_t)(cfg->config) == UINT32_MAX)
cfg->config = &param;
if (memcmp(&cfg->cali_088.gyro_offset.x, "\xFF\xFF\xFF\xFF", 4) == 0) {
cfg->cali_088.gyro_offset.x = 0.0f;
}
if (memcmp(&cfg->cali_088.gyro_offset.y, "\xFF\xFF\xFF\xFF", 4) == 0) {
cfg->cali_088.gyro_offset.y = 0.0f;
}
if (memcmp(&cfg->cali_088.gyro_offset.z, "\xFF\xFF\xFF\xFF", 4) == 0) {
cfg->cali_088.gyro_offset.z = 0.0f;
}
}
/**
* \brief 将配置信息写入Flash
*
* \param cfg 配置信息
*/
void Config_Set(Config_t *cfg) {
osKernelLock();
BSP_Flash_EraseSector(11);
BSP_Flash_WriteBytes(CONFIG_BASE_ADDRESS, (uint8_t *)cfg, sizeof(*cfg));
osKernelUnlock();
}