⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cgj.h

📁 汽车测功机源肛码.单片机用的是LPC2104. 实现测速,对涡流机的控制,马达的控制.
💻 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 + -