1. 项目概述与核心需求解析1.1 这个驱动器到底解决什么问题ZDT_X系列_V2步进闭环驱动是一款面向精密运动控制场景的驱动模块核心定位是把传统开环步进电机的“盲走”模式升级为带编码器反馈的闭环控制。做过步进电机项目的人都知道开环步进最大的痛点就是丢步——负载突变、加减速过猛、共振区间没避开电机说停就停位置对不上整个系统精度直接崩盘。ZDT_X系列_V2的思路很直接在步进电机尾部加装磁性或光电编码器实时读取转子实际位置驱动器内部用PID算法动态调节电流和脉冲频率让电机始终追着目标位置跑。丢步了自动补过冲了自动收最终定位精度能稳定在编码器分辨率级别。这个说明书Rev1.0版本覆盖的内容包括硬件接口定义、拨码开关配置、上位机软件操作、串口/CAN通信协议、速度/位置/力矩三种控制模式、以及常见故障代码的排查方法。适合谁看做自动化设备、3D打印机、CNC雕刻机、激光切割机、机械臂关节、精密云台这类需要步进电机但又被丢步问题折磨的工程师和技术爱好者。哪怕你之前只用过开环驱动器只要懂基本的脉冲方向信号接线这本说明书就能带你平滑过渡到闭环控制。1.2 闭环驱动相比开环的实质提升很多人以为闭环就是加个编码器完事其实远不止。ZDT_X系列_V2内部做了几件关键的事第一电流环带宽做得比较高电机在低速时能输出更大扭矩高速时不会因为反电动势导致力矩骤降第二位置环和速度环解耦控制你可以单独调位置环的刚性和速度环的阻尼避免传统闭环那种“一调就振、不调就软”的尴尬第三内置了堵转检测和过载保护电机卡死超过设定时间会自动降流报警保护电机绕组不被烧毁。从实际项目经验看开环步进在500mm/s以上速度运行时负载稍微变化就可能丢步而闭环版本在同样条件下能保持位置误差在±1个编码器脉冲以内。这个差距在雕刻机换刀、3D打印填充拐角、机械臂抓取不规则物体时体现得特别明显。说明书Rev1.0里专门有一章讲“刚性调节与共振抑制”就是针对这些场景给出的参数建议。1.3 说明书Rev1.0的版本定位Rev1.0是ZDT_X系列V2的初始正式版说明书意味着它覆盖了硬件V2版本的全部功能但后续可能会有Rev1.1、Rev1.2来补充新固件特性。从文档结构看Rev1.0已经包含了完整的寄存器映射表和通信协议帧格式这对二次开发很重要。如果你打算用STM32或者树莓派通过串口控制这个驱动器寄存器地址和数据类型必须严格对照说明书否则写错一个字节就可能让电机飞车。注意Rev1.0说明书里的默认参数是针对42mm和57mm两相步进电机标定的如果你用的是86mm或者三相步进电机电流环参数和编码器线数需要重新配置不能直接套用默认值。2. 硬件接口与拨码开关配置详解2.1 电源与电机接线要点ZDT_X系列_V2的电源输入范围是DC 12V到48V建议留20%余量。比如你用42步进电机额定电流1.5A24V供电就够了但如果是57电机额定电流3A建议上36V或48V这样高速时力矩衰减小。接线端子从左到右依次是V、GND、A、A-、B、B-其中A和A-接电机的一相B和B-接另一相。如果你把同一相的线接反了电机会变成发电机状态驱动器可能直接报过流故障。编码器接口通常是6根线VCC、GND、A、A-、B、B-有些型号还带Z相索引信号。ZDT_X系列V2的编码器输入支持差分和单端两种模式差分模式下抗干扰能力更强建议在电机线较长的场合使用。说明书里特别强调编码器线必须用屏蔽双绞线屏蔽层单端接地否则电机转动时编码器信号容易被PWM噪声干扰导致位置读数跳变。2.2 拨码开关的功能分配拨码开关是ZDT_X系列V2配置硬件参数的主要方式一共8位分成三组第1-3位设置细分第4-6位设置电流档位第7-8位设置控制模式。细分设置从1到64可选对应脉冲当量从1.8°/脉冲到0.028°/脉冲。细分越高低速运行越平滑但高速时脉冲频率要求也越高。比如你设64细分电机转一圈需要12800个脉冲如果上位机只能发100kHz脉冲那最高转速就只有468RPM这个计算在选型时就要算清楚。电流档位通过拨码组合选择说明书里给了一张表对应不同电机额定电流。这里有个经验实际设置的电流应该比电机额定电流略小10%左右比如额定2A的电机设1.8A这样电机发热会明显降低而扭矩损失在大多数应用里可以接受。控制模式拨码决定驱动器上电后默认进入哪种模式纯脉冲模式、串口控制模式、或者CAN总线模式。如果你用PLC发脉冲就拨到脉冲模式如果用电脑上位机调试就拨到串口模式。2.3 信号输入输出端子说明脉冲和方向信号输入支持5V和24V两种电平通过端子旁边的跳线帽选择。这里踩过的坑是很多PLC的脉冲输出是24V推挽但驱动器默认跳线在5V位置结果脉冲信号被钳位电机根本不转。所以上电前一定要确认跳线位置和控制器电平匹配。使能信号ENA通常低电平有效悬空时驱动器使能接GND时电机自由。如果你想让电机在断电时能被手动转动就把ENA接GND。报警输出端子是集电极开路输出需要外接上拉电阻到24V最大灌电流50mA。这个信号可以接到PLC的输入点用来触发急停或者报警灯。说明书里还提到了一个“到位输出”信号当电机位置误差小于设定阈值时输出高电平这个功能在机械臂抓取场景里特别有用可以告诉上位机“我已经到位了你可以开始下一步动作”。3. 上位机软件与参数调试实操3.1 软件连接与基本配置流程ZDT_X系列V2的上位机软件通过USB转串口模块连接驱动器默认波特率115200数据位8停止位1无校验。第一次连接时软件会自动扫描串口如果扫不到检查驱动是否安装、串口线是否支持数据传输有些线只能充电。连接成功后软件界面会显示当前驱动器型号、固件版本和编码器状态。如果编码器状态显示“未连接”或“错误”说明编码器线接错了或者编码器损坏。基本配置流程是先设电机参数额定电流、编码器线数、细分再调电流环PID最后调位置环和速度环。说明书建议的调试顺序是先让电机在开环模式下转起来确认接线无误再切换到闭环模式。开环测试时你可以发一个低速脉冲看电机是否平稳转动如果出现抖动或者异响可能是相序接错或者细分设置不对。3.2 电流环与位置环参数整定电流环是内环响应最快一般用默认参数就能稳定。如果你发现电机低速时发热严重可以适当降低电流环的P增益如果高速时力矩不足可以适当提高I增益。位置环是外环决定电机跟随目标位置的刚性。P增益越大刚性越强但太大就会振荡D增益用来抑制振荡但太大会引入高频噪声。说明书里给了一组推荐值42电机配1000线编码器时位置环P800I0D20057电机配2500线编码器时P1200I0D300。实际调试时我习惯先用低P值让电机能转但有点软然后逐步加大P直到出现轻微振荡再回调10%最后加D把振荡压下去。这个过程需要耐心每次改参数后让电机跑一个来回观察位置误差曲线。上位机软件里有实时曲线功能能看到目标位置和实际位置的偏差非常直观。3.3 速度模式与力矩模式的应用场景速度模式适合连续旋转类应用比如传送带、搅拌器。你设定目标转速驱动器内部用速度环调节编码器反馈实际转速。速度模式下加速度参数很重要设得太大会导致电流冲击设得太小响应又慢。说明书建议加速度从1000RPM/s开始试根据负载惯量调整。力矩模式适合需要恒力输出的场景比如绕线机、压装机。你设定目标电流驱动器输出对应力矩电机转速由负载决定。力矩模式下堵转保护阈值要设好否则电机卡死时可能烧毁。ZDT_X系列V2的堵转保护可以设时间阈值和电流阈值超过阈值自动降流并报警。这个功能在绕线机断线检测里特别有用断线后负载消失电流骤降驱动器可以立即报警停机。4. 通信协议与二次开发要点4.1 串口通信帧格式解析ZDT_X系列V2的串口协议采用自定义帧格式每帧包含地址码、功能码、数据长度、数据区和校验和。地址码默认0x01可以通过软件修改这样一条总线上可以挂多个驱动器。功能码包括读寄存器、写寄存器、启动运动、停止运动、读状态等。数据区长度可变取决于功能码。校验和是前面所有字节的累加和取低8位。举个例子你要设置电机目标位置为10000脉冲帧格式大概是地址0x01 功能码0xFD 数据长度0x04 数据10000的十六进制 校验和。说明书里给出了完整的寄存器映射表比如0x00是使能寄存器0x01是控制模式寄存器0x02是目标位置寄存器。写寄存器时要注意数据类型有些是16位有符号有些是32位无符号写错了数据会完全不对。4.2 CAN总线通信配置CAN总线模式下ZDT_X系列V2支持标准帧和扩展帧默认波特率500kbps。每个驱动器需要分配唯一的节点ID通过拨码开关或者软件设置。CAN帧的ID分配有讲究说明书建议用功能码作为ID的高位节点ID作为低位这样接收端可以通过ID快速判断帧类型。比如0x100节点ID表示位置控制帧0x200节点ID表示状态查询帧。CAN总线的优势是抗干扰能力强适合长距离和多节点组网。在机械臂或者多轴运动平台上用CAN总线比串口菊花链更可靠。但要注意终端电阻总线两端各接一个120Ω电阻否则通信会不稳定。说明书里提到了一个常见问题如果通信时好时坏先检查终端电阻再检查线缆屏蔽层是否接地良好。4.3 寄存器读写与状态监控二次开发时最常用的操作是读状态寄存器和写控制寄存器。状态寄存器包含当前位置、当前速度、当前电流、报警代码等信息。位置和速度是32位有符号数单位是脉冲和脉冲/秒。电流是16位无符号数单位是mA。报警代码是8位每一位代表一种故障比如bit0是过流bit1是过压bit2是编码器错误。写控制寄存器时要注意写入顺序。比如你要启动一次位置运动先写目标位置再写加速度最后写启动命令。如果顺序错了驱动器可能用旧的目标位置启动。说明书里建议每次写多个寄存器时用连续写功能码这样一帧就能写完避免中间被其他帧打断。这个细节在多轴同步控制里特别重要否则各轴启动时间不一致轨迹会跑偏。5. 常见故障排查与避坑经验5.1 电机不转或抖动的原因分析电机不转是最常见的问题排查顺序是先看电源灯亮不亮不亮查电源再看使能信号ENA悬空或接高电平才使能再看脉冲信号用示波器或者LED测试仪看有没有脉冲最后看拨码开关细分和电流档位是否设对。如果电机抖动但不转多半是相序接错把A和A-对调或者B和B-对调试试。还有一个隐蔽的问题脉冲频率太高驱动器响应不过来。比如你设64细分上位机发200kHz脉冲电机理论转速是937RPM但驱动器内部处理能力有限可能丢脉冲导致抖动。这时候要么降低细分要么降低脉冲频率。说明书里给出了不同细分下的最大脉冲频率推荐值选型时对照一下就能避免。5.2 编码器报警与位置偏差过大编码器报警通常有三种编码器未连接、编码器信号错误、位置偏差过大。前两种是硬件问题检查线缆和接头。第三种是参数问题位置偏差阈值设得太小电机正常跟随误差就超了。说明书默认阈值是100个编码器脉冲如果你用2500线编码器100脉冲对应1.44°这个阈值对大多数应用够了。但如果你的机械结构有弹性变形可能需要放宽到200-300脉冲。位置偏差过大还可能是刚性太软电机追不上目标位置。这时候加大位置环P增益或者降低加速度。我遇到过一种情况电机在低速时位置很准高速时偏差越来越大最后报警。查了半天发现是速度环的I增益太小高速时速度跟不上位置自然偏差大。把速度环I增益加大后问题解决。这个经验说明书里没写但实际调试中很常见。5.3 通信失败与干扰问题串口通信失败先检查波特率是否一致再检查TX和RX是否交叉连接。如果通信时好时坏多半是干扰问题。电机线要和信号线分开走线至少间隔10cm交叉时垂直交叉。编码器线用屏蔽双绞线屏蔽层接驱动器GND。如果还不行在通信线上加磁环或者降低波特率到57600。CAN总线通信失败先查终端电阻再查节点ID是否冲突。如果总线上有多个节点某个节点发送错误帧会导致整个总线瘫痪。ZDT_X系列V2有总线错误计数器读出来看看哪个节点错误多重点排查那个节点的接线和电源。说明书里提到了一个技巧用CAN分析仪抓包看错误帧的ID能快速定位问题节点。5.4 常见问题速查表现象可能原因排查方法解决措施电机不转电源未接通测电源端子电压检查电源和接线电机不转使能信号未生效测ENA端子电平悬空或接高电平电机抖动相序接错对调A和A-重新接线电机抖动脉冲频率过高降低脉冲频率降低细分或频率编码器报警编码器线接错检查A、A-、B、B-重新接线位置偏差大位置环增益太小加大P增益重新整定参数通信失败波特率不匹配检查软件设置统一波特率通信干扰信号线未屏蔽检查屏蔽层屏蔽层接地CAN通信失败终端电阻缺失测总线电阻加120Ω电阻电机发热严重电流设置过大测相电流降低电流档位提示每次修改参数后建议先保存到驱动器EEPROM再断电重启验证。有些参数掉电不保存重启后恢复默认值会导致调试结果白费。6. 实际应用场景与选型建议6.1 3D打印机与CNC雕刻机应用在3D打印机上ZDT_X系列V2主要用在X/Y轴和挤出机。X/Y轴要求高速和高精度闭环驱动能有效抑制拐角丢步打印出来的模型尺寸更准。挤出机要求力矩稳定闭环驱动能检测堵料堵转时自动报警避免打印失败。说明书里建议3D打印机用32细分位置环P600D150这个参数在大多数i3结构上都能稳定运行。CNC雕刻机对刚性要求更高尤其是雕刻硬材料时切削力变化大开环步进很容易丢步。闭环驱动能把位置误差控制在几个脉冲以内雕刻出来的线条更光滑。但要注意CNC主轴电机干扰大编码器线和主轴线一定要分开走否则编码器信号被干扰位置读数跳变反而比开环还差。我试过在主轴线上加磁环编码器线用双绞屏蔽线问题基本解决。6.2 机械臂与精密云台应用机械臂关节用闭环步进最大的好处是能知道每个关节的实际角度不需要额外加限位开关回零。ZDT_X系列V2的到位输出信号可以接到主控主控发完运动指令后等到位信号再执行下一步。这样抓取动作的时序更可靠不会因为某个关节没到位就闭合夹爪导致抓空或者撞机。精密云台要求低速平滑闭环步进在低速时比开环更稳因为编码器反馈能抑制低速爬行。说明书里建议云台用64细分速度环P500I200这样低速转动时几乎听不到噪音。但要注意云台的负载惯量要匹配如果云台太重电机选小了闭环也救不了还是会丢步。选型时电机的保持扭矩至少要是负载扭矩的2倍以上。6.3 选型时容易忽略的参数选闭环步进驱动器除了看电流和电压还要看编码器线数和最高响应频率。编码器线数决定位置分辨率2500线编码器配4倍频分辨率是10000脉冲/圈对应0.036°。最高响应频率决定电机最高转速比如驱动器支持200kHz脉冲64细分下最高转速是937RPM。这两个参数要一起看不能只看一个。还有一个参数是电流环带宽说明书里没直接写但可以从电流环PID的默认值推断。带宽越高电流响应越快力矩输出越及时。如果你用驱动器带大惯量负载电流环带宽不够电机会感觉“软”加速时力矩跟不上。这时候可以适当加大电流环P增益但要注意别引起振荡。我一般从默认值加20%开始试每次加10%直到电机加速有力且不振荡为止。7. 固件升级与长期维护建议7.1 固件升级操作步骤ZDT_X系列V2支持通过串口升级固件升级前要备份当前参数因为升级后参数可能恢复默认。升级步骤是先给驱动器断电把BOOT跳线短接再上电驱动器进入Bootloader模式。然后打开升级软件选择固件文件点击升级等待进度条走完。升级完成后断电拔掉BOOT跳线再上电驱动器运行新固件。升级过程中不能断电否则驱动器可能变砖。如果变砖了需要重新短接BOOT跳线再上电重新升级。说明书里特别提醒升级固件前要确认固件版本和硬件版本匹配V2硬件不能刷V1固件否则可能损坏驱动器。这个坑我踩过刷错固件后电机直接飞车幸好断电及时没烧电机。7.2 日常维护与寿命延长闭环步进驱动器的寿命主要取决于电解电容和MOS管。电解电容在高温下寿命会缩短所以驱动器要装在通风良好的位置避免阳光直射。如果环境温度超过40℃建议加装散热片或者风扇。MOS管的寿命取决于电流冲击所以加速度不要设太大避免频繁过流。编码器是机械部件长期使用后可能有灰尘或者磨损。如果发现位置读数偶尔跳变先清洁编码器码盘用无水酒精和棉签轻轻擦拭。如果清洁后还不行可能是编码器老化需要更换。编码器更换后要重新校准零位说明书里有校准步骤一般是让电机转一圈驱动器自动记录Z相信号位置。7.3 参数备份与批量配置如果你有多台设备用同款驱动器参数备份和批量配置能省很多时间。ZDT_X系列V2的上位机软件支持导出参数文件格式是CSV或者二进制。导出后连接另一台驱动器导入参数文件一键写入。但要注意不同电机的编码器线数可能不同导入后要检查编码器相关参数否则位置读数会错。批量配置时建议先配置一台样机跑一遍完整测试确认参数无误后再导出。然后批量导入每台都做一次简单测试比如转一圈看位置是否归零。这个流程虽然麻烦但能避免批量故障。我见过有人批量导入参数后没测试结果一批设备全部丢步返工成本很高。8. 个人实操体会与进阶技巧8.1 刚性调节的“手感”培养调位置环刚性说明书给的是参考值实际手感要靠积累。我的经验是先用手转动电机轴感受阻力。如果阻力均匀且有一定弹性说明刚性适中如果阻力忽大忽小说明刚性太强有振荡趋势如果几乎没阻力说明刚性太软。然后发一个阶跃位置指令看电机响应。好的响应是快速到位超调小无振荡。如果超调大加D如果到位慢加P。这个手感培养需要时间但一旦掌握调参就很快。我一般用“听声音”辅助判断刚性合适时电机声音清脆刚性太强时声音发闷有嗡嗡声刚性太软时声音无力有拖尾。这个技巧在嘈杂环境下不好用但在安静实验室里很有效。8.2 多轴同步的时序优化多轴运动平台用闭环步进同步是个难点。如果各轴独立控制启动时间有先后轨迹会偏。ZDT_X系列V2支持CAN总线广播帧可以同时给多个驱动器发启动命令。但广播帧没有应答如果某个驱动器没收到就不同步了。我的做法是先用广播帧发启动命令再逐个查询状态如果某个轴没启动单独补发。这样兼顾了同步性和可靠性。另一个技巧是统一各轴的加速度和速度参数这样即使启动时间有微小差异运动过程中也能逐渐同步。如果各轴参数差异大快轴会等慢轴轨迹会拐弯。说明书里建议多轴同步时位置环参数尽量一致编码器线数也尽量一致这样各轴响应特性接近同步更容易。8.3 闭环步进与伺服电机的选择边界很多人问闭环步进和伺服电机怎么选我的经验是如果负载惯量比小于5速度要求低于1000RPM精度要求低于0.1°闭环步进性价比更高。如果负载惯量比大于10速度要求高于2000RPM精度要求高于0.01°那就选伺服。闭环步进的优势是低速力矩大、成本低、接线简单伺服的优势是高速性能好、过载能力强、控制精度高。ZDT_X系列V2在低速大力矩场景下比如爬坡、起重、挤压表现比伺服还好因为步进电机低速时力矩不衰减。但高速时步进电机的反电动势大力矩下降快这时候伺服的优势就出来了。所以选型时先看速度要求再看负载惯量最后看预算。不要盲目追求闭环步进或者伺服适合的才是最好的。8.4 一个容易被忽略的细节电源纹波闭环步进驱动器对电源纹波比较敏感纹波大了会导致电流环振荡电机发热增加。说明书里建议电源纹波小于100mV但实际很多开关电源纹波在200mV以上。我的做法是在驱动器电源端并联一个1000μF的低ESR电解电容再并一个0.1μF的陶瓷电容纹波能降到50mV以下。这个改动成本很低但效果很明显电机发热和噪音都会降低。还有一个细节电源线要尽量短粗线径至少1mm²减少线路压降。如果电源线太长太细电机加速时电压跌落驱动器可能报欠压故障。我遇到过一台设备电源线用了0.5mm²的线长度3米电机加速时驱动器频繁欠压报警。换成1.5mm²的线后问题消失。这个坑在说明书里没写但实际布线时一定要注意。
企业数字化 ERP 产品动态
相关推荐
CH32V307移植FreeRTOS全指南:RISC-V内核任务调度与实战排错 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:26:34
Zeek不是高级Wireshark:网络流量语义分析实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:26:34
OpenHarmony 4.0源码编译完整实践:从环境搭建到RK3568镜像 开篇:为什么我坚持要把OpenHarmony源码编译踩一遍说句实话,OpenHarmony这套系统和Android源码编译完全是两个世界。Android的编译体系经过十几年迭代,AOSP那套脚本早就被各种厂商打磨得相当顺滑,只要网络没问题、磁盘够大… · 2026/9/25 1:26:28
Vaex 基准测试实战:基于 ASV 的本地开发与自动化性能监控体系 数据分析数据可视化大数据数据科学 【免费下载链接】vaex Out-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 🚀 项目地址: https://gitcode.com/gh_m… · 2026/9/25 2:02:55
三菱FX5U以太网通信实战:MC协议与SLMP帧解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:02:49
MATLAB稀疏表示实战:从OMP算法到K-SVD字典学习全解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:02:49
ESP32驱动PMW3901光流传感器:从SPI时序到位移累计完整指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:02:49
OpenCV三维点云重建:从深度图到网格的全流程实践 简介:这是一份面向计算机视觉工程师、三维重建研究者及OpenCV进阶学习者的深度技术文档,系统解决稠密点云重建中法线估计不准、网格生成质量差、多视角融合误差累积等核心难题。全书732页,含52个章节,覆盖从相机标定、立体匹配、视… · 2026/9/25 2:02:49
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37