#ifndef __CAN_H #define __CAN_H #include "stm32f10x.h" #include "ProtocolGenfo.h" #include "Common_Type.h" #include "main.h" //#include "App_Curr.h" //#include "App_Driver.h" //#include "App_MotorGiven.h" ////////////////////////////////////////////////////////////////////////////////// #define IAP_ADDR 0x08000000 //IAP首地址 0K-19K #define APP_ADDR 0x08005000 //APP首地址 20K-119K #define UPGRADE_FLAG_ADDR 0x08039000 //烧写标志操作页 228K //#define BIN_ADDR 0x08020000 //BIN首地址 129K-228K //#define BOOT_VERSION_ADDR 0x0801D800 //boot版本号存储地址 第119K -120K //#define NEW_BIN_SIZE_ADDR 0x0801E000 //新固件长度标志,通过长度后的JF,长度,校验确认是否可以升级 第121K -122K #define FactoryID 0x04 #define HWVersion 0x0101 // #define SWVersion 10022 //软件版本号 主版本号(1-5).次版本号(0-99).修正号(0-99): 50101表示5.01.01 extern word_def CANStateAdr; extern uint8_t sn_code[36]; #define UpgradeRequest CANStateAdr.bit.b0 extern unsigned short CRC16_XMODEM(unsigned char *data, unsigned int datalen); typedef void (*iapfun)(void); //extern u16 CycleTime_22NID[12]; extern u16 CycleTime_22NID[26]; //qiuadd #define MAX_TICK_VALUE 0xfeff #define FOREMOST_TIME 0xff00 #define LATTERMOST_TIME 0xff01 #define MIN_INTERVAL 0 #define MAX_INTERVAL MAX_TICK_VALUE #define MAX_SHAKE_CNT 11 typedef struct { uint16_t Tick2Ms_Cnt; uint16_t latest_change_time[MAX_SHAKE_CNT]; uint8_t latest_change_index; uint16_t clear_time; uint8_t Shake_Error_Flag; } HandRail_Shake_t; extern HandRail_Shake_t HandRail_Shake; uint16_t Get2MsTickInterval(uint16_t LastTickVal); //CAN1接收RX0中断使能 #define CAN1_RX0_INT_ENABLE 1 //0,不使能;1,使能. void MC_Broadcast_Update(void); #endif /* 接收信号结构体 */ // 读写数据 typedef struct { INT8U MC_WorkMode : 8; union { INT8U MC_PowerMode_Byte; struct { INT8U PowerEnable : 4; //bit3-bit0 是否输出动力 INT8U PowerMode : 4; //bit3-bit0 动力模式 } MC_PowerMode_Bit; } MC_PowerMode_State; INT8U SOC_CurLimit : 8; union { INT8U MC_SupplySet_Byte; struct { INT8U LoadSensorSupply : 2; //bit1-bit0 载重供电 INT8U TailLightSupply : 2; //bit3-bit2 动力模式 INT8U Reserved : 4; //预留 } MC_SupplySet_Bit; } MC_SupplySet_State; union { INT8U Current_slope_Byte; struct { INT8U Slope_gradient : 6; //坡度 0-63° INT8U Uphill_or_downhill : 1; //0下坡 1上坡 INT8U EffectiveValueFlag : 1; //0无效 1有效 } MC_PowerMode_Bit; } Current_slope_State; union { INT8U VehicleDipAngle_Byte; struct { INT8U DipAngle : 6; //倾斜角度 INT8U Left_or_Right : 1; //左或右 INT8U EffectDipValueFlag : 1; //0无效 1有效 } VehicleDipAngle_Bit; } VehicleDipAngle_State; INT8U SOC_BackCurLimit : 8; //SOC回馈限流值 } tCAN202RxSignalTyp; typedef struct { INT8U ThrottleVol : 8; INT8U LeftBrakeVol : 8; INT8U RightBrakeVol : 8; union { INT8U PeripheralError_Byte; struct { INT8U DateUpdateFlag : 1; //数据新鲜标记 INT8U RightBrakeError : 1; //右刹车故障 INT8U LeftBrakeError : 1; //右刹车故障 INT8U ThrottleError : 1; //转把故障 INT8U ThrottleSlopeError : 1; //转把斜率故障 INT8U ThrottleUnstableError : 1; //转把电压不稳定 INT8U ThrottleSupplyError : 1; //转刹把电源故障 INT8U Reserved : 1; //预留 } PeripheralError_Bit; } PeripheralError_State; INT8U ThrottleSupplyVol : 8; //转把供电电压 INT8U BrakeSupplyVol : 8; //刹把供电电压 } tCAN20CRxSignalTyp; typedef struct { INT16U SpeedValue :16; INT16U LowVolValue :16; INT16U CurLimiteValue :16; INT8U FrontLight_Fre :8; INT8U FrontLightDriving_Fre :8; INT8U TailLight_Fre :8; INT8U BrakeLight_Fre :8; INT8U ThrottleLight_Fre :8; INT8U OverWeightValue :8; INT8U SeatPressureMode :8; INT8U NoLoadFlyBikeMode :8; //空载防飞车 INT8U TCS_Mode :8; INT8U ClimbPowerInc :8; INT8U BrakeOnHandProtect :8; INT8U ZeroStartValue :8; INT16U RechargeCur :16; //回馈电流值 union { INT8U TripInfoClear_Byte; struct { INT8U Reserved : 2; //预留 INT8U RightBreakVolClear : 1; //清除本次骑行右刹车最大电压 INT8U LeftBreakVolClear : 1; //清除本次骑行左刹车最大电压 INT8U RightBreakTimesClear : 1; //清除本次骑行右刹车次数 INT8U LeftBreakTimesClear : 1; //清除本次骑行左刹车次数 INT8U OdometerClearFlag : 1; //清除本次骑行里程 INT8U MaxSpeedClearFlag : 1; //清除本次骑行最高速度 } TripInfoClear_Bit; } TripInfoClear_State; INT8U FlyBikeProtectSwitch :8; INT8U HBarSlopeLimieValue :8; INT8U HBarStandardLimiteValue :8; INT8U HBarStandardTimeValue :8; INT8U BatteryLockSwitch :8; INT8U WheelPolePairs :8; INT8U WheelPerimeter :8; INT8U NoZeroStartSet :8; INT8U MotorParaCRC :8; INT16U BEMF_Vol :16; INT16U MotorResistance :16; INT16U Q_Axis_Inductance :16; INT16U D_Axis_Inductance :16; INT8U PedalStartSpeedValue :8; INT8U PedalStartPulseValue :8; union { INT8U PedalOverSpeed_Byte; struct { INT8U PedalMode : 2; //助力模式 0x0弱助力 0x1 正常助力 0x2 强助力 INT8U PedalKeep : 1; //超过限速后是否保持助力 INT8U Reserved : 5; //预留 } PedalOverSpeed_Bit; } PedalOverSpeed_State; INT8U PedalStartForce : 8; //起步助力强度系数 INT8U PedalAcleForce : 8; //加速阶段助?强度系数 INT8U PedalStopForce : 8; //衰减阶段保持助?时间 INT8U HDC_Flag : 8; //陡坡缓降标志位 INT8U LowSpeedPedalInc : 8; //低速助力增强 INT8U WeakSpeedInc : 8; //弱磁提速功能 INT8U JumpToBOOT_flg :8; INT8U CycleSendEnable_flg :8; INT8U CANMessageErrReport_flg :8; INT16U OverVolValue :16; //过压值 } tCanRxSignalTyp; typedef struct { INT8U ID00[8]; INT8U ID01[8]; INT8U ID02[8]; INT8U ID03[8]; INT8U ID04[8]; INT8U ID05[8]; INT8U ID06[8]; INT8U ID07[8]; INT8U ID08[8]; INT8U ID09[8]; INT8U ID10[8]; INT8U ID11[8]; INT8U ID12[8]; INT8U ID13[8]; INT8U ID14[8]; INT8U ID15[8]; INT8U ID16[8]; INT8U ID17[8]; INT8U ID18[8]; INT8U ID19[8]; INT8U ID20[8]; INT8U ID21[8]; INT8U ID22[8]; INT8U ID23[8]; INT8U ID24[8]; INT8U ID25[8]; } tCANTxBroadcast; typedef struct { INT8U ID01[28]; //28 INT8U ID02[76]; INT8U ID03[23]; INT8U ID04[23]; INT8U ID05[23]; INT8U ID06[23]; INT8U ID07[65]; INT8U ID08[16]; } tMULCANTxBroadcast; typedef struct { INT8U WorkMode_State; union { INT8U PowerModeState_Byte; struct { INT8U PowerOutputEnable : 4; //是否输出动力 INT8U PowerOutputMode : 4; //动力模式 }PowerModeState_Bit; }PowerMode_State; INT8U Speed_Float; union { INT8U MC_SupplyState_Byte; struct { INT8U LoadSensorSupplyState : 2; //bit1-bit0 载重供电 INT8U TailLightSupplyState : 2; //bit3-bit2 动力模式 INT8U Reserved : 4; //预留 }MC_SupplySetState_Bit; }MC_SupplySet_State; INT8U SpeedValue; //当前车速 KM/H INT8U Bike_Start_Status; //车辆启动状态 union { INT8U BatteryLockState_Byte; struct { INT8U BatteryLockHeadState1 : 1; //电池锁锁舌状态 INT8U BatteryLockMotorstate : 2; //马达运行状态 INT8U BatteryLockHeadState2 : 2; //电池锁锁舌状态 INT8U Reserved : 3; //电池锁锁舌状态 }BatteryLockState_Bit; }BatteryLock_State; //电池锁状态 INT8U PedalStartMode_State; //助力启动模式反馈 INT16U Bus_Vol; //供电电压,单位0.1V //ID:221 INT16S Bus_Cur; //母线电流 单位0.1A INT8U Throttlt_Vol; //转把电压 单位0.1V INT8U LeftBrake_Vol; //左刹车电压 单位0.1V INT8U RightBrake_Vol; //右刹车电压 单位0.1V union { INT8U TCSandBrakeState_Byte; struct { INT8U TCS_Switch_State : 1; //TCS功能 1启动 0禁用 INT8U FlyBikeProtect_State : 1; //bit3-bit2 动力模式 INT8U BrakeType : 1; //刹把类型 INT8U HandUnreleasedProtcct_State : 1; //刹车转把未释放 INT8U RearArmrestSwitch_State : 1; //后扶手开关状态 INT8U RBrake_Loose_State : 1; //右刹车闸线松动状态 INT8U LBrake_Loose_State : 1; //左刹车闸线松动状态 INT8U ClimbHillPedalInc_State : 1; //爬坡助力增强 }TCSandBrakeState_Bit; }TCSandBrake_State; INT16S MotorSpeed; //电机转速 INT16U HallChange500ms; //500毫秒霍尔数 INT8U MC_Temp; //控制器温度 INT8U HallCurValue; //电机霍尔值 union { INT8U MC_Protect1State_Byte; struct { INT8U Motor_Blocked_Protect : 1; //堵转保护 INT8U NoLoadFlyBike_Protect : 1; //空载防飞车保护 INT8U HandGndBreak_Protect : 1; //转把掉地线 INT8U MultiUserRiding_Protect : 1; //多人骑行保护 INT8U OverCurrent_Protect : 1; //过流保护 INT8U OverVoltage_Protect : 1; //过压保护 INT8U UnderVoltage_Protect : 1; //欠压保护 INT8U PoweonFlyBike_Protect : 1; //上电防飞车保护 } MC_Protect1State_Bit; } MC_Protect1_State; union { INT8U MC_Protect2State_Byte; struct { INT8U Reserved : 3; //保留 INT8U SortOverCur_Protect : 1; //软件过流 INT8U HandNotRelease_Protect : 1; //静止后未释放手把 INT8U HandVolUnstable_Protect : 1; //转把电压不稳定 INT8U HandVolRise_Protect : 1; //转把电压上升过快 INT8U Tempture_Protect : 1; //温度保护 } MC_Protect2State_Bit; } MC_Protect2_State; INT16U UnderVoltageValue; INT16U BusCurLimitValue; INT16U SpeedLimitValue; INT8U OverLoadValue; INT8U MotorTemp; union { INT8U Perip1Error_Byte; struct { INT8U PressureSwitch_Error : 1; //坐垫压力开关故障 INT8U GNDshort5V_Error : 1; //5V和GND短路 INT8U HandBar_Error : 1; //转把掉地线 INT8U RightBrake_Error : 1; //右刹车错误 INT8U LeftBrake_Error : 1; //左刹车错误 INT8U LoadSensorSupply_Error : 1; //给载重等供电次回路故障 INT8U RearArmrestSwitch_Error : 1; //后扶手开关故障 INT8U MotorHall_Error : 1; //电机霍尔故障 } Perip1Error_Bit; } Perip1Error_State; union { INT8U Perip2Error_Byte; struct { INT8U HallC_Error : 1; //电机霍尔C错误 INT8U HallB_Error : 1; //电机霍尔B错误 INT8U HallA_Error : 1; //电机霍尔A错误 INT8U MotorPhaseLose_Error : 1; //电机缺相错误 INT8U BreakLight_Error : 1; //刹车灯错误 INT8U XCDLight_Error : 1; //行车灯错误 INT8U TailLight_Error : 1; //尾灯故障 INT8U MainLigh_Error : 1; //保留 } Perip2Error_Bit; } Perip2Error_State; union { INT8U MCError_Byte; struct { INT8U Reserved : 6; //电控自身故障 INT8U InsideVol_Error : 1; //尾灯故障 INT8U MOSDamage_Error : 1; //MOS管烧坏 } MCError_Bit; } MCError_State; union { INT8U IOT_MessageError_Byte; struct { INT8U Periodic_message_Error : 1; //周期报文故障 INT8U HandBrake_message_Error : 1; //转刹把报文故障 INT8U Reserved : 6; //主控报文故障 } IOT_MessageError_Bit; } IOT_MessageError_State; union { INT8U BMSError_Byte; struct { INT8U BMS_communication_Error : 1; //电池通信错误 INT8U BMS_Dataframetimeout_Error : 1; //电池数据帧超时 INT8U MosStateRead_Error : 1; //MOS状态读取错误 INT8U Reserved : 5; //预留 } BMSError_Bit; } BMSError_State; INT16U MaxSpeedValue :16 ; //本次骑行最高速度 INT16U OdometerValue :16 ; //本次骑行里程 INT8U LeftBrakeTimes :8; INT8U RightBrakeTimes :8; INT8U LeftBrakeValueMax :8; INT8U RightBrakeValueMax :8; INT8U BootVersion :8; INT8U Factory_ID :8; INT16U HardwareVersion :16; INT16U SoftwareVersion :16; INT16U CanProtocolVersion :16; INT8U MC_ID[16]; INT8U Second_Circuit_Vol:8; INT16U Feedback_CurLimit :16; INT32S Riding_mileage:32; INT8U MaxThrottleVol :8; INT8U EstimatedLoadValue :8; INT8U MotorPoles :8; INT8U WheelCircumference:8; INT16U MotorBackElecVol :16; INT16U MotorResistance :16; INT16U MotorQInductance :16; INT8U PedalPulseStartValue :8; INT8U PedalSpeedStartValue :8; INT8U Pedal_Frequency :8; INT8U PedalMode :8; INT8U PedalStartForce :8; INT8U PedalStartAccel :8; INT8U PedalStopKeepTime :8; INT8U PedalStopOverSpeed :8; union { INT8U MC_FunctionSwitch1_Byte; struct { INT8U Reserved :5; //保留 INT8U WeakSpeedIncBit :1; //弱磁提速功能 INT8U LowSpeedPedalIncBit :1; //低速助力增强 INT8U DownHillControlBit :1; //陡坡缓降 } MC_FunctionSwitch1_bit; } MC_FunctionSwitch1_Set; union { INT8U MC_FunctionSwitch2_Byte; struct { INT8U Reserved :7; //保留 INT8U NoZeroStartSetBit :1; //非0启动配置 } MC_FunctionSwitch2_bit; } MC_FunctionSwitch2_Set; INT16U D_Axis_InductanceSend :16; //D轴电感 INT16U OverVolValue :16; //过压值 } tCanTxSignalTyp; typedef struct { /**************控制器故障与状态信息 扩展帧 (ID=0x18FF0200)周期 20ms**************/ union { INT8U VehicleState_error0_Byte; struct { INT8U MCULowVol :1;//欠压故障 INT8U MCUOverCur :1;//过流故障 INT8U MCUOverVol :1;//过压故障 INT8U MCUHighTemp :1;//高温故障 INT8U motorOverSpeed :1;//电机超速故障 INT8U MCUDriveFault :1;//控制器驱动故障 INT8U MOSFault :1;//mos管故障 INT8U breakFault :1;//刹车故障 }VehicleState_error0_Bit; }VehicleState_error0; union { INT8U VehicleState_error1_Byte; struct { INT8U hbarFault :1;//转把故障 INT8U motorPhaseFault :1;//电机缺相故障 INT8U motorHallFault :1;//电机霍尔故障 INT8U motorHighTemp :1;//电机高温故障 INT8U motorLocked :1;//电机堵转故障 INT8U MCULowVolWarning :1;//控制器欠压“警告” INT8U motorZeroDrift :1;//电机零漂故障 INT8U MCU_TCSMode :1;//MCU-TCS模式: 0x0:强 0x1:弱 }VehicleState_error1_Bit; }VehicleState_error1; union { INT8U VehicleState_state2_Byte; struct { INT8U ReadyState :1;//Ready状态 INT8U P_gaerState :1;//P档状态 0x0:P档状态无效 0x1:P档状态有效 INT8U reverseState :1;//倒车激活状态 INT8U trolleyState :1;//推车激活状态 INT8U cruiseState :1;//巡航激活状态 INT8U breakButtonState :1;//刹车按键状态 INT8U lockMotorState :1;//锁电机状态 INT8U nitrogenBoostFunction :1;//氮气加速Boost功能:0x0:BOOST功能已关闭/氮气功能禁用 0X1:BOOST功能已开启/氮气功能开启 }VehicleState_state2_Bit; }VehicleState_state2; union { INT8U VehicleState_state3_Byte; struct { INT8U gearState :2;//挡位状态:x档=0x0:非玩家模式0x0:A助力 0x1:0x3:S运动x档=0x1:玩家模式0x0:X1档 0x1:X2档0x2:AI档0x3:预留 INT8U MCU_TCSFuction :1;//MCU-TCS功能: 0x0:关闭 0x1:开启 INT8U rampParkingFunction:1;//坡道驻车功能 0x0:坡道驻车功能已关闭 0x1:坡道驻车功能已开启 INT8U nitrogenBoostState :1;//"氮气加速Boost状态:0x0:未进入BOOST/氮气未激活0X1:进入BOOST/氮气激活中" INT8U singleThrottleMode :2;//单油门模式 00:控制器未进入单油门模式 01:控制器进入单油门模式1档 02:控制器进入单油门模式2档 03:控制器进入单油门模式3档 (类似汽车单踏板模式) INT8U XGear :1;//"x档(玩家模式)0x0:非玩家模式0x1:玩家模式" }VehicleState_state3_Bit; }VehicleState_state3; INT8U VehicleState_motorSpeedRpmHigh;//实时转速RPM高字节 INT8U VehicleState_motorSpeedRpmLow;//实时转速RPM低字节 增益:1RPM/bit偏移量:0指示范围:0~30000 INT8U VehicleState_MCUTemp;//控制器温度(无符号数)增益:1℃/bit偏移量:-40℃指示范围:-40~150 INT8U VehicleState_motorTemp;//电机温度(无符号数)增益:1℃/bit偏移量:-40℃指示范围:-40~150 /**************控制器信息 扩展帧 (ID=0x18FF0201)周期 20ms**************/ }tCanTxVehicleState; typedef struct { /**************控制器信息 扩展帧 (ID=0x18FF0201)周期 20ms**************/ INT8U MCUVolHigh; //控制器电压高字节 增益:0.1V/bit 偏移量:0V 指示范围:0~800V INT8U MCUVolLow; //控制器电压低字节 INT8U MCUCurHigh; //控制器实时电流高字节 增益:0.1A/bit 偏移量:-1000 指示范围:-100~1500A 负值表示放充电电流 INT8U MCUCurLow; //控制器实时电流低字节 INT8U nitrogenPercentage; //氮气百分比/氮气剩余时间 增益:1%/bit 偏移量:0 指示范围:0~100% INT8U hbarPercentage; //转把开度百分比 增益:1%/bit 偏移量:0 指示范围:0~100% INT8U hbarVolHigh; //转把信号电压高字节 增益:0.01V/bit 偏移量:0V 指示范围:0~5V INT8U hbarVolLow; //转把信号电压低字节 } tMCUInformation1; typedef struct { /**************控制器信息 扩展帧 (ID=0x18FF0202)周期 20ms**************/ INT8U motorTorquePercentage; //电机实时扭矩百分比 精度0.5 单位% 有效范围0x00~0xC8 无效值0xFF INT8U fanOutput; //风扇输出占空比 增益:1%/bit 偏移量:0 指示范围:0~100% union { INT8U vehicleFunction_Byte; struct { INT8U HTC_flag : 1;//陡坡缓降功能开关 0x0:关闭 0x1:开启 INT8U sideSupportInductionFunction: 1;//驻车感应功能开关(边撑断电功能)0x0:关闭 0x1:开启 INT8U lowVolSpeedLimitMode : 1;//低电量限速模式功能开关 0x0:关闭 0x1:开启 INT8U simpleDriveMode : 1;//简易骑行模式功能开关 0x0:关闭 0x1:开启 INT8U helpPromoteMode : 1;//助力推行模式功能开关 0x0:关闭 0x1:开启 INT8U reverseMode : 1;//倒车功能开关 0x0:关闭 0x1:开启 INT8U MCUEmergencyModeState : 1;//控制器应急模式激活状态 0x0:关闭 0x1:开启 INT8U MCUBreakFution : 1;//控制器刹车功能开关 0x0:关闭 0x1:开启 } vehicleFunction_Bit; } vehicleFunction; union { INT8U vehicleFunctionState_Byte; struct { INT8U HTCState : 1;//陡坡缓降状态 INT8U MCU_TCSFuctionState : 1;//TCS激活状态 INT8U rampParkingFunctionState : 1;//坡道驻车状态 INT8U MCUEABSState : 1;//E-ABS状态 INT8U selfBalancingFunction : 1;//自平衡功能开关 0x0:关闭 0x1:开启 INT8U reserved : 3;//预留 } vehicleFunctionState_Bit; } vehicleFunctionState; union { INT8U buttonState_Byte; struct { INT8U buttonMODEDown : 1;//MODE-按键 INT8U buttonMODEUp : 1;//MODE+按键 INT8U buttonPgear : 1;//P档按键 INT8U buttonCruise : 1;//巡航按键 INT8U breakPowerOffState : 1;//刹车断电激活状态 INT8U reserved : 3;//预留 } buttonState_Bit; } buttonState; union { INT8U vehicleReminder_Byte; struct { INT8U noDriverReminder : 1;//未检测到驾驶员提醒 0x0:检测到驾驶员 0x1:未检测到驾驶员 INT8U noReleasePgearReminder : 1;//未解除P档提醒 0x0:已解除P档 0x1:未解除P档 INT8U noReleaseSideSupportReminder: 1;//未解除边撑提醒 0x0:已解除边撑 0x1:未解除边撑 INT8U sideSupportInductionState : 1;//驻车感应状态 0:边撑放下 1:边撑收起 INT8U volResponse : 4;//电压等级反馈 0x0:无效 0x1:72V 0x2:60V 0x3:48V } vehicleReminder_Bit; } vehicleReminder; union { INT8U vehicleFunction2_Byte; struct { INT8U unlockSpeedLimit : 2;//控制器解除限速状态 0x0:默认 0x1:解除限速 0x2:回到限速 INT8U zeroForcePushFunction : 1;//零力推行功能 0x0:关闭 0x1:开启 INT8U zeroForcePushFunctionState : 1;//零力推行激活状态 0x0:无效 0x1:有效 INT8U reserved : 4;//预留 } vehicleFunction2_Bit; } vehicleFunction2; union { INT8U vehicleError_Byte; struct { INT8U MCUErrorLevel : 4;//控制器故障等级 0x0:无故障 0x1:1级 0x2:2级 0x3:3级 INT8U EABSPowerLevel : 2;//E-ABS能量回收等级 0x0:关闭 0x1:弱 0x2:中等 0x3:强 INT8U MCUOverTempAlarm : 1;//控制器过温告警 0:正常 1:告警报警E216 INT8U motorOverTempAlarm : 1;//电机过温告警 0:正常 1:告警报警E217 } vehicleError_Bit; } vehicleError; } tMCUInformation2; typedef struct { /**************控制器信息 扩展帧 (ID=0x18FF0203)周期 20ms**************/ INT8U vehicleSpeedHigh; //整车实际车速高字节 增益:0.1Km/h/bit 偏移量:0 指示范围:0~500Km/h INT8U vehicleSpeedLow; //整车实际车速低字节 INT8U cruiseSpeedTargetHigh; //定速巡航目标车速高字节 增益:0.1Km/h/bit 偏移量:0 指示范围:0~500Km/h INT8U cruiseSpeedTargetLow; //定速巡航目标车速低字节 INT8U MCURequestTorquePercentage;//控制器请求扭矩百分比 精度0.5 单位% 有效范围0x00~0xC8 无效值0xFF INT8U reserved; //预留 union { INT8U MCUCurrentMaxSpeedReaction_Byte; struct { INT8U MCUCurrentMaxSpeedReactionHigh : 7;//控制器当前模式下最高车速反馈高字节低7位 INT8U MCUCurrentMaxSpeedReactionState: 1;//控制器当前模式下最高车速反馈状态 0x0:关闭 0x1:开启 } MCUCurrentMaxSpeedReaction_Bit; } MCUCurrentMaxSpeedReaction; INT8U MCUCurrentMaxSpeedReactionLow; //控制器当前模式下最高车速反馈低字节 } tMCUInformation3; typedef struct { /**************控制器信息 扩展帧 (ID=0x18FF0204)周期 200ms**************/ INT8U MCUPhaseACurHigh; //控制器A相电流高字节 增益:0.1A/bit 偏移量:0 指示范围:0~2000A INT8U MCUPhaseACurLow; //控制器A相电流低字节 INT8U MCUPhaseBCurHigh; //控制器B相电流高字节 增益:0.1A/bit 偏移量:0 指示范围:0~2000A INT8U MCUPhaseBCurLow; //控制器B相电流低字节 INT8U MCUPhaseCCurHigh; //控制器C相电流高字节 增益:0.1A/bit 偏移量:0 指示范围:0~2000A INT8U MCUPhaseCCurLow; //控制器C相电流低字节 INT8U InstrumentSpeed; //仪表显示车速 增益:1Km/h/bit 偏移量:0 指示范围:0~500Km/h } tMCUInformation4; typedef struct { /**************控制器信息 扩展帧 (ID=0x18FF0205)周期 200ms**************/ union { INT8U vehicleGear_Byte; struct { INT8U EGearState : 1;//E经济挡位启用状态 0x0:禁用 0x1:启用 INT8U CGearState : 1;//C运动挡位启用状态 0x0:禁用 0x1:启用 INT8U SGearState : 1;//S激烈挡位启用状态 0x0:禁用 0x1:启用 INT8U X1GearState : 1;//X1档挡位启用状态 0x0:禁用 0x1:启用 INT8U X2GearState : 1;//X2档挡位启用状态 0x0:禁用 0x1:启用 INT8U AIGearState : 1;//AI档模式挡位启用状态 0x0:禁用 0x1:启用 INT8U reserved : 2;//预留 } vehicleGear_Bit; } vehicleGear; union { INT8U vehicleFunctionState_Byte; struct { INT8U hbarBackHTCFuction : 1;//反向转把能量回收功能 0x0:关闭 0x1:开启 INT8U hbarBackHTCState : 1;//反向转把能量回收激活状态 0x0:无效 0x1:有效 INT8U hbarBackReverseFunction : 1;//反向转把倒车功能 0x0:关闭 0x1:开启 INT8U hbarBackReverseState : 1;//反向转把倒车激活状态 0x0:无效 0x1:有效 INT8U AIOperationMode : 4;//AI运行模式 0x1:节能型 0x2:标准型 0x3:运动型 0x4:激烈型 0x5:大师型 } vehicleFunctionState_Bit; } vehicleFunctionState; INT8U AIGearThrottlePointPercentage; //AI挡位油门积分百分比 增益:1%/bit 偏移量:0 指示范围:0~100% INT8U Count; //COUNT总次数 INT8U Count1; //COUNT1次数 INT8U Count2; //COUNT2次数 INT8U Count3; //COUNT3次数 INT8U Count4; //COUNT4次数 } tMCUInformation5; typedef struct { /**************控制器设备软件版本 预留 扩展帧 (ID=0x18FF0230~0x18FF0233)周期 2000ms 初始开机5帧**************/ INT8U manufacturerCode; //厂家代码 INT8U reserved0; //预留 INT8U materialCodeByte0; //物料编码低0字节 INT8U materialCodeByte1; //物料编码低1字节 INT8U materialCodeByte2; //物料编码低2字节 INT8U swMajorVersion; //软件主版本号 INT8U swMinorVersion; //软件次版本号 INT8U reserved1; //预留,固定为0 } tMCUVersionInformation; typedef struct { /**************控制器ID(SN码) 预留 扩展帧 (ID=0x18FF0240~0x18FF0243)周期 2000ms 初始开机5帧**************/ INT8U byte0; //预留 INT8U byte1; //预留 INT8U byte2; //预留 INT8U byte3; //预留 INT8U byte4; //预留 INT8U byte5; //预留 INT8U byte6; //预留 INT8U byte7; //预留 } tMCUSNInformation; typedef struct { /**************车辆MCU功能设置 扩展帧 (ID=0x18FF0102)触发帧(To控制器)**************/ union { INT8U byte0; struct { INT8U zeroForcePushSet : 2;//零力推行设置 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U lowVolSpeedLimitSet : 2;//低电量限速模式 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U autoParkingSet : 2;//自动驻车功能(坡道驻车)0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U HTCSet : 2;//陡坡缓降功能 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown } bit; } byte0_set; union { INT8U byte1; struct { INT8U sideSupportSet : 2;//驻车感应(电子边撑功能)0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U EABSSet : 2;//E-ABS 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U simpleDriveSet : 2;//简易骑行模式 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U breakPowerOffSet : 2;//控制器刹车断电功能开启/关闭指令 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown } bit; } byte1_set; union { INT8U byte2; struct { INT8U helpPromoteSet : 2;//助力推行功能 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U reverseSet : 2;//倒车功能 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U reserved : 1;//预留 INT8U singleThrottleModeSet : 3;//单油门模式指令 0x0:无效 0x1:关闭 0x2:1档 0x3:2档 0x4:3档 } bit; } byte2_set; union { INT8U byte3; struct { INT8U speedSafetyLock : 5;//速度安全锁 单位km/h 增益:5 偏移量:10 0x0:无效 0x1F:关闭 INT8U energyRecoveryLevel : 3;//能量回收等级 0x0:无效 0x1:关闭 0x2:弱 0x3:中等 0x4:强 } bit; } byte3_set; union { INT8U byte4; struct { INT8U hbarBackHTCSet : 2;//反向转把能量回收设置 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U hbarBackReverseSet : 2;//反向转把倒车设置 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U unlockSpeedLimitSet : 2;//解除限速使能 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U TCSModeSet : 2;//TCS模式设置 0x0:无效 0x1:强 0x2:弱 0x3:unknown } bit; } byte4_set; union { INT8U byte5; struct { INT8U TCSFunctionSet : 2;//TCS功能设置 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U boostModeSet : 2;//Boost模式 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U EGearSet : 2;//骑行模式-E经济 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U CGearSet : 2;//骑行模式-C滑行 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown } bit; } byte5_set; union { INT8U byte6; struct { INT8U SGearSet : 2;//骑行模式-S运动 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U X1GearSet : 2;//骑行模式-X1档 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U X2GearSet : 2;//骑行模式-X2档 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U AIGearSet : 2;//骑行模式-AI档 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown } bit; } byte6_set; union { INT8U byte7; struct { INT8U voltagePlatformSet : 4;//电压 0x0:无效 0x1:72V 0x2:60V 0x3:48V 0x4:96V INT8U reserved : 4;//预留 } bit; } byte7_set; } tVehicleFunctionSettingRx; typedef struct { /**************车辆状态1(VCU 开关机相关信息) 扩展帧 (ID=0x18FF0108)接收触发帧**************/ INT8U VCUState : 4;//VCU主状态 0x0:无效 0x1:关机 0x2:预启动检查 0x3:开机 0x4:预关机 0x5:主电丢失 INT8U moveAlarm : 1;//异动防盗触发 0:正常 1:触发 INT8U wheelMoveAlarm : 1;//轮动防盗触发 0:正常 1:触发 INT8U reserved0 : 2;//预留 INT8U reserved1[3]; //预留 INT8U fallAlarm : 1;//倾倒报警 0:正常 1:触发 INT8U reserved4 : 7;//预留 INT8U reserved5; //预留 INT8U chargerState : 2;//充电器状态 0x0:未检测到充电器 0x1:充电器已接入 INT8U dischargeConfirm : 2;//放电互认 0x0:失败 0x1:成功 INT8U reserved6 : 4;//预留 INT8U batterySOC : 7;//电池SOC 0~100 INT8U batterySOCValid : 1;//电池SOC有效位 0x0:无效 0x1:有效 } tVCUVehicleState1; typedef struct { /**************车辆状态2(车身状态相关) 扩展帧 (ID=0x18FF0109)接收触发帧**************/ INT8U reserved0; //预留 INT8U reserved1; //预留 INT8U seatInductionState : 2; //坐垫感应检测状态 0x0:未乘坐 0x1:有人乘坐 INT8U reserved2; //预留 INT8U reserved3; //预留 INT8U reserved4; //预留 INT8U reserved5; //预留 INT8U reserved6; //预留 INT8U reserved7; //预留 } tVCUVehicleState2; typedef struct { /**************车辆状态3(用户设置项-1 VCU相关) 扩展帧 (ID=0x18FF010A)接收触发帧**************/ INT8U lostMode : 2; //丢失模式 0x0:关闭 0x1:开启 INT8U reserved0 : 6; //预留 INT8U reserved1; //预留 INT8U reserved2; //预留 INT8U reserved3; //预留 INT8U reserved4; //预留 INT8U reserved5; //预留 INT8U reserved6; //预留 INT8U reserved7; //预留 } tVCUVehicleState3; typedef struct { /**************车辆状态4(电池相关) 扩展帧 (ID=0x18FF010B)接收触发帧**************/ INT8U batteryType : 4; //电池类型 0x0:无效 0x1:铅酸 0x2:锂电 INT8U voltagePlatform : 4; //电压 0x0:无效 0x1:72V 0x2:60V 0x3:48V INT8U reserved1; //预留 INT8U SOC : 7; //SOC 0%~100% INT8U SOCValid : 1; //SOC有效位 INT8U recycleCurrent; //回收电流,单位0.1A INT8U reserved4; //预留 INT8U reserved5; //预留 INT8U reserved6; //预留 INT8U reserved7; //预留 } tVCUVehicleState4; typedef struct { /**************车辆状态5(电池相关) 扩展帧 (ID=0x18FF010C)接收触发帧**************/ INT8U reserved0; //预留 INT8U reserved1; //预留 INT8U reserved2; //预留 INT8U reserved3; //预留 INT8U ratedDischargeCurrent; //额定放电电流,单位A INT8U peakDischargeCurrent; //峰值放电电流,单位A INT8U reserved6; //预留 INT8U reserved7; //预留 } tVCUVehicleState5; typedef struct { /**************VCU陀螺仪角度 扩展帧 (ID=0x18FF0101)接收触发帧**************/ INT8U yawAngleLow; //车辆偏航角度低字节 增益:0.1°/bit 偏移量:-90° INT8U yawAngleHigh; //车辆偏航角度高字节 INT8U pitchAngleLow; //车辆俯仰角度低字节 增益:0.1°/bit 偏移量:-90° INT8U pitchAngleHigh; //车辆俯仰角度高字节 INT8U initialYawAngleLow; //车辆初始偏航角度低字节 增益:0.1°/bit 偏移量:-90° INT8U initialYawAngleHigh; //车辆初始偏航角度高字节 INT8U initialPitchAngleLow; //车辆初始俯仰角度低字节 INT8U initialPitchAngleHigh; //车辆初始俯仰角度高字节 } tVCUGyroAngle; typedef struct { /**************ABS状态信息 扩展帧 (ID=0x18FF0600)周期 20ms**************/ INT8U frontWheelSpeedLow; //ABS前轮轮速低字节 增益:0.05625/bit 偏移量:0 INT8U frontWheelSpeedHigh; //ABS前轮轮速高字节 INT8U rearWheelSpeedLow; //ABS后轮轮速低字节 增益:0.05625/bit 偏移量:0 INT8U rearWheelSpeedHigh; //ABS后轮轮速高字节 union { INT8U stateByte; struct { INT8U ABSSwitchState : 2;//ABS开关闭状态 0x0:ABS开启 0x1:ABS关闭 0x2:后轮ABS开启 0x3:后轮ABS关闭 INT8U ABSFaultLamp : 2;//ABS故障灯 0x0:关闭 0x1:开启 0x2:诊断模式 0x3:保留 INT8U frontWheelSpeedFault : 1;//ABS前轮轮速有效标志 0x0:正常 0x1:故障 INT8U rearWheelSpeedFault : 1;//ABS后轮轮速有效标志 0x0:正常 0x1:故障 INT8U ABSModeSwitchAllow : 1;//ABS模式切换 0x0:不允许 0x1:允许 INT8U ABSEvent : 1;//事件位 0:无防抱死触发 1:触发 } bit; } state; INT8U ABSActiveState : 1; //ABS激活状态 0:关闭 1:开启 INT8U IMUZeroFlag : 1; //IMU标零标志位 0x0:未标定 0x1:已标定 INT8U reserved5 : 6; //预留 INT8U IMUZeroCount; //IMU标零次数 INT8U ABSTCSTargetTorquePercentage;//ABS-TCS目标扭矩百分比 单位% 有效范围0x0~0x64 无效值0xFF } tABSStateInfo0; typedef struct { /**************ABS状态信息 扩展帧 (ID=0x18FF0601)周期 20ms**************/ INT8U ABSTCSControlCmd : 1; //ABS-TCS介入控制指令 0x0:OFF 0x1:ON INT8U reserved0 : 7; //预留 INT8U ABSTCSTargetTorqueLow; //ABS-TCS目标扭矩低字节 增益:0.125/bit 偏移量:0 INT8U ABSTCSTargetTorqueHigh; //ABS-TCS目标扭矩高字节 union { INT8U stateByte; struct { INT8U targetTorqueValid : 2;//ABS-TCS目标扭矩有效性 0x0:初始化 0x1:无效 0x2:有效 0x3:保留 INT8U functionSwitchAllow : 1;//ABS-TCS功能可切换信号 0x0:不允许 0x1:允许 INT8U alarmLampState : 1;//ABS-TCS报警灯状态 0x0:灭 0x1:常亮 INT8U workMode : 3;//ABS-TCS工作模式 0x0:开启 0x1:关闭 0x2~0x7:保留 INT8U reserved : 1;//预留 } bit; } state; union { INT8U faultByte0; struct { INT8U systemState : 2;//ABS-TCS系统状态 0x0:初始化 0x1:正常 0x2:故障 0x3:诊断 INT8U reserved : 1;//预留 INT8U IMUFault : 1;//IMU故障 0x0:正常 0x1:故障 INT8U pressureSensorFault : 1;//压力传感器故障 0x0:正常 0x1:故障 INT8U throttleFault : 1;//油门开度故障 0x0:正常 0x1:故障 INT8U motorTorqueFault : 1;//电机实际扭矩故障 0x0:正常 0x1:故障 INT8U driverTorqueFault : 1;//驾驶员请求扭矩故障 0x0:正常 0x1:故障 } bit; } fault0; union { INT8U faultByte1; struct { INT8U ECULowVolFault : 1;//ECU电压过低故障 INT8U ECUHighVolFault : 1;//ECU电压过高故障 INT8U ECUFault : 1;//ECU错误 INT8U wheelSensorFault : 1;//轮速传感器故障 INT8U valveFault : 1;//阀故障 INT8U refluxPumpFault : 1;//回流泵故障 INT8U valveRelayFault : 1;//阀继电器故障 INT8U CANOfflineFault : 1;//CAN总线离线错误 } bit; } fault1; union { INT8U faultByte2; struct { INT8U frontWheelSignalFault : 1;//前轴轮速度传感器信号故障 INT8U frontWheelLineFault : 1;//前轴轮速度传感器线路故障 INT8U rearWheelSignalFault : 1;//后轴轮速度传感器信号故障 INT8U rearWheelLineFault : 1;//后轴轮速度传感器线路故障 INT8U frontInletValveFault : 1;//前轴进油阀故障 INT8U frontOutletValveFault : 1;//前轴出油阀故障 INT8U rearInletValveFault : 1;//后轴进油阀故障 INT8U rearOutletValveFault : 1;//后轴出油阀故障 } bit; } fault2; INT8U reserved7; //预留 } tABSStateInfo1; typedef struct { /**************自平衡控制器指令扩展帧 (ID=0x18FF0250)周期 20ms**************/ INT8U balanceSpeedHigh; //自平衡控制器下发速度高字节 增益:0.1Km/h/bit 偏移量:-250 指示范围:-250~250Km/h INT8U balanceSpeedLow; //自平衡控制器下发速度低字节 INT8U balanceMode : 2;//自平衡模式 0x0:无效 0x1:开启 0x2:关闭 0x3:unknown INT8U reserved2 : 6;//预留 INT8U reserved3; //预留 INT8U reserved4; //预留 INT8U reserved5; //预留 INT8U reserved6; //预留 INT8U reserved7; //预留 } tSelfBalanceControl; typedef struct { /**************SOC指令扩展帧 (ID=0x18FF0260)周期 200ms**************/ INT8U batteryVolHigh; //电池电压高位 单位:0.1V INT8U batteryVolLow; //电池电压低位 单位:0.1V INT8U displaySOC; //剩余电量百分比,显示SOC,范围0~100% INT8U realSOC; //剩余电量百分比,真实SOC,范围0~100% INT8U currentHigh; //电池充放电电流高位 单位:0.1A 偏移量5000 INT8U currentLow; //电池充放电电流低位 单位:0.1A 偏移量5000 INT8U instantPowerHigh; //瞬时电耗高位 单位:W 范围:-5000~10000 INT8U instantPowerLow; //瞬时电耗低位 单位:W 范围:-5000~10000 } tCANSOC260; typedef struct { /**************SOC指令扩展帧 (ID=0x18FF0261)周期 200ms**************/ INT8U batteryTemp; //电池温度 单位:1℃ 偏移量-40 INT8U chargeCycleHigh; //电池充电循环次数高位 INT8U chargeCycleLow; //电池充电循环次数低位 INT8U dischargeTimesHigh; //电池放电次数高位 INT8U dischargeTimesLow; //电池放电次数低位 union { INT8U faultByte; struct { INT8U overVolProtect : 1;//过压保护 INT8U chargeOverCurProtect : 1;//充电过流保护 INT8U dischargeOverCurProtect:1;//放电过流保护 INT8U shortProtect : 1;//短路保护 INT8U overTempProtect : 1;//过温保护 INT8U chargeHandshakeState : 1;//充电握手状态 0x0:失败 0x1:成功 INT8U reserved : 2;//预留 } bit; } fault; INT8U boardWorkState; //计量板工作状态 0x0:默认 0x1:正在充电 0x2:充电完成 0x3:放电状态 0x4:欠压 0x5:涓流充电 INT8U batterySOH; //电池SOH,范围0~100% } tCANSOC261; typedef struct { /**************SOC指令扩展帧 (ID=0x18FF0262)周期 200ms**************/ INT8U batterySOEHigh; //电池SOE高位 单位:WH 范围0~7000 INT8U batterySOELow; //电池SOE低位 单位:WH 范围0~7000 INT8U chargeRemainTimeHigh; //充电剩余时间高字节 单位:1min INT8U chargeRemainTimeLow; //充电剩余时间低字节 单位:1min INT8U selfLearnCapHigh; //自学习容量高位 单位:10mAH INT8U selfLearnCapLow; //自学习容量低位 单位:10mAH INT8U reserved6; //预留 INT8U reserved7; //预留 } tCANSOC262; extern tCanRxSignalTyp UserCanRxSignal; extern tCAN202RxSignalTyp CAN202RxSignal; extern tCAN20CRxSignalTyp CAN20CRxSignal; extern tCANTxBroadcast DateTxBroadcast; extern tCanTxSignalTyp CanTxSignaldDate; extern tCanTxVehicleState CanTxVehicleState; #define VehicleState CanTxVehicleState extern tMCUInformation1 MCUInformation1; extern tMCUInformation2 MCUInformation2; extern tMCUInformation3 MCUInformation3; extern tMCUInformation4 MCUInformation4; extern tMCUInformation5 MCUInformation5; extern tMCUVersionInformation MCUVersionInformation[4]; extern tMCUSNInformation MCUSNInformation[4]; extern tVehicleFunctionSettingRx VehicleFunctionSettingRx; extern tVCUVehicleState1 VCUVehicleState1; extern tVCUVehicleState2 VCUVehicleState2; extern tVCUVehicleState3 VCUVehicleState3; extern tVCUVehicleState4 VCUVehicleState4; extern tVCUVehicleState5 VCUVehicleState5; extern tVCUGyroAngle VCUGyroAngle; extern tABSStateInfo0 ABSStateInfo0; extern tABSStateInfo1 ABSStateInfo1; extern tSelfBalanceControl SelfBalanceControl; extern tCANSOC260 CANSOC260; extern tCANSOC261 CANSOC261; extern tCANSOC262 CANSOC262; extern volatile INT8U G_18FF0102_ReceiveCMP_flg; extern volatile INT8U G_18FF0102_Receive_8u[8]; extern void CAN_18FF0102_ReadFlash(void); extern uint16_t RegisterConfigData[50]; extern unsigned char key[20]; extern uint8_t EmergencyRideFlag; extern void EmergencyRideCheck(void); extern word_def can_motor_stop_state_adr; #define can_motor_stop_state can_motor_stop_state_adr.word #define bStruct_flag can_motor_stop_state_adr.bit.b1 #define Pstate_flag can_motor_stop_state_adr.bit.b0