📄 cgj.h
字号:
/***************************************************************************************
* 项目名称: 汽车底盘测功机
* 项目负责人: 饶阳胜
* 项目开始日期: 05-6-7
*--------------------------------------------------------------------------------------
* 文件名称: CGJ.H
* 文件描述: 项目头文件
***************************************************************************************/
/************************************ 引脚功能定义说明 *********************************
* P0.0 -> 串口的发送脚
* P0.1 -> 串口的接收端
* P0.2 -> I2C总线时钟线
* P0.3 -> I2C总线数据线
* P0.4 -> 工作指示灯
* P0.5 -> 举升上升
* P0.6 -> 举升下降
* P0.7 -> PWM IGBT输出
* P0.8 -> 飞轮1
* P0.9 -> 飞轮2
* P0.10 -> 速度输入信号
* P0.11 -> 飞轮3
* P0.12 -> 输出触发脉冲信号
* P0.13 -> 光电开关输入
* P0.14 -> 输入信息(暂缺)
* P0.15 -> AD转换完成信号(BUSY)
* P0.16 -> AD转换数据线(LSB)
* -- ------------
* P0.23 ------------(MSB)
* P0.24 -> AD转换控制线(R/C)
* P0.25 -> AD转换字节控制线(BYTE)
* P0.26 -> 变频器输出控制
* P0.27 ->
* P0.28 ->
* P0.29 ->
* P0.30 ->
* P0.31 ->
***************************************************************************************/
/********************************* 系统架构说明 ****************************************
* 一 任务列表
* 1 接收命令任务 接收命令任务的优先级是最高的.
* 此任务对上位机的命令进行处理,以邮箱的形式,将命令送到各个具体的任务
*
* 2 检测/控制任务 在收到有效的命令后,开始检测/控制
***************************************************************************************/
#include "src\config.h" // 包含总的头文件
#include "cgj_config.h" // 包含测功机项目的配置文件
#include "IGBT.h"
#ifdef CGJ_GLOBALS // CGJ => 测功机
#define CGJ_EXT
#else
#define CGJ_EXT extern
#endif
/********************** 定义数据结构 **************************************************/
typedef struct cgj_dema_point{ //
INT8U id; // 第几个点
INT32S ad_value; // 与标定点对应的AD值
INT32U set_value; // 标定点的设定值
INT8U valid; // 标定点是否有效的标志 TRUE -有效,FALSE - 无效
}CGJ_DEMA_POINT; // 定义的类型名称:CGJ_DEMA_POINT
/************** 条件编译参数定义区 ******************/
#define MASTER_DEBUG 1 // 主从调试选择
#define METHOD 1 // 如果定义为1表示采用逐步加导通时间的方法
// 如果定义成其它值表示采用求导通面积的方法
/************ 引脚配置定义区 ************************/
#define UART0_COMMT 0x00000005 // 定义UART0串口通信的PINSEL值
#define TMR1_CAP0 0x00200000 // 定义TMR1的捕捉输入通道0
/*********** IO口方向定义 ***************************/
#define WORK_SHOW 0x00000010 // P0.4 工作指示
#define ZSSS 0x00000040 // P0.5 举升下降
#define ZSXJ 0x00000020 // P0.6 举升上升
#define MOTOR 0x00000080 // P0.7 电机
#define WHEEL_1 0x00000100 // P0.8 飞轮1
#define WHEEL_2 0x00000200 // P0.9 飞轮2
//#define OUT_CONTROL 0x00001000 // P0.12 为输出控制端口
#define OUT_CONTROL 0x00000080
#define AD_BUSY 0x00008000 // P0.15 脚为AD转换的BUSY输入信号
#define AD_RC 0x01000000 // P0.24 是AD转换的R/C控制脚
#define AD_BYTE 0x02000000 // P0.25 是AD转换的字节控制脚
#define TRANS_MOTOR 0x04000000 // P0.26 变频器控制端口
/*********** 各个任务的优先级和堆栈空间定义 *********/
#define uart0_prio 4 // 串口互斥任务优先级
#define RECIEVE_COMMAND_TASK_PRIO 5 // 串口接收任务优先级
#define POWER_TASK_PRIO 8 // 恒功率控制任务优先级
#define FORCE_TASK_PRIO 11 // 恒扭距控制任务优先级
#define ROAD_SIMUL_TASK_PRIO 13 // 道路模拟阻力任务优先级
#define SPEED_TASK_PRIO 14 // 恒速度控制任务优先级
#define DEMA_TASK_PRIO 17 // 标定任务优先级
#define WAIT_TASK_PRIO 6 // 空闲等待任务优先级 (Old 20)
#define RECIEVE_COMMAND_TASK_STK_SIZE 64 * 4 // 串口接收任务堆栈大小
#define POWER_TASK_STK_SIZE 64 * 4 // 恒功率任务的堆栈大小
#define FORCE_TASK_STK_SIZE 64 * 4 // 恒扭距任务的堆栈大小
#define SPEED_TASK_STK_SIZE 64 * 4 // 恒速度任务的堆栈大小
#define DEMA_TASK_STK_SIZE 64 * 4 // 标定任务的堆栈大小
#define WAIT_TASK_STK_SIZE 64 * 4 // 空闲等待任务的堆栈大小
#define ROAD_SIMUL_TASK_STK_SIZE 64 * 4 // 道路模拟阻力任务的堆栈大小
#define SET_SPEED_VALUE 0x01 // 设置恒速度值
#define SET_FORCE_VALUE 0x02 // 设置恒扭矩值
#define SET_POWER_VALUE 0x04 // 设置恒功率值
#define START_CONTROL_SPEED 0x08 // 开始控制速度
#define START_CONTROL_FORCE 0x10 // 开始控制力
#define START_CONTROL_POWER 0x20 // 开始控制功率
#define STOP_CONTROL 0x40 // 停止控制
#define LIFT_UP 0x80 // 举升器上升
#define LIFT_DOWN 0x100 // 举升器下降
#define ENTER_DEMA 0x200 // 进入标定状态
#define EXIT_DEMA 0x400 // 退出标定状态
#define FORCE_DEMA 0x800 // 力标定
#define FORCE_CLEAR 0x1000 // 力清0
#define OPEN_MOTOR 0x2000 // 开电机
#define CLOSE_MOTOR 0x4000 // 关电机
#define DEMA_SPEED 0x8000 // 速度标定
#define START_CONTROL_SI 0x10000 // 进入测试可控硅
#define STOP_CONTROL_SI 0x20000 // 退出测试可控硅
#define SI_VALUE 0x40000 // 可控硅输出特定角度
#define TEST_WASTE 0x80000 // 检测损耗
#define SET_PID_VALUE 0x100000 //
#define SET_WASTE_VALUE 0x200000 //
#define GET_PID_VALUE 0x400000 //
#define CLEAR_DISTANCE 0x100000 // 行驶距离清零
#define START_SIMULATE 0x200000 // 开始道路模拟阻力
#define STOP_SIMULATE 0x400000 // 停止道路模拟阻力
#define SET_SIMULATE 0x800000 //
#define SPEED_FLAG SET_SPEED_VALUE | START_CONTROL_SPEED | STOP_CONTROL // 与恒速任务相关的标志位
#define FORCE_FLAG SET_FORCE_VALUE | START_CONTROL_FORCE | STOP_CONTROL | TEST_WASTE // 与恒力任务相关的标志位
#define POWER_FLAG SET_POWER_VALUE | START_CONTROL_POWER | STOP_CONTROL // 与恒功率任务相关的标志位
#define DEMA_FLAG ENTER_DEMA | EXIT_DEMA | FORCE_DEMA | FORCE_CLEAR // 与标定任务相关的标志位
#define WAIT_FLAG LIFT_UP | LIFT_DOWN | OPEN_MOTOR | CLOSE_MOTOR | DEMA_SPEED | \
START_CONTROL_SI | STOP_CONTROL_SI | SI_VALUE // 与空闲等待任务相关的标志位
#define SIMULATE_FLAG START_SIMULATE | STOP_SIMULATE | SET_SIMULATE // 与道路模拟阻力任务相关的标志位
#define DATA_LENGTH 6
#define DEMA_POINT_LOCAL 2
#define NUMBER_START_LOCAL 3
#define DECIMAL_POINT_LOCAL 4
/*********** 定义用于计算速度的参数 *****************/
#define SPEED 0 //
#define FORCE 1 //
#define POWER 2 //
#define JSD 3 //
#define DISTANCE 4 //
// 全局变量定义区1
CGJ_EXT INT8U times;
CGJ_EXT INT8U force_dema_point; // 第几个标定点
CGJ_EXT INT8U zsdpl; // 指示灯闪烁频率
CGJ_EXT FP32 set_control_value; // 设定的控制值
CGJ_EXT INT32U igbt_value; //
CGJ_EXT FP32 power_set_value; // 功率设定值
CGJ_EXT FP32 force_set_value; // 力设定值
CGJ_EXT FP32 speed_set_value; // 速度设定值
CGJ_EXT FP32 parameter[5]; // 测功机状态数组,速度,力,功率,加速度,距离
CGJ_EXT INT32U gtzj_mm; // 滚筒直径
CGJ_EXT INT32U mcmcs; // 滚筒每转一圈的脉冲数
CGJ_EXT FP32 speed_parameter; // 计算速度时用到的参数
CGJ_EXT INT32U G_PulseCount; // 总的脉冲数,用来计算行驶距离
CGJ_EXT FP32 G_Kp; // PID参数 P 值
CGJ_EXT FP32 G_Ki; // PID参数 I 值
CGJ_EXT FP32 G_Kd; // PID参数 D 值
CGJ_EXT FP32 G_Kc; // PID参数 C 比例带参数
CGJ_EXT FP32 G_Wa; // 损耗 A 参数
CGJ_EXT FP32 G_Wb; // 损耗 B 参数
CGJ_EXT FP32 G_Wc; // 损耗 C 参数
CGJ_EXT INT8U CGJDemaNumber; // 标定点数量
CGJ_EXT CGJ_DEMA_POINT CGJDemaPointTbl[DEMA_POINT_NUMBER]; // 驱动力标定数据表
CGJ_EXT FP32 ScSpeed; // 上次的实时速度
CGJ_EXT volatile FP32 adi_sum; // 上一个周期内力AD的平均值
CGJ_EXT volatile FP32 adi_times; // 上一个周期内采到力AD的次数
CGJ_EXT volatile INT32U adi_value; // 当前AD值
CGJ_EXT volatile INT32U mcs; // 与下面脉冲周期相对应的脉冲数
CGJ_EXT volatile INT32U mczq; // 与脉冲数相对应的脉冲周期
CGJ_EXT volatile INT32U sc_t1cr0; // 上次t1cr0值
CGJ_EXT volatile INT32U sc_t1cr1; // 上次t1cr1值
// 定义相关变量
CGJ_EXT __align(8) OS_STK RecieveCommandTaskStk[RECIEVE_COMMAND_TASK_STK_SIZE]; // 串口接收任务堆栈空间
CGJ_EXT __align(8) OS_STK PowerTaskStk[POWER_TASK_STK_SIZE]; // 恒功率控制任务堆栈空间
CGJ_EXT __align(8) OS_STK ForceTaskStk[FORCE_TASK_STK_SIZE]; // 恒扭距控制任务堆栈空间
CGJ_EXT __align(8) OS_STK SpeedTaskStk[SPEED_TASK_STK_SIZE]; // 恒速度控制任务堆栈空间
CGJ_EXT __align(8) OS_STK DemaTaskStk[DEMA_TASK_STK_SIZE]; // 标定任务堆栈空间
CGJ_EXT __align(8) OS_STK WaitTaskStk[WAIT_TASK_STK_SIZE]; // 空闲等待任务堆栈空间
CGJ_EXT __align(8) OS_STK RoadSimulTaskStk[ROAD_SIMUL_TASK_STK_SIZE]; // 道路模拟阻力任务堆栈空间
CGJ_EXT OS_EVENT *uart0; // 串口互斥标志
CGJ_EXT OS_FLAG_GRP *task_status; // 建立事件标志组
// 外部函数声明区
void PowerTask(void *pdata);
void SpeedTask(void *pdata);
void ForceTask(void *pdata);
void DemaTask(void *pdata);
void RecieveCommandTask(void *pdata);
void WaitTask(void *pdata);
void RoadSimulTask(void *pdata);
void CountSpeed(void);
void CountForce(void);
void CountSpeedParameter(void);
void DemaPointBlockInit(void);
INT8U AdjustDemaPoint(void);
void SendProgramRunStatus(INT8U key);
INT8U CheckDemaPoint(void);
void InsertAdPoint(INT32U value);
INT32U GetAverAD(void);
INT32U GetForceAD(void);
char* cpystr(char *src, char *dest, int pose, int count);
FP32 PidCalc(FP32 RealValue, FP32 SetValue);
void PidValueReset(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -