/** * @brief 充电开始结束检测函数 * @param NULL * @note NULL * @retval NULL */ static void Charge_Check(void) { if (CapChargeMonitor.InVolt >= TargetInVolt) // 已经充满了电 { if (CapChargeMonitor.FullFlag == 0) { //sprintf函数并不是真正的打印函数,而是将格式化后的字符串输出到一个字符数组中。该字符数组可以是一个全局数组,也可以是一个局部数组(monitor_txt) // sprintf(monitor_txt, "%.f\r\n", CapChargeMonitor.ChargeContiTime); // 打印时间和电容电压值 // uart_write_string(UART_1, monitor_txt); } CapChargeMonitor.FullFlag = 1; } else if (CapChargeMonitor.OutVolt <= TargetOutVolt - 2) // 滞回比较 CapChargeMonitor.FullFlag = 0; if (CapChargeMonitor.FullFlag == 1) // 已经充满, 关闭输出 Charge_Protect(); else // 没有充满 { if (CapChargeMonitor.InVolt > 3) // 电压高, 恒功率充电 { GPIO_set(CAPCHARGE_BridgeEN, 1); if (CapChargeMonitor.OutVolt < TargetOutPower / 10) // 降低目标功率防止刚开始充电电流过大 Charge_Ctrl_CP(&CapCharge_Pow_Pid, TargetOutPower * 0.8, CapChargeMonitor.InPower); else Charge_Ctrl_CP(&CapCharge_Pow_Pid, TargetOutPower, CapChargeMonitor.InPower); } else // 电压低, 不充电 { Charge_Protect(); // 关闭输出 CapChargeMonitor.ChargeInitTime = 0.5 * TargetCap * CapChargeMonitor.OutVolt * CapChargeMonitor.OutVolt / TargetOutPower; // P*t=1/2*C*U*U, 更新计算恒功率充电初始时间 } } }
时间: 2024-02-10 11:26:32 浏览: 79
OpenCV角点检测代码.rar_OpenCV_C/C++_
这段代码是一个充电开始结束检测函数,根据输入和输出电压的不同情况来判断充电状态和采取相应的措施。具体解释如下:
1. 如果输入电压(`CapChargeMonitor.InVolt`)大于等于目标输入电压(`TargetInVolt`),表示已经充满电。如果之前的充满标志(`CapChargeMonitor.FullFlag`)为0,表示之前没有充满,那么进行一些操作(这部分代码被注释掉了)。然后将充满标志设置为1。
2. 如果输出电压(`CapChargeMonitor.OutVolt`)小于等于目标输出电压(`TargetOutVolt - 2`),表示处于滞回比较状态。将充满标志设置为0。
3. 如果充满标志为1,表示已经充满,执行充电保护操作。
4. 如果还未充满,根据输入电压的不同情况进行相应的操作:
- 如果输入电压大于3V,表示电压较高,执行恒功率充电操作。首先使能一个GPIO引脚(`CAPCHARGE_BridgeEN`)用于控制输出。然后根据输出电压和输入功率调用`Charge_Ctrl_CP`函数进行恒功率充电控制。
- 如果输入电压低于3V,表示电压较低,执行不充电操作。关闭输出,然后根据公式`P*t=1/2*C*U*U`计算恒功率充电的初始时间。
这段代码是根据你提供的代码片段进行了解释,具体的功能和逻辑可能还需要参考其他相关代码来确认。
阅读全文