当前位置: 首页 > news >正文

模拟过零光耦控制发热丝

如何稳定功率

市面上常见的功率计检测都是基于200ms的周期进行检测,为了骗过功率计让发热功率更加稳定,可以通过模拟过零光耦的特性,来精确的控制发热丝,舍弃一部分挡位划分让功率跳动更加稳定

示例代码

// ==================== 可调参数配置区 ==================== #define TOTAL_CYCLE_MS 200 // 总周期时长(ms) #define Zero_Time 5 // 过零周期(ms) 50Hz为10 半波为5,60Hz为8 半波为4 #define SEG_NUM 4 // 单段长度 取值范围是 2 ~ 20 超过需更改总周期 推荐使用 2 ~ 10 // ======================================================= #define ZERO_COUNT (Zero_Time) // 过零对应的中断次数 #define MAX_OFF_SLOTS (TOTAL_CYCLE_MS / Zero_Time) // 最大关闭片数(段成员上限) #define TIME_SLOT_PER_SEG (MAX_OFF_SLOTS / SEG_NUM) // 每段包含的时间片数 uint8 TempSection1[SEG_NUM]; // 发热丝1数组(阈值) uint8 TempSection2[SEG_NUM]; // 发热丝2数组(阈值) uint8 WaveTempOFF; // 当前需要关闭的总片数 (0 ~ MAX_OFF_SLOTS) uint8 TempCount = TIME_SLOT_PER_SEG; // 时间片计数器(用于滤波) uint8 TempFlag; // 当前时间片内的倒计数(从 TIME_SLOT_PER_SEG 到 1) uint8 ZeroTempState; // 当前索引段(0 ~ SEG_NUM-1) uint8 Oldinput = 0xFF; // 输入旧值,用于判断是否重算 uint8 input; // 发热输入值 // 计算数组(根据算法选择) static void ZeroTemp_calculate(uint8 Select) { uint8 i; uint8 base, rem, rem_original; WaveTempOFF = ((TOTAL_CYCLE_MS - input) / Zero_Time); base = WaveTempOFF / SEG_NUM; rem = WaveTempOFF % SEG_NUM; rem_original = rem; // 保存原始余数,供 case 2 重置使用 switch (Select) { case 1: // 首尾均分算法(前段集中,后段镜像) for (i = 0; i < SEG_NUM; i++) TempSection1[i] = base + (rem > i); for (i = 0; i < SEG_NUM; i++) TempSection2[i] = base + (rem > (SEG_NUM - 1 - i)); break; case 2: // 插分算法(交错分布,抑制电压闪烁) for (i = 0; i < SEG_NUM; i++) { TempSection1[i] = base; TempSection2[i] = base; } // 数组1:偶数索引优先 for (i = 0; i < SEG_NUM && rem; i += 2) { TempSection1[i]++; rem--; } for (i = 1; i < SEG_NUM && rem; i += 2) { TempSection1[i]++; rem--; } // 数组2:奇数索引优先(重置 rem) rem = rem_original; for (i = 1; i < SEG_NUM && rem; i += 2) { TempSection2[i]++; rem--; } for (i = 0; i < SEG_NUM && rem; i += 2) { TempSection2[i]++; rem--; } break; } } // 丢波发热丝控制(在过零中断或定时中断中调用,周期为 Zero_Time ms) void ZeroTemp_Function(void) { if (Temp_ON_OFF) // 错误标志,强制关闭发热丝 { Temp_GPIO_1 = 1; Temp_GPIO_2 = 1; } else if (TempCount >= ZERO_COUNT) //半波全波控制 { TempCount = 0; if (TempFlag > 1) TempFlag--; else { TempFlag = TIME_SLOT_PER_SEG; ZeroTempState = (ZeroTempState < (SEG_NUM-1)) ? ZeroTempState + 1 : 0; } // GPIO输出:低电平有效(发热丝低导通) // 当 TempFlag > 阈值时输出 0(加热),否则输出 1(关闭) Temp_GPIO_1 = (TempFlag > TempSection1[ZeroTempState]) ? 0 : 1; Temp_GPIO_2 = (TempFlag > TempSection2[ZeroTempState]) ? 0 : 1; } } // 放到1ms中断滤波 赋值 void Zero_Count(void) { TempCount++; input = ((实际输入百分比) * 2); //input = input - (input % 2); // 可选:取整到偶数(单发热丝整倍) if (input > TOTAL_CYCLE_MS) input = TOTAL_CYCLE_MS; if (Oldinput != input) { ZeroTemp_calculate(1); Oldinput = input; } }

原理

基于200ms总周长对不同频率的零点信号进行拆分,用过零光耦会随交流电到来产生固定时间的正弦波来对发热丝进行控制。
我们可以用完整的全波或者半波使得功率稳定

源码解析

总开关次数由LOSESIZE段数*LOSEDATA组数的乘积来确认,可以针对不同频率的信号做不同的段数选择,总时长不应该超过200ms (不然会跳动)

计算200ms/信号频率= 总开关次数 = 段数*组数

源码也支持对段数和信号频率更改的自适应,为了应对吹风机过认证,故设计两种算法进行发热丝控制
1.首尾均分算法
通过将发热丝分组,将关闭片数按均分加余数线性分配到各段,数组2与数组1首尾镜像互补,形成两端集中分布,以此稳定功率例:数组1为 11100 数组2为00111
2.插分算法
通过将发热丝分组,将关闭片数先均分,再将余数按偶数优先(数组1)或奇数→末尾→偶数(数组2)的优先级依次累加,实现交错分布例:数组1为10101 数组2为01011
通过这两种算法(首尾均分或交错插分)将关闭片数分配到各时间段,以平滑调节加热功率

优化互动

暂时添加这两种算法对发热丝进行控制,过几天去认证试下对闪烁哪种配置比较优秀,要是有老铁对代码有优化或算法添加的地方 可以在评论区留个言,我也会同步更新的

http://www.jsqmd.com/news/687748/

相关文章:

  • 解决ComfyUI视频生成内存溢出问题的完整指南:ComfyUI-FramePackWrapper技术实践
  • 软件供应链安全中的依赖分析与漏洞管理
  • 基于知识蒸馏学习的高光谱图像分类模型:教师模型Resnet18与轻量化学生模型的Pytorch实现
  • 贵州颈椎病、腰椎间盘突出治疗专攻特色诊疗医院推荐,疗效有保障 - 深度智识库
  • 突破性能瓶颈:10个关键技巧优化ASP.NET Core中HTTP.sys编码URL处理性能
  • 上海钛恩科技客服咨询AI流量赋能,重塑智能体验新标杆高报行业圆满落幕 - 速递信息
  • 求推荐几款适合毕业论文使用的双效降重工具(降重复+降AI率)
  • 深度学习损失函数原理与实践指南
  • 为什么你的TinyLlama在STM32H7上被劫持?——基于TrustZone+Secure Boot的4层纵深防御体系
  • 调试NRF24L01时串口总收不到数据?STM32 HAL库下这些坑我帮你踩过了
  • 3步构建智能微信管理生态:从手动操作到自动化工作流
  • 智慧交通物流的实时数据引擎:TDengine 时序数据库应用实践
  • 告别集中式服务器:聊聊Kimera-Multi如何用分布式PGO实现高效多机协同建图
  • OpenHands 0.22.0:终极AI协作开发指南,让编程效率提升300%的完整解析
  • 2025终极指南:ASP.NET Core性能优化实战——从fortunes基准测试到生产级调优
  • STM32CubeMX ADC配置避坑指南:从时钟分频到采样时间,这些参数你真的配对了?(以F072为例)
  • 告别复制粘贴!用VForm+JSON配置,5分钟搞定Vue+Vant移动端复杂表单
  • 告别‘网络太好’的尴尬:用Charles给你的App做个‘慢动作’体检(附4G/3G/2G预设参数)
  • 幻灯片PPT插件《皮皮爱德因》首发 免费下载直接使用
  • Vue 3 项目错误处理实战:Vue ErrorHandler、Promise 监控、用户友好提示
  • 如何快速为所有Win32应用添加Mica效果:Mica For Everyone完整指南
  • 2026年4月广州客厅灯主灯/吸顶灯/卧室灯/卧室吸顶灯/灯具厂家解析 - 2026年企业推荐榜
  • 瑞祥商联卡回收快速变现技巧 - 团团收购物卡回收
  • 从Joomla 3.7.0 SQL注入到Root提权:一次完整的DC-3靶场实战复盘(附脚本下载)
  • 在线PH检测仪选型对比:哈希、梅特勒与国产头部品牌谁更值? - 陈工日常
  • 如何用ChanlunX缠论插件实现股票技术分析自动化:3步快速上手指南
  • 5分钟快速上手:通达信缠论分析插件完整指南
  • 闲置的永辉超市购物卡如何处理?掌握最便捷的回收方法 - 团团收购物卡回收
  • 感知机为什么是AI的‘Hello World’?聊聊它的历史、局限与在神经网络中的‘复活’
  • 2026车库门彩钢卷批发定制厂家实力测评:优质品牌推荐及选型指南 - 博客湾