首页/新闻资讯/正文详情

STM32F103无刷电机FOC控制流程图详解与代码实现

发布时间:2026/9/25 6:41:43 来源:云帆数科 栏目:资讯中心
STM32F103无刷电机FOC控制流程图详解与代码实现
1. FOC控制流程图到底在画什么很多人第一次接触FOC脑子里全是公式Clarke变换、Park变换、SVPWM、电流环、速度环、滑模观测器……但真正到了动手写代码、调电机的时候最缺的其实不是公式而是一张能看懂的控制流程图。它告诉你每个控制周期里CPU到底该按什么顺序做事先采样还是先计算什么时候更新PWM什么时候跑观测器。FOC全称Field-Oriented Control磁场定向控制。它的核心思想不复杂把三相交流电机的定子电流通过坐标变换拆成两个直流量——一个管磁场d轴一个管转矩q轴。拆开之后交流电机就能像直流电机一样分别控制励磁和转矩动态响应快、转矩脉动小、效率高。这套思路落到嵌入式代码里就是一个按固定频率循环执行的状态机也就是我们说的FOC控制流程图。这篇文章面向的是正在用STM32F103RCT6这类主流MCU做无刷电机FOC驱动的开发者尤其是刚把硬件搭好、准备写控制代码或者代码跑起来了但电机抖、发热、启动失败的人。我会把FOC控制流程图从顶层到底层拆开讲包括每个环节为什么这么排、ADC采样时刻怎么定、电流环和速度环怎么嵌套、无感模式下观测器插在哪一步。看完之后你应该能自己画出一张适配自己项目的流程图并且知道每一笔为什么这么画。2. 整体控制架构与流程设计思路2.1 为什么FOC必须有一个严格的执行时序FOC和普通六步换相最大的区别在于它对电流的实时性要求极高。电流环的带宽通常在1kHz到5kHz意味着每200微秒到1毫秒就要完成一次“采样—变换—调节—输出”的闭环。如果时序乱了比如PWM更新和ADC采样错位采到的电流就不是当前时刻的真实值整个闭环就会震荡甚至发散。所以FOC控制流程图的第一原则是所有动作围绕PWM周期同步展开。通常的做法是让PWM定时器工作在中心对齐模式在计数器到达峰值或谷值时触发ADC采样采样完成后触发中断在中断里跑完整的FOC计算最后在下一个PWM周期更新占空比。这样采样点和PWM更新点都是确定的电流纹波最小采样最干净。我见过不少新手把FOC放在主循环里跑用软件延时控制节奏结果电机一转起来就啸叫。原因就是主循环被其他任务打断控制周期抖动太大。FOC必须放在高优先级中断里而且中断里只做FOC相关的事别塞串口打印、别塞Flash读写。2.2 有感和无感流程图的根本差异有霍尔或编码器的方案转子位置是直接读出来的流程图里位置获取这一步就是读传感器、算电角度简单直接。无感方案则要在流程里插入一个观测器环节用电压和电流反推反电动势再估算转子位置和速度。这个差异导致流程图结构不同有感FOC采样电流 → Clarke → Park用传感器角度→ 电流PI → 反Park → SVPWM → 更新PWM。速度环套在电流环外面用传感器算速度。无感FOC采样电流 → Clarke → Park用估算角度→ 电流PI → 反Park → SVPWM → 更新PWM。同时用当前电压电流跑观测器 → 估算反电动势 → 锁相环提取角度和速度 → 供下一个周期Park变换使用。注意无感方案里观测器用的角度是上一个周期估算出来的这就引入了一个周期的延迟。在低速时反电动势很小观测器信噪比差所以无感FOC通常需要开环启动等转速起来再切闭环。这个启动过程也要体现在流程图里一般单独画一个启动状态机。2.3 电流环、速度环、位置环的嵌套关系FOC流程图里最容易被画乱的就是三个环的嵌套。标准结构是最内环电流环每个PWM周期执行一次频率最高比如10kHz。中间环速度环每N个电流周期执行一次N通常取5到10频率1kHz到2kHz。最外环位置环只在需要精确位置控制时使用频率更低几百赫兹。画流程图时电流环是主循环速度环和位置环用分频计数器触发。比如电流环每1ms跑一次计数器加到10就执行一次速度环。这样既保证了电流响应又不会让速度环占用过多CPU。注意速度环的输出是q轴电流指令d轴电流指令通常设为0表贴式PMSM或负值弱磁。如果你做的是MPTA控制d轴指令要根据转矩查表或计算流程图里要多一个MPTA计算环节。2.4 一张完整流程图应该包含哪些模块我习惯把FOC流程图分成四层硬件触发层PWM定时器、ADC触发、中断优先级。信号采集层相电流采样、母线电压采样、温度采样。核心算法层Clarke、Park、PI、反Park、SVPWM、观测器。状态管理层启动、运行、故障保护、参数辨识。画图时从硬件触发层开始箭头指向信号采集再进核心算法最后回到PWM更新形成一个闭环。状态管理层作为旁路在特定条件下切入或切出。这样画出来的流程图既能看到数据流也能看到控制流。3. 核心环节拆解与实操要点3.1 ADC采样时刻FOC最容易被忽略的坑ADC采样时刻直接决定电流采样质量。在中心对齐PWM模式下计数器从0加到ARR再减到0。当计数器等于ARR峰值时三相下桥臂全开电流在续流采样不到真实相电流。正确的采样点是在计数器等于0谷值附近此时下桥臂导通采样电阻上有电流。具体操作把ADC触发源设为定时器的更新事件或比较事件在计数器过零时触发。STM32F103的TIM1可以配置为中央对齐模式ADC用TIM1的TRGO触发。采样窗口要避开开关噪声通常延迟几十纳秒到几百纳秒再采样这个延迟用定时器的比较通道或ADC的采样时间设置。实操心得如果采样电阻上的信号振铃严重可以在ADC输入端加RC滤波但截止频率要远高于电流环带宽否则相位滞后会导致震荡。我一般用1k电阻加1nF电容截止频率约160kHz对10kHz电流环影响很小。3.2 Clarke变换与Park变换的代码实现细节Clarke变换把三相电流ia、ib、ic变成两相静止坐标系ialpha、ibeta。对于三相平衡系统ic -ia - ib所以只需要采两相。公式ialpha ia ibeta (ia 2*ib) / sqrt(3)实际代码里为了省CPU常用等幅值变换系数用定点数或查表。Park变换把ialpha、ibeta旋转到dq坐标系id ialphacos(theta) ibetasin(theta) iq -ialphasin(theta) ibetacos(theta)theta是电角度有感方案从编码器读无感方案从观测器来。这里有个细节theta的精度直接影响转矩脉动。如果theta有1度误差转矩脉动大约0.5%。所以无感方案里锁相环的带宽要调好太低响应慢太高噪声大。3.3 电流PI调节器的参数整定与限幅电流环PI参数决定了电流跟踪速度。理论整定方法把电机电感L和电阻R代入PI的零点抵消电机极点比例增益Kp L * 带宽积分增益Ki R * 带宽。带宽一般取电流环频率的1/10到1/5比如10kHz电流环带宽取1kHz到2kHz。但实际调试时理论值只是起点。我通常先把Ki设为0慢慢加Kp直到电流波形开始震荡然后退回一半再加Ki消除稳态误差。限幅很重要输出要限制在母线电压能提供的最大电压矢量内否则积分饱和会导致恢复慢。抗积分饱和用反计算或条件积分。注意STM32F103是定点MCU没有FPUPI计算要用Q格式定点数。Q15或Q12都行注意溢出。我一般用Q15中间结果用32位累加。3.4 SVPWM的扇区判断与作用时间计算SVPWM比SPWM母线电压利用率高15%是FOC标配。流程根据ualpha、ubeta判断扇区计算相邻两个基本矢量的作用时间再算三相占空比。扇区判断用三个参考量 A ubeta B (sqrt(3)*ualpha - ubeta)/2 C (-sqrt(3)*ualpha - ubeta)/2 根据A、B、C的正负组合确定扇区。作用时间计算涉及母线电压和PWM周期。假设母线电压VdcPWM周期Ts基本矢量幅值2Vdc/3。作用时间T1、T2要满足T1T2 Ts否则要过调制处理。代码里为了省时间扇区判断和作用时间常用查表法。STM32F103的Flash够大把sin/cos表、扇区表都放进去运行时只做乘加。3.5 无感观测器滑模与龙伯格的选择无感FOC的观测器是流程图里最复杂的部分。常见两种滑模观测器用电流误差的符号函数驱动鲁棒性强但抖振大需要低通滤波引入相位延迟。龙伯格观测器基于电机模型线性观测器抖振小但对参数敏感。STM32F103资源有限滑模观测器计算量小更常用。流程用估算电流和实际电流的误差经过符号函数和增益得到反电动势估算值再经过低通滤波和锁相环提取角度和速度。实操心得滑模增益要随转速调整低速时增益小高速时增益大。我一般用转速的线性函数调试时先固定增益把高速调稳再补低速补偿。3.6 转子初始位置检测无感启动的第一步无感FOC上电时不知道转子在哪直接闭环会反转或堵转。初始位置检测方法高频注入法给d轴注入高频电压检测q轴电流响应凸极效应明显的电机能用。但表贴式PMSM凸极率低效果差。脉冲注入法给不同方向施加短时电压脉冲比较电流响应幅值最大响应方向就是转子N极方向。简单可靠但会产生转矩脉动和噪声。我常用脉冲注入法六个方向各给一个短脉冲比较电流上升斜率粗定位到60度电角度范围内然后开环强拖到一定转速再切闭环。流程图里这部分单独画一个启动状态机。4. 完整实操流程与关键代码解析4.1 硬件定时器与ADC配置以STM32F103RCT6为例TIM1产生三路互补PWM带死区。配置步骤使能TIM1和GPIO时钟配置CH1/CH2/CH3及互补通道为复用推挽输出。TIM1时基中央对齐模式ARR根据PWM频率设定。比如72MHz主频10kHz PWMARR 72000000/(2*10000) 3600。死区时间根据MOS管和驱动芯片设定一般500ns到1us。72MHz下死区寄存器值 死区时间 * 72。ADC配置规则通道扫描ia、ib、Vbus触发源选TIM1的TRGO在更新事件触发。ADC时钟不要超过14MHz采样时间选长一点比如55.5个周期保证采样保持电容充满。代码里初始化顺序很重要先配GPIO和TIM1再配ADC最后开中断。中断优先级ADC中断最高其他外设中断低。4.2 电流采样与偏置校准上电时电机没转电流为零此时采样得到的ADC值就是偏置。把偏置存起来运行时减去。偏置校准要在PWM输出关闭时做否则开关噪声会影响。#define ADC_OFFSET_SAMPLES 1000 void calibrate_current_offset(void) { uint32_t sum_a 0, sum_b 0; for (int i 0; i ADC_OFFSET_SAMPLES; i) { sum_a adc_read(IA_CHANNEL); sum_b adc_read(IB_CHANNEL); } offset_a sum_a / ADC_OFFSET_SAMPLES; offset_b sum_b / ADC_OFFSET_SAMPLES; }运行时ia (adc_read(IA_CHANNEL) - offset_a) * CURRENT_SCALE; ib (adc_read(IB_CHANNEL) - offset_b) * CURRENT_SCALE; ic -ia - ib;CURRENT_SCALE根据采样电阻和放大倍数算。比如采样电阻0.01欧放大10倍ADC参考3.3V12位则CURRENT_SCALE 3.3/(40960.0110) 0.00806 A/LSB。4.3 电流环中断服务函数完整流程这是FOC流程图的核心每个PWM周期执行一次。伪代码void FOC_ISR(void) { // 1. 读ADC结果 ia (adc_ia - offset_a) * CURRENT_SCALE; ib (adc_ib - offset_b) * CURRENT_SCALE; ic -ia - ib; // 2. Clarke变换 ialpha ia; ibeta (ia 2*ib) * ONE_BY_SQRT3; // 3. 获取电角度 if (mode SENSORED) { theta encoder_get_elec_angle(); } else { theta observer_get_angle(); } // 4. Park变换 id ialpha*cos_tab[theta] ibeta*sin_tab[theta]; iq -ialpha*sin_tab[theta] ibeta*cos_tab[theta]; // 5. 速度环分频 if (speed_counter SPEED_DIV) { speed_counter 0; speed observer_get_speed(); // 或编码器算速度 speed_pi_ref speed_pi(speed_ref - speed); iq_ref speed_pi_ref; id_ref 0; // 或MPTA计算 } // 6. 电流PI ud current_pi_d(id_ref - id); uq current_pi_q(iq_ref - iq); // 7. 反Park变换 ualpha ud*cos_tab[theta] - uq*sin_tab[theta]; ubeta ud*sin_tab[theta] uq*cos_tab[theta]; // 8. SVPWM svpwm_calc(ualpha, ubeta, duty_a, duty_b, duty_c); TIM1-CCR1 duty_a; TIM1-CCR2 duty_b; TIM1-CCR3 duty_c; // 9. 无感观测器更新 if (mode SENSORLESS) { observer_update(ualpha, ubeta, ialpha, ibeta); } // 10. 故障检测 if (overcurrent || overvoltage) { pwm_disable(); fault_flag 1; } }这个顺序不能乱。观测器更新放在最后因为它用的电压是本周期的电流也是本周期的估算出的角度给下一个周期用。如果放在Park变换之前就会用到旧电压和新电流模型不一致。4.4 速度环与电流环的配合调试调试顺序先调电流环电机堵转或空载给id_ref0iq_ref给阶跃看iq跟踪。电流环稳了再调速度环。速度环输出限幅要设成电机最大允许电流。速度环PI参数Kp_speed 转矩常数 * 转动惯量 * 带宽Ki_speed Kp_speed * 带宽/10。实际也是先P后I。速度环带宽一般取电流环的1/10到1/5。踩过的坑速度环输出不限幅电机堵转时iq_ref冲到很大电流环饱和恢复时反转。限幅值根据电机额定电流和母线电压算别拍脑袋。4.5 无感启动状态机实现无感启动分三段预定位给d轴一个固定电压矢量持续几百毫秒把转子拉到已知位置。开环强拖按设定加速度增加电角度频率同时给固定电压幅值电机跟着转起来。切换闭环当转速达到观测器能工作的最低转速通常额定转速的5%到10%切到观测器角度同时电流环切入。状态机代码typedef enum { STATE_IDLE, STATE_ALIGN, STATE_OPENLOOP, STATE_CLOSEDLOOP, STATE_FAULT } foc_state_t; void foc_state_machine(void) { switch (state) { case STATE_ALIGN: theta 0; ud ALIGN_VOLTAGE; uq 0; if (align_counter ALIGN_TIME) { state STATE_OPENLOOP; openloop_speed START_SPEED; } break; case STATE_OPENLOOP: openloop_speed ACCEL; theta openloop_speed * TS; ud OPENLOOP_VOLTAGE; uq 0; if (openloop_speed SWITCH_SPEED) { state STATE_CLOSEDLOOP; } break; case STATE_CLOSEDLOOP: // 正常FOC break; } }切换瞬间要做角度平滑否则转矩冲击。我一般让观测器角度和开环角度做加权过渡过渡时间100ms左右。5. 常见问题与排查技巧实录5.1 电机启动抖动或反转最常见原因初始位置检测不准或者开环强拖加速度太大。排查先用示波器看三相电流如果启动时有一相电流明显偏大说明预定位方向不对。解决增加预定位时间减小强拖加速度切换转速提高。另一个原因相序接错。FOC对相序敏感ia、ib接反或电机线顺序错都会导致旋转方向不对。排查手动给一个固定角度看电机是否停在预期位置。5.2 电流波形畸变、毛刺大ADC采样时刻不对是首因。用示波器同时看PWM和采样触发信号确认采样点在谷值附近。如果采样点落在开关瞬间电流毛刺会很大。调整触发延迟或者增加RC滤波。其次电流传感器偏置漂移。温度变化会导致偏置变化运行时如果发现id有直流分量说明偏置不准。可以在低速时重新校准或者用在线偏置估计。5.3 高速时电流失控、转速上不去母线电压不够。FOC在高速时反电动势接近母线电压电流环没有余量调节。检查母线电压和反电动势常数如果反电动势峰值超过母线电压的70%就需要弱磁或提高母线电压。SVPWM过调制也会导致失控。作用时间T1T2超过Ts时如果不做限幅占空比会溢出。代码里要加过调制处理按比例缩小T1、T2。5.4 无感观测器低速不稳低速反电动势小信噪比差。解决方法提高PWM频率减小电流纹波增加观测器增益但会放大噪声用高频注入辅助低速。实际项目里如果低速性能要求高建议用有感方案无感只做高速。5.5 常见问题速查表现象可能原因排查方法解决措施启动抖动初始位置不准示波器看启动电流增加预定位时间电流毛刺ADC采样时刻错看PWM与触发信号调整触发延迟高速失控母线电压不足测反电动势弱磁或升压低速不稳观测器信噪比差看估算角度波动高频注入或改有感id有直流偏置漂移看id波形在线偏置校准转矩脉动大角度精度差看theta误差调锁相环带宽过流保护误触发采样噪声看电流尖峰加滤波、调阈值电机发热电流环震荡看iq跟踪降Kp、加Ki5.6 独家避坑技巧中断里别用浮点STM32F103没FPU浮点运算靠软件模拟一次除法几百个周期。全部用Q格式定点sin/cos查表。PWM死区别省死区不够会直通炸管死区太大低速时电流畸变。根据驱动芯片和MOS管开关时间算留一倍余量。母线电压采样要滤波母线电压波动大直接用于SVPWM计算会导致占空比抖动。加一阶低通截止频率几百赫兹。调试先低压第一次上电用低压电源比如12V限流设小。确认波形对了再升压。保存故障现场过流时把电流、角度、占空比存到RAM复位后读出来分析。比反复复现高效。6. 流程图落地与代码组织建议6.1 模块划分与文件结构我习惯把FOC代码分成这几个文件foc_core.c/hClarke、Park、PI、SVPWM。foc_observer.c/h滑模或龙伯格观测器。foc_state.c/h启动状态机、故障处理。motor_params.h电机参数、采样系数、PI参数。main.c初始化和主循环。中断服务函数放在foc_core.c里通过函数指针或宏切换有感/无感。这样换电机只改参数文件算法不动。6.2 用状态机画流程图的技巧画流程图时把每个状态画成一个框框里写该状态执行的动作箭头写转移条件。比如ALIGN状态输出固定电压矢量计时。条件计时到 → OPENLOOP。OPENLOOP状态角度自增输出固定电压。条件转速到 → CLOSEDLOOP。CLOSEDLOOP状态正常FOC。条件故障 → FAULT。FAULT状态关PWM等待复位。这样画出来的图比单纯的数据流图更贴近代码也更容易发现状态遗漏。6.3 参数辨识与自适应电机参数R、L、磁链随温度变化固定PI参数在极端工况下可能不稳。进阶做法在线辨识R和L实时更新PI参数。辨识方法注入小信号测电压电流响应。STM32F103算力有限可以降频辨识比如每秒一次。MPTA控制也需要参数。表贴式PMSM的id_ref0就是MPTA内置式需要查表。如果做MPTA流程图里加一个“转矩指令→id_ref、iq_ref”的查表环节。6.4 代码优化让FOC在72MHz下跑10kHzSTM32F103跑10kHz FOC每个周期7200个时钟周期。ClarkeParkPISVPWM大概占2000到3000周期观测器占1000到2000周期剩下给ADC读取和杂项。优化手段sin/cos查表表长1024Q15格式。PI用增量式省一次乘法。SVPWM扇区判断用查表别用if-else嵌套。观测器低通滤波用移位代替除法。中断里只做必要计算速度环分频。实测下来优化后10kHz FOC在STM32F103上CPU占用约60%还有余量做串口通信和上位机调试。6.5 上位机调试与波形观测调FOC离不开上位机看波形。我一般用串口发数据波特率921600每1ms发一帧包含ia、ib、ic、id、iq、theta、speed。上位机用Python或LabVIEW画实时曲线。关键串口发送别放在FOC中断里会打乱时序。放在主循环用DMA发送中断里只更新缓冲区。发送频率别太高1kHz足够看趋势。最后分享一个小技巧调试时把id_ref、iq_ref、id、iq四条曲线放一起看。如果iq跟踪慢加Kp如果有稳态误差加Ki如果震荡降Kp。id同理。速度环看speed_ref和speed超调大降Kp响应慢加Ki。这套方法我用了很多项目基本能解决80%的调参问题。这个流程图后续还可以扩展加入弱磁控制高速时负id_ref加入无位置传感器的全速域切换加入CAN或EtherCAT通信做多轴同步。但核心流程不变还是采样、变换、调节、输出、观测这五步。把这张图吃透换任何电机、任何MCU都能快速搭出能跑的FOC。

相关推荐

STM32F407移植FreeRTOS+LwIP以太网通信实战指南
STM32F407移植FreeRTOS+LwIP以太网通信实战指南

/* 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 6:41:37

Agent技能化实战:从参数Schema设计到可插拔技能编排
Agent技能化实战:从参数Schema设计到可插拔技能编排

1. 项目背景:为什么我要折腾"技能化"这件事做AI Agent开发的朋友应该都有同感:真正让一个智能体从"能聊天"变成"能干活"的,不是模型本身有多聪明,而是你给它装配了多少可靠的能力。这个"能力&… · 2026/9/25 6:41:37

嵌入式烧录良率排查指南:从SWD到芯片保护的实用方法
嵌入式烧录良率排查指南:从SWD到芯片保护的实用方法

/* 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 6:41:37

从程序员到CTO:十年技术成长地图与关键决策复盘
从程序员到CTO:十年技术成长地图与关键决策复盘

1. 为什么说这是一张“地图”,而不是一套“规划”1.1 第一次见CEO时,他送给我的那句话我至今记得入职实习的第三天,被CEO叫进办公室。我当时以为是要谈转正名额,手心全是汗。结果他问了我一个到现在都影响我的问题:“你… · 2026/9/25 7:32:00

天津图文广告店探店实录:三种典型模式对比与避坑指南
天津图文广告店探店实录:三种典型模式对比与避坑指南

1. 别急着下单,先说说我为什么突然较真这件事事情的起因特别俗——去年底我工作室接了个连锁奶茶店的单子,需要在天津八个门店同时上新品灯箱和菜单,外加一批开业物料。以前这种东西我都是甩给楼下那家图文店,结果那次交付出了岔子… · 2026/9/25 7:32:00

SQLite3跨平台原生库编译与ABI兼容性实战指南
SQLite3跨平台原生库编译与ABI兼容性实战指南

简介:本资源是面向C后端开发者的SQLite跨平台开发套件,专为需要在Windows与Linux环境下快速集成轻量级嵌入式数据库的工程师设计,解决多架构编译链接时缺少原生库与头文件的典型痛点。压缩包共8个文件,包含Windows 64位/32位lib静… · 2026/9/25 7:31:48

AI Agent技能库工程化实践:从Prompt乱象到可控工具调用
AI Agent技能库工程化实践:从Prompt乱象到可控工具调用

如果你最近在研究AI Agent,一定遇到过类似的困局:模型什么都能聊,但一落到具体业务就抓瞎。我去年接手了一个智能客服项目,最初的方案是“一个大模型 一套大而全的Prompt 一份工具列表”,结果模型频繁选错工具、传错… · 2026/9/25 7:31:42

终端环境兼容性与云原生IDE实战指南:从手机写代码到生产级开发工作流
终端环境兼容性与云原生IDE实战指南:从手机写代码到生产级开发工作流

1. 这不是“手机能装个VS Code”——而是重构开发工作流的临界点 2026年,我拆开三台主力设备:一台折叠屏安卓旗舰、一台iPad Pro配妙控键盘、一台搭载ARM架构的Windows平板,把它们全换成主力开发机。不是为了炫技,而是因为本地ID… · 2026/9/25 7:31:42

Neo4j社区版5.26.0 Windows安装配置与避坑指南
Neo4j社区版5.26.0 Windows安装配置与避坑指南

/* 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 7:31:23

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* 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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维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
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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码