第一次提交

This commit is contained in:
2025-08-26 10:53:01 +08:00
commit 7730610c15
59 changed files with 12914 additions and 0 deletions

921
interface.h Normal file
View File

@@ -0,0 +1,921 @@
#ifndef _INTERFACE_H_
#define _INTERFACE_H_
#include "stdint.h"
#include "app/app_config.h" // 假设包含基础配置和宏定义
#include "irq.h"
#include "interface_config.h"
#include <udelay/udelay.h>
#pragma pack(1)//数据结构一个字节对齐
#define REQUEST_READ_ID un_request_frame.bit_data.request_id//读取ID
#define REQUEST_HEADER_ID un_request_frame.bit_data.frame_header//帧头
#define FAULT 0
#define NORMAL 1
//-----CAN----------------------------------------------------------------
// 接收电机控制器输入
typedef struct _StrMotorInput
{
//-----接收数据0x10F90708----------------------------------------------
unsigned int control_data3 : 16; // 读取的控制数据
unsigned int torque : 16; // 当前扭矩
unsigned int phase_current : 16; // 当前相电流
unsigned int speed : 16; // 当前转速
unsigned int gear : 2; // 反馈档位
unsigned int speed_gear : 3; // 当前扭矩
unsigned int reserve1 : 1; // 保留
unsigned int reserve2 : 1; // 保留
unsigned int reserve3 : 1; // 保留
unsigned int reserve4 : 8; // 保留
unsigned int ready : 1; // Bit0: READY, 0-有告警不能行驶, 1-工作正常可行驶
unsigned int reserved1 : 1; // Bit1: ECO状态预留
unsigned int eabs : 1; // Bit2: EABS, 0-停止或驱动行驶, 1-能量回收状态
unsigned int boost : 1; // Bit3: BOOST状态, 0-正常驱动, 1-BOOST驱动
unsigned int reserved2 : 1; // Bit4: 预留
unsigned int rotation_dir : 1; // Bit5: 转动方向, 0-电机逆时针转, 1-电机顺时针转
unsigned int motor_dir : 1; // Bit6: 电机方向, 0-电机右置, 1-电机左置
unsigned int main_relay : 1; // Bit7: 主继电器, 0-断开, 1-闭合
unsigned int reserve5 : 16; // 保留
unsigned int reserve6 : 16; // 保留
unsigned int reserve7 : 16; // 保留
} StrMotorInput;
typedef union _UnMotorInput
{
StrMotorInput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrMotorInput)]; // 通过结构体类型确定大小
} UnMotorInput;
// 接收BMS输入
typedef struct _StrBmsInput
{
//----接收0x100----------------------------------
// 多字节数据,高位在前,低位在后
unsigned int bus_voltage : 16; // 母线电压 单位为10mV
unsigned int bus_current : 16; // 母线电流 单位为10mA
unsigned int remainder_capacity : 16; // 剩余容量 单位为10mAh 充电为正,放电为负
unsigned int crc1 : 16; //crc
//----接收0x101----------------------------------
// 多字节数据,高位在前,低位在后
unsigned int full_capacity : 16; // 充满容量 单位为10mAh
unsigned int Discharge_times : 16; // 放电循环次数 单位为1次
unsigned int soc : 16; // soc 1%
unsigned int crc2 : 16; //crc
} StrBmsInput;
typedef union _UnBmsInput
{
StrBmsInput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrBmsInput)]; // 通过结构体类型确定大小
} UnBmsInput;
// 接收温度模块输入
typedef struct _StrTempModuleInput
{
//-----接收数据0x301302----------------------------------------------
// 多字节数据,高位在前,低位在后
unsigned int channel_1 : 16; // 通道1 温度传感器 系数为0.1 有符号 正数表示正温度,负数表示负温度
unsigned int channel_2 : 16; // 通道2
unsigned int channel_3 : 16; // 通道3
unsigned int channel_4 : 16; // 通道4
unsigned int channel_5 : 16; // 通道5
unsigned int channel_6 : 16; // 通道6
unsigned int channel_7 : 16; // 通道7
unsigned int channel_8 : 16; // 通道8
} StrTempModuleInput;
typedef union _UnTempModuleInput
{
StrTempModuleInput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrTempModuleInput)]; // 通过结构体类型确定大小
} UnTempModuleInput;
//-----以太网-------------------------------------------------------------
// 接收自主计算机自动输入
typedef struct _StrAutoComputerInput
{
// 多字节数据,高位在前,低位在后
unsigned int frame_header : 16; // 帧头 固定值0xFFCC
unsigned int frame_type : 16; // 帧类型 固定值0x0001
unsigned int frame_length : 8; // 帧长 固定值0x19
unsigned int heartbeat : 8; // 心跳 按帧累加
unsigned int set_speed : 16; // 设定速度 系数0.01,正为前进,负为后退 单位m/s
unsigned int set_curvature : 16; // 设定曲率 系数0.0001,正为左转,负为右转
unsigned int latitude : 32; // 纬度 系数10^-7431234567表示43.1234567度
unsigned int longitude : 32; // 经度 系数10^-7431234567表示43.1234567度
unsigned int altitude : 32; // 高度 单位mm
unsigned int heading : 16; // 航向 车辆航向35999表示359.99度
unsigned int crc : 8; // CRC 按字节累加之和溢出取低8位
} StrAutoComputerInput;
typedef union _UnAutoComputerInput
{
StrAutoComputerInput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrAutoComputerInput)]; // 通过结构体类型确定大小
} UnAutoComputerInput;
// 接收自主计算机手动输入
typedef struct _StrManualComputerInput
{
// 手动控制数据 高位在前,低位在后
unsigned int frame_header : 16; // 帧头 固定值0xFFBB
unsigned int frame_type : 16; // 帧类型 固定值0x0011
unsigned int frame_length : 8; // 帧长 固定值0x0B
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int set_speed : 16; // 期望速度 系数0.01,正为前进,负为后退 单位m/s
unsigned int set_curvature : 16; // 期望曲率 系数0.0001,正为左转,负为右转
unsigned int reserved : 8; // 保留 同时按下LB+Y时发0xFF松开发0同时按下LT+Y时发0x10松开发0
unsigned int crc : 8; // CRC 按字节累加之和溢出取低8位
} StrManualComputerInput;
typedef union _UnManualComputerInput
{
StrManualComputerInput bit_data; // 使用定义的结构体变量名
unsigned int arr[sizeof(StrManualComputerInput) / sizeof(unsigned int)]; // 通过结构体类型确定大小
} UnManualComputerInput;
// 接收请求帧
typedef struct _StrRequestFrame
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头 固定值0x0080
unsigned int frame_type : 16; // 帧类型 固定值0x0029
unsigned int frame_length : 16; // 帧长 固定值10
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int request_id : 16; // 请求帧ID 请求ID 0-FFFFFFFF表示全部帧
unsigned int crc : 8; // CRC 按字节累加之和 取低8位
} StrRequestFrame;
typedef union _UnRequestFrame
{
StrRequestFrame bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrRequestFrame)]; // 通过结构体类型确定大小
} UnRequestFrame;
// 接收遥控器输入
typedef struct _StrRemoteControlInput
{
//-----接收数据0x12000013----------------------------------------------
unsigned int speed : 16; // 速度
unsigned int curvature : 16; // 曲率
unsigned int reserve1 : 16; // 遥控轴
unsigned int switch_a : 1; // SwA
unsigned int switch_b : 2; // SwB 急停开关 1释放 0/2是急停
unsigned int switch_c : 2; // SwC 模式开关 1自动 0/2是手动
unsigned int switch_d : 1; // SwD 上电开关 先短按再长按
unsigned int reserve2 : 1; // 保留
unsigned int reserve3 : 1; // 保留
unsigned int enable : 8; // 使能
} StrRemoteControlInput;
typedef union _UnRemoteControlInput
{
StrRemoteControlInput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrRemoteControlInput)]; // 通过结构体类型确定大小
} UnRemoteControlInput;
//-----IO口---------------------------------------------------------------
// 从IO口输入
typedef struct _StrSwSample
{
unsigned int emergency_stop_switch : 1; // 通道1急停开关
unsigned int High_voltage_switch : 1; // 通道2高压开关
unsigned int Left_switch : 1; // 通道3 左限位开关
unsigned int right_switch : 1; // 通道4 右限位开关
unsigned int CH05 : 1; // 通道5
unsigned int CH06 : 1; // 通道6
unsigned int CH07 : 1; // 通道7
unsigned int CH08 : 1; // 通道8
unsigned int CH09 : 1; // 通道9
unsigned int CH10 : 1; // 通道10
unsigned int CH11 : 1; // 通道11
unsigned int CH12 : 1; // 通道12
unsigned int CH13 : 1; // 通道13
unsigned int CH14 : 1; // 通道14
unsigned int CH15 : 1; // 通道15
unsigned int CH16 : 1; // 通道16
unsigned int CH17 : 1; // 通道17
unsigned int CH18 : 1; // 通道18
unsigned int CH19 : 1; // 通道19
unsigned int CH20 : 1; // 通道20
unsigned int CH21 : 1; // 通道21
unsigned int CH22 : 1; // 通道22
unsigned int CH23 : 1; // 通道23
unsigned int CH24 : 1; // 通道24
unsigned int CH25 : 1; // 通道25
unsigned int CH26 : 1; // 通道26
unsigned int CH27 : 1; // 通道27
unsigned int CH28 : 1; // 通道28
unsigned int CH29 : 1; // 通道29
unsigned int CH30 : 1; // 通道30
unsigned int CH31 : 1; // 通道31
unsigned int CH32 : 1; // 通道32
unsigned int CH33 : 1; // 通道33
unsigned int CH34 : 1; // 通道34
unsigned int CH35 : 1; // 通道35
unsigned int CH36 : 1; // 通道36
unsigned int CH37 : 1; // 通道37
unsigned int CH38 : 1; // 通道38
unsigned int CH39 : 1; // 通道39
unsigned int CH40 : 1; // 通道40
unsigned int CH41 : 1; // 通道41
unsigned int CH42 : 1; // 通道42
unsigned int CH43 : 1; // 通道43
unsigned int CH44 : 1; // 通道44
unsigned int reserve : 4;
} StrSwSample;
typedef union _UnSwSample
{
StrSwSample bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrSwSample)]; // 通过结构体类型确定大小
} UnSwSample;
//-----输出数据结构---------------------------------------------------------------
//-----CAN----------------------------------------------------------------
// 输出到电机控制器
//typedef struct _StrMotorOutput
//{
////-----发送数据0x201或者0x202----------------------------------------------
// unsigned int mode : 8; // 模式 0x1恒速模式0x2恒扭模式其他无效
// unsigned int gear : 8; // 档位 0x0空挡模式0x1前进挡0x2倒退档其他无效
// unsigned int set_torque : 16; // 给定扭矩 系数 0.01 偏移量 -300 实际物理量=数据×系数+偏移量
// unsigned int set_rotation_speed : 16; // 给定转速 偏移量 -30000
// unsigned int fault_code : 8; // 故障码
// unsigned int heartbeat : 8; // 心跳
////-----发送数据0x401或者0x402----------------------------------------------
// unsigned int feed_power : 16; // 馈电功率 单位为 W 最大为10KW
// unsigned int discharge_power : 16; // 放电功率 单位为 W 最大为15kW
// unsigned int reserve1 : 16; // 保留
// unsigned int reserve2 : 16; // 保留
//} StrMotorOutput;
//
//typedef union _UnMotorOutput
//{
// StrMotorOutput bit_data; // 使用定义的结构体变量名
// uint8_t arr[sizeof(StrMotorOutput)]; // 通过结构体类型确定大小
//} UnMotorOutput;
// canoe协议输出
typedef struct _StrSdoOutput
{
//-----发送数据0x601----------------------------------------------
uint16_t index; //索引,类似寄存器地址
uint16_t object_index; // 从索引 为0x0000
uint32_t data; // 数据
} StrSdoOutput;
typedef union _UnSdoOutput
{
StrSdoOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrSdoOutput)]; // 通过结构体类型确定大小
} UnSdoOutput;
// 输出到采集模块
typedef struct _StrGatherOutput
{
//----- Send Data 0x15000002 ----------------------------------------------
unsigned int sleep_duration : 16; // 休眠时间
unsigned int wakeup_interval : 16; // 唤醒时间
unsigned int vehicle_mode : 8; // 整车模式
unsigned int reserved1 : 8; // 保留1
unsigned int reserved2 : 8; // 保留2
unsigned int reserved3 : 8; // 保留3
} StrGatherOutput;
typedef union _UnGatherOutput
{
StrGatherOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrGatherOutput)]; // 通过结构体类型确定大小
} UnGatherOutput;
typedef struct _StrMotorOutput
{
//-----发送数据0x10F80807----------------------------------------------
unsigned int gear : 2; // 0 表示空挡1 表示前进2 表示后退
unsigned int can_gear : 1; // 0-无效 1-有效。无效时 BIT10 的挡位无效,以线路控制挡位为准
unsigned int can_break : 1; // 0:不刹车1-刹车(刹车时才能启动电子刹车)
unsigned int reserve1 : 1; // 0-只有高速档 1-可以通过接线切换 123 档。
unsigned int reserve2 : 1; // 0-无效 1-有效:线控防盗使能
unsigned int reserve3 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve4 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int reserve5 : 1; // 0-无效 1-有效:线控边撑使能
unsigned int reserve6 : 1; // 0-无效 1-有效:线控防盗使能
unsigned int reserve7 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve8 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int reserve9 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve10 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int reserve11 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve12 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int reserve13 : 1; // 0-无效 1-有效:线控边撑使能
unsigned int reserve14 : 1; // 0-无效 1-有效:线控防盗使能
unsigned int reserve15 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve16 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int reserve17 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve18 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int motor_direction : 1; // 0 和 1 (静止空闲状态设置有效,在油门、 转矩、转速模式下允许设置,否则使用控制器 内部保存的参数控制电机方向)
unsigned int Contactor : 1; // 0-断开 1-闭合,(部分控制器支持)
unsigned int reserve19 : 1; // 0-无效 1-有效:线控边撑使能
unsigned int reserve20 : 1; // 0-无效 1-有效:线控防盗使能
unsigned int reserve21 : 1; // 0-无效 1-有效:线控巡航使能
unsigned int reserve22 : 1; // 0-无效 1-有效:线控座桶使能
unsigned int mode : 4; //0x0:转把控制0x5:油门模式0xA:转矩模式, 0xC:转速模式,其它无效停机。在这三种模式下,电机方向设置有效。只允许在停机状态下设置控制模式。
unsigned int control_data1 : 16; // 油门-256~+256(0~+256 表示最大油门,-256 表 示最大电子刹车力度。转矩 -256~10000正数 驱 动 扭 矩 0~1000.0Nm,负数表示刹车,-256 表示最大电子刹车力度)转速-256~12000,(正数表示转速 0~12000rpm 负数表示刹车,-256 最大刹车力度)
unsigned int control_data2 : 16; // 控制数据和上一个一样
} StrMotorOutput;
typedef union _UnMotorOutput
{
StrMotorOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrMotorOutput)]; // 通过结构体类型确定大小
} UnMotorOutput;
//电机控制器风扇左
//kgf1
//电机控制器风扇右
//kgf3
//预充
//kgf4
//高压压继电器
//kgf78
//低压继电器
//kgf11-12
//左前红灯
//kgf6
//左前黄灯
//kgf9
//左风扇
//kgf14
//右风扇
//kgf19
//电脑
//kgf 17-18
//交换机
//kgf 21-22
//右前红灯
//kgf24
//右前黄灯
//kgf25
//左后红灯
//kgf26
//左后黄灯
//kgf27
//右后红灯
//kgf29
//右后黄灯
//kgf30
// 输出到开关阀模块
typedef struct _StrInfCanKGFOutput
{
//----------主机发送命令字0x11000002 --------------------------------------------
unsigned int KGF01 : 1; // 通道1
unsigned int KGF02 : 1; // 通道2
unsigned int KGF03 : 1; // 通道3
unsigned int KGF04 : 1; // 通道4
unsigned int KGF05 : 1; // 通道5
unsigned int KGF06 : 1; // 通道6
unsigned int KGF07 : 1; // 通道7
unsigned int KGF08 : 1; // 通道8
unsigned int KGF09 : 1; // 通道9
unsigned int KGF10 : 1; // 通道10
unsigned int KGF11 : 1; // 通道11
unsigned int KGF12 : 1; // 通道12
unsigned int KGF13 : 1; // 通道13
unsigned int KGF14 : 1; // 通道14
unsigned int KGF15 : 1; // 通道15
unsigned int KGF16 : 1; // 通道16
unsigned int can_rx2 : 8; // 保留
unsigned int can_rx3 : 8; // 保留
unsigned int can_rx4 : 8; // 保留
unsigned int can_rx5 : 8; // 保留
unsigned int can_period_h : 8; // 发送周期高位
unsigned int can_period_l : 8; // 发送周期低位
//----------发送0x11000003 ---------------------------------------------------
unsigned int pwm_01 : 4; // PWM通道1
unsigned int pwm_02 : 4; // PWM通道2
unsigned int pwm_03 : 4; // PWM通道3
unsigned int pwm_04 : 4; // PWM通道4
unsigned int pwm_05 : 4; // PWM通道5
unsigned int pwm_06 : 4; // PWM通道6
unsigned int pwm_07 : 4; // PWM通道7
unsigned int pwm_08 : 4; // PWM通道8
unsigned int pwm_09 : 4; // PWM通道9
unsigned int pwm_10 : 4; // PWM通道10
unsigned int pwm_11 : 4; // PWM通道11
unsigned int pwm_12 : 4; // PWM通道12
unsigned int pwm_13 : 4; // PWM通道13
unsigned int pwm_14 : 4; // PWM通道14
unsigned int pwm_15 : 4; // PWM通道15
unsigned int pwm_16 : 4; // PWM通道16
} StrInfCanKGFOutput;
typedef union _UnInfCanKGFOutput
{
StrInfCanKGFOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrInfCanKGFOutput)]; // 通过结构体类型确定大小
} UnInfCanKGFOutput;
// 输出到H桥模块
typedef struct _StrHBridgeOutput
{
//----------主机发送命令字0x7F2 --------------------------------------------
unsigned int channel_01 : 1; // 通道1
unsigned int channel_02 : 1; // 通道2
unsigned int channel_03 : 1; // 通道3
unsigned int channel_04 : 1; // 通道4
unsigned int channel_05 : 1; // 通道5
unsigned int channel_06 : 1; // 通道6
unsigned int channel_07 : 1; // 通道7
unsigned int channel_08 : 1; // 通道8
unsigned int sleep_01 : 1; // 休眠1
unsigned int sleep_02 : 1; // 休眠2
unsigned int sleep_03 : 1; // 休眠3
unsigned int sleep_04 : 1; // 休眠4
unsigned int reserve_01 : 1; // 保留1
unsigned int reserve_02 : 1; // 保留2
unsigned int reserve_03 : 1; // 保留3
unsigned int reserve_04 : 1; // 保留4
unsigned int reserve_05 : 8; // 保留5
unsigned int reserve_06 : 8; // 保留6
unsigned int reserve_07 : 8; // 保留7
unsigned int reserve_08 : 8; // 保留8
unsigned int can_period_h : 8; // 发送周期高位
unsigned int can_period_l : 8; // 发送周期低位
//----------发送0x7F3 ---------------------------------------------------
unsigned int pwm_channel_01 : 4; // PWM通道1
unsigned int pwm_channel_02 : 4; // PWM通道2
unsigned int pwm_channel_03 : 4; // PWM通道3
unsigned int pwm_channel_04 : 4; // PWM通道4
unsigned int pwm_channel_05 : 4; // PWM通道5
unsigned int pwm_channel_06 : 4; // PWM通道6
unsigned int pwm_channel_07 : 4; // PWM通道7
unsigned int pwm_channel_08 : 4; // PWM通道8
unsigned int pwm_reserve_01 : 4; // 保留pwm1
unsigned int pwm_reserve_02 : 4; // 保留pwm2
unsigned int pwm_reserve_03 : 4; // 保留pwm3
unsigned int pwm_reserve_04 : 4; // 保留pwm4
unsigned int pwm_reserve_05 : 4; // 保留pwm5
unsigned int pwm_reserve_06 : 4; // 保留pwm6
unsigned int pwm_reserve_07 : 4; // 保留pwm7
unsigned int pwm_reserve_08 : 4; // 保留pwm8
} StrHBridgeOutput;
typedef union _UnHBridgeOutput
{
StrHBridgeOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrHBridgeOutput)]; // 通过结构体类型确定大小
} UnHBridgeOutput;
// 输出给导航仪
typedef struct _StrWheelSpeedOutput
{
//-----发送数据0x98----------------------------------------------
unsigned int left_front : 16; // 左前轮速
unsigned int right_front : 16; // 右前轮速
unsigned int left_rear : 16; // 左后轮速
unsigned int right_rear : 16; // 右后轮速
} StrWheelSpeedOutput;
typedef union _UnWheelSpeedOutput
{
StrWheelSpeedOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrWheelSpeedOutput)]; // 通过结构体类型确定大小
} UnWheelSpeedOutput;
// 输出给基站升降杆
typedef struct _StrLifterOutput
{
//-----发送数据0x6F2----------------------------------------------
unsigned int cmd : 8 ; // 上升命令
unsigned int reserve1 : 8 ; // 保留
unsigned int reserve2 : 16; // 保留
unsigned int reserve3 : 16; // 保留
unsigned int reserve4 : 16; // 保留
} StrLifterOutput;
typedef union _UnrLifterOutput
{
StrLifterOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrLifterOutput)]; // 通过结构体类型确定大小
} UnLifterOutput;
//-----以太网-------------------------------------------------------------
// 输出给自主计算机
typedef struct _StrComputerOutput
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头 0xFFCC
unsigned int frame_type : 16; // 帧类型 0x0011
unsigned int frame_length : 8; // 帧长 0x000b11
unsigned int accumulated : 8; // 累加值
unsigned int speed : 16; // 左侧轮速
unsigned int curvature : 16; // 右侧轮速
unsigned int crc : 8; // CRC
} StrComputerOutput;
typedef union _UnComputerOutput
{
StrComputerOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrComputerOutput)]; // 通过结构体类型确定大小
} UnComputerOutput;
// 车辆信息,输出给上位机
typedef struct _StrVehicleInfoOutput
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头
unsigned int frame_type : 16; // 帧类型
unsigned int frame_length : 16; // 帧长
unsigned int accumulated : 8; // 累加值
unsigned int desired_speed : 16; // 期望速度
unsigned int desired_curvature : 16; // 期望曲率
unsigned int set_left_speed : 16; // 设定左转速度
unsigned int set_right_speed : 16; // 设定右转速度
unsigned int longitude : 32; // 经度
unsigned int latitude : 32; // 纬度
unsigned int altitude : 32; // 高度
unsigned int heading_angle : 16; // 航向角
unsigned int speed : 16; // 当前车速
unsigned int curvature : 16; // 当前曲率
unsigned int battery_voltage : 16; // 电池电压
unsigned int battery_soc : 16; // 电池SOC
unsigned int battery_current : 16; // 电池电流
unsigned int vehicle_fault_state : 8; // 整车故障状态
unsigned int crc : 8; // CRC
} StrVehicleInfoOutput;
typedef union _UnVehicleInfoOutput
{
StrVehicleInfoOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrVehicleInfoOutput)]; // 通过结构体类型确定大小
} UnVehicleInfoOutput;
// 电机状态信息,输出给上位机
typedef struct _StrMotorStatusOutput
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头 固定值0xAACC
unsigned int frame_type : 16; // 帧类型 固定值0x0021
unsigned int frame_length : 16; // 帧长 固定值30
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int left_wheel_speed : 16; // 当前左侧轮速 系数 1 偏移量 -30000 单位rad/min
unsigned int right_wheel_speed : 16; // 当前右侧轮速 系数 1 偏移量 -30000 单位rad/min
unsigned int left_torque : 16; // 左侧电机扭矩 系数 0.01 偏移量 -300 单位N/s
unsigned int right_torque : 16; // 右侧电机扭矩 系数 0.01 偏移量 -300 单位N/s
unsigned int left_fault_code : 8; // 左侧电机故障码
unsigned int right_fault_code : 8; // 右侧电机故障码
unsigned int left_torque_limit : 16; // 左侧电机扭矩限制
unsigned int right_torque_limit : 16; // 右侧电机扭矩限制
unsigned int left_power_in : 16; // 左侧电机馈电功率
unsigned int right_power_in : 16; // 右侧电机馈电功率
unsigned int left_power_out : 16; // 左侧电机放电功率
unsigned int right_power_out : 16; // 右侧电机放电功率
unsigned int left_voltage : 16; // 左侧电机电压
unsigned int right_voltage : 16; // 右侧电机电压
unsigned int checksum : 8; // 校验和 按字节累加之和 取低8位
} StrMotorStatusOutput;
typedef union _UnMotorStatusOutput
{
StrMotorStatusOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrMotorStatusOutput)]; // 通过结构体类型确定大小
} UnMotorStatusOutput;
// PID参数输出输出给上位机
typedef struct _StrPIDOutput
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头
unsigned int frame_type : 16; // 帧类型
unsigned int frame_length : 16; // 帧长
unsigned int accumulated : 8; // 累加值
unsigned int rc_straight_p : 32; // 遥控直行P参数
unsigned int rc_straight_i : 32; // 遥控直行I参数
unsigned int rc_straight_d : 32; // 遥控直行D参数
unsigned int auto_straight_p : 32; // 自主直行P参数
unsigned int auto_straight_i : 32; // 自主直行I参数
unsigned int auto_straight_d : 32; // 自主直行D参数
unsigned int rc_turn_p : 32; // 遥控转弯P参数
unsigned int rc_turn_i : 32; // 遥控转弯I参数
unsigned int rc_turn_d : 32; // 遥控转弯D参数
unsigned int auto_turn_p : 32; // 自主转弯P参数
unsigned int auto_turn_i : 32; // 自主转弯I参数
unsigned int auto_turn_d : 32; // 自主转弯D参数
unsigned int checksum : 8; // 校验和
} StrPIDOutput;
typedef union _UnPIDOutput
{
StrPIDOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrPIDOutput)]; // 通过结构体类型确定大小
} UnPIDOutput;
// 模拟信号输出,输出给上位机
typedef struct _StrAnalogSignalOutput
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头 固定值0xAACC
unsigned int frame_type : 16; // 帧类型 固定值0x0023
unsigned int frame_length : 16; // 帧长 固定值24
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int channel_1 : 16; // 通道1 温度传感器 系数为0.1 有符号 正数表示正温度,负数标表示负温度
unsigned int channel_2 : 16; // 通道2
unsigned int channel_3 : 16; // 通道3
unsigned int channel_4 : 16; // 通道4
unsigned int channel_5 : 16; // 通道5 温度传感器 系数为0.1 有符号 正数表示正温度,负数标表示负温度
unsigned int channel_6 : 16; // 通道6
unsigned int channel_7 : 16; // 通道7
unsigned int channel_8 : 16; // 通道8
unsigned int crc : 8 ; // 校验和 按字节累加之和 取低8位
} StrAnalogSignalOutput;
typedef union _UnAnalogSignalOutput
{
StrAnalogSignalOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrAnalogSignalOutput)]; // 通过结构体类型确定大小
} UnAnalogSignalOutput;
// 遥控器数据输出,给上位机
typedef struct _StrRemoteControlOutput
{
//--------------------------------------------------
unsigned int frame_header : 16; // 帧头 固定值0xAACC
unsigned int frame_type : 16; // 帧类型 固定值0x0024
unsigned int frame_length : 16; // 帧长 固定值20
unsigned int accumulated : 8; // 累加值 按帧累加
// RC6GS遥控原始数据
unsigned int speed : 16; // 速度 系数0.01,正为前进,负为后退 单位m/s
unsigned int curvature : 16; // 曲率 系数0.0001,正为左转,负为右转
unsigned int reserve_1 : 16; // 备用1
unsigned int switch_a : 1; // SwA
unsigned int switch_b : 2; // SwB 0和2刹车状态 1正常状态
unsigned int switch_c : 2; // SwC 0和2自主状态 1手动状态
unsigned int switch_d : 1; // SwD
unsigned int hv_relay_state : 1; // 高压继电机状态 0 断开, 1开启
unsigned int reserve_2 : 1; // 备用
unsigned int enable : 8; // 使能 1遥控数据有效0无效
unsigned int accumulated_value : 16; // 接收累加值
unsigned int crc : 8; // 校验和 按字节累加之和 取低8位
} StrRemoteControlOutput;
typedef union _UnRemoteControlOutput
{
StrRemoteControlOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrRemoteControlOutput)]; // 通过结构体类型确定大小
} UnRemoteControlOutput;
// 手动控制数据,返回给请求者
typedef struct _StrManualControlOutput
{
//--------------------------------------------------
// 手动控制数据 高位在前,低位在后
unsigned int frame_header : 16; // 帧头 固定值0xFFBB
unsigned int frame_type : 16; // 帧类型 固定值0x0025
unsigned int frame_length : 8; // 帧长 固定值0x0C
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int set_speed : 16; // 设定速度 系数0.01,正为前进,负为后退 单位m/s
unsigned int set_curvature : 16; // 设定曲率 系数0.0001,正为左转,负为右转
unsigned int reserved : 8; // 保留
unsigned int crc_1 : 8 ; // CRC 按字节累加之和溢出取低8位
unsigned int accumulated_value : 16; // 接收累加值
unsigned int crc_2 : 8 ; // CRC 按字节累加之和溢出取低8位
} StrManualControlOutput;
typedef union _UnManualControlOutput
{
StrManualControlOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrManualControlOutput)]; // 通过结构体类型确定大小
} UnManualControlOutput;
// 自动控制数据输出,返回给请求者
typedef struct _StrAutoControlOutput
{
//--------------------------------------------------
// 自主计算机自动数据 高位在前,低位在后
unsigned int frame_header : 16; // 帧头 固定值0xFFCC
unsigned int frame_type : 16; // 帧类型 固定值0x0026
unsigned int frame_length : 8; // 帧长 固定值0x19
unsigned int accumulated : 8; // 累加值 按帧累加
unsigned int set_speed : 16; // 设定速度 系数0.01,正为前进,负为后退 单位m/s
unsigned int set_curvature : 16; // 设定曲率 系数0.0001,正为左转,负为右转
unsigned int latitude : 32; // 纬度 系数10^-7431234567表示43.1234567度
unsigned int longitude : 32; // 经度 系数10^-7431234567表示43.1234567度
unsigned int altitude : 32; // 高度 单位mm
unsigned int heading : 16; // 航向 车辆航向35999表示359.99度。
unsigned int accumulated_value : 16; // 累加值 按帧累加
unsigned int crc : 8 ; // CRC 总体累加CRC
} StrAutoControlOutput;
typedef union _UnAutoControlOutput
{
StrAutoControlOutput bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrAutoControlOutput)]; // 通过结构体类型确定大小
} UnAutoControlOutput;
//-----IO口---------------------------------------------------------------
// 电压信号输出,到遥控器
typedef struct _StrVoltageSignalOutput
{
unsigned int pwm_value : 16; // PWM值
} StrVoltageSignalOutput;
typedef union _UnVoltageSignalOutput
{
StrVoltageSignalOutput bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(StrVoltageSignalOutput)]; // 通过结构体类型确定大小
} UnVoltageSignalOutput;
//外部数据结构声明
extern UnMotorInput un_motor_input1 ;//电机控制器1 左侧
extern UnMotorInput un_motor_input2 ;//电机控制器2 右侧
extern UnMotorInput un_motor_input3 ;//电机控制器1 左后侧
extern UnMotorInput un_motor_input4 ;//电机控制器2 右后侧
extern UnBmsInput un_bms_input ;//BMS接收数据
extern UnTempModuleInput un_temp_module_input;//温度采集模块
extern UnAutoComputerInput un_auto_computer_input;//自主计算机自动数据
extern UnManualComputerInput un_manual_computer_input;//自主计算机手动数据
extern UnGatherOutput un_gather_output ;//采集模块输出
extern UnMotorOutput un_motor_output1; //电机输出
extern UnMotorOutput un_motor_output2; //电机输出
extern UnMotorOutput un_motor_output3; //电机输出
extern UnMotorOutput un_motor_output4; //电机输出
extern UnInfCanKGFOutput un_inf_can_kgf_output1;
extern UnInfCanKGFOutput un_inf_can_kgf_output2;
extern UnHBridgeOutput un_h_bridge_output;
extern UnHBridgeOutput un_h_bridge_output1;
extern UnHBridgeOutput un_h_bridge_output2;
extern UnWheelSpeedOutput un_wheel_wpeed_output;
extern UnLifterOutput un_lifter_output;//基站升降杆输出
extern UnSdoOutput un_sdo_output1 ;//设定左转向电机位置
extern UnSdoOutput un_sdo_output2 ;//设定左转向电机速度
extern UnSdoOutput un_sdo_output3 ;//使能左电机
extern UnSdoOutput un_sdo_output4 ;//设定左电机模式
extern UnSdoOutput un_sdo_output5 ;//设定右转向电机位置
extern UnSdoOutput un_sdo_output6 ;//设定右转向电机速度
extern UnSdoOutput un_sdo_output7 ;//使能右电机
extern UnSdoOutput un_sdo_output8 ;//设定右电机模式
//串口
extern UnRemoteControlInput un_remote_control_input; //遥控器输入
extern UnRemoteControlInput un_remote_control_input1;//遥控器输入
//IO口
extern UnSwSample un_sw_sample;
//以太网
extern UnRequestFrame un_request_frame; //请求帧
extern UnComputerOutput un_computer_output; //输出给自主计算机
//输出给上位机
extern UnVehicleInfoOutput un_vehicle_Info_output; // 车辆信息,输出给上位机
extern UnMotorStatusOutput un_motor_status_output; // 电机状态信息,输出给上位机
extern UnPIDOutput un_pid_output; // PID参数输出输出给上位机
extern UnAnalogSignalOutput un_analog_signal_output; // 模拟信号输出,输出给上位机
extern UnRemoteControlOutput un_remote_control_output;// 遥控器数据输出,给上位机
extern UnManualControlOutput un_manual_control_output;// 手动控制数据,返回给请求者
extern UnAutoControlOutput un_auto_control_output; // 自动控制数据输出,返回给请求者
extern UnSdoOutput un_sdo_output ;//转向电机输出
//变量
extern uint8_t test_app[26];
//函数
void canSendAll(void *signal_id);
void ethernetSendAll(void *signal_id);
#pragma pack()
#endif /* _INTERFACE_H_ */