123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- #ifndef _SOFT_WATER_DEVICE_H_
- #define _SOFT_WATER_DEVICE_H_
- #include "common.h"
- #pragma pack(1)
- typedef struct{
- short liquid_percent;
- uint8_t warn_falg;
- int serial_num;
- }liquid;
- #pragma pack()
- extern liquid liquid_inf;
- extern comp_status liquid_link_status;
- #pragma pack(1)
- typedef struct
- {
- uint16_t speed;
- uint16_t ml;
- uint8_t warn;
- uint16_t last_ml;
- uint16_t overturn;
- uint16_t k;
- uint16_t k_multiple;
- bool get_k;
- bool set_k;
- uint16_t cal_k;
- bool clear_background;
- }flow_info;
- #pragma pack()
- #pragma pack(1)
- typedef struct
- {
- uint8_t ch;
- flow_info ch1,ch2;
- }flow;
- #pragma pack()
- extern flow flow_inf;
- extern comp_status vkflow_link_status;
- typedef struct
- {
- uint8_t arm_sensor1;
- uint8_t arm_sensor2;
- uint16_t nozzle1;
- uint16_t nozzle2;
- }distributor_info;
- extern distributor_info distributor;
- extern Connect_check Distributor_Link;
- /**************************************** Hobbywing ESC***************************************/
- /**************************************** Hobbywing ESC***************************************/
- /**************************************** Hobbywing ESC***************************************/
- //===========current sensor test================
- #define UAVCAN_EQUIPMENT_POWER_BATTERYINFO_MAX_SIZE 55
- #define UAVCAN_EQUIPMENT_POWER_BATTERYINFO_SIGNATURE (0x249C26548A711966ULL)
- #define UAVCAN_EQUIPMENT_POWER_BATTERYINFO_ID 1092
- struct uavcan_equipment_power_BatteryInfo
- {
- float temperature; // 16bit
- float voltage; // 16bit
- float current; // 16bit
- float average_power_10sec; // 16bit
- float remaining_capacity_wh; // 16bit
- float full_charge_capacity_wh; // 16bit
- float hours_to_full_charge; // 16bit
- uint16_t status_flags; // 11bit
- uint8_t state_of_health_pct; // 7bit
- uint8_t state_of_charge_pct; // 7bit
- uint8_t state_of_charge_pct_stdev; // 7bit
- uint8_t battery_id; // 8bit
- uint32_t model_instance_id; // 32bit
- struct { uint8_t len; uint8_t data[31]; }model_name;
- };
- extern struct uavcan_equipment_power_BatteryInfo power_BatteryInfo;
- /*
- Set_Id_Mode
- 0x55:可直接通过广播帧设置 ID
- 0xAA:需要在正常 0 油门下才能通过广播帧设置 ID
- */
- #define HW_SETIDMODE_MODE1 0x55
- #define HW_SETIDMODE_MODE2 0xAA
- /*
- Ready_Control
- 0x55:不需要启动命令就能驱动电调
- 0xAA:驱动电调之前必须发生启动命令
- */
- #define HW_SETIDMODE_CONTROL1 0x55
- #define HW_SETIDMODE_CONTROL2 0xAA
- /*
- 0x00:节点 ESC 开启总线测试模式后定时上报使用该值
- 0xAA:开启节点 ESC 总线测试模式
- 0x55:关闭节点 ESC 总线测试模式
- */
- #define HW_CANTEST_OPTDEF 0x00
- #define HW_CANTEST_OPTOPE 0xAA
- #define HW_CANTEST_OPTCLS 0x55
- #define HW_PRI_MEDIUM 0x10
- #define HW_CANID_PRI_POS (24)
- #define HW_CANID_PRI_MASK (0x1F000000) // 1 1111 0000 0000 0000 0000 0000 0000
- #define HW_PRI_HIGHEST 0x00
- #define HW_PRI_HIGH 0x08
- #define HW_PRI_MEDIUM 0x10
- #define HW_PRI_LOW 0x18
- #define HW_PRI_LOWEST 0x1F
- #define HW_CANID_MSGID_POS (8)
- #define HW_CANID_MSGID_MASK (0x00FFFF00) // 0 0000 1111 1111 1111 1111 0000 0000
- #define HW_CANID_SNM_POS (7)
- #define HW_CANID_SNM_MASK (0x00000080) // 0 0000 0000 0000 0000 0000 1000 0000
- #define HW_TYPE_MSG 0x0 // 广播帧(message farm)
- #define HW_TYPE_SER 0x1 // 服务帧
- #define HW_CANID_SRCNODE_POS (0)
- #define HW_CANID_SRCNODE_MASK (0x0000007F) // 0 0000 0000 0000 0000 0000 0111 1111
- #define HW_NODE_BDC 0x10 // 广播节点
- //================================SER FRAM==============================================
- #define HW_CANID_SERID_POS (16)
- #define HW_CANID_SERID_MASK (0x00FF0000) // 0 0000 1111 1111 0000 0000 0000 0000
- #define HW_CANID_RNR_POS (15)
- #define HW_CANID_RNR_MASK (0x00008000) // 0 0000 0000 0000 1000 0000 0000 0000
- #define HW_TYPE_RES 0x0
- #define HW_TYPE_REQ 0x1
- #define HW_CANID_DESNODE_POS (8)
- #define HW_CANID_DESNODE_MASK (0x00007F00) // 0 0000 0000 0000 0111 1111 0000 0000
- //===========================广播帧==================================
- #define HW_MSGCONTROL_ID (20010) //暂停/恢复主动数据上报指令
- #define HW_FRAME_MSG_GET_ESC_ID (20013) //查询电调 ID 及油门通道命令为广播帧
- #define HW_FRAME_MSG_SET_ID_MODE (20014) //进入 ID 及油门通道设置模式为广播帧
- #define HW_MSG1_ID (20050) //MSG1 数据是 ESC 主动上报给主节点的数据,50HZ
- #define HW_MSG2_ID (20051) //MSG2 数据是 ESC 主动上报给主节点的数据,10HZ
- #define HW_MSG3_ID (20052) //MSG3 数据是 ESC 主动上报给主节点的数据,1HZ
- #define HW_RAWCOMMAND_ID (20100) //RawCommand 发送油门的命令,为广播帧不需要应答,总线上所有 ESC 同时接收解析。
- #define HW_MSGACCLE_ID (20150) //MSG Accel 是 ESC 主动上报给主节点的数据,仅对配有六轴传感器的 ESC 有效
- #define HW_MSGGYRO_ID (20151) //MSG Gyro 是 ESC 主动上报给主节点的数据,仅对配有六轴传感器的 ESC 有效。
- #define HW_MSGBRUSHESC_ID (20200) //MSG BrushEsc 是有刷电调节点自动上报数据实时数据的数据帧
- #define HW_RAWCOMMANDB_ID (20250) //RawCommand2 是飞控(FMU)发送有刷电调油门的命令,广播帧不需要应答,总线上所有 ESC 同时接收解析。
- #define HW_DLKMSG1_ID (20800) //DLK MSG1 数据是 DATALINK 转发的数据帧(DATALINK 将串口协议电调数据转换为 CAN 数据帧)
- #define HW_DLKMSG2_ID (20801) //DLK MSG2 数据是 DATALINK 转发的数据帧(DATALINK 将串口协议电调数据转换为 CAN 数据帧)
- //===========================服务帧==================================
- #define HW_MSGCOMMAND_ID (200) //供应商命令-消息命令
- #define HW_UPGCOMMAND_ID (201) //供应商命令-升级命令
- #define HW_DBGCOMMAND_ID (202) //供应商命令-调试命令
- #define HW_SETID_ID (210) //Set Id 是给 ESC 节点设置 ID 的命令,每个 ESC 对应一个 ID。(ID 0x01~0x7F,油门通道 1~8)
- #define HW_SETBAUD_ID (211) //设置 CAN 总线速率,设置后重新上电生效。
- #define HW_SETLED_ID (212) //Set Led Color 是主节点发送给 ESC 设置 Led 灯颜色的命令。
- #define HW_SETROTATION_ID (213) //Set Rotation 是主节点发送给 ESC 设置电机旋转方向(顺时针/逆时针)的命令。
- #define HW_SETGET_FREQ_ID (214) //Set Freq 是主节点发送给 ESC 设置数据上报频率的命令,会保存 FLASH 内,掉电不丢失,
- #define HW_THRSELEXT_ID (215) //Throttle Select 是飞控 FMU 发送选择油门信号源的命令,支持 PWM 脉宽油门与 CAN 数字油门。
- #define HW_SELFTEST_ID (216) //Self Test 是查询电调自检状态的命令。
- #define HW_SETANGLE_ID (217) //Set Angle 是主节点设置 ESC 桨叶定位角度的命令,ESC 停止运行时桨叶会停止在设置的角度位置。
- #define HW_ACCGYROCONFIG_ID (218) //Accel-Gyro Configuration 是六轴加速度计陀螺仪传感器配置命令,仅对配有六轴传感器的 ESC 有效。
- #define HW_BRUSHESCCONFIG_ID (219) //Brush Esc Configuration 是主节点设置有刷电调配置参数的命令。
- #define HW_SERSETID_ID (220) //Ser Set Id 是给 ESC 节点设置 ID 的命令,每个 ESC 对应一个 ID。
- #define HW_ESCINFO_ID (240) //ESC Information 是获取当前电调驱动程序信息的命令。
- #define HW_GETMAJORCONF_ID (242) //Get Major Configuration 是主节点快速获取电调主要参数配置信息的数据帧
- #define HW_MSGCOMMAND_SIG ((uint64_t)0x8c4acf8adb0375cf)
- #define HW_UPGCOMMAND_SIG ((uint64_t)0xada98653b52de435)
- #define HW_DBGCOMMAND_SIG ((uint64_t)0xe524989ae0471097)
- #define HW_SETID_SIG ((uint64_t)0xc323cb5e9ec2b6f7)
- #define HW_SETBAUD_SIG ((uint64_t)0xed47dea06da1d619)
- #define HW_SETLED_SIG ((uint64_t)0xb493bd48c0853ee5)
- #define HW_SETROTATION_SIG ((uint64_t)0x9d793111d262ba68)
- #define HW_SETGET_FREQ_SIG ((uint64_t)0x1fd0404420983deb)
- #define HW_THRSELEXT_SIG ((uint64_t)0x0c248faaefe5e29a)
- #define HW_SELFTEST_SIG ((uint64_t)0xc48d4de61c5295df)
- #define HW_SETANGLE_SIG ((uint64_t)0x81d9b10761c28e0a)
- #define HW_ACCGYROCONFIG_SIG ((uint64_t)0xa1ed58b0897d7d5a)
- #define HW_BRUSHESCCONFIG_SIG ((uint64_t)0x1302d2cf8a1a5a71)
- #define HW_SERSETID_SIG ((uint64_t)0xc323cb5e9ec2b6f7)
- #define HW_ESCINFO_SIG ((uint64_t)0xd7fe2a212374089b)
- #define HW_MAINTANCEINFO_SIG ((uint64_t)0xb81dbd4ec9a5977d)
- #define HW_GETMAJORCONF_SIG ((uint64_t)0x1506774da3930bfd)
- #define HW_CRC_INITVALUE 0xFFFF
- #define HW_ESCINFO_OPT00 0x00 //电调通信程序版本
- #define HW_ESCINFO_OPT01 0x01 //电调驱动程序版本
- #define HW_ESCINFO_OPT02 0x02 //电调硬件版本
- #define HW_MAJORCONF_OPT0 0x00 //获取配置信息
- #define HW_GETESCID_OPT0 0x00 //获取ESCID及通道信息
- typedef struct
- {
- Connect_check Esc_Link;
-
- //MSG1(20050)
- uint16_t motorRPM; //转速
- uint16_t pwm_value; //PWM
- /*
- bit14:油门信号源 bit14:保留 bit13:通信异常 bit10、11、12、14保留 bit9:方向标志位 bit8:定位完成
- bit7:短路 bit6:电机断相 bit5:油门异常 bit4:电压异常 bit3:停转 bit2:堵转 bit1:过流 bit0:过温*/
- uint16_t warn_flag;
- //MSG2(20051)
- float esc_voltage; //电调输入电压V(float16_t 类型)
- float esc_current; //母线电流A(float16_t 类型)
- uint8_t esc_temperature; //电调温度C
- //MSG3(20052)
- uint8_t esc_mosTemp; //电调MOS温度C
- uint8_t esc_capTemp; //电调电容温度C
- uint8_t esc_motorTemp; //电机温度C
- //ack
- uint8_t MsgCtrOpt; //0x4EA2
- uint32_t MsgCtrCmd; //0x4EA2
-
- bool GetESCid;
- uint8_t GetEscNodeID; //0x4E2D ID
- uint8_t GetEscThrCh; //0X4E2D 油门通道
- bool ResSetIDModeExit; //
- bool ResSetID; //设置CANid的反馈
- uint8_t SetIDNodeID; //设置CAN总线连接电调的node id(1~0x7D)
- uint8_t SetIDThrCh; //选择当前node id所使用的数字油门通道
- uint8_t SetBaud; //CAN总线速率设置
- uint8_t SetLEDOpt; //设置灯的颜色
- uint8_t SetLEDClr; //颜色
- uint8_t SetLEDBlk; //闪烁时间
- uint8_t SetRotDir; //ESC电机旋转方向设置
- uint8_t SetFreqOpt; //设置MSG23上报频率
- uint16_t SetFreqID;
- uint8_t SetFreqFreq;
- uint8_t ThrSrc; //设置油门输出方式
- uint8_t SelfCheckSta; //自检状态
-
- uint8_t _VerBuf[68]; //版本信息buf
- uint8_t _VerBufIndex;
- bool _VerBufGetS;
-
- bool GetESCInfoOpt00;
- uint8_t LinkSoftVer[16]; //电调通讯软件版本
- uint8_t LinkHardVer[16]; //电调通讯硬件版本
- uint8_t LinkDevVer[16]; //电调通讯设备类型
- uint8_t LinkSN[8]; //电调通讯软件唯一码
-
- bool GetESCInfoOpt01;
- uint8_t DriveSoftVer[16]; //电调驱动软件版本
- uint8_t DriveHardVer[16]; //电调驱动硬件版本
- uint8_t DriveDevVer[16]; //电调驱动设备类型
- uint8_t DriveSN[8]; //电调驱动软件唯一码
-
- bool GetESCInfoOpt02;
- uint8_t HardSN[16]; //电调硬件
- uint8_t ProtocolVer[8]; //电调协议版本号
- uint8_t rsv[32]; //预留
- bool GetMInfo;
- uint32_t MTLifeCycle; //运作总共时间
- uint32_t MTLatestCycle; //上一次运作时间
-
- bool GetMajorConf;
- uint8_t MajorConfRot;
- uint8_t MajorConfThrSrc;
- uint8_t MajorConfThrCh;
- uint8_t MajorConfLEDBlink;
- uint8_t MajorConfLEDColor;
- uint8_t MajorConfMSG2UPHZ;
- uint8_t MajorConfMSG1UPHZ;
- uint8_t MajorConfInstAngle;
- } _EscLinkDevice;
- extern _EscLinkDevice EscMsg[4+1];
- typedef enum
- {
- SETESCID_INIT = 0,
- SETESCID_ENTER = 1,
- SETESCID_SET = 2,
- SETESCID_EXIT = 3,
- SETESCID_END,
- }_setescid_t;
- typedef struct
- {
- int8_t reTxMaxCnt;
- _setescid_t setESCidStep;
- bool getSetIDModeRes;
- uint16_t getSetIDModeResCnt;
-
- uint8_t setESCidNum; //配置第几个电调
-
- uint32_t setEscIDDelayTime; //步骤2的PWM失能判定时间
-
- }_setESCidInfo;
- extern _setESCidInfo setESCidInfo;
- typedef struct _hwCanTail
- {
- uint8_t tranid: 5; /* 1:数值范围 0~31。
- 2:对于相同 Data Type ID 的数据,每发送一包数据,Transfer ID 加 1,0~31 循环累加。
- 3:对于同一包数据中的多个数据帧,该值不变。*/
- uint8_t toggle: 1; /* 1:对于 Single frame transfer,Toggle bit 这一位永远为 0。
- 2:对于 Multi frame transfer,数据包的首帧该位为 0,此后每发一帧该位翻转一次。*/
- uint8_t end: 1; /* 1:对于 Single frame transfer,End of transfer 这一 bit 位永远为 1。
- 2:对于 Multi frame transfer,如果当前帧是数据包的最后一帧,该位为 1,否则为 0。*/
- uint8_t start: 1; /* 1:对于 Single frame transfer,start of transfer 位永远为 1。
- 2:对于 Multi frame transfer,如果当前帧是数据包的首帧,该位为 1,否则为 0。*/
- } __PACKED hwCanTail;
- typedef union _HWTail
- {
- uint8_t HWTailByte;
- hwCanTail HWTailBit;
- } HWTail;
- extern bool set_HWesc_ESCid;
- /**************************************** Hobbywing ESC***************************************/
- /**************************************** Hobbywing ESC***************************************/
- /**************************************** Hobbywing ESC***************************************/
- void Flow_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
- void liquid_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
- void distributor_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
- void Can_sendmsg_to_distributor(void);
- void check_flow_link(void);
- int decode_liquid_info(void);
- void can_sendmsg_flow(void);
- void can_sendmsg_esc(void);
- void HobbywingCanRecvHookFunction(uint32_t id, uint8_t data[], uint8_t len);
- void Hobbywing_esc_func(void);
- #endif
|