新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32自整定PID温控系统:继电反馈法实现与工程避坑指南

发布时间:2026/9/28 13:44:51来源:尧图网络
STM32自整定PID温控系统:继电反馈法实现与工程避坑指南
1. 项目缘起与整体设计思路温控这个方向说它是嵌入式入门的“国民级项目”一点不夸张。你随便翻翻各类开源社区和毕业设计选题基于STM32的温控系统出现的频率高得离谱。但真正做过的人心里都清楚能跑通和能跑好之间隔着一条巨大的鸿沟。大部分教程教你的无非是“采集温度→和设定值比较→调PWM占空比”这个粗线条流程参数靠手动试凑超调大了就减小Kp响应慢了就加大Kp来回折腾半天最后勉强能用但说不清为什么。这套自整定温控系统的出发点就是解决这个痛点。它的核心思路是让控制器自己去“试探”被控对象的特性自动算出一组可用的PID参数而不是靠人反复盲调。整个系统围绕STM32F103系列芯片搭建因为它的定时器资源、ADC通道和运算能力对于温控这个量级的任务来说绰绰有余而且价格便宜、资料丰富踩坑了也容易找到人问。为什么选PID而不是更“高级”的模糊控制或者神经网络原因很实际。温控系统本质上是一个大惯性、纯滞后的对象从加热丝通电到传感器感知到温度变化中间可能有好几秒甚至几十秒的延迟。在这种场景下PID的鲁棒性反而比很多花哨的算法更靠谱。模糊控制规则表调起来不比PID省事神经网络更是杀鸡用牛刀。PID的问题从来不是算法本身不好而是参数难调。所以我把精力集中在自整定上让算法自己解决参数问题。自整定的实现方式有好几种常见的有继电反馈法Relay Feedback、阶跃响应法、以及基于临界比例度的Ziegler-Nichols法。我最终选了继电反馈法因为它不需要预先知道对象模型只需要让系统在设定值附近做一次等幅振荡通过测量振荡周期和幅值就能反推出临界增益和临界周期再套用Z-N经验公式算出PID参数。整个过程自动化不需要人工干预而且对大多数温控对象都适用。硬件部分的设计同样围绕这个思路展开。加热驱动用MOS管而不是继电器因为继电器开关寿命有限而且无法做PWM连续调节自整定过程中需要频繁切换加热状态继电器根本扛不住。温度采集用NTC热敏电阻配合分压电路进ADC成本低、响应快虽然线性度不如PT100但通过查表加线性插值可以做到±0.5℃以内的精度对于大多数温控场景完全够用。PCB设计上重点处理了模拟地和数字地的分离以及加热回路的走线宽度这些细节后面会展开说。这套系统适合谁如果你正在做基于STM32的毕业设计或者工作中需要快速搭建一个温控原型又或者你已经会写PID但总是调不好参数那这套方案可以直接拿去用。源码和PCB我都整理好了照着做基本能复现。下面我把整个设计和实现过程拆开来讲包括那些教程里不会写的坑。2. 核心细节解析与实操要点2.1 继电反馈自整定的原理与参数计算继电反馈法的核心思想其实很朴素给系统施加一个非线性的继电控制让它在设定值附近产生稳定的等幅振荡。具体来说当温度低于设定值时全功率加热高于设定值时停止加热如此反复。由于热惯性温度不会瞬间跳变而是围绕设定值上下波动形成一个近似正弦的振荡波形。这个振荡的幅值A和周期Tu是可以测量的。根据描述函数法继电环节的等效增益为Kc 4d / (π·A)其中d是继电输出的幅值也就是加热功率的满量程A是振荡幅值。这个Kc就是系统的临界增益Tu就是临界周期。有了这两个值就可以套用Ziegler-Nichols整定公式控制器类型KpTiTdP0.5Kc--PI0.45Kc0.83Tu-PID0.6Kc0.5Tu0.125Tu我实际用的是PID所以Kp0.6KcKiKp/(0.5Tu)KdKp×0.125Tu。这里要注意Z-N公式给出的是“快速响应但有一定超调”的参数如果你希望超调更小可以把Kp再乘个0.8左右的系数牺牲一点响应速度换取更平稳的过渡。实操中有个关键细节继电输出的幅值d不能太小否则振荡幅值A会被噪声淹没测不准但也不能太大否则温度波动过大可能损坏被控对象。我的经验是d取满量程的20%~30%比较合适。另外振荡周期至少要走3~5个完整周期再取平均值单次测量的误差可能很大。2.2 温度采集电路的设计与校准NTC热敏电阻的阻值随温度变化是非线性的直接线性化误差很大。我用的是查表加线性插值的方法预先在Flash里存一张温度-阻值对应表每隔5℃存一个点实际测量时先算出阻值然后找到所在区间做线性插值。这样在-20℃到150℃范围内精度可以做到±0.3℃。分压电路的设计要注意几点。上拉电阻的选取要匹配NTC的阻值范围比如我用的是10K25℃的NTC上拉电阻也取10K这样在25℃附近分压比接近1:1ADC读数在量程中点信噪比最好。ADC参考电压直接用STM32内部的3.3V但要注意这个电压会随电源波动如果对精度要求高最好用外部基准如TL431。软件上做了两点校准。一是零点校准在已知温度比如冰水混合物0℃下记录ADC读数算出偏移量。二是增益校准在另一个已知温度比如沸水100℃下记录读数算出增益系数。两点校准后精度能提升一个档次。校准参数存在Flash的特定地址掉电不丢失。注意NTC的引线电阻在长距离传输时会引入误差如果传感器离主板超过30cm建议用三线制接法消除引线电阻影响。2.3 加热驱动与PWM频率选择加热驱动用的是IRF540N MOS管导通电阻只有44mΩ10A电流下压降不到0.5V发热很小。栅极驱动用PC817光耦隔离防止加热回路的干扰串到MCU。PWM频率选的是1kHz这个频率下MOS管的开关损耗可以忽略同时不会产生可听噪声。如果频率低于200Hz加热丝会发出“嗡嗡”声高于20kHz虽然听不见但开关损耗会明显增加。PWM分辨率用16位也就是定时器ARR设为65535。这样占空比调节可以做到非常精细对于自整定过程中需要精确控制加热功率的场景很重要。实际运行时占空比限制在0~95%之间留5%的余量防止MOS管一直导通导致过热。还有一个容易被忽略的点加热丝断电后不会立刻冷却而是有一个热惯性。所以在PID输出计算时我加了一个“冷却补偿”项当输出从高占空比突然降到低占空比时额外减去一个与温差相关的修正量这样能减少温度过冲。这个补偿系数不需要很精确大概取Kp的10%左右就有明显效果。2.4 PCB布局中的地线处理与散热设计PCB设计这块温控板最大的坑就是地线。模拟部分NTC分压、ADC参考和数字部分MCU、通信必须分开走地最后在电源入口处单点汇合。如果混在一起走加热丝开关时产生的地弹噪声会直接串到ADC读数上温度显示会跳得厉害。我的做法是在PCB上划出一块独立的模拟地区域NTC分压电路和ADC输入滤波电容都放在这里然后用0欧姆电阻或者磁珠在电源地处和数字地连接。实测下来这样处理后ADC读数的峰峰值噪声从原来的±8个LSB降到了±2个LSB。加热回路的走线宽度至少要2mm以上因为10A电流下1oz铜厚的走线如果只有0.5mm宽温升会超过30℃。我用了3mm宽的走线并且开了窗镀锡进一步降低阻抗。MOS管下面铺了一块2cm×2cm的铜皮做散热配合小散热片连续工作2小时MOS管表面温度不超过60℃。提示如果加热功率超过50W建议把MOS管移到板子边缘并加装铝制散热片同时考虑用风扇强制风冷。3. 实操过程与核心环节实现3.1 开发环境搭建与工程配置开发环境用的是Keil MDK5配合STM32F1的器件包。安装过程没什么好说的但有一个坑值得提Keil5默认不包含STM32的器件支持包需要单独下载安装。如果你同时装了C51的Keil两个版本会冲突建议用Keil5的独立安装目录或者干脆用STM32CubeIDE免费且没有版权问题。新建工程后需要配置几个关键外设。ADC1的通道0接NTC分压配置为连续转换模式DMA搬运到内存这样不占用CPU。TIM1的通道1输出PWM频率1kHz分辨率16位。TIM2做1ms定时中断用于PID计算和自整定状态机。USART1用于调试输出波特率115200。时钟树配置为72MHz主频ADC时钟分频到12MHz不能超过14MHz。PWM定时器时钟也是72MHz预分频设为0ARR设为71999这样PWM频率就是72MHz/720001kHz。这些参数在CubeMX里点几下就配好了但要知道为什么这么配。// PWM初始化关键代码 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period 71999; // ARR TIM_TimeBaseStructure.TIM_Prescaler 0; // 不分频 TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; // 初始占空比0 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM1, TIM_OCInitStructure); TIM_CtrlPWMOutputs(TIM1, ENABLE);3.2 自整定状态机的实现自整定过程用状态机来管理一共四个状态IDLE空闲、RELAY_ON继电加热、RELAY_OFF继电停止、CALCULATE参数计算。状态转换由温度与设定值的比较结果驱动。typedef enum { AUTO_TUNE_IDLE, AUTO_TUNE_RELAY_ON, AUTO_TUNE_RELAY_OFF, AUTO_TUNE_CALCULATE } AutoTuneState; AutoTuneState tuneState AUTO_TUNE_IDLE; float setpoint 50.0f; // 目标温度50℃ float hysteresis 0.5f; // 回差0.5℃ float relayAmplitude 0.3f; // 继电输出幅值30% uint32_t lastSwitchTime 0; uint32_t periodSum 0; uint32_t periodCount 0; float maxTemp 0, minTemp 100;当温度低于设定值减回差时进入RELAY_ON状态PWM输出30%占空比当温度高于设定值加回差时进入RELAY_OFF状态PWM输出0。每次切换时记录时间戳计算半个周期累积多个周期后取平均得到Tu。同时记录振荡过程中的最高温和最低温差值就是2A。这里有个细节回差不能太小否则温度噪声会导致频繁切换测出的周期不准。我取0.5℃对于50℃的设定值来说大约是1%的波动实测比较稳定。如果被控对象噪声特别大可以适当加大回差但代价是振荡幅值A会变大算出的Kc偏小。3.3 PID参数计算与在线切换采集到足够的振荡周期后进入CALCULATE状态。先算临界增益Kc4d/(πA)再算PID参数。计算完成后把参数写入PID结构体状态切回IDLE同时使能PID输出。void AutoTune_Calculate(void) { float Tu (float)periodSum / periodCount / 1000.0f; // 转成秒 float A (maxTemp - minTemp) / 2.0f; float Kc 4.0f * relayAmplitude / (3.14159f * A); pid.Kp 0.6f * Kc; pid.Ki pid.Kp / (0.5f * Tu); pid.Kd pid.Kp * 0.125f * Tu; // 限幅保护 if (pid.Kp 100) pid.Kp 100; if (pid.Ki 10) pid.Ki 10; if (pid.Kd 50) pid.Kd 50; pid.integral 0; pid.prevError 0; tuneState AUTO_TUNE_IDLE; pidEnabled 1; }限幅保护是必须的。如果振荡幅值A测得很小比如传感器噪声导致Kc会算得非常大PID输出会剧烈振荡。我设了Kp上限100、Ki上限10、Kd上限50这些值是根据温控对象的典型特性定的一般不会触发但万一触发能防止系统失控。3.4 位置式PID与增量式PID的取舍网上关于位置式和增量式的讨论很多我的建议是温控场景用位置式。原因很简单温控对象是大惯性系统积分项需要累积才能消除静差位置式PID的积分项天然适合这种场景。增量式PID虽然抗积分饱和能力强但它的输出是增量需要额外维护一个累加器而且对噪声更敏感。位置式PID的实现float PID_Compute(float setpoint, float measured) { float error setpoint - measured; pid.integral error * pid.dt; // 积分限幅 if (pid.integral pid.integralMax) pid.integral pid.integralMax; if (pid.integral -pid.integralMax) pid.integral -pid.integralMax; float derivative (error - pid.prevError) / pid.dt; pid.prevError error; float output pid.Kp * error pid.Ki * pid.integral pid.Kd * derivative; // 输出限幅 if (output 1.0f) output 1.0f; if (output 0.0f) output 0.0f; return output; }微分项对噪声很敏感我在硬件上加了RC低通滤波截止频率约10Hz软件上又加了一阶低通滤波双重保险。实测微分项引入的噪声从±5%降到了±1%以内。注意如果被控对象升温很快而降温很慢比如加热丝加热、自然冷却PID输出会出现不对称。这时候可以在输出限幅上做文章比如正向限幅1.0反向限幅0.3让降温过程更平缓。3.5 串口调试与上位机监控调试阶段用串口把温度、设定值、PID输出、当前PID参数实时发到上位机用匿名上位机或者自己写个Python脚本画曲线。这个环节非常重要因为自整定过程中你需要观察振荡波形是否正常如果波形畸变严重说明继电幅值或者回差设置不合理。串口协议很简单每100ms发一帧格式为“$温度,设定值,输出,Kp,Ki,Kd\n”。Python端用pyserial读取matplotlib实时绘图。这样你能直观看到自整定前后的响应曲线对比调参的时候心里有数。import serial import matplotlib.pyplot as plt import matplotlib.animation as animation ser serial.Serial(COM3, 115200) fig, ax plt.subplots() xs, ys [], [] def update(frame): line ser.readline().decode().strip() if line.startswith($): parts line[1:].split(,) temp float(parts[0]) xs.append(len(xs)) ys.append(temp) ax.clear() ax.plot(xs, ys) ax.set_ylim(0, 100) ani animation.FuncAnimation(fig, update, interval100) plt.show()这个脚本我用了很久简单但够用。如果你需要更专业的波形分析可以用MATLAB的PID Tuner工具把阶跃响应数据导入进去它能自动给出参数建议和自整定结果互相验证。4. 常见问题与排查技巧实录4.1 温度读数跳动大怎么办这是最常遇到的问题。先查硬件NTC的引线是否太长分压电阻的精度够不够ADC参考电压是否稳定如果硬件没问题再看软件ADC采样是否开了DMA有没有做多次采样取平均我的做法是ADC连续采样16次去掉最大最小值后取平均这样能滤掉大部分随机噪声。如果还跳加一个一阶低通滤波截止频率1Hz左右。但要注意滤波会引入相位滞后对PID控制不利所以滤波强度要适中。还有一个隐蔽的坑STM32的ADC在采样时间太短时精度会下降。NTC分压电路的输出阻抗大约5KADC采样时间至少要设到55.5个周期才能保证采样电容充满。我一开始设的7.5个周期读数偏差很大改成55.5后就准了。4.2 自整定过程中振荡不收敛如果温度振荡幅值越来越大说明继电幅值d设得太大了系统进入了不稳定区域。这时候要减小d比如从30%降到15%重新整定。如果振荡幅值越来越小直到消失说明d太小温度变化被噪声淹没测不到有效振荡。这时候要加大d或者减小回差。还有一种情况是振荡周期不稳定忽长忽短。这通常是因为被控对象有多个时间常数或者环境温度变化太快。解决办法是等系统稳定后再整定整定过程中不要开关门窗或者改变散热条件。4.3 PID输出饱和导致温度过冲位置式PID的积分项在启动阶段会累积得很大导致输出长时间饱和温度冲过设定值很多才回落。解决办法有两个一是积分分离当误差大于某个阈值时暂时关闭积分项二是积分限幅把积分项限制在一个合理范围内。我用的是积分限幅integralMax设为输出满量程的50%。这样即使误差很大积分项也不会累积到失控的程度。另外在自整定完成后第一次使能PID时先把积分项清零避免残留值影响。4.4 常见问题速查表现象可能原因排查方法解决方案温度读数跳动大ADC噪声、引线干扰示波器看ADC输入加RC滤波、多次采样平均自整定不收敛继电幅值不当观察振荡波形调整d和回差温度过冲大积分饱和看PID输出曲线积分限幅、积分分离稳态误差大积分增益太小检查Ki值适当增大Ki响应太慢比例增益太小检查Kp值适当增大KpMOS管发热严重开关损耗大、散热不足测MOS管温度降低PWM频率、加散热片通信受干扰地线处理不当看通信误码率模拟数字地分开、加磁珠4.5 几个独家避坑技巧第一个技巧NTC的校准不要只做两点最好做三点。因为NTC的非线性在低温段和高温段不一样两点校准在中间区域准两端可能偏差大。我在0℃、50℃、100℃三个点校准用分段线性插值全量程精度都能保证。第二个技巧自整定完成后不要立刻切到PID控制先让系统在开环状态下稳定几分钟等温度接近设定值再切。这样能避免PID接手时误差太大导致输出饱和。第三个技巧如果被控对象升温很快但降温很慢比如加热块可以在PID输出上叠加一个“前馈”项。前馈量根据设定值和当前温度的差值查表得到直接加到输出上能显著加快响应速度。前馈表可以通过实验测定在不同温差下记录维持温度稳定所需的占空比做成表格。第四个技巧PCB上的NTC分压电路要远离加热回路走线至少保持5mm间距。如果空间允许在NTC走线两侧铺地并打孔屏蔽。我第一版没注意这个加热一开温度读数就跳10℃后来重新布局才解决。第五个技巧STM32的Flash写入需要先擦除再写入而且擦除操作会阻塞CPU。如果在校准参数保存时直接擦写可能导致PID控制中断。我的做法是在系统空闲时比如温度稳定后才保存参数并且保存前先关闭中断保存完再打开。5. 源码结构与PCB设计文件说明5.1 工程目录组织源码按功能模块划分每个模块一个.c和.h文件结构清晰方便移植到其他STM32型号。TempControl/ ├── Core/ │ ├── main.c // 主循环和状态机 │ ├── stm32f1xx_it.c // 中断服务函数 │ └── system_stm32f1xx.c // 系统时钟配置 ├── Drivers/ │ ├── ntc.c / ntc.h // NTC温度采集与校准 │ ├── pid.c / pid.h // PID算法实现 │ ├── autotune.c / autotune.h // 自整定状态机 │ ├── pwm.c / pwm.h // PWM输出控制 │ └── uart.c / uart.h // 串口调试 ├── App/ │ ├── app_temp.c // 温控应用层 │ └── app_config.h // 配置参数 └── MDK-ARM/ └── TempControl.uvprojx // Keil工程文件pid.c里除了PID计算函数还包含了参数限幅、积分分离、输出限幅等辅助函数。autotune.c里是自整定状态机的完整实现包括振荡检测、周期测量、参数计算。ntc.c里是查表插值和两点校准的实现。5.2 PCB设计要点回顾PCB是双层板尺寸50mm×40mm。顶层走信号线底层铺地。模拟区域在板子左侧数字区域在右侧中间用0欧姆电阻连接。加热回路的走线在板子底部宽度3mm开窗镀锡。元件布局上NTC接口放在板子边缘远离MOS管和加热接口。ADC输入滤波电容紧靠MCU的ADC引脚。晶振尽量靠近MCU走线包地处理。SWD调试接口放在板子边缘方便插拔。丝印标注了每个接口的功能和电压等级特别是加热接口标了“HOT”和最大电流防止接错。板子上留了四个M3安装孔方便固定在机箱里。5.3 移植到其他STM32型号的注意事项这套代码主要依赖三个外设ADC、定时器PWM、串口。移植到F4或者G0系列时主要改时钟配置和外设初始化部分PID和自整定的逻辑代码不用动。F4系列的ADC精度更高12位但参考电压也是3.3V所以NTC查表数据不用改。G0系列的主频低一些64MHzPWM频率可以保持不变但PID计算周期可能要适当放宽。如果移植到没有DMA的型号ADC采样改用中断方式在中断里读取数据并做滤波。注意中断频率不要太高否则会影响PID计算的实时性。提示移植时先用串口把关键变量打印出来确认ADC读数、PWM输出、PID计算都正常后再接加热回路避免烧坏元件。6. 实测数据与效果验证6.1 自整定过程实录被控对象是一个50W的PTC加热片贴在铝制散热器上NTC贴在散热器另一面。环境温度25℃设定值50℃。继电幅值设为30%回差0.5℃。自整定开始后温度从25℃上升到50℃用了约90秒。然后在50℃附近开始振荡振荡幅值约±1.2℃周期约18秒。采集5个周期后取平均Tu18.2秒A1.2℃。算得Kc4×0.3/(π×1.2)0.318Kp0.191Ki0.021Kd0.435。切到PID控制后温度在3个周期内稳定到50℃±0.3℃没有明显超调。从启动到稳定总共用了约4分钟其中自整定占了2分钟PID稳定占了2分钟。6.2 与手动调参的对比手动调参时我试了大概十几组参数才找到一组勉强能用的Kp0.25Ki0.015Kd0.3。响应比自整定慢一些稳定时间约5分钟稳态误差±0.5℃。自整定的参数响应更快稳态误差更小而且整个过程不需要人工干预。当然自整定不是万能的。如果被控对象的非线性特别强或者环境干扰很大自整定算出的参数可能不是最优的但至少是一个可用的起点。在这个基础上再微调比从零开始试凑要快得多。6.3 长时间稳定性测试连续运行8小时设定值50℃环境温度在22℃到28℃之间波动。温度记录显示稳态时温度波动在±0.4℃以内最大偏差出现在环境温度突变时比如开门约±1.5℃但能在2分钟内恢复。MOS管温度稳定在55℃左右散热片温度约45℃。ADC读数噪声峰峰值约±2个LSB对应温度约±0.1℃。整体表现满足大多数工业和民用温控场景的需求。这套方案我前后迭代了三版第一版自整定经常不收敛第二版ADC噪声太大第三版才把这些问题都解决。源码和PCB文件我整理在GitHub上搜“STM32 AutoTune TempControl”就能找到。如果你在复现过程中遇到问题先检查硬件连接和电源质量大部分问题都出在这两个地方。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

嵌入式驱动从能跑到量产级工程化:RTOS中断、Bootloader与稳定性实战 2026/9/28 19:47:36

嵌入式驱动从能跑到量产级工程化:RTOS中断、Bootloader与稳定性实战

1. 从“点灯成功”到“量产翻车”:一个让无数嵌入式人栽跟头的分水岭刚入行那会儿,我判断一个驱动写得好不好,标准特别朴素——灯亮了、串口出数了、电机转了,那就是成了。相信绝大多数做嵌入式的朋友都有过这个阶段:在…

阅读更多 →
SGK字典学习:面向边缘部署的稳定高效稀疏编码方案 2026/9/28 19:47:36

SGK字典学习:面向边缘部署的稳定高效稀疏编码方案

简介:本资源是一份面向图像处理与计算机视觉方向研究者及算法工程师的字典学习核心算法实现包,聚焦于SGK(Semi-Orthogonal Generalized K-SVD)这一针对大规模数据优化的高效字典学习方法,旨在解决传统K-SVD在计算效率与…

阅读更多 →
MiMo-V2.6双版本开源与本地部署实战:从API到成本优化 2026/9/28 19:47:36

MiMo-V2.6双版本开源与本地部署实战:从API到成本优化

1. MiMo-V2.6 双版本真相:Pro 与 Flash 不只是大小的区别我把标题那句话拆开看,信息量其实很大:小米发布并开源 MiMo-V2.6 系列,Pro 与 Flash 双版本,API 价格与前代持平。这里面最关键的词不是"发布"&#…

阅读更多 →
Codex不只写代码了:OpenAI插件系统实测,非程序员也能拿它干活 2026/9/28 19:47:36

Codex不只写代码了:OpenAI插件系统实测,非程序员也能拿它干活

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

阅读更多 →
Cursor CLI 来了,用 TaoToken 统一 Key 打通 Build anything 工作流 2026/9/28 19:47:36

Cursor CLI 来了,用 TaoToken 统一 Key 打通 Build anything 工作流

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

阅读更多 →
GitHub Copilot进阶指南:用TaoToken统一Key打通5个隐藏技巧的自动化开发流程 2026/9/28 19:47:30

GitHub Copilot进阶指南:用TaoToken统一Key打通5个隐藏技巧的自动化开发流程

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉