news 2026/10/6 18:27:25

六足机器人舵机控制器供电与PWM信号调试实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
六足机器人舵机控制器供电与PWM信号调试实战指南

做六足机器人最刺激的一刻,不是它第一次站起来,而是你按下电源开关的瞬间,整台机器突然“啪”地抽搐一下,接着六条腿的舵机开始毫无规律地抖动,上位机窗口里冒出一串“通信失败”“舵机未响应”。我在这上面搭进去整整两个晚上,排查到最后发现,既不是舵机烧了,也不是程序写崩了,而是我压根没搞清楚众灵科技舵机控制器的供电结构,以及PWM信号真正参考的是哪个地。这篇内容整理自六足机器人项目开发和调试过程中的真实踩坑记录,主要涉及众灵科技舵机控制器的供电设计、PWM信号调试、上位机联调,以及几类高频故障的完整排查思路,适合正在做六足机器人、机械臂或者多舵机联动装置,尤其是刚接触总线舵机或PWM舵机混用方案的朋友参考。

1. 六足机器人供电:上电瞬间电压塌陷是怎么毁掉调试的

很多第一次做六足机器人的人,包括当时的我,都会默认一个前提:电源额定电流够大,舵机就一定能跑。实际上一台六足机器人装六条腿,每条腿三个舵机,那就是十八个舵机。走路时不需要十八个一起发力,但迈步时每条腿的大腿关节、小腿关节会同时动作,瞬间电流叠加起来非常恐怖。

1.1 电压塌陷比电流不足更隐蔽

舵机启动瞬间,电机处于近似堵转状态,内阻极低,会从电源抽取一个非常大的浪涌电流。这个浪涌电流持续时间很短,可能只有几十毫秒,但电源电压会被瞬间拉低。舵机控制器里的主控芯片通常有独立的稳压电路,短时间欠压不一定立刻复位,但舵机内部的驱动芯片一旦检测到电压低于工作阈值,就会进入保护或者丢步状态。

更麻烦的是,电压塌陷不一定每次都出现。你单独测试一个舵机时一切正常,单独控制某条腿的三舵机也正常,但六条腿同时上电、同时初始化时,系统就开始疯了一样乱跳。这是因为同时动作的舵机数量越多,瞬时电流峰值越高,电压跌落就越明显。很多时候你测到的“空载电压”是正常的12V或者7.4V,可舵机转动的一瞬间,实际电压可能已经掉到了4V多,这时候PWM波形就算再标准,舵机也执行不了。

我在实测中遇到过一次很有意思的案例:舵机电源用的是可调稳压电源,显示电流最高到了8.3A,电压从12V跌到了6.9V。可调电源的LED数码管因为刷新率太低,看起来只是电流跳了一下,电压数值好像没变,但用示波器抓动态波形才看到那个明显的跌落坑。

1.2 估算电源容量和储能电容的方法

舵机电源容量不能只看铭牌上的“额定电流”,要按“最恶劣工况”来算。单个普通数字舵机在7.4V下峰值电流可能到2A到3A,总线舵机类似。哪怕六足机器人正常行走时每个舵机平均电流只有几百毫安,上电初始化、姿态调整、遇到阻力的时候,瞬间电流是平均值的五六倍。

我的估算方式是:

  • 先数清楚舵机总数,假设三分之一的舵机会在同一个瞬间启动/刹车;
  • 单舵机峰值电流按2A到3A估算,得到理论峰值;
  • 电源额定电流至少留出理论峰值的1.5倍以上余量。

举个实际例子:18个舵机,按6个同时动作、每个3A峰值计算,理论峰值电流18A。那我选电源就不会低于25A,实际我最后用了12V 30A的开关电源,再用降压模块给控制器逻辑供电。如果你用的是18650电池组,情况又不一样,后面单独说。

储能电容是很多人忽略的一点。大电容的作用不是“储存能量供舵机使用”,而是在开关电源或者电池来不及响应的那几毫秒里,把电压塌陷的坑填平一部分。我一般在舵机电源入口处并联一颗1000uF到2200uF的电解电容,再并联一颗104陶瓷电容吸收高频毛刺。电容耐压值要留足余量,12V系统建议用25V或者35V耐压的。不要贪大,过大容量的电容在电源上电瞬间本身就会造成很大的冲击电流,反而可能触发电源保护。

1.3 线材压降:万用表量出来是12V,舵机那里只剩9V

供电问题还有一个隐蔽变种:线材压降。一根细长的硅胶线,或者一个接触不良的XT60插头,在大电流下就是一个小电阻。电流越大,这个小电阻上的压降越大。我之前用AWG22的杜邦线给一条腿的舵机供电,空载量电压11.8V,舵机一动作就剩下8V左右,整条腿软绵绵的。换成AWG16的硅胶线之后,同样工况下电压稳定在11.4V以上。

判断压降的方法很简单:用万用表,一根表笔点在电源输出端,另一根点在舵机控制器的电源输入端子。然后让舵机做大幅度动作,观察万用表读数之间的差值,超过0.5V就要警惕。更准确的做法是用示波器两个通道同时测量两端,看动态压降。

2. 众灵科技这代控制器的供电细节:插头、跳帽与独立供电的正确打开方式

众灵科技的舵机控制器在开源机器人圈子里用得很多,原因是价格门槛低、资料相对全、调试软件也做得比较省心。但它上面那几个电源接口、跳线帽、不同版本的丝印设计,如果你不看原理图,很容易搞错。

2.1 从接口布局倒推控制器的供电逻辑

众灵科技常见的舵机控制器板载接口包括舵机电源输入、USB供电/通信口、舵机接口排针,部分版本还有独立的逻辑电源输入端子。关键点在于:舵机电源和逻辑电源,在很多板子上是两套独立供电系统。舵机电源直接供给舵机接口的VCC/GND;逻辑电源经过板载稳压芯片给主控MCU供电。

板上那个跳线帽,通常是用来选择“逻辑电源从哪里取”的。插上跳帽,逻辑电源从舵机电源经过降压得到,好处是只需要一路电源,坏处是舵机电压波动会直接干扰控制器逻辑供电。拔掉跳帽,主板逻辑供电走USB或者独立逻辑电源接口,舵机电压再乱也不影响MCU工作,这样更稳定,也是我更推荐的方式。

我见过有人把舵机电源误接到逻辑电源接口上,结果就是:插上USB时控制器正常,一拔USB整板断电;或者舵机电源一启动,主控立刻重启。其实就是供电回路走进了错误路径。

2.2 为什么我不建议用USB口供电来驱动舵机

有的控制器板载5V稳压输出,看起来USB口插上电脑就能带动舵机。实际测试中,USB口的5V电源能带一两个小舵机做缓慢空载动作就已经到极限了。六足机器人满配18个舵机,想靠一个USB口供电纯属异想天开。更重要的是,USB供电和舵机电源共用一个回路时,舵机一动作产生的电流波动会直接拉低USB口的5V电压,严重时电脑会弹出“USB设备过流”提示,甚至导致控制器和上位机通信中断。

正确做法:舵机电源独立供电,USB口或者独立逻辑电源接口负责控制器逻辑部分,两者只共地,不断开。这样通信稳定性会有质的提升。

2.3 18650电池组做舵机电源的实测经验

热词里很多人搜“用18650电池给设备供电”,说明电池供电是移动机器人绕不开的话题。18650电池做六足机器人电源,最大的问题不是容量,而是放电能力。普通容量型18650,比如标称2000mAh、最大持续放电电流5A那种,用在六足机器人上一踩油门就电压跳水。必须选动力型18650,内阻小,最大持续放电电流在10A到20A以上。

电池组还有一个坑:保护板。很多18650电池组自带BMS保护板,过流会直接切断输出。舵机瞬时浪涌电流很容易触发保护板动作,表现为机器人“跑着跑着突然断电”,几秒后又自己恢复。这跟接线松动非常像,很容易误判。

我现在的电池方案是:4节动力18650串联组成7.4V/约8.4V满电的2S2P或2S1P组合,放电能力按20A以上选型,保护板限流值也特意选大一些的。注意满电8.4V对很多标称7.4V的舵机来说偏高,但舵机工作电压范围通常在6V到8.4V之间,8.4V属于边缘。如果你不确定舵机耐压,建议使用6V或者7.4V稳压模块降压后再给舵机供电,多一层保护。

3. PWM信号调试:从“没反应”到“乱转”的完整排查链路

供电搞定之后,下一个大宗翻车点就是PWM信号。众灵科技的产品线上既有传统PWM舵机接口,也有总线舵机接口。很多人拿到的控制器是总线舵机版本,但手里舵机却是PWM舵机,或者反过来,这就很容易产生“信号根本没发出去”的假象。

3.1 第一步必须确认:你接的是PWM舵机还是总线舵机

PWM舵机就是传统三线舵机(VCC、GND、信号线),靠50Hz左右的脉冲宽度控制角度。总线舵机则是通过串口半双工通信,一根信号线上传输指令帧,舵机内置驱动板和MCU,像LX-16A这类,逐个设置ID,通过指令控制角度、速度、扭矩。众灵科技的控制器接口,有的丝印标注的是PWM接口,有的标注的是总线舵机接口(SIG、VCC、GND三根线都有,但信号线性质完全不同)。

如果你把总线舵机接到PWM接口上,舵机大概率纹丝不动,因为总线舵机内部在等待串口指令,而PWM接口输出的只是占空比波形。反过来,你把PWM舵机接到总线舵机接口上,舵机可能会抽搐或者乱转,因为总线舵机接口在收发串口帧,信号线上是杂乱的数字脉冲,被PWM舵机当成脉宽信号解析了。

判断方法:直接看舵机型号。LX-16A、LX-15D这类带“总线舵机”标识的是串口舵机。MG996R、SG90、DS3218这些是三线PWM舵机。众灵科技控制器如果支持总线舵机,通常会在板上标明波特率或者“BUS”字样。

3.2 用示波器或逻辑分析仪确认波形,别靠“感觉”

很多人说“我已经生成PWM了,舵机不动”,然后开始怀疑舵机坏了,或者代码有问题。但我过去问一句“你怎么确定PWM波形出得来?”,得到的回答经常是“程序编译过了,下载成功了”。这种验证方式是不够的。

程序编译通过只代表语法正确,不代表定时器配置正确,更不代表引脚连线正确。我调试PWM信号总结出了一条原则:除非你亲眼看到了波形,否则不要假设信号存在。

用逻辑分析仪或者示波器,探头夹在舵机信号线和GND之间,观察是不是有周期性的脉冲。一个标准的舵机PWM控制信号,周期通常是20ms(频率50Hz),脉宽通常在0.5ms到2.5ms之间,对应0°到180°或者270°。如果周期不对,比如变成了10ms,舵机要么不响应,要么响应异常。这个过程很直接,二十块钱的逻辑分析仪就能干这个活。

3.3 STM32定时器输出PWM的常见配置误区

很多人在六足机器人主控上选STM32系列,用定时器输出PWM给舵机。核心计算的坑集中在预分频和自动重装载值上。假设定时器时钟84MHz,想要50Hz的PWM,计算方式是:

  • 预分频PSC = 167,也就是168分频,得到500kHz的计数器时钟;
  • 自动重装载ARR = 9999,500kHz除以10000,正好得到50Hz。
  • 脉宽比较值CCR:0.5ms对应2500,1.5ms对应7500,2.5ms对应12500,都在0到9999范围内。

这个配置在CubeMX里看很直观,但很多人忘了确认定时器的时钟源到底是APB1还是APB2,以及APB分频系数是多少。如果实际定时器时钟不是84MHz而是72MHz或者108MHz,那同一个PSC和ARR出来的频率就不是50Hz,舵机当然不会正常执行。所以拿到一个新板子,第一步永远先打开接口手册或者用工具读一下定时器时钟频率,不要想当然。

还有一个高频误区:把PWM信号线接到了复用功能不对的引脚上。STM32的每个定时器通道对应的引脚是一一对应的,比如TIM2_CH1在PA0,TIM3_CH1在PA6,你如果照着网上的例程把TIM3_CH1配置了,但实际杜邦线插的是PA0,那波形永远不会出现。用CubeMX重新映射或者查数据手册可以解决。

3.4 3.3V单片机与5V舵机信号之间的电平匹配

STM32大部分IO是3.3V电平,很多舵机信号线设计时希望接收5V或者更高一点的逻辑高电平。实测中发现,大多数舵机的信号输入引脚可以直接识别3.3V高电平,因为其逻辑阈值大约在1.5V到2.5V之间。但总有一批舵机对高电平幅值更敏感,3.3V可能处于临界区,表现为舵机动作时好时坏。

最稳妥的处理方式是加一个电平转换模块,把3.3V的PWM信号抬到5V。如果不想额外接线,至少也要把信号线上拉一个10K电阻到5V,帮助提高电平余量。反过来,千万不要直接用5V单片机引脚去接收3.3V逻辑的输出,存在烧毁风险。

4. 控制器与上位机联调:角度回读才是真正“看见”问题的窗口

供电理清楚了,波形也对上了,但舵机依然可能在联动时出问题。这时候就要进入上位机联调阶段。众灵科技的控制板配套了调试上位机软件,常见名字是“小幻调参”或者类似的舵机调试工具,可以通过USB转TTL连接控制器,直接读写舵机的角度、速度、扭矩参数。很多人把这软件当成“配置工具”,装完就丢一边,其实它是排查六足机器人问题最有力的窗口。

4.1 上电顺序:先舵机电源,后逻辑电源

上电顺序这个细节,看起来不起眼,但实际影响很大。先给控制器逻辑供电、后给舵机供电时,控制器已经初始化完成,舵机刚刚上电,会经历内部电容充电、电机自检的过程,此时如果上位机已经开始发送角度指令,舵机可能执行一个“不完整”的动作,导致机械结构瞬间受力,甚至撞到限位。

我踩过这样的坑:上电瞬间有一条腿的舵机猛甩到极限位置,“咔”的一声,差点扫齿。后来我把上电顺序改成:先接通舵机电源,等待1到2秒,再给控制器逻辑供电,让控制器在舵机完成上电自检之后再初始化总线,就再也没有出现过这个现象。如果你用的是可调电源,这个顺序通过两个开关就能轻松实现。

4.2 调参工具里的速度、扭矩和死区设置

六足机器人不是简单地给出目标角度就完事,每条腿的舵机在运动过程中需要协调速度,避免某条腿动作过快扯到机身。调参工具里的“速度”参数控制舵机每秒转动的角度,“扭矩”参数控制舵机输出的最大力量,“死区”参数则决定了舵机认为“我已经到目标位置”的误差范围。

实践建议:速度参数不要满值,六足机器人的动态稳定性需要各舵机协同,满速不仅容易导致机械冲击,还会放大供电压力。扭矩参数在调试阶段可以调低一些,比如设置最大扭矩的60%到80%,这样一旦机械结构卡死,舵机不会硬顶着烧掉。死区参数默认值一般够用,若舵机存在轻微抖动,可以把死区稍微调大一点,让舵机对微小误差不再反复修正。

4.3 角度回读和数据日志:把“看不见的负载”变成数字

六足机器人静态站立时,每个舵机其实都在承受机身重力。如果你不知道每个舵机的负载情况,就没法判断结构是否合理。调参工具的角度回读功能可以实时显示每个舵机当前角度,与目标角度对比,让你一眼看出是否有舵机“跟不上”。

真正有价值的是负载或电流回读。舵机承受的负载越大,电流越高。当六足机器人保持某个姿态时,某个舵机的负载值持续偏高,说明该关节处的机械结构存在别劲、干涉或者重心分配问题。这比靠手感去掰机器腿判断要可靠得多。

举一个实际例子:我调试机器人的时候发现右中腿的膝关节舵机负载比左侧同位置高出差不多一倍,仔细检查发现是腿部碳纤维板安装时有一颗螺丝拧歪了,导致关节轴承内部卡滞。拆下来重装后负载恢复到正常水平。如果不看回读数据,这个问题可能会以“舵机发热严重”或者“电池续航短”的形式困扰你很久。

5. 六足机器人调试中高频翻车的三个“隐形坑”

供电、信号、上位机都查过一圈之后,如果问题还在,那基本就是机械装配和电气连接层面的隐性坑了。这里说的三个坑,是项目群里出现频率最高的问题,我自己也都一一踩过。

5.1 共地问题:为什么信号通了,舵机还是不听话

PWM信号是相对某个参考地来测量的高/低电平。控制器发送PWM信号时,信号的高低电平参考的是控制器自己的GND。如果舵机电源地和控制器的GND之间没有连通,那舵机看到的信号高低电平就会发生偏移,轻则舵机对指令不敏感,重则完全失控。

最常见的是用两路独立电源,一路给舵机,一路给控制器,却忘记把两个电源的负极连在一起。排查方法很粗暴:用万用表蜂鸣档量一下舵机电源GND和控制器GND之间是否导通,正常情况下应该是0欧姆或者接近0。如果显示开路,那就老老实实拉一根粗线把两个GND接在一起。很多PWM信号“偶尔正常、偶尔抽风”的问题,都是共地不良造成的。

5.2 插头接触电阻与保险丝的“隐性限流”

大电流下,插头内部的金属弹片氧化或者接触松垮,会形成很高的接触电阻。这个电阻表现得很像“供电不足”,但实际上电源本身没问题。上次出现整机掉电的故障,追查到最后,是XT60插头某个触点因为长期插拔出现了氧化,呈现间歇性接触不良。电流一大,触点温度升高,电阻变大,电压跌落,然后触发保护。这类问题用万用表静态测量很难发现,最好在舵机动作时用示波器同时监控电源两端波形,或者用红外测温枪看插头温度。

自恢复保险丝也一样。有的控制器板载了自恢复保险丝,当浪涌电流超过一定值后保护动作,断开输出,等冷却后恢复。在六足机器人这种频繁大电流冲击的场景下,自恢复保险丝非常容易误触发。排查时如果发现控制器“用着用着就没输出,过一会儿自己恢复”,优先怀疑自恢复保险丝。

5.3 舵机ID冲突与波特率不一致

总线舵机调试时,还有一种“信号看起来没问题,舵机就是不动”的经典场景:ID冲突。两个舵机设了同一个ID,总线通信时,主控发指令给ID 1,结果两个舵机都认为自己被点名了,开始抢占总线,造成通信混乱,表现就是舵机乱动、抖动或者干脆不响应。

调参软件里通常都有“扫描舵机”功能,可以看到当前总线上所有舵机的ID。正确做法是给每个舵机分配唯一ID,并在外壳上贴标签。另一个容易被忽视的是波特率。控制器设置成115200,但某个舵机内部保存的波特率是9600,那它们之间通信肯定失败。调参软件一般允许重新设置舵机波特率,但前提是你能单独把一个舵机接上,在“一对一”模式下改参数。

6. 我复现过的故障记录与最终配置参考清单

最后把调试期间遇到过的高频故障按“现象、根因、处理办法”整理成一张表,方便你排查时对照。这些不是理论推演,是真实测试复现过的场景。

故障现象根因处理办法
上电瞬间全部舵机抽搐,随后失去响应舵机电源上电晚于控制器逻辑,舵机未完成初始化就开始接收指令调整上电顺序,先舵机电源后逻辑电源,或等待1至2秒再初始化
信号线有PWM波形,但舵机完全不动舵机是总线舵机,接到PWM接口;或者ID/波特率不匹配确认舵机类型,改用总线接口或串口指令;一对一重设ID与波特率
舵机低速时正常,高速时掉步甚至停转供电线径过细或插头接触电阻过大,电压动态跌落更换AWG16以上的硅胶线,检查插头接触,增加储能电容
单腿动作正常,六腿同时动时乱跳电源容量不足,瞬时电流叠加导致电压塌陷电源容量按峰值电流1.5倍以上选择,并加1000uF电容缓冲
USB插上正常,拔掉后控制器整体断电USB口承担了逻辑供电,且跳帽设置错误检查跳线帽,独立逻辑电源或保持USB供电,舵机电源与逻辑电源共地不共用
舵机某方向正常,反方向无力或抖动占空比调节范围超限,或者中立点偏移重新校准中位脉宽,限制PWM极值,在机械结构上调整舵臂角度
整机运行中偶发断电,数秒后恢复电池保护板过流保护触发换用放电电流更大的动力电池,或调整保护板限流值
舵机长时间运行后发热异常机械结构干涉,舵机持续承受额外负载检查关节装配、舵机安装角度,利用上位机回读负载数据定位

6.1 我当前确定下来的供电与信号配置参考

经过反复调试,我现在搭六足机器人时,供电和信号部分基本固定成了一套模板,可以直接抄:

  • 舵机电源:12V 30A开关电源,或4S动力锂电池经稳压模块到12V,峰值放电能力不低于20A;
  • 舵机供电线径:主干AWG14到AWG16,分支AWG18左右,杜绝杜邦线走大电流;
  • 储能电容:舵机电源入口并联1000uF/35V电解电容,并联一颗104陶瓷电容;
  • 控制器逻辑供电:USB口或独立5V稳压模块供电,跳帽设置为“逻辑电源与舵机电源独立”;
  • 信号线:单独走线,与电源线保持距离,长度超过20cm时使用带屏蔽的信号线或双绞线;
  • 上电顺序:先开舵机电源,等1至2秒,再给控制器逻辑上电;
  • PWM配置:确认定时器时钟频率后计算PSC和ARR,信号幅度通过电平转换模块升到5V;
  • 共地检查:用万用表蜂鸣档确认所有GND导通,再开始调试。

这套配置在18个舵机的六足机器人上没有出现过供电塌陷或者通信乱码的问题。多舵机系统调试本身就是个“系统性问题”,供电、信号、机械三者互相纠缠,任何一个环节没理顺,其他环节的检查都是在浪费时间。按照先供电、再信号、后联调的顺序走,能少走很多弯路。

最后分享一个小习惯:每次开始调试前,先花三分钟做静态检查——量一遍各路电源对地是否短路,确认GND导通,理一遍上电顺序,再看一眼舵机ID列表。这三十秒和几分钟的耐心,能帮你省下的是整整一个晚上的排错时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 18:26:22

中缀表达式求值实验全解析:栈与队列的实现与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:24:52

MOS管体二极管原理与应用:防反接、防倒灌及LTspice仿真实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:21:31

Allegro测量单位切换技巧:快捷键与画布显示配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:21:15

串口电平标准详解:TTL、RS232、RS485选型与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:19:39

西门子V90伺服驱动器面板控制与JOG调试全流程指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 18:18:10

RGB颜色查询对照表与感情色映射:从查表到自动配色实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华