212 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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 ¶m;
 | ||
| }
 | ||
| 
 | ||
| ///*获取导航地图*/
 | ||
| //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 = ¶m;
 | ||
|   if (cfg->config == NULL) cfg->config = ¶m;
 | ||
|   /* 防止擦除后全为1 */
 | ||
|   if ((uint32_t)(cfg->config) == UINT32_MAX)
 | ||
|     cfg->config = ¶m;
 | ||
| 	
 | ||
| 	  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();
 | ||
| }
 |