永磁同步电机VF控制实战:从原理仿真到代码生成的完整指南

发布时间:2026/10/20 8:36:52

永磁同步电机VF控制实战:从原理仿真到代码生成的完整指南 很多刚开始接触永磁同步电机控制的朋友第一步往往不是学“转起来”而是直接扎进FOC的三闭环磁链、电流环、速度环一屏全是反馈结果上电瞬间电流过冲、角度跳变半天找不到问题在哪。我在这套“澄远FOC笔记”前面几篇里反复提到过一个观点直接上FOC不是不行但第一次调试电机时你最好先有一个能“无脑转起来”的兜底方案。这篇第四篇笔记就把这个兜底方案的仿真和代码生成过程完整地拆一遍——也就是VF控制电压频率比例控制。VF控制不是FOC之外的野路子它是电机控制里最经典的开环标量控制也是我们后来调电流环、位置观测器时少不了的对照组。它最大的价值一句话讲明白没有位置传感器、没有电流闭环我照样能把三相电机稳稳地转起来并且通过它的表现判断电机本身是否正常。这篇文章我会从原理到仿真模型再到生成嵌入式C代码的完整路径来写适合正在学FOC但卡在“第一步怎么让电机转”这个问题上的开发者也适合给已经做闭环控制、但想回头补课的人做参考。1. 在聊FOC之前为什么先补VF控制这一课这个位置其实藏着一个很常见的学习误区。很多人一上来就把FOC挂在嘴边但真到实验室里第一步是拿一台电机、一个驱动器让它先旋转起来。如果没有位置反馈直接写FOC的矢量控制代码角度怎么来要么在电机轴上绑一个编码器要么靠观测器估但观测器低速段又非常难调。这两条路对新手都不友好。VF控制恰好避开了整个“角度获取”的难题它只需要在算法内部自己造一个虚拟的角度出来用这个角度去控制三相电压的输出电机就会按一定速度转起来。为什么说这个虚拟角度是关键你想一下逆变器输出的三相电压必须按一个确定的相位顺序去驱动三相绕组A相、B相、C相通电流的时间序列得是规律的绕组才能产生旋转磁场。“虚拟角度”就是给这个旋转磁场画好了一个圆圈轨迹电压矢量按这个角度走完一圈电机就转一圈。角度走过的速度越快旋转磁场转得越快电机转速自然就上升。这就是VF控制“无感也能转”的底层逻辑我不需要知道你转子现在转到哪个位置我只要保证我创造的旋转磁场足够强、并且转得足够平稳你就会被磁场拽着走。但这里马上会出现一个工程问题如果我只是随便给一个频率比如直接给到200Hz那不叫VF控制那叫硬拖。电机绕组在这个频率下需要多少电压才能建立足够的磁链电压给高了电流爆给低了转矩不够。VF控制的全部学问就是把“频率”和“电压”这两个量用一个合理的比例关系搭配好让电机磁通基本稳定不多不少。这个比例关系不是拍脑袋定的背后是一条非常简单的物理公式下一节详细说。我在这个系列里把VF放在FOC之前还有一个很实际的原因调试FOC时如果电流环参数不对会导致乱七八糟的波形你很难判断到底是参数不对还是电机本身有问题。VF控制给一个速度指令电机转起来电流平稳说明电机、驱动板、采样链路基本是好的。这时你再切入FOC调试至少能把“设备故障”和“算法故障”分开排查。本质上VF控制起到的是摸底测试的作用。2. VF控制的原理拆解电压和频率必须绑在一起的原因这一节我把VF控制用到的核心原理讲透。理解了原理后面搭模型和写代码都是有公式可依的而不是从网上抄个表下来硬填。2.1 恒定磁通背后那条物理公式先看电机的感应电动势公式。对永磁同步电机或者异步电机气隙主磁通产生的反电动势大约满足这样一个关系E 4.44 × f × N × Φ其中f是电源频率N是绕组等效匝数Φ是气隙主磁通。这个公式是交流电机理论的基波电动势公式它告诉我们如果频率上升时电压不跟着上升那么磁通Φ就会下降。磁通一旦下降电机的转矩能力直接变差就像一个壮汉吃不饱饭有力也使不出来。反过来如果频率低的时候电压依然给得很高比如启动阶段直接给额定电压那磁通就会被塞得很高变压器会饱和电机同样会表现出电流飞涨、发热严重。所以理想情况下要维持气隙磁通近似恒定就需要让反电动势E和频率f保持比例也就是大家经常说的U/f近似等于常数。又因为稳态时定子电压基本等于反电动势加上阻抗压降所以最经典的控制策略就是让输出电压U随着输出频率f线性变化。这里要纠正一个常见误解VF控制里的“电压”不是随便哪一个电压在三相系统里一般指相电压基波幅值。我们做仿真的模型中给到逆变器的参考电压也应该用这个口径。不同厂家标定VF曲线时有的是用线电压有效值有的是用相电压峰值你换到自己的项目里第一件事就是统一电压口径否则查表出来的电压能被直流利用率卡掉一大截。2.2 低频补偿启动时那点电压不是白给的如果严格按照U/f恒定的关系频率趋近于0的时候电压也应趋近于0。但实际电机启动时如果电压真的从0开始电机根本不会转。为什么因为低频时定子绕组的电阻压降占了相当大的比例。反电动势在低速时本来就很小如果输出电压也小那么大部分电压都会消耗在电阻上真正用于建立磁场和产生转矩的电压微乎其微。解决办法就是在VF曲线里加一个低频电压偏置也就是常说的boost电压或者叫起始电压补偿。补偿量没有统一的固定值一般先根据额定电流和定子电阻估算补偿电压大约等于额定电流乘以定子电阻然后再乘以一个经验系数。比如我手头这台仿真用的电机定子电阻0.25欧姆额定电流按3A峰值估算电阻压降就是0.75V再把系数放到2到3倍初始boost取2V左右比较合适。我做仿真时把补偿曲线定成这个样子U(f) min(2 0.1 × f, 20)其中U的单位是伏特表示相电压峰值f的单位是Hz表示输出电频率。也就是说在低频率区间电压并不是从0开始而是从2V起步之后每增加1Hz频率就增加0.1V当增加到20V之后就不再继续抬升进入额定电压饱和段。这条曲线应该被做成一个可以离线调整的查表参数因为到了真机调试不同电机、不同直流母线电压都要重新标定。2.3 从电压换算到PWM占空比算法里算出来的是目标相电压幅值但最终要输出到逆变器的是PWM占空比。这里有一个绕不开的公式相电压峰值 直流母线电压/2 × 调制深度以48V母线为例一半就是24V。如果采用最普通的正弦PWM线性调制范围的上限大概是0.866那么最大可输出的相电压峰值约为24 × 0.866 ≈ 20.78V。所以上面我选的额定相电压20V是有讲究的正好卡在正弦调制可以输出的范围内又留了一点余量给死区带来的电压损失不会出现算法想输出20V但PWM模块物理上根本给不出来的情况。如果采用更常见的SVPWM调制上限可以到直流母线电压除以根号348V母线大约对应27.7V那额定电压方面可以更低但这是另一个话题。VF控制仿真阶段我建议直接用正弦PWM一是实现简单二是和低调制区的线性关系更直观。等后面过渡到SVPWM你只要改写调制模块VF算法部分基本不用动。3. 仿真模型搭建从电机参数到斜坡环节逐块接线VF控制仿真模型不复杂但如果搭建的时候顺序不对很容易出现一些“看着在转实际全错”的假象。我一般把模型拆成五个块VF指令生成、PWM调制、逆变器、电机本体、机械负载。下面按我的搭建顺序说明。3.1 电机参数与模型选型我没有用特别复杂的电机模型就用一台表贴式永磁同步电机参数如下直流母线电压48V极对数4额定转速3000rpm额定电频率3000 / 60 × 4 200Hz相电压峰值额定值20V定子电阻0.25Ωdq轴电感0.45mH永磁磁链0.015Wb这个磁链值怎么选反电动势峰值近似等于磁链乘以电角速度在200Hz也就是1256rad/s时反电动势峰值约为0.015 × 1256 ≈ 18.8V再加上带载时电阻和电感上的压降额定相电压取20V是合理的。如果你自己搭模型也可以用类似思路反推磁链参数不至于出现反电动势比母线电压还高的离谱配置。电机模型我建议直接搭成Park方程形式也就是d轴和q轴的电压方程。有很多人偷懒用异步电机模型代替永磁同步或者用带霍尔的位置模型这都偏离了我们练VF的本意。Park方程模型结构清晰公式直接也能很方便地看内部电流变化适合学习。3.2 VF算法模块的三件套频率斜坡、查表输出、角度累加VF模块在模型里其实就干三件事。第一件事是频率指令斜坡。直接给目标频率会导致磁场突变启动电流很难看。所以要让目标频率经过一个斜坡积分慢慢到达设定值。我在模型里把斜坡时间按2秒设计即从0Hz均匀升到200Hz放仿真结果里看启动电流的冲击会比直接给频率小很多。斜坡时间不是越长越好太长会让电机低速段长时间大电流运行一会儿再说这个问题。第二件事是根据输出频率通过我上面给的输出电压公式算出当前电压幅值。第三件事最容易被忽略电角度累加。VF控制没有位置反馈所以角度必须由算法自己积分得到θ 2π × ∫ f dt这个角度在一个仿真周期内更新一次用离散积分实现就够。可以这么写每个电流控制周期把电频率乘以周期Ts再对2π取模累加进角度变量。注意这是“假角度”它不代表转子的真实位置只代表旋转磁场的相位。这个角度会同时用于PWM相位的生成也是后面我们从VF过渡到FOC时最难切换掉的一个量。3.3 逆变器和PWM部分的死区问题逆变器部分我直接建模成一个理想两电平桥臂但PWM调制里必须加死区时间哪怕加法很简单也要加。很多人仿真时图省事不给PWM加死区结果仿出来的电流波形漂亮得不像话拿到实板上立刻被高频噪声干扰、低速电流毛刺搞懵。死区时间在仿真里怎么体现很简单设置2μs死区。在10kHz开关频率下一个PWM周期是100μs死区占2%。如果你工作在低调制区域比如启动boost阶段占空比只有5%死区时间就占了相当大的比例实际输出电压会和理想占空比产生显著误差低速波形出现毛刺是必然的。这个毛刺不是仿真bug是物理世界的正常行为。保留它就是为了让你提前看到真机上会遇到的波形品质问题。PWM部分的输出频率和载波要分开说清楚载波是10kHz这是三角波调制频率VF输出的三相正弦波频率是慢速变化的电频率。离散采样时间我取100μs这比载波周期略大一点但足够稳定模型不会因为步长太大产生数值振荡。4. 仿真测试与结果判断三次运行看清VF的脾气模型搭完之后不要急着生成代码先把仿真跑透。我跑了三种工况空载斜坡启动、带负载运行、故意失步。每种工况都对应一个必须理解的VF控制固有特性过程非常值得复现。4.1 空载斜坡启动看电流和转速的起步过程第一次运行负载转矩设为0把目标电频率设到200Hz斜坡时间2秒。整个启动过程中输出频率从0匀速增加到200Hz输出电压按2V加0.1倍频率的规律同步上升。仿真结果里最值得看的两个量是相电流和转速。正常情况你会看到启动初期有一个小的电流尖峰这是给绕组建立磁链的过程我表里boost是2V这个尖峰不会太大随后随着斜坡推进电流会保持在一个较低水平。空载情况下转矩主要用来克服摩擦和惯量所以电流很小。相电流的波形是一个频率不断升高的正弦波和输出频率同步增长这个现象就说明旋转磁场确实在带动转子转动。跟我踩过的坑说一句如果启动那一下电流尖峰特别大首先去看boost电压是不是给太高了反过来如果启动电流平平但转速死活跟不上频率就要检查角度积分器有没有工作很多新手把角度积分器忘了PWM输出相位恒定电机根本不会转。4.2 增加负载观察功角的滞后现象第二次运行等2秒斜坡完成、转速稳定后在t2.5s时把负载转矩从0阶跃到0.15Nm然后继续观察。这里能看到VF控制最典型的现象转子磁极和定子旋转磁场之间会出现一个相位差行话叫功角。负载增加时转子瞬间被拽慢了一点功角变大产生更大的电磁转矩来平衡负载电流随之上升。由于VF控制没有位置反馈我们不知道功角到底拉大了多少但可以从dq轴电流里间接感知如果把采样电流变换到算法自己构造的那个“假角度”坐标系里你会发现q轴电流随负载一起变大这就是功角增大的投影。在这个阶段如果负载没有超过电机的最大转矩能力系统会达到一个新的稳态。这叫静态稳定性。你能看到转速最后稳定在接近200Hz对应的同步转速附近电流也稳定下来整个过程的电压指令并没有因为负载改变完全开环响应这就是开环控制的特性。4.3 故意失步一帧就能看透VF控制的天花板第三次运行我在原来的基础上在t3s时直接把负载从0.15Nm加到0.28Nm模拟冲击性负载。这次你会看到一条完全不同的曲线电流先是一路猛涨然后突然出现剧烈振荡转速下跌最后电机停转甚至出现反转的现象。这就是VF控制的致命弱点也是必须亲眼看一次才能理解的问题失步。负载过大导致功角被拉到一个临界值以上时转矩不但不随功角增加而增加反而会下降。此时转子跟不上旋转磁场的转速磁场扫过去之后转子反而被拖慢甚至锁死系统就彻底失控了。因为没有角度反馈控制器还在傻傻按原来频率输出完全不知道已经出事。判断失步的方法我的经验是看两个信号的关系一是电频率指令二是实际转速换算出来的电频率。正常运行时两者基本跟随失步时实际转速迅速下跌但指令频率还稳在200Hz这就是绝对不能继续往下跑的警告信号。在仿真里跑出一次失步比看十篇讲VF缺点的文章都有用你会对这个控制方式的边界条件形成一个直观的肌肉记忆。VF控制适合轻载、平稳调速的场合或者作为FOC的启动方式绝不能指望它干重负荷快速响应的活。5. 从仿真模型到嵌入式代码如何干净地生成并移植仿真跑明白之后下一步就是代码生成。这一节我重点讲两部分模型怎么组织才能顺利生成代码生成出来的代码怎么移植到工程里跑起来。5.1 模型组织算法和被控对象必须物理分离仿真时可不能把生成代码的算法模块和电机模型、逆变器模型混在一起全塞到一个大模型里。代码生成的正确姿势是只用VF算法这部分进入生成流程电机、PWM、逆变器这些被控对象留在仿真侧它们的作用只是在离线仿真时提供一个真实的物理环境。我搭建的项目结构一直是三层顶层是被控对象中间是接口变量底层是VF算法模块。VF算法模块里只放频率斜坡积分器、VF查表、角度累加、占空比计算这几部分。这样生成的代码函数的输入输出只有很有限的几个变量比如电流采样值、直流母线电压输出只有一个占空比或者调制波值干净明了。如果你把电机模型也放进去一起生成一旦目标工程里看不到那个电机模型代码就会引入大量的无效变量所以算法和物理模型分离是这个阶段一开始就要养成的习惯。代码生成配置方面我习惯把目标设置成通用的嵌入式C不绑定具体某个厂商的芯片初始化。生成出来的文件结构大致是模型初始化函数在启动时调用一次模型步进函数在中断里周期调用模型结束函数基本用不上但在工程习惯上保留。采样步长和中断周期必须严格一致不能代码里算的是100μs一次实际中断跑的是50μs倍数关系都不行会出现斜坡速度翻倍的问题。5.2 移植到主控板的三个动作拿到生成的C文件之后不求简单但求清晰。我建议用下面三个步骤接进自己的工程。第一步在主程序启动阶段调用初始化函数。这个函数会清零所有积分器状态包括角度累加值、频率斜坡当前值、boost补偿状态确保上电瞬间输出为0而不是一堆垃圾值。第二步在主中断里调用步进函数。中断周期就是采样周期频率建议和仿真保持一致的10kHz或更高。步进函数内部按顺序完成采样直流母线电压和电流、执行斜坡更新、根据频率查找电压表、累加角度、换算占空比、更新PWM比较寄存器。第三步也是最容易被忽略的把角度和频率跑一段时间后可能出现浮点误差。由于我们要对这个角度做2π取模而单片机里的浮点运算在长时间运行后会有小数漂移我建议在模型里就把角度表示成定点累加形式。比如用unsigned long按固定比例表示一圈累加到自然溢出时就等于做完了一整圈的取模不需要额外判断2π边界。这一点在仿真里看不出来但实机上跑十几分钟后就能感受到差别。5.3 代码生成里省不掉的两个细节浮点与查表质量如果你的主控芯片没有浮点运算单元那生成出来的代码里那种大量用double的地方一定要处理。普通MCU做一次double乘加可能要几十个周期中断里占用不可接受。处理方法要么把整个模型改成单精度浮点要么把问题改成定点。经验是先跑单精度确认结果和双精度差异在可接受范围再去改定点。定点主要改的是电压查表和角度累加查表可以用Q15格式角度累加则直接用一个自增变量模拟周期溢出。另一个经常被忽略的是查表质量。VF查表如果用最近邻查表频率稍微一变电压就跳一下电机电流上会有毛刺。正确的做法是在仿真模型里就把查表设成线性插值或者直接在算法里不要查表而是用一个简单的直线表达式比如U min(boost k×f, Umax)这样既省空间又平滑。代码生成出来后在工程里改参数也方便改的是一个全局常量而不是插入一堆表格数组。6. 从VF到FOC的衔接四个需要提前想清楚的坑最后一部分讲讲VF控制和FOC之间的过渡问题。很多人把VF仿真做完就扔了其实它最大的价值还没发挥出来——它应该成为你整个电机控制方案里“从无到有”的第一步而不是孤立的技术演示。6.1 VF跑出来后能用来估什么参数电机控制里最讨厌的一件事是电机参数不明确。没有实测电感电阻电流环PI参数很难给准。VF控制的第一个实战用途就是开着VF让电机在空载下转起来同时捕捉电流和电压的对应关系离线推估算定子电阻和交直轴电感的大概值。这不能用得太精确但作为初始PI设计的启动值是绝对够的。具体做法可以等下一系列笔记再展开这里先记住一句话VF不是只能转电机它还能给FOC提供初值情报省掉很多盲调时间。6.2 从开环VF切换到闭环控制的两种常见路径第一种是开环启动到中速再切FOC。低速时VF带着转速度提升到一定阈值后位置观测器开始有效工作再切换到FOC闭环。这种方案适合不允许额外安装位置传感器的场合但切换瞬间角度估计如果偏差大电流冲击和转速波动很容易出现。第二种更稳妥直接装一个位置传感器在真正完善FOC之前先用传感器把闭环跑通之后再评估是否去传感器。这个路径虽然多了一步硬件工作但对初学者来说它能让你把“电流环调参”和“角度观测器调参”这两件事分开难度曲线平缓得多。我自己更倾向于把两种方案结合先用传感器把FOC完整跑一边再在低速段用VF做为启动策略高速段再交给观测器这样既保留启动可靠性也解决低速无位置观测的难题。6.3 几个让我多花了好几个晚上才避开的小问题最后分享几个零碎但很实际的坑都是我在完成这套VF仿真和移代码时真正碰到的。频率斜坡时间不要拍脑袋定。我试过0.5秒就把频率拉到200Hz启动电流直接冲到额定好几倍差点烧掉功率器件也试过20秒超长斜坡倒是不冲击了但电机长时间停在低频区boost电压持续加在绕组上发热明显。工程里常按“启动电流不超过额定电流的1.5倍”来定斜坡时间轻载用2到3秒重载就需要更久。角度积分器的初值一定清零。听起来很蠢但我在仿真模型里曾经改过外部输入接口漏接了初值结果启动时角度从随机位置开始电机猛地抖了一下才进入旋转状态那个瞬间电流特别大。回到模型里把角度初值显式挂钩清零就再没出过这种问题。仿真里的boost电压不能直接原样搬到真机。仿真里数值理想真机上死区时间的影响会更强烈低速段电压误差更大我一般是在真机上把初始boost加大30%到40%再通过看电流波形微调直到启动电流波形和对电压的偏差表现正常为止。调试顺序永远是先看着波形调稳定再回头修表格。我的习惯是每改一次VF曲线就重新跑一遍空载斜坡和带载失步两个测试用例保留仿真截图。后面真机波形对不到理论上限时翻出仿真记录对照参考点往往很快就能定位到是软件问题还是硬件接线问题。这套方法比我刚开始盲目直接调FOC快得多也稳得多。
延伸阅读

更多相关文章

2026/10/20 8:36:52

微信小程序婚礼代码:可调试可上线的完整工程包

简介:这是一份面向前端初学者与婚礼策划从业者的微信小程序实战项目源码,提供开箱即用的线上婚礼全流程解决方案,涵盖电子喜帖、祝福墙、直播入口、日程导航、礼金提醒等核心功能模块。资源包共43个文件,含7个JS逻辑文件&#xff…

2026/10/20 8:36:52

Docker入门第一课:镜像、容器、基础命令与数据持久化要点

咱们直接说正事。这套课的第一节“Docker基础知识(课时1)”,讲的就是你第一次接触容器技术时,最该搞明白的那几件事:Docker到底解决了什么问题、镜像和容器是什么关系、常用的基础命令怎么用、有哪些坑会反复踩到。不扯…

2026/10/20 8:36:52

CRingBuffer实战:无锁环形缓冲区如何根治尾延迟抖动

有一阵子我调一个实时特征服务,单路数据流的延迟总是莫名抖动。业务线程往一个std::queue里 push 数据,消费线程再 pop 出来处理,原本队列基本是空的,延迟也很漂亮,但一旦上游抖动,队列积压到几百条&#x…

2026/10/20 9:57:25

天工Skywork桌面版部署指南:从源码包到可运行环境

简介:这份资源面向希望零代码上手国产桌面AI代理工具的办公人士与知识管理者,提供天工Skywork桌面版的完整部署指南与可运行源码,帮助非技术用户绕开WSL2,在Windows环境下完成原生部署。压缩包共3个文件,约4KB&#xf…

2026/10/20 9:57:25

10亿美元融资与三顾茅庐:AI泰斗押注世界模型与自监督学习

这事刚出的时候,我的几个技术交流群一下午都没消停。一位在卷积神经网络时代就封神的泰斗级学者A,从老东家那边转身离场,又跑到一位视觉表征领域青年学者B的门下反复游说,最终把这位长年在自监督学习一线深耕的华人学者拉进了自己…

2026/10/20 9:57:25

C#抓包实战:SharpPcap与PacketDotNet解析数据包

简介:面向C#网络编程学习者与开发者的数据包捕获解析完整项目,基于Socket编程实现指定端口的IP、TCP、UDP报文监听与解析,可辅助网络排错、协议学习和安全分析。压缩包共82个文件、约1.12MB,以24个C#源代码和3个可执行程序为主体&…

2026/10/20 9:57:25

基于SSM+Vue的天气查询毕设:从选题架构到部署上线的完整实战

又一个毕设季,后台经常有人问我:“不想做商城系统,也不想做博客了,有没有一个题目既不像玩具、又不会把自己写崩?”我的回答通常是同一个:天气查询。别小看这个小题目,它几乎没有支付、权限、并…

2026/10/20 9:52:24

Android USB串口打印热敏小票的底层通信与ESC/POS实战

1. 这不是“接个打印机”那么简单:Android USB串口打印的本质挑战很多人看到“Android USB串口打印结账单小票”这个标题,第一反应是:“不就是连个热敏打印机,发几行文本过去吗?网上一搜全是教程。”我最初也是这么想的…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

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

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

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

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑