版本协议

CC BY-NC-SA 4.0

标签
专业版
#第11届立创电赛#PD-Buck数控可调诱骗电源

创建时间:1周前

27 0

描述

<h2>一、项目功能介绍</h2> <h3>1.1、PD诱骗</h3> <p>此设备首先是一款<strong>PD诱骗器</strong>,已验证支持FIX、PPS,(ERP、AVS理论支持,暂无设备测试) <img src="https://image.lceda.cn/oshwhub/pullImage/5e9b1239ef404669ab5c2053ffb53ee0.gif" alt="video_20260815_130340_.gif"> 诱骗到的电压可通过<strong>中间接口</strong>直接输出。</p> <hr> <h3>1.2、可调电源</h3> <p>其次,还是<strong>数控可调电源</strong>:</p> <ul> <li>电压调节范围为1V ~ VIN(28V Max)</li> <li>电流可调范围为0A ~ 5A Max</li> </ul> <p>场景1:充电宝PD输入,调压输出 <img src="https://image.lceda.cn/oshwhub/pullImage/bc47f09a8dc74b75a504b1af36e23852.gif" alt="video_20260815_130340_2_.gif"></p> <hr> <p>场景2:DC 25V输入,调压限流输出(21V 电池组)。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/8bdfca19956740609c6dcf207bb767ca.gif" alt="25V TO 21VBT.gif"></p> <hr> <h3>1.3、输入、输出</h3> <p>此设备共有三个接口,分别为:</p> <ol> <li>PD输入:TYPEC IN 设计电流5A</li> <li>中间接口(1x2P 3.5接线端子):DC IN / DP OUT 设计电流5A (接口额定8A)</li> <li>BUCK输出(1x2P 3.5接线端子):DC OUT 支持防倒灌,设计电流5A (接口额定8A)</li> </ol> <p><img src="https://image.lceda.cn/oshwhub/pullImage/aa1d0db8c50e4d6fb5bebe5dc9d2922a.png" alt="image.png"> <strong>注意!1、2口为并联,使用时注意安全!</strong></p> <hr> <h3>1.4、操控逻辑</h3> <p>此设备使用编码器+轻触开关控制: <img src="https://image.lceda.cn/oshwhub/pullImage/dc306d50f2264ccdae62f84efcee9d4b.png" alt="image.png"></p> <hr> <h3>1.5、UI界面</h3> <h4>1.5.1、诱骗界面</h4> <p><img src="https://image.lceda.cn/oshwhub/pullImage/c7df51e4f96e48769f62fa365c9cfb60.png" alt="image.png"></p> <ol> <li>当前激活档位</li> <li>当前输入电压、电流</li> <li>UI焦点,通过滚动编码器切换,按下编码器选择</li> <li>当前激活档位</li> <li>当前输出电压、电流</li> <li>输出BUCK开关</li> </ol> <hr> <h4>1.5.2、电源界面</h4> <p><img src="https://image.lceda.cn/oshwhub/pullImage/8ed8e4623b554af1a4ef2b57219969f4.png" alt="image.png"></p> <ol> <li>转化效率(输出功率/输入功率)</li> <li>输出容量、能量</li> <li>设定输出电压</li> <li>设定输出限流</li> <li>输出计时器</li> </ol> <hr> <h4>1.5.3、设置界面</h4> <p><img src="https://image.lceda.cn/oshwhub/pullImage/b300343d7ca643fb8b5d5ccec6832293.png" alt="image.png"></p> <ol> <li>屏幕亮度设置</li> <li>自动输入电压:当启用时,会自动切换输入档位为输出电压+1.5V,实现极高的效率,与稳定的纹波。</li> <li>自动启动:当启用时,开机后会直接打开BUCK输出(危险!)</li> <li>校准菜单</li> </ol> <hr> <h4>1.5.4、校准菜单</h4> <p><img src="https://image.lceda.cn/oshwhub/pullImage/63cafb13bc1c43c4921cc505d314fb10.png" alt="image.png"></p> <ol> <li>电流零点校准</li> <li>输入电压校准</li> <li>输出电压校准</li> <li>输出电流校准</li> </ol> <p>经过测试ADC的线性不错,仅比例偏低,固件已做默认补偿。当默认补偿不准时可自行校准,对应的默认补偿将自动失效,转而使用准确的校准补偿。</p> <hr> <h2>二、项目属性</h2> <p>本项目为原创设计,当前版本为首次公开。 未参与过任何比赛或学校答辩,未获得过相关奖项。</p> <h2>三、开源协议与致谢</h2> <p>本项目 <strong>100% 开源</strong>,整体遵循 <strong>CC BY-NC-SA 4.0</strong>(署名-非商业性使用-相同方式共享)协议。</p> <p>开源范围包括:</p> <ul> <li>原理图与 PCB 设计文件(立创 EDA 工程)</li> <li>固件源代码</li> <li>外壳 3D 打印文件</li> </ul> <hr> <p>商业使用限制与声明:</p> <ul> <li><strong>严禁商用</strong>:本项目仅供个人学习、研究与 DIY 交流使用。</li> <li><strong>衍生开源</strong>:任何基于本项目二次开发、修改或衍生的工程,必须保留署名,且必须以 <strong>CC BY-NC-SA 4.0</strong> 同样协议开源,不得闭源或转为商用协议。</li> </ul> <hr> <p>本项目在开发过程中引用和参考了以下优秀的开源项目,特此鸣谢原作者:</p> <h4>3.1、 硬件</h4> <ul> <li><strong><a href="https://oshwhub.com/eda_jfdyucwo/project_jhfyxnsb" target="_blank">Power Ultra 高精度迷你数控电源</a></strong> <ul> <li><strong>协议</strong>:CC BY-NC-SA 4.0</li> <li><strong>引用说明</strong>:硬件恒流/恒压反馈环路部分参考了该项目的设计思路与拓扑。 <h4>3.2、 软件</h4></li> </ul></li> <li><strong><a href="https://oshwhub.com/azunya/ch32x035-pd-tester" target="_blank">MIPPS PD3.2 诱骗器</a></strong> <ul> <li><strong>协议</strong>:CC BY-NC-SA 4.0</li> <li><strong>引用说明</strong>:固件中的 PD 协议诱骗及底层通信代码基于该项目开发/移植。</li> </ul></li> <li><strong><a href="https://github.com/sgl-org/sgl" target="_blank">SGL 图形库 (sgl-org/sgl)</a></strong> <ul> <li><strong>协议</strong>:MIT License</li> <li> <h2><strong>引用说明</strong>:UI 界面采用 SGL 轻量级图形库驱动,保留原作者版权及 MIT 许可声明。</h2> </li> </ul></li> </ul> <h2>四、硬件部分</h2> <h3>4.1、序章</h3> <p>有幸刷到了<a href="https://oshwhub.com/azunya/ch32x035-pd-tester" target="_blank"> MIPPS PD3.2 诱骗器 </a>,其基于的 CH32X035 配置相当豪华(对比我常用的V003)</p> <p><img src="https://image.lceda.cn/oshwhub/4ce24d0e90184805aa01a0d30ab5afc2.jpg" alt="e7da1f2aed6443a3a9dc8c72fe8b519fjpg"></p> <p>因此我打算抛弃又贵又丑的白光OLED,改用<strong>TFT彩屏</strong>,同时在诱骗的基础上加入<strong>可调</strong>电压、电流的功能。同时必须<strong>体积小、成本低</strong>,我思索出以下四种方案:</p> <ol> <li> <p>只使用<strong>报文控制PPS调压</strong>以及<strong>限流</strong>。</p> </li> <li> <p>在 1 的基础上,加<strong>一颗MOS</strong>作为<strong>线性开关</strong>,当<strong>输出电压<输入电压</strong>时调整PPS电压实现恒流。</p> </li> <li> <p>使用独立的<strong>BUCK降压</strong>。</p> </li> <li> <p>使用独立的<strong>BUCK-BOOST升降压</strong>。</p> </li> </ol> <p>其中1在稍微思索后就放弃了,其控制部分与功率部分等效并联,这代表功率部分进入限流,MCU也将直接掉电,导致PPS掉线,变为5V固定输出,轻则过流重启死循环,重则直接爆炸。</p> <p>而2虽然看上去可行,但由于PPS响应很慢,在大功率下MOS可能烧毁,并且实际成本没有优势。</p> <p>而4虽然能升降压,但是Boost对输出电容要求更高,且4MOS管也不符合我们对成本与体积的要求。</p> <h3>4.2、主DC-DC选型</h3> <p>所以只剩下方案3,使用纯BUCK芯片,元件更少、成本更低,也更成熟,我稍微查看了一下类似的开源项目:</p> <table> <tr> <th>名称</th> <th>DC-DC芯片</th> <th>输入电压</th> <th>输出电压</th> <th>最大电流</th> </tr> <tr> <td><a href="https://oshwhub.com/eda_jfdyucwo/project_jhfyxnsb#5" target="_blank">Power Ultra 高精度迷你数控电源</a></td> <td>LM73606</td> <td>0-28v</td> <td>0-26v</td> <td>5A</td> </tr> <tr> <td><a href="https://oshwhub.com/carele/carele_power_box_v1?jlc_vid=QFBWVAFXQQMPBVNfElZXXwYAE1ZcVlMHRVkMUgdRQlgxVlNeQVNeXldTTlVfUjsOAxUeFF5JWA4dDxMOAgNABAsLWAAUEgofFk4ND1dUD1FdUkkWE0waAhcSEhM%3D" target="_blank">MP9928-ESP32C3 降压型便携数控电源</a></td> <td>MP9928</td> <td>12-24V</td> <td>2.5V ~ (VIN-0.5V)</td> <td>0 ~ 4.5A</td> </tr> <tr> <td><a href="https://oshwhub.com/stm32eda/shuo-kong-ke-diao-dian-yuan-60v-20a-1200w-dp6020-dian-yuan-ban?jlc_vid=QFBWVAFXQQMPBVNfElZXXwYAE1ZcVlMHRVkMUgdRQlgxVlNeQVNeXldTTlVfUjsOAxUeFF5JWA4dDxMOAgNABAsLWAAUEgofFk4ND1dUD1FdUkkWE0waAhcSEhM%3D" target="_blank">数控可调电源60V 20A 1200W DP6020电源板</a></td> <td>EG1163S</td> <td>12V-70V</td> <td>0-60V</td> <td>0-20A</td> </tr> <tr> <td><a href="https://oshwhub.com/LCEDAshe-ji-tuan-dui/dian-zi-mu-kuai-shuo-kong-ke-diao-wen-ya-dian-yuan-she-ji-v1-0?jlc_vid=QFBWVAFXQQMPBVNfElZXXwYAE1ZcVlMHRVkMUgdRQlgxVlNeQVNeXldTTlVfUjsOAxUeFF5JWA4dDxMOAgNABAsLWAAUEgofFk4ND1dUD1FdUkkWE0waAhcSEhM%3D" target="_blank">数控可调稳压电源设计-V1.0 </a></td> <td>TPS5450</td> <td>4-32V</td> <td>0-32V</td> <td>0-3A(5A.Max)</td> </tr> <tr> <td><a href="https://oshwhub.com/roboticlib/yi-yan-zheng-pd-xie-yi-ke-diao-shu-zi-dian-yuan?jlc_vid=QFBWVAFXQQMPBVNfElZXXwYAE1ZcVlMHRVkMUgdRQlgxVlNeQVNbVlJSQFBcUDtW" target="_blank">便携式数字可调电源</a></td> <td>ISL8117AFRZ</td> <td>20V</td> <td>0-18V</td> <td>0-5A</td> </tr> </table> <table> <tr> <th>DC-DC芯片</th> <th>同步整流</th> <th>开关管</th> <th>模式</th> <th>价格(JLC)</th> </tr> <tr> <td>LM73606</td> <td>是</td> <td><strong>内置2</strong></td> <td>峰值电流模式</td> <td>13.65</td> </tr> <tr> <td>MP9928</td> <td>是</td> <td>外置2</td> <td>峰值电流模式</td> <td>14.48</td> </tr> <tr> <td>EG1163S</td> <td>是</td> <td>外置2</td> <td>电压模式</td> <td>5.56</td> </tr> <tr> <td>TPS5450</td> <td><strong>否</strong></td> <td><strong>内置1</strong></td> <td>电压模式</td> <td>12.23</td> </tr> <tr> <td>ISL8117AFRZ</td> <td>是</td> <td>外置2</td> <td>谷值电流模式</td> <td>9.4</td> </tr> </table> <p>在我的认知中,同步代表着高效率,集成开关管代表着小体积,那么自然,我的选型重心是<strong>同步整流+内置开关管</strong>。</p> <p>同时为了降低成本,我并没有选择TI,而是找到一个国产芯片,<strong>NDP2450KC</strong>,单片 0.89 还包邮,我只能说和白送一样。</p> <p>时间线变动</p> <p>同时为了降低成本,我并没有选择TI,而是找到一个国产芯片,<strong>SCT2450S</strong>,它在立创商城被标记为<strong>爆款</strong>,在某宝有大量货源,价格在1-2元。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/8b6f7342793b472d9260abba8cb6432f.png" alt="image.png"></p> <p>我选择他的理由是:</p> <ol> <li>宽电压适配,满足<strong>5V-28V</strong>的PD需求,且<strong>5A电流</strong>完全足够。</li> <li><strong>45mR+20mR</strong>的低阻值、<strong>集成上下管</strong>。</li> <li>低压降模式,宣传可实现近乎100%输出。</li> </ol> <hr> <p>在这个时候,面临下一个选择,我们选择FB注入、还是COMP注入,对于当时的我来说和看天书差不多:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/5f6c42be4cbd49e999ae33035195d7b8.png" alt="image.png"></p> <p>对于当时的我,看完之后得到的信息就是:</p> <ol> <li>COMP不好调</li> <li>内部EA抢电</li> <li>什么零点极点,什么积分裕度,什么补偿,完全看不懂。</li> </ol> <p>显然,我选择了据说不需要调节的FB注入,我火速将SCT2450方案修改为了<strong>不带COMP引出的SCT2452</strong>,但已经发货了的就没办法了。</p> <hr> <h4>第一片</h4> <p>硬件部分经过大量借鉴(Ctrl C+V),底层原理其实没什么问题,就是基础的PWM转DAC方案,大同小异。</p> <p>而软件部分借助大佬开源的PD库、SGL图形库,加上好兄弟的一周PRO额度,很快就实现了大部分基础功能,就比如电压调整。</p> <p>当我通过烧录器的5V测试可用后,转头插上了充电器,测试了一下诱骗,FIX和PPS都工作正常,我转头开始调整输出电压。</p> <p>在我调整输出电压,测试GUI帧率时,突然屏幕黑了。</p> <p>用万用表简单测量,输入短路,最初我以为是我贴错了电容耐压,但拆除后没有改善。我又怀疑INA180,最后直到拆掉了SCT2452,才恢复正常。</p> <p>那么问题来了,INA180只有30V耐压,而SCT2452有36V耐压,当时输入电压只有20V,为什么它会炸?毫无头绪的我直接借用AI神力。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/e1de4cf70e974ad89ac0886395474da3.png" alt="image.png"></p> <p>它提出了一个可能,虽然BOOT和SW耐压都很高,但是BOOT-SW耐压只有6V,他认为是由于MOS的寄生二极管性能不佳,在死区时电压超过了6V,当时我脑袋一团浆糊,但听着挺有道理,所以我加入了一颗续流二极管,同时换了一颗新的芯片。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/6c4ae0c896f047f4ac7b4204c69a5c71.png" alt="image.png"></p> <h4>第二片</h4> <p>这次,我仔细观察,发现当设定电压到达输入电压90%时,电感开始啸叫,板子迅速发热,在输出端空载时输入端消耗高达1-3W的功耗。显然这不正常。</p> <p>第一个问题是,说好的LDO模式呢?在介绍中,其输入输出电压均可达到36V,但实际在90%开始啸叫,95%以上几乎不可达到。我感到疑惑,于是我查看了一下SW上的波形。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/d8880e20b2304da19f6947ffdbd21719.png" alt="image.png"></p> <p>如你所见,一片配置为500k的芯片,在以4000-8000k的频率猛猛开关上下管,简直让人难以置信。</p> <p>借用TI的手册,<a href="https://www.ti.com/cn/lit/ds/symlink/lm73606.pdf" target="_blank">LM73605/LM73606,Page 20,Section 7.3.8</a> :</p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/384abfd562ec4ae7acedefac159d58d3.png" alt="image.png"></li> </ul> <p>可以看出,TI支持频率折返特性,即越接近最大输出,频率越低,因为在低频下,占空比将提升,能有充足时间给BOOT电容充能,实现更高的输出电压。</p> <p>但看我们的SCT2450,它不仅没有降低频率,反而把频率拉升到了一个难以想象的数值,那是什么导致的?我开始翻阅其规格书,在他的LDO模式详解下面发现了这样一段话:</p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/90e1bf9b899741948afad27c6fc9c91e.png" alt="image.png"></li> </ul> <p>现在我们知道8M的频率是怎么来的了,UVLO是比较器触发,其优先级超越一切时钟限制,只要没电就触发,8Mhz刚好对应100ns。但这为什么会导致他一直在工作在4M-8M?说好的占空比可接近100%呢?就在这时我发现了一颗与2452高度相似的芯片:<a href="https://item.szlcsc.com/datasheet/AP64501SP-13/2163100.html?spm=sc.gbn.xds.a___sc.gbn.hd.ss&amp;c=Q2&amp;lcsc_vid=EVUPBQUFElULXlUEFllWBgcDT1IIX1VXR1BdAlcDTgcxVlNQRFlcU1JeQlFdUDsOAxUeFF5JWAIASQYPGQZABAsLWA%3D%3D" target="_blank">AP64501SP-13 -PDF数据手册-立创商城</a></p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/116d67139bdb49878833da537c17208f.png" alt="image.png"></li> </ul> <p>可以看到,与SCT不同,<strong>原版</strong>的充电时间为300ns,我隐约感觉被国产替代片坑了,但能力不足无法深究。但至少我们解答了第一个问题,由于其工作在错误的频率,导致输出电压只能达到输入90%甚至更低。</p> <p>此外,就是第二个问题,能量去哪了?输入3w,输出0w,芯片猛升温,出现了一种类似短路的状态,但就在这时,它再次炸了,很幸运,这次我抓到了波形:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/eb3fd7b9cee94e268b980678459b3863.png" alt="image.png"></p> <p>CH1为BOOT、CH2为SW、MATH为CH1-CH2(BOOT-SW),从时基可以看出,其依旧在4M-8M震荡。此外可以看出,MATH通道上存在着两个巨大的尖刺。</p> <p>其幅度离谱到我以为是测量有误,但我更偏向他是真的。</p> <p>已知MOS在以8M的频率工作,同时带有大量的电流,反复穿梭电感之间。这远远超过了设计工况,管子会不会由于米勒效应过热或者变慢?无论是过热还是变慢,结局都只有一个,上下管击穿,芯片报废。</p> <p>总之第二片也死的透透的了,这次它活得稍微久了一点。我修改了软件,将输出限制在输入的85%,高情商说叫保守,低情商说就是拉完了,28V输入,只能输出不到24V,你想试试推进极限?那最好多准备点芯片。</p> <p>换上新芯片,我们继续。</p> <h3>第三片</h3> <p>上电我立刻调整电压到最大值,测试软件限制是否生效,好消息是限制没问题。坏消息是测试完成后降低电压时却炸了,这次他没活过五分钟,甚至比第一片活的更短,即使它有一颗肖特基续流,我再次思考发生了什么。</p> <p>我隐隐感觉,依旧和频率有关,甚至直接点,就是和比较器有关。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/a95e05d49c594a7cbf48aee5861e50e4.png" alt="image.png"></p> <p>打开规格书,OVP过压比较器就在这静静的躺着。在降压时,会用DAC将FB电压拉高,但输出端有110UF+电容,和电容的放电速度相比,DAC瞬间就给到了目标值,一下就给FB拉到超过了0.88v,导致过压比较器触发,然后会发生什么?很遗憾当时没有记录下来波形,口述的话就是每当到达880mV,就会出现一个下尖刺,随后又到达880mV,然后再出现下尖刺。</p> <p>规格书只说过压时会关闭上管,但我猜测他还打开了下管,试图将电压直接拉向地,这样才能解释得通,热量哪来的。</p> <p>没办法,我只能再次软件限制下降的斜率,同时给输出加入了2.5k的假负载,经过短暂调试,电压下降的斜率设置在10mV/mS,FB的电压最高只会到达850mV,距离880mV还有一段距离,暂且接受。</p> <p>但坏消息是,他还是炸了,不是因为降压,而是因为升压。</p> <p>有点麻,再换一片新的。</p> <h3>第四片</h3> <p>简单思索,这应该是老问题,当设置电压上升时,本质上是要求高占空比,此时BOOT电容一旦没电,又会跌入到8M震荡之中,没办法,我只能上升斜率也进行限制,经过测试,相比于下降,上升更加敏感,上升的斜率只能做到2mV/mS,这代表从1V上升到10V,需要等待足足5秒。</p> <p>实话说到这一步已经没必要继续了,这玩意做出来也没有什么价值,但是转头一想,板子都画了,TOKEN都烧了,于是开始继续受苦。但实在没想到有这么苦。</p> <p>在这个时候,电压环路已经凑合能用了,我开始调整电流环路,我发现了一个致命问题,我是用的是注入FB的方案,这代表电压和电流共用一个EA,电流环路是通过将电压注入到FB实现电流限制,那么问题来了,电流环注入的电压有多大?我不知道,反正电感狂叫,OVP猛触发,恒流倒是恒住了,就是不能恒太久。</p> <p>到这一步真的无解了,因为电流环是纯硬件的,我尝试调整,但没有意义。至此可以说,SCT2452的方案彻底死了。但是在这个时候,我发现了买了但没用上的SCT2450,他拥有外部COMP引脚,我突然有了一个想法。</p> <h3>第五片</h3> <p>到现在我已经有了自己的理解</p> <ol> <li>引不引出COMP与稳不稳定无关,不是COMP不好调,而是FB方案完全没法调,一旦不稳定就只能等死。</li> <li>在FB后面连接运放,本质上属于运放串联,其特性完全难以预测,似神似鬼。</li> <li>只要脱离了典型应用,就一定得调,除非是芯片厂非常有实力,考虑的面面俱到。若原厂也是草台班子,那就相当痛苦了。</li> <li>内部EA的电流通常都是uA级别的,带来的对抗微乎其微。</li> </ol> <p>我认为,直接舍弃内部EA,完全用COMP外部接管,跑仿真、跑波特图是最正统的方法,看上去繁琐复杂,但相比一堆阻容来回换,一堆芯片来回炸,这反而更简单、更方便、成本更低,也更可靠。但的确,作为非电力电子专业,仅了解基础概念就得花点功夫。</p> <p>但现在说这些也没什么意义,目的是把电流环路救活,既然FB上有OVP,那就转向,尝试让电流环直接拉低COMP,从而实现电流限制。原本的逻辑是高电平注入FB,而现在我们需要低电平拉低COMP。通过飞线把运放的同反向调换,再把二极管调转方向,使电流环路脱离电压环路。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/a5b62701dad4450ca77ad553c23c61d1.png" alt="image.png"></p> <p>效果立竿见影,限流时电感不吱哇乱叫了,但输出电流忽大忽小,电压也是一样。我检查了COMP上的波形,当在0.8A以上时,稳稳一条直线。在0.7A以下时,COMP上从420mV到100mV来回乱跳。</p> <p>我修改了电流EA的增益,10K换47K,33nF换470nF,稍有改善,Vpp从300mV降低到了100mV,但我发现再怎么修改,也没办法继续降低。经过AI提醒,他认为有可能是电压环路自身问题。</p> <p>的确,我直接拆掉了电流环的二极管,COMP上的纹波毫无变化,AI一通计算,建议我把COMP上的75K+100nF修改为3.3K+470nF,咱也不懂,让换就换,不得不说,换完之后COMP上Vpp直接到了20mV,这本来是个好事,但是我顺手测了一下输出纹波,4V的输出有2V的纹波,我属实没绷住。</p> <p>没办法,继续调,再换成了20k+100nF,正常了,我开始继续测试其他内容,开始编写校准代码,直到我发现我校不准他。</p> <p>当空载时输出电压高,带载时输出电压低,排查许久发现,是二极管在反向漏电,二极管阴极是3.3V,而空载时COMP上是接近0V。当拆除掉二极管后,问题消失。但紧接着,我立刻听到电感开始惨叫,且输出电流越大,频率越高,成蜂鸣器了说是。</p> <p>就是这么神奇,像是多米诺骨牌,调了这个,那个炸了,这次AI建议我给FB的前馈电容换成1nF,我已经懒得抓波形,先换上再说,结果还真就好了,一颗“Optional”的前馈电容,此时成了速效救心丸,而原本承担这份任务的是微小的二极管漏电流。</p> <p>但没办法,电流环路不能不要,翻箱倒柜找出来了点<strong>BAT54</strong>,反向漏电稍微好一点,但还是明显有问题。只能上软件pid尽力救一下,终究还是有硬伤。</p> <h3>第六片</h3> <p>上一片活了非常久,以至于我都放下了警惕心,我发现当空载时,输出电流一直有底数,还会跟随电压变化,我以为是因为假负载引起的,于是拆掉假负载测试,依旧存在,但是不小心碰到了编码器,当我意识到发生什么的时候芯片已经没有输出了。这次上管没炸,所以屏幕没有黑,但是下管炸了,输出永远为0(毕竟已经对地短路了)。</p> <p>我怀疑是检流电阻上的纹波电流导致的,输入电压越高,占空比越低,纹波越大,暂时没有想到如何解决。理论上影响应该不大,软件能够校准。</p> <h2>高级货</h2> <p>那为什么同样是同步+集成上下管+FB注入方案的TI LM73606一切正常?</p> <h3>1、频率折返</h3> <p>前文提到,TI设计了当高占空比降频的机制,大幅减小BOOT充电压力,且效率极高,输出电压几乎能达到输入电压。</p> <h3>2、大电容</h3> <p><img src="https://image.lceda.cn/oshwhub/pullImage/1c39ad25dfea4ade94750cdc349024eb.png" alt="image.png"> 你的意思是BOOT电容会没电?那换个大的不完了?可能TI工程师是这么想的,470nF的BOOT电容是常规方案接近5倍大小。</p> <h3>3、过零检测</h3> <p><img src="https://image.lceda.cn/oshwhub/pullImage/08c8b3c4cdcb48048d2142a3783da736.png" alt="image.png"> 发热的罪魁祸首,电感电流倒灌在这里也根本不存在,因为他有过零检测,在电流还为正的时候就能关闭下管,从某种意义上来说,他等效为非同步芯片。 <img src="https://image.lceda.cn/oshwhub/pullImage/d8eea90ce5ac421b96973fa087d5070d.png" alt="image.png"> 就像手册说的一样,二极管仿真模式,他的下管能视作二极管,而非mos管。</p> <h3>4、FB过压机制</h3> <p>更强的是,即使硬给FB注入电压,由于其存在过零检测,会直接进入高阻态,即关闭上下管,而不会依靠下管倒灌放电。 <img src="https://image.lceda.cn/oshwhub/pullImage/ba8720ec0e77442eba40e670a22a6c55.png" alt="image.png"></p> <h3>5、内部补偿</h3> <p>而且在规格书中也能发现,TI给了内部补偿的规格: <img src="https://image.lceda.cn/oshwhub/pullImage/fc055030e4424c85b19e1a15ef213bb8.png" alt="image.png"> 所以内部补偿更好绝对是伪命题,500k+30pF的配比绝对可以称得上是激进,在某些情况下大概率也会引发震荡,但由于其保护齐全,损伤不大罢了。最大的问题是,一旦真的震荡,你要如何调整?</p> <hr> <p>如果你打算用同步芯片做可调电源,一定仔细关注上面五点,某些芯片比如MPS,即使有过零检测,但过压的优先级更高,其一样会通过强开下管放电。</p> <p>甚至于我发现的可用的芯片貌似只有TI这三剑客,如果想尝试DIY数控电源,千万别像我一样,直接无脑选了同步式,选了集成上下管,还非要注入FB,炸起来可贵,调起来可难。</p> <p>但事情真的无解吗?并非,既然BOOT带来了这些问题,有没有不需要BOOT的方案?还真就叫我找到了</p> <p>最关键的是,其参数十分完美:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/ab789d66e24c492f86bf8e24a5a030f8.png" alt="image.png"></p> <ol> <li>输入电压支持最大40V</li> <li>输出电流最大5A</li> <li>100 %的占空比,这代表输入20V,输出20V(不考虑压降时)</li> </ol> <p>但也有几个痛点:</p> <ol> <li>固定300K的频率略低</li> <li>SOP封装没有底部散热焊盘</li> <li>规格书说最低电压需>5.5V (实测5V输入下可输出2A)</li> </ol> <p>虽然锡的导热只有铜的1/8,但为了将热量从芯片导出,我可以堆8倍:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/bad32dcabac14b70808af8c12812d82d.png" alt="image.png"></p> <p>并且,为了快速将热量传递,参照了MPS的layout的双地平面结构,说人话就是加了两层GND。(最奢侈的一回)</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/758756b860f74765b2c0fc284121a336.png" alt="image.png"></p> <p>虽然芯片底部没有EPAD,但还是做了开窗,便于使用硅脂进行散热,主要起到一个心理作用,但注意<strong>千万不要上锡</strong>,此处也<strong>不是锡膏层</strong>。</p> <hr> <h3>4.3、主DC-DC外围选型</h3> <h4>4.3.1、电感</h4> <p>在电感上的选型相当极限,按照最传统的计算方法,首先我们取最大纹波电流: $V<em>{IN_MAX} = 28\text{V}$,且占空比 $D = 50\%$(即 $V</em>{OUT} = 14\text{V}$)</p> <p>此时电感在关断期间的等效压降项达到最大值: $$V_{OUT} \cdot (1 - D) = 14\text{V} \times (1 - 0.5) = 7\text{V}$$</p> <ul> <li> <p>按教科书标准 $r = 30\%$($\Delta I_L = 1.5\text{A}$):$L = \frac{7\text{V}}{300\text{k} \times 1.5\text{A}} \approx \mathbf{15.5\ \mu\text{H}}$(标称取 $15\ \mu\text{H}$)</p> </li> <li> <p>按紧凑/动态优先 $r = 40\%$($\Delta I_L = 2.0\text{A}$):$L = \frac{7\text{V}}{300\text{k} \times 2.0\text{A}} \approx \mathbf{11.7\ \mu\text{H}}$</p> </li> </ul> <p>虽然理论上来说我们应该选择15uH,但PD和BUCK的结合不仅仅把两块东西丢到一块板子而已,他能实现1+1>2的神奇功效。</p> <p>理论计算是28V输入14V输出,那我直接把诱骗档位改成20V不就完了?甚至如果支持PPS/AVS,我们可以实现超高的输出效率。</p> <p>因此,选择一颗内阻更低、体积更小、效率更高且常见的10uH,我认为是更正确的选择,并且其参数相当卓越:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/04ba365f451c4099a6019e9ec6b48524.png" alt="image.png"> 10A的饱和电流摆在这,已经不需要多余计算了,绝对够用。</p> <hr> <h4>4.3.2、电容</h4> <p>在立创翻箱倒柜,发现了一款极其强且性价比很高的固态电容,超小的体积,却能抗1.8A的纹波电流: <img src="https://image.lceda.cn/oshwhub/pullImage/bc05dc8036b04d109236eacebf5d3324.png" alt="image.png"> 并非2A</p> <hr> <p>好消息,MLCC跌穿了,不过跌的是容量,一颗1210的10uF在28V下还能有5uF可用: <img src="https://image.lceda.cn/oshwhub/pullImage/bcab070987f34c75a459cc56ad967476.png" alt="image.png"> 而1206封装在28V下只有区区1.4uF可用: <img src="https://image.lceda.cn/oshwhub/pullImage/5ef03019a99d48688789f111ef18c52a.png" alt="image.png"></p> <p>事实就是这样,你以为1206和1210都是<strong>大电容</strong>,但实际上差了<strong>接近三倍</strong>。</p> <p>不仅如此,即使同样的1206、X5R、4.7uF、50V,你有留意过他的<strong>厚度</strong>吗? <img src="https://image.lceda.cn/oshwhub/pullImage/8ad445873c3d4e93b737bbc777444816.png" alt="image.png"> 不小心买错的话,容量立减70%哦。</p> <p>而且如果你看的足够仔细的话会发现,同样的1206、X5R、50V、1.8T厚度,4.7uF有2.23uF可用,10uF却只有1.4uF可用。(容值越大容值越小)</p> <hr> <p>根据古董级软件的计算,输入电容的纹波电流高达2.5A:</p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/d40371d65f7a46f3852b90cc5ca55f6f.png" alt="image.png"></li> </ul> <p>在这个电流下,必须依赖MLCC,且有效容值不建议低于1.5uF。最省成本的方案可能是贴两颗1uF 1206</p> <hr> <p>而输出电容承受的纹波电流(RMS)就缓和很多,仅有约 0.7A:</p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/a6ddd20f308d4670a75817bf448cc69e.png" alt="image.png"></li> </ul> <p>虽然输出电容的压力远小于输入,但各位还是更喜欢在输出堆电容,为了更低的输出纹波。但我必须得说,根据容抗公式:$$X_C = \frac{1}{2\pi \cdot f \cdot C}$$</p> <p>即使MLCC的ESR≈0,但没有足够的容值是没有意义的,推荐至少要有15uF的有效容值(此时容抗约 35mΩ,能与固态电容 30mΩ 同一量级来分流),不然我建议干脆换成固态,但空间会很紧张。</p> <hr> <h3>4.4、辅助电源选型(5V)</h3> <p>辅助电源的需求非常简单,我们不需要效率,但需要小体积,且需要高耐压,稍微搜寻了一下,价格最低的应该就是 SY8301ABC:</p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/15c4fb8e70994c4094ed226479c9b254.png" alt="image.png"></li> </ul> <p>固定2M频率,40V的耐压,极高的性价比,某橙色平台0.2不包邮,0.8包邮。</p> <ul> <li><img src="https://image.lceda.cn/oshwhub/pullImage/8668afde16a648778aeab1af838fee39.png" alt="image.png"></li> </ul> <p>为了削减BOM数量,C526也用了天价的1210 10uF,事实上没必要,一颗 4.7uF 1206甚至0805就够。</p> <hr> <h3>4.5、辅助电源选型(3.3V)</h3> <p>对于3.3V,我们有且仅有一个需求,<strong>低纹波</strong>。经过查找,我发现<strong>低静态电流</strong>与<strong>高纹波抑制</strong>是<strong>互斥</strong>的,我常用的662K在这里完全不满足需求。在高纹波抑制类型中,TI的TLV和TPS系列占据大量份额,没想到还是躲不掉TI。</p> <p>但还好我找到了他: <img src="https://image.lceda.cn/oshwhub/pullImage/44425e8e9d9043d1bb95283617d5c3c9.png" alt="image.png"></p> <p>从规格书来看,其PSRR高达62-70 dB,在某宝上的售价更是约等于不要钱,也不用担心假货问题。</p> <p>实际效果也是好的出奇: <img src="https://image.lceda.cn/oshwhub/pullImage/a50ff565fa884a85a903d9cebed0b108.png" alt="image.png"> 3.3V上的纹波只有1mV左右,有了这个基础,我们可以直接省掉一大块电路。</p> <hr> <h3>4.6、PWM TO DAC</h3> <p>由于我们的3.3V极为干净,我直接放弃了基准源、繁琐的推挽结构,直接回归最基础的二阶RC: <img src="https://image.lceda.cn/oshwhub/pullImage/b8b81657704144afb03916971c1a59cb.png" alt="image.png"></p> <p>经过RC的PWM纹波小于1 mv,对于此设备的定位来说完全足够: <img src="https://image.lceda.cn/oshwhub/pullImage/6f0a353ecab84588bf73c577a536cc12.png" alt="image.png"></p> <p>然后就是我早就想做但是一直没机会的事,用一次MCU的内部OPA:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/9ea498d1c03c40938a322705c8555e60.png" alt="image.png"></p> <p>在今天,我终于把它实现了,而且其简直就是为此设计的,走线相当顺畅,直接将经过RC的PWM送进跟随器,我们就有了关键的ISET与VSET。</p> <hr> <h3>4.7、ADC</h3> <p>ADC相当繁忙,需要采集四个通道,分别为输入电压(IV)、输入电流(II)、输出电压(OV)、输出电流(OI),每个通道都配有RC滤波。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/af0c9f41b98f40b09c13129fcb1299ec.png" alt="image.png"></p> <p>需要注意的是,由于SAR ADC共用采样保持电路,必须交叉采样电压与电流,不然内部电容会倒灌到下一个通道造成干扰,而电流通路阻抗很低,能将电荷释放,所以并不会产生问题。</p> <hr> <h4>4.7.1、电压采样</h4> <p>输入与输出的设计目标都是最大28V,所以BOM相同,上拉82K、下拉10k,且10K同时作为RC滤波中的R,满足ADC采样滤波。 满量程上限为 <strong>30.36V</strong>,实际对应公式为:</p> <p>$$V<em>{ADC} = V</em>{IN/OUT} \times \frac{10\text{k}}{82\text{k} + 10\text{k}} = V_{IN/OUT} \times \frac{10}{92}$$</p> <hr> <h4>4.7.2、电流采样</h4> <p>输入与输出都是最大5A,所以BOM也相同,这里没有使用我相当熟悉的INA226,而是和电压一样全都采用了模拟方案,原因很简单,226都涨飞了。而我们选用的副厂INA180A2,1元能买到足足20个。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/8b8b5fbd78564e8f980f88b15a2b67d3.png" alt="image.png"></p> <p>其增益为50V/V,采样电阻选用10mR。满量程上限为 <strong>6.60A</strong>,实际对应公式为:</p> <p>$$V<em>{ADC} = I</em>{IN/OUT} \times 0.01\ \Omega \times 50 = I_{IN/OUT} \times 0.5\text{ V/A}$$</p> <hr> <h3>4.8、FB注入</h3> <p>主BUCK并没有引出COMP,所以我们能且仅能通过FB来控制电压、限流。</p> <h4>4.8.1 电压环路</h4> <p><img src="https://image.lceda.cn/oshwhub/pullImage/1d99993ac3424ebe86a1649add8031fe.png" alt="image.png"> 电压环路非常简单,因为我们使用了内部EA,所以这里我们是不需要运放的。乍一看这个图你可能会陌生,其实他就只比参考手册多了一颗电阻。</p> <p>R12、R13就是手册中的上下拉电阻,而C50其实也只是手册中的前馈电容,我们唯一的修改就是用DAC注入到FB来控制输出电压。所对应的公式也仅仅是多了一个因子、变量。</p> <p>根据基尔霍夫电流定律,在稳态时流入 FB 节点的电流等于流出到地电阻的电流:</p> <p>$$\frac{V<em>{OUT} - V</em>{FB}}{R<em>{12}} + \frac{V</em>{SET} - V<em>{FB}}{R</em>{14}} = \frac{V<em>{FB}}{R</em>{13}}$$</p> <p>化简后即可得到最终的<strong>输出电压控制公式</strong>:</p> <p>$$V<em>{OUT} = V</em>{FB} \cdot \left( 1 + \frac{R<em>{12}}{R</em>{13}} + \frac{R<em>{12}}{R</em>{14}} \right) - V<em>{SET} \cdot \frac{R</em>{12}}{R_{14}}$$</p> <p>代入参数($R<em>{12}=100\text{k}\Omega, R</em>{13}=5.1\text{k}\Omega, R_{14}=10\text{k}\Omega$)稍微整理一下可得:</p> <p>$$V<em>{OUT} = 30.608 \times V</em>{FB} - 10 \times V_{SET}$$</p> <p>这是一个经典的反向控制关系:</p> <ul> <li>当 DAC 输出 $V_{SET} = 0\text{V}$ 时,输出达到最大满量程 <strong>$30.6\text{V}$</strong>,完美覆盖 28V 目标;</li> <li>随着 DAC 电压升高,输出电压以 <strong>10 倍斜率(-10V/V)</strong> 线性下降,在 $V_{SET} \approx 3.0\text{V}$ 时输出降至接近 0V。</li> </ul> <hr> <h4>4.8.2 电流环路</h4> <p>相比于电压环直接利用芯片内部EA,电流环必须在外部构建一个独立的误差放大器,并通过二极管或门实现 恒压(CV)与恒流(CC)的无缝接管,也是因为这颗二极管的存在,所以你可以将两个环路拆开理解。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/2340de5e603f46a7b4e9cc1e98f47ae9.png" alt="image.png"></p> <p>恒压模式时: 同相端实际电流电压 $V(OUT_I)$ 低于我们DAC的设定值 $V(ISET)$,运放输出0V。 此时二极管 D1 阳极是 0V,阴极是 FB 的1V基准,D1 处于绝对反向截止状态。 此时电流环就约等于不存在,为什么是约等于?那就是因为二极管的反向漏电,请确保选用BAT54或类似的低漏电类型二极管,否则会影响电压环路。</p> <p>恒流模式时: 负载加重,实际电流一旦达到设定门限,$V(OUT_I) \ge V(ISET)$。运放被激活,输出电压迅速爬升,一旦运放输出达到 $V_{FB} + V<em>F(D1)$(约 1.3V)时D1导通,电流环路介入FB控制。 运放通过 $R</em>{281} (10\text{k}\Omega)$ 向 FB 节点注入电流,FB 电压被抬高。主 BUCK 芯片以为输出严重过压,立马降低输出电压,直到实际电流刚好等于设定值,实现恒流。</p> <p>由于系数更少,限流的公式其实更简单: 在恒流稳态下,运放的虚短特性会强行让两端电压相等:$V(ISET) = V(OUT_I)$。 结合前文 INA180A2 的放大系数:$$V(OUT_I) = I<em>{OUT} \times 0.010\ \Omega \times 50 = I</em>{OUT} \times \mathbf{0.5\text{ V/A}}$$</p> <p>所以单片机 DAC 输出的设定电压 $I<em>{SET}$ 与目标限流值 $I</em>{TARGET}$ 是纯粹的正比例关系: $$I<em>{SET}\ (\text{V}) = 0.5 \times I</em>{TARGET}\ (\text{A})$$ 你可以发现,这个公式相当简单,设定 1A 限流,只需要 DAC 给 0.5V,设定 5A 满载,DAC 就给 2.5V,就像我说的,比电压的公式还容易。</p> <p>但下面的内容就有点难度了,细心看图会发现,虽然预留了 II 型补偿位置,但运放反馈端只接了一颗 <strong>$C_{425} (33\text{nF})$</strong> 和输入电阻 <strong>$R_{26} (10\text{k}\Omega)$</strong>,构成了一个最基础的 <strong>I 型纯积分器(Type I 补偿)</strong>。</p> <p>其单位增益截止频率约为:</p> <p>$$f<em>0 = \frac{1}{2\pi \cdot R</em>{26} \cdot C_{425}} = \frac{1}{2\pi \times 10\text{k}\Omega \times 33\text{nF}} \approx \mathbf{482\text{ Hz}}$$</p> <p>这个频率完全满足使用,且非专业不建议修改,一旦调整大概率引发震荡。因为主 BUCK 芯片内部本身就有一套带宽高达几十 kHz 的电压内环。一旦外挂电流环太快,两套环路就会在瞬态时互相抢夺控制权,导致输出电流剧烈抽搐、电感开始惨叫。</p> <hr> <h3>4.9、杂项</h3> <h4>4.9.1 过流、过压、反接保护</h4> <p>由于中间接口的存在,常规的PMOS、二极管防反接方案均无法使用,但若没有保护又太过危险,所以我选用了最基本的TVS + 保险丝的方式。</p> <p>由于自恢复保险体积巨大且过于昂贵,所以使用一次性贴片保险,建议选择快断类型。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/148a2dfe6b1d4120b9d8633e9b36758c.png" alt="image.png"></p> <p>当过压、反接时,TVS对地短路,保险断开;当过流时,保险断开,完成保护。</p> <hr> <h4>4.9.2 输出防倒灌</h4> <p>事实上此项目在设计初期就是为了方便的给电池组进行充电,所以防倒灌是必须有的。 但最常规的二极管方案,效率极低,体积巨大,显然不符合我们的要求。 而PMOS方案在28V下也相当复杂,主流方案是使用 MX74700T 这种 理想二极管/ORing控制器 ,加上一颗NMOS实现高效率。</p> <p>我发现了它: <img src="https://image.lceda.cn/oshwhub/pullImage/8920bf345b2c4b36aab4960804b1a86c.png" alt="image.png"> 集成了MOS,典型8 mR内阻,耐压完美符合需求,不过缺点是货源较少,若后续实在不好买可以更换其他方案。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/c65a26a1aff94499bdb42375d34ed9c1.png" alt="image.png"></p> <hr> <h4>4.9.3 MCU</h4> <p>这次依旧用尽了引脚:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/71da02c355c04124b5f37e8f71451cd1.png" alt="image.png"></p> <p>有几根引脚存在省掉的可能性,比如TFT_RST、TFT_PWM、IN_U、BUCK_EN,但会造成功能缺失,或是需要引入额外电路,因此不建议省略。</p> <p>我知道QFN不好焊,但是它体积小,而且便宜,比起其他封装优势很大。(多准备点焊油)</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/4e052ed200b34b439ed5fe25bac3374e.png" alt="image.png"></p> <hr> <h4>4.9.4 按键、编码器</h4> <p>此设备使用了一个编码器、两个侧按开关,还有一个没什么用的BOOT开关。</p> <p>所有按键都是使用 MCU 内部上拉,为节省成本没有额外的硬件防抖,侧按开关由于复用了SWD,串联了1K电阻,防止调试掉线,如不需要调试可直接短接。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/ae615594d5774df2b1e92aa9cf017b29.png" alt="image.png"></p> <hr> <h4>4.9.5 屏幕</h4> <p>虽然只有1.3寸大,但是却有240x240的分辨率,X035刷起来稍微有点慢,但尚可接受。标准的7789驱动,应该很好买,价格4.5左右。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/cb036f0cf37d480db5273a672da1480c.png" alt="image.png"></p> <hr> <h3>4.10、复刻</h3> <h4>4.10.1 打样</h4> <p>板厚建议选择1mm,更短的过孔有助于导热,外壳也是为此板厚设计的。 叠层没什么说法,3313的EMI可能更好一点,不过意义不大。</p> <hr> <h4>4.10.2 焊接</h4> <p>再次强调,DCDC下面的焊盘不要上锡!可以使用硅脂、导热凝胶等辅助散热,或直接无视。</p> <p>对于DC-DC 阻容、RC 阻容等根据个人库存与财力自由发挥,BOM不一定是最优,仅仅是我刚好有,可能的更换方案前文都已详解。</p> <hr> <h4>4.10.3 烧录</h4> <p>对于白片的第一次烧录可以使用USB ISP进行,但再次烧录需要BOOT按钮辅助。</p> <p>有多次烧录需求建议使用SWD方案,DIO与CLK也已引出至C口,使用WCHLINKE + 转接板即可。</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/804140dc017944cfabceec4c8977814e.png" alt="image.png"></p> <hr> <h2>五、软件部分</h2> <h3>5.1、项目结构</h3> <p>整个固件支持在 MounRiver Studio 中直接构建,同时项目内提供了完整的 Makefile 配置文件,也可以在 VS Code 中配合 GNU RISC-V GCC 工具链进行编译、下载与开发。</p> <p>代码目录结构划分为底层外设库、内核驱动、图形库、快充协议栈与业务应用层:</p> <pre><code class="language-text">├── User/ # 用户核心代码目录 │ ├── main.c # 系统主入口、外设启动与非阻塞主循环 │ ├── ui_app.c / .h # UI 业务状态机、三大主界面绘制、参数绑定与输入分发 │ ├── sgl_port_ch32.c # SGL 图形库底层接口适配层(对接显存双缓冲与刷新接口) │ ├── system_ch32x035.c # 系统时钟配置文件(配置为 48MHz 内部高速时钟) │ ├── bsp/ # 板级支持包(外设驱动层) │ │ ├── bsp_adc.c/.h # 4 路 ADC 采样与自适应滤波 │ │ ├── bsp_power.c/.h # 降压输出开关、电压与电流调压基准控制 │ │ ├── bsp_tft_spi.c/.h # 屏幕驱动与背光控制 │ │ ├── bsp_key.c/.h # 侧边轻触按键扫描与防抖 │ │ ├── bsp_encoder.c/.h # 正交编码器旋转与事件解析 │ │ ├── bsp_settings.c/.h # 参数持久化、校验,延迟合并保存 │ │ ├── bsp_calibration.c/.h # 4 通道多点校准与分段插值计算 │ │ └── bsp_pd_qc.c/.h # 快充协议应用层封装接口 │ ├── usb_pd/ # 快充协议栈核心 │ │ ├── usbpd_sink.c/.h # 受电端状态机、标准与扩展报文解析调度 │ │ ├── usbpd_rdo.c/.h # 请求数据对象构建与档位匹配 │ │ ├── usbpd_vdm.c/.h # 厂商自定义消息解析 │ │ └── usbpd_def.h # 协议标准数据结构定义 │ └── utils/ # 精简延时与通用工具 │ ├── Core/ # 青稞 RISC-V 内核寄存器与指令定义 ├── Peripheral/ # CH32X035 官方标准外设库 ├── Startup/ # 汇编启动文件 ├── Debug/ # 串口调试与底层初始化 ├── Ld/ # 链接脚本(划分 64KB Flash 与 20KB 内存空间) └── sgl/ # SGL 嵌入式轻量图形库源码</code></pre> <hr> <h3>5.2、屏幕与图形库</h3> <p>常见的LVGL虽然功能庞大,但往往需要占用数十 KB 内存,对于这颗只有 20KB 内存的小单片机而言无法承受。</p> <p>而本项目选用轻量级开源图形库 SGL,其特点如下:</p> <ul> <li> <p>根据官方说明,SGL 最小仅需 3KB 内存与 15KB 程序空间即可完整运行</p> </li> <li> <p>内置包围盒结合贪心算法的脏区追踪机制,每次只渲染并刷新数值发生变动的局部小方块</p> </li> <li> <p>仅开辟两个小尺寸行缓冲区交替工作,当硬件通道在后台向屏幕显存推送像素时,CPU 可以并行计算渲染下一块区域</p> </li> </ul> <p>当然,对于X035来说驱动难度依旧不低,且页面切换时资源需要从flash调取,所以最终的刷新率只能说够用,但比起更高配的方案还是有差距。</p> <hr> <h3>5.3、PD</h3> <h4>5.3.1 协议栈</h4> <p>底层的受电端协议栈基于 <strong>开源项目</strong> 进行移植与重构,主要修改与差异如下:</p> <ul> <li> <p>移除了原项目中上位机通讯协议以及测试,将协议栈解耦为纯受电协议引擎</p> </li> <li> <p>重构了应用层与协议栈的交互接口,上层 UI 发起调压请求后无需挂起等待,通过轻量状态标志位在主循环中无阻塞轮询,减小协议握手对界面刷新的影响</p> </li> </ul> <p>这些修改主要为了精简RAM占用,其次就是为了实现AUTO PD。</p> <hr> <h4>5.3.2 AUTO PD 自动压差追随算法</h4> <p>自动跟随的核心目的是<strong>为了更高的转换效率与更稳定的输出纹波</strong>。</p> <p>当降压电路在输入 20V、输出 3.3V 时,开关管承受高达 16.7V 的巨大压差,不仅开关损耗极大,电感上的高频纹波电流也成倍放大。如果在输出 4V 时输入自动调整为 5.5V,压差仅剩 1.5V,开关损耗与电感纹波将大幅降低。</p> <p>在 <code>ui_app.c</code> 中,自动跟随通过 <code>ui_app_auto_pd_eval()</code> 和 <code>ui_app_auto_pd_trigger()</code> 函数实现:</p> <ol> <li><strong>计算最优输入目标</strong>: 算法首先计算目标输入电压 <code>req_v = s_target_set_mv + 1500</code>(即设定输出电压 + 1.5V 压差)。</li> <li><strong>多级档位择优匹配</strong>: <ul> <li><strong>优先匹配 PPS</strong>:遍历可用档位中满足电流要求的 PPS 档位。若 PPS 能够覆盖 <code>req_v</code>,则直接选定该 PPS 档位并申请精确到 20mV 的目标电压;</li> <li><strong>次选最低压固定档</strong>:若充电头不支持 PPS,则遍历固定档位,寻找满足输出要求的前提下电压最低的固定档(例如设定 10V 输出时,自动选择 12V 档而非 20V 档);</li> </ul></li> <li><strong>异步无感触发</strong>: 评估结果与当前硬件状态比对,若需要切换档位,则置位请求标志并在主循环中无阻塞下发,实现调压过程中输入电压全程自动紧贴输出电压。</li> </ol> <p>需要注意的是,这里的 +1.5V 压差为推荐值,当压差越低时,效率越高,但过低的压差有可能导致输出电压达不到目标值,或者工作在跳频状态导致输出纹波偏大。</p> <hr> <h3>5.4、ADC 与滤波</h3> <p>在采样数值的处理上,如果使用固定权重的一阶滞后平均算法,虽然数值很稳,但在负载突变时,显示数值需要经历长达十多秒才能爬升到实际大小,为此我们采用了此算法:</p> <ul> <li> <p>当检测到采样变化幅度大于设定阈值时,自动进入大步进快速追踪模式,在 0.4 秒内迅速咬合到新数值附近</p> </li> <li> <p>当数值进入稳定区间后,算法自动切入高阻尼收敛模式,锁住末尾数字</p> </li> <li> <p>在检测到输出开关关闭或处于空载微电流时,直接清空滤波累加器。</p> </li> </ul> <hr> <h3>5.5、数控调压</h3> <h4>5.5.1 开环前馈</h4> <p>在硬件上,单片机根据纯物理推导公式 $V<em>{DAC} = (30608 - V</em>{OUT}) / 10$ 注入 FB 节点实现快速调压。</p> <p>但在实际带载时,电路中存在大量非理想因素:</p> <ul> <li> <p>功率 MOS 的导通内阻、电感直流内阻、10mΩ 检流电阻以及板上走线电阻,在 3A ~ 5A 大电流输出时会产生高达 0.1V ~ 0.4V 的线损负载压降</p> </li> <li> <p>硬件环路中二极管的反向漏电流也会随温度变化带来轻微的静态偏差。</p> </li> </ul> <p>如果仅仅依靠开环前馈,在重载时会出现掉压现象。</p> <hr> <h4>5.5.2 前馈 + 软积分</h4> <p>在 <code>bsp_power.c</code> 中,采用了<strong>物理前馈 + 快速积分修整</strong>架构:</p> <ol> <li> <p><strong>前馈直达与斜率软启动</strong>: 当用户调节设定电压时,底层首先通过物理公式瞬间输出对应的目标 PWM 占空比。</p> </li> <li> <p><strong>500Hz 快速积分微调</strong>: 在 1ms 定时中断中,系统每 2ms 读取一次实际输出端 ADC 电压,计算误差 <code>err_mv = s_target_voltage_mv - adc_v</code>。通过 Q8 定点纯积分器累加纠偏量(增益 $K_i = 0.125$),在 16ms 内把负载线损压降彻底抹平,实现带载 0 压降的坚挺输出特性。</p> </li> <li> <p><strong>抗积分饱和</strong>: 积分器被限制在 $\pm 3.0\text{V}$ 的安全修整边界内,防止空载或断电时积分饱和。</p> </li> </ol> <hr> <h3>5.6、校准算法与数据存储</h3> <h4>5.6.1 零点校准(输入/输出电流)</h4> <p>检流运放与采样电阻在实际空载时,由于芯片本身的失调电压以及寄生参数,在空载状态下也会采集到几毫安的底数,且这个底数会随着输入电压的高低发生漂移。</p> <p>针对典型数据,固件已经内置了默认补偿。且额外设计了零点校准流程,引导用户在拔掉输出负载的情况下,自动记录不同输入电压下的空载底数。在后续实际测量中,系统会自动扣除该硬件偏置,保证空载状态下电流稳定显示零底数。</p> <p>当使用PD供电时,零点校准可以自动执行:</p> <p><img src="https://image.lceda.cn/oshwhub/pullImage/f7a6bbf899a041eba46b8cb48a24e7a8.png" alt="image.png"></p> <ol> <li>拔除负载按下确定</li> <li>等待后完成</li> </ol> <hr> <p>在DC供电时,零点校准是半自动的: <img src="https://image.lceda.cn/oshwhub/pullImage/0e7c3a71c2744c52b15844770520394d.png" alt="image.png"></p> <ol> <li>设置输入电压至5V/最低 按下确定</li> <li>设置输入电压到28V/最大 按下确定</li> <li>拔除负载后 按下确定 </li> <li>完成</li> </ol> <hr> <h4>5.6.2 多点非线性分段插值(输入电压、输出电压/电流)</h4> <p>由于分压电阻存在制造公差,ADC 在不同电压区间的增益也并非完全线性,固件为各采样通道分别提供了 4 个校准槽位,使用分段线性插值方式进行校准,对于不同的校准项操作有细微区别。</p> <p>已输出电压校准为例: <img src="https://image.lceda.cn/oshwhub/pullImage/949335a9c6e340679d8d409d43101c86.png" alt="image.png"></p> <ol> <li>将SET调整至你想校准的点</li> <li>测量真实输出电压,修改REF</li> <li>按下返回自动保存</li> </ol> <p>其他校准大同小异不多赘述,四个校准点可自由分配,一般仅校准两点就足够使用。</p> <hr> <h4>5.6.3 参数保存与防频繁擦写</h4> <p>flash擦写寿命有限,为了避免每次旋转编码器都高频擦写,固件采用了<strong>延迟合并保存机制</strong>:</p> <ol> <li> <p>参数被修改时仅在内存中标记为待保存,并开启 3 秒倒计时;</p> </li> <li> <p>用户持续旋转调节期间会不断刷新该计时器;</p> </li> <li> <p>只有当用户停止操作超过 3 秒后,系统才会执行一次存储扇区擦写;</p> </li> </ol> <p>数据块内包含魔数与校验和,若在写入过程中意外遭遇断电,系统在重启时能够自动识别损坏并恢复出厂默认值,避免读取到异常参数。</p> <h2>* 6、BOM清单</h2> <p>待完善</p> <h2>* 7、大赛LOGO验证</h2> <p><img src="https://image.lceda.cn/oshwhub/pullImage/206f3cca48e14708b84f8ed5dbdc836a.png" alt="image.png"></p> <h2>* 8、演示您的项目并录制成视频上传</h2>

文档

BOM

附件

暂无

成员

评论(0)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow