# SingleStageACDC **Repository Path**: kingham/single-stage-acdc ## Basic Information - **Project Name**: SingleStageACDC - **Description**: 单级式AC-DC - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-29 - **Last Updated**: 2025-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 单级式AC-DC 后续请完善资料和代码框架,方便后续使用,别再额外多加flag了,别变成屎山了! ## 1.状态机 现在状态机改为了注册形式,不用BBLLC项目中的那么多重复代码了,想加什么状态就很方便的加上了。具体代码详见`state_serverce.c`中的代码,具体在manager层使用操作示例如下: - 状态注册: ```c // 初始化状态 StateMachine_Init(&g_state_machine, VSERIES_GAPC_IDLE); // 注册IDLE状态和其指针函数(进入,运行,退出) StateMachine_RegisterState(&g_state_machine, VSERIES_GAPC_IDLE, onEnter_IDLE, onRun_IDLE, onExit_IDLE); ``` - 转换条件注册: ```c // 注册状态转换 StateMachine_RegisterTransition(&g_state_machine, VSERIES_GAPC_IDLE, VSERIES_GAPC_PTR, isIDLEtoPTR); ``` ## 2.故障管理 同样跟状态机一样,改为了注册机制,不再面向过程编程!具体代码详见`fault_manager.c`和`fault_engine.c`,分别是故障的注册和故障判断的底层逻辑。 如果想要加新的故障,分为简单的判断回调型故障和累计型号故障,操作加入故障方式如下: ```c // 1) DSP温度过温:累计型(2s窗口内累计10次为真即置位;非连续也计数) FaultEngine_Register(&g_faultEngine, &(fe_rule_cfg_t){ .dtc_code = Tdsp_OTP_SW_E4, .dtc_type = FE_TYPE_FAULT, .kind = FE_RULE_ACCUM_WINDOW, .period_ms= 200, // 采样周期 .clr_debounce = 5, // 恢复连续5次才清除(=1s) .detect_cb = FE_Detect_TDSP_OTP, .clear_cb = FE_Clear_TDSP_OTP, .accum_window_ms = 2000, // 窗口:2s .set_occurs = 10, // 窗口内累计10次 .count_edges = false, // 连续超限会每次都计数 }); // 3) 硬件类(回调型) FaultEngine_Register(&g_faultEngine, &(fe_rule_cfg_t){ .dtc_code = IAC_OCP_HW_E17, .dtc_type = FE_TYPE_FAULT, .kind = FE_RULE_CALLBACK, .period_ms = 20, .set_debounce = 1, .clr_debounce = 5, .detect_cb = FE_Detect_IAC_OCP, .clear_cb = FE_Clear_IAC_OCP, }); ``` ## 3.CAN通信邮箱定义 **注意**:需要提前下载好`ZCANpro`和`CANdb++`进行上位机上的监控和`dbc`文件的编辑! 目前传输和接收邮箱定义了这几个: ```c //Rx接收邮箱 #define CANID_GUI_SET 0x701U #define CANMB_GUI_SET 0x01U //Tx发送邮箱 #define CANID_MONITOR_FAULT 0x711U #define CANMB_MONITOR_FAULT 0x11U #define CANID_MONITOR_POWER 0x712U #define CANMB_MONITOR_POWER 0x12U ``` - `701`是上位机发送数据到下位机的通道 - `711`是下位机发送错误码到上位机的通道, 错误位置示意如下: