STM32F103定时器寄存器实战:从时基单元到PWM与输入捕获
1. 为什么第八章值得单独拎出来讲如果你跟着前七章一路看下来应该已经对 STM32F103 的 GPIO、时钟树、中断向量、串口这些基础外设的寄存器有了手感。到了第八章很多人的学习曲线会突然变陡——因为从这里开始我们正式进入**定时器TIM**的世界。我见过太多人在这一章卡住明明 GPIO 点灯已经玩得很溜一到定时器就懵了看着那一长串寄存器名字CR1、DIER、SR、EGR、CCMR1、CCER……完全不知道从哪下手。这一章之所以值得单独拿出来讲是因为定时器是 STM32F103 里最复杂、最灵活、也最容易被低估的外设。它不只是定时中断这么简单PWM 输出、输入捕获、编码器接口、单脉冲模式、从模式触发……这些功能全都挂在同一个 TIM 模块上。而寄存器手册里那些缩写官方文档写得极其精炼初学者看三遍都不一定能对应到实际场景。我写这一章的思路很明确不按手册的寄存器顺序讲而是按你想干什么事来组织。你想让定时器每 1ms 中断一次你想输出一路 50Hz 的 PWM 驱动舵机你想测量一个外部脉冲的宽度每一种需求对应的是哪几个寄存器、哪几个位、按什么顺序配置我尽量用白话把它拆开。寄存器手册是字典这一章是怎么用这本字典查你想要的东西。需要提前说明的是STM32F103 的定时器分好几类高级定时器 TIM1/TIM8、通用定时器 TIM2~TIM5、基本定时器 TIM6/TIM7。它们的寄存器有大量重叠但功能差异不小。这一章我以通用定时器 TIM2~TIM5为主线因为它是绝大多数项目里用得最多的高级定时器特有的刹车、死区、互补输出这些我会在涉及的地方点出来但不展开成独立章节避免把主线冲散。2. 定时器到底在数什么从时基单元说起2.1 三个寄存器决定了一切时间行为很多人配定时器时是抄代码——别人写PSC7199, ARR9999他也跟着写但问他为什么是这两个数就答不上来。要真正搞懂你得先明白定时器的时基单元由三个东西构成预分频器 PSC、计数器 CNT、自动重装载寄存器 ARR。想象一个沙漏。系统时钟比如 72MHz就是沙子流下来的速度快得吓人——每秒 7200 万粒。预分频器 PSC 相当于在沙漏上方加了个筛子把流速降下来。如果你设 PSC7199那么实际流入计数器的频率就是 72MHz / (71991) 10kHz。注意这里永远要加 1因为 PSC 寄存器写 0 表示 1 分频写 7199 表示 7200 分频这是新手最容易记错的地方。计数器 CNT 就是沙漏下面接沙子的容器它每个时钟周期加 1。加到什么时候停由 ARR 决定。如果 ARR9999那么 CNT 从 0 数到 9999一共数了 10000 个数然后产生一次溢出事件更新事件CNT 归零重新开始。所以整个定时周期 (PSC1) × (ARR1) / 时钟频率。代入上面的数7200 × 10000 / 72000000 1 秒。这就是一个 1 秒定时器的完整推导。我建议你在纸上把这三个寄存器的关系画一遍比看十遍手册都管用。理解了这一层后面所有定时器功能都是在这个时基上做文章。2.2 时钟从哪来别忘了打开 RCC这是我在实际带人时发现的高频错误寄存器配置全对但定时器就是不动。九成原因是忘了使能定时器时钟。STM32F103 的外设时钟默认是关闭的你得先在 RCC_APB1ENRTIM2~TIM7或 RCC_APB2ENRTIM1、TIM8里把对应位置 1。TIM2 在 APB1 总线上对应 RCC_APB1ENR 的 bit0TIM3 是 bit1以此类推。高级定时器 TIM1 在 APB2 上是 RCC_APB2ENR 的 bit11。这个对应关系记不住没关系但你要养成习惯配置任何外设前先问自己时钟开了没。还有一个坑APB1 的默认时钟是 36MHz但定时器有个倍频机制——当 APB1 预分频系数不为 1 时定时器时钟会自动乘以 2变成 72MHz。所以你在算 PSC 时用的时钟频率很可能是 72MHz 而不是 36MHz。这个细节手册里写了但藏在时钟树的注释里很多人算错了时间还找不到原因。2.3 CNT 的计数方向与对齐方式通用定时器支持三种计数模式向上计数、向下计数、中央对齐先上后下。向上计数最常用CNT 从 0 加到 ARR 溢出向下计数反过来中央对齐则用于生成对称 PWM在电机控制里很常见。计数方向由 CR1 寄存器的DIR 位bit4控制0 是向上1 是向下。中央对齐则由CMS 位bit6:5配置。大多数入门场景用向上计数就够了但如果你做的是 BLDC 电机驱动或者需要严格对称的 PWM就得切到中央对齐模式这时候 ARR 的溢出行为会变成上溢和下溢各产生一次事件中断频率翻倍算周期时要注意。3. 中断配置从 SR 到 NVIC 的完整链路3.1 更新中断的使能链条定时器溢出后想触发中断需要打通一条链DIER 使能中断 → SR 标志置位 → NVIC 使能 → 进中断函数 → 清标志。这条链上任何一环断了中断都不会来。DIERDMA/中断使能寄存器的UIE 位bit0是更新中断使能。置 1 后每当 CNT 溢出产生更新事件SR 寄存器的UIF 位bit0就会被硬件置 1。但注意UIF 置 1 不等于进中断——你还得在 NVIC 里使能对应的中断通道。TIM2 的中断号是 28TIM3 是 29这些在启动文件里都有定义。进中断后必须手动清 UIF 标志否则会反复进中断。清除方式是往 SR 的对应位写 0或者更常见的做法是写TIMx-SR ~TIM_SR_UIF利用写 0 清除的特性。这里有个细节SR 寄存器很多位是写 0 清除但如果你直接TIMx-SR 0会把其他标志也一起清掉可能误伤。稳妥的写法是只清你关心的那一位。3.2 一个真实踩过的坑中断进不去我有一次调一个 TIM3 的更新中断代码检查了无数遍DIER 的 UIE 置了NVIC 也配了就是不进中断。折腾了半小时才发现NVIC 的优先级分组没设。STM32F103 的 NVIC 需要先调用NVIC_PriorityGroupConfig设定分组否则优先级配置行为不确定某些情况下中断会被屏蔽。还有一个更隐蔽的如果你用的是标准外设库TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE)这个函数内部会操作 DIER但如果你在它之前就手动改过 DIER可能产生冲突。我的建议是要么全用库函数要么全用寄存器操作别混着来混用是 bug 的温床。3.3 中断服务函数里的时间预算更新中断里该干什么、不该干什么是个经验问题。我见过有人在中断里做浮点运算、调用 printf、甚至延时结果系统卡死。定时器中断的频率可能很高比如 10kHz中断服务函数必须短小快。通常只做一件事置一个标志位或者翻转一个 GPIO把耗时操作丢到主循环里。如果你确实需要在中断里做稍复杂的处理先算一下时间预算假设中断 10kHz每次中断间隔 100us你的中断函数执行时间必须远小于 100us否则会阻塞主程序甚至丢失中断。用 GPIO 翻转 示波器测量中断函数耗时是最直接的验证方法。4. PWM 输出CCMR 与 CCER 的配合逻辑4.1 从比较这个概念理解 PWMPWM 的本质是比较CNT 一直在数同时有个 CCR捕获/比较寄存器存着一个阈值。CNT CCR 时输出一种电平CNT ≥ CCR 时输出另一种电平。改变 CCR 的值就改变了高低电平的比例也就是占空比。这个比较发生在通道层面。TIM2 有 4 个独立通道CH1~CH4每个通道有自己的 CCR 和配置位。要让 CH1 输出 PWM你需要配置三处CCMR1 设定模式、CCER 使能输出、CCR1 设定占空比。CCMR1 的OC1M 位bit6:4决定输出模式PWM 模式 1 是 110模式 2 是 111。两者的区别是极性相反模式 1 下 CNT CCR 时输出有效电平模式 2 反过来。选哪个取决于你的外部电路需要高有效还是低有效。CC1S 位bit1:0要设为 00表示通道配置为输出而不是输入捕获。CCER 的CC1E 位bit0是通道输出使能置 1 才真正把信号送到引脚。CC1P 位bit1控制极性0 高有效1 低有效。这里有个容易混淆的点OC1M 里的模式 1/2和 CC1P 的极性是两个独立的维度组合起来有四种效果配置时要一起考虑。4.2 占空比与频率的计算实例假设你要输出一路 50Hz、占空比 7.5% 的 PWM 去驱动舵机。系统时钟 72MHz用 TIM3。先定频率50Hz 意味着周期 20ms。取 PSC71则计数频率 72MHz/72 1MHz即每 1us 计一个数。20ms 需要 20000 个数所以 ARR19999。再算占空比7.5% × 20000 1500所以 CCR1500。这三个数PSC71, ARR19999, CCR1500就是舵机控制的经典参数。你会发现舵机的 0.5ms~2.5ms 脉宽正好对应 CCR500~2500这就是为什么舵机用 50Hz PWM 这么方便——CCR 的值直接对应脉宽微秒数。配置顺序我习惯这样先配 GPIO 为复用推挽输出再配时基PSC、ARR再配 CCMR 和 CCER最后开 CR1 的 CEN 位启动。CEN 位是最后一步前面都配好了再启动避免中途输出乱七八糟的波形。4.3 高级定时器的额外一步MOE 位如果你用的是 TIM1 或 TIM8 输出 PWM配完上面那些还不够必须再置BDTR 寄存器的 MOE 位bit15。MOE 是主输出使能高级定时器出于安全考虑默认关闭所有输出不置这一位引脚上永远没波形。我第一次用 TIM1 时就被这个坑了半天通用定时器用惯了根本想不到还有这么一道闸。高级定时器还有死区插入、互补输出、刹车输入这些功能做电机 H 桥驱动时非常有用但配置复杂度也上了一个台阶。如果你只是要一路普通 PWM用 TIM2~TIM5 就够了别给自己找麻烦。5. 输入捕获测量外部信号的脉宽与频率5.1 捕获的本质是把 CNT 的值存下来输入捕获和 PWM 输出共用同一套通道资源只是方向反过来PWM 是定时器往外输出捕获是外部信号往定时器里输入。当引脚上出现你指定的边沿上升沿或下降沿时硬件会把当前 CNT 的值瞬间复制到 CCR里同时置位 SR 的CC1IF 标志。你读 CCR 就知道那个边沿发生的时刻。测脉宽的原理捕获上升沿记下 t1捕获下降沿记下 t2脉宽 t2 - t1。测频率则相反捕获两个上升沿间隔就是周期。听起来简单但实际配置时有个关键选择同一次捕获能不能同时抓上升沿和下降沿答案是不能一个通道同一时刻只能选一种边沿。要测完整脉宽通常用两个通道一个抓上升沿、一个抓下降沿或者用单通道 软件切换边沿极性。5.2 边沿检测与滤波配置CCER 的CC1P 位选边沿0 上升沿1 下降沿。CCMR1 的CC1S 位设为 01表示 IC1 映射到 TI1通道配置为输入。IC1F 位bit7:4是输入滤波器可以滤掉高频噪声。如果你的信号有毛刺把 IC1F 设成合适的值比如 0011 表示 8 个时钟周期的滤波能显著提高捕获稳定性。滤波器这个参数很多人忽略但在工业现场特别重要。我曾经测一个带机械触点的信号不滤波时捕获值乱跳加上滤波后立刻稳定。滤波的代价是引入延迟所以要在稳定性和响应速度之间权衡。5.3 溢出处理捕获值回绕怎么办CNT 是 16 位的最大 65535。如果你测的信号周期比定时器溢出周期还长CNT 会回绕直接相减会得到错误结果。解决办法是在更新中断里累加溢出次数计算时把溢出次数乘上 65536 再加进去。比如 CNT 在 t1 时是 60000溢出一次后到 t2 时是 5000实际间隔是 (65536 - 60000) 5000 10536而不是 5000 - 60000 的负数。这个逻辑必须在代码里显式处理否则测低频信号时结果完全不对。我建议在捕获中断里同时判断 UIF 标志如果溢出和捕获同时发生要特别小心处理顺序。6. 主从模式与触发定时器之间的联动6.1 为什么需要定时器联动单个定时器能做的事有限但多个定时器联动起来能实现很多有意思的功能用一个定时器触发另一个定时器启动、用外部信号门控定时器计数、多个定时器同步输出相位差固定的 PWM。这些在电机控制、电源管理、精密测量里都有实际应用。联动的核心是SMCR 寄存器从模式控制和TIMx_CR2 的 MMS 位主模式选择。一个定时器可以配置成主把它的更新事件、比较事件等作为触发输出TRGO另一个配置成从接收这个触发信号并做出响应启动、复位、门控等。6.2 从模式的几种典型用法SMCR 的SMS 位bit2:0决定从模式类型。常用的有复位模式100收到触发信号时CNT 归零重新计数。适合做周期测量。门控模式101触发信号为高时计数为低时停止。适合测量高电平持续时间。触发模式110收到触发信号时启动计数但不清零。适合做延时启动。配置从模式时TS 位bit6:4要选对触发源ITR0~ITR3 是内部其他定时器TI1FP1/TI2FP2 是外部引脚ETRF 是外部触发。这个对应关系在不同型号上略有差异查手册的定时器内部触发连接表格最靠谱。6.3 一个实用的例子用 TIM2 触发 TIM3假设你要 TIM2 每 1ms 产生一次更新事件同时触发 TIM3 开始一次单次计数。配置步骤TIM2 的 CR2 里 MMS 设为 010更新事件作为 TRGOTIM3 的 SMCR 里 TS 设为 001ITR1对应 TIM2SMS 设为 110触发模式。这样 TIM2 每次溢出TIM3 就被触发一次。这种联动在需要精确时序配合的场景里非常有用比用软件轮询靠谱得多。硬件触发没有软件延迟和抖动时序精度是微秒级的。7. 寄存器操作中那些手册不会告诉你的细节7.1 写寄存器时的读-改-写陷阱STM32 的很多寄存器是多位共用一个 32 位字的你只想改其中一位但如果直接赋值TIMx-CR1 0x01会把其他位全清零。正确做法是读-改-写先读出当前值用位运算改目标位再写回去。比如TIMx-CR1 | TIM_CR1_CEN是安全的而TIMx-CR1 TIM_CR1_CEN是危险的。不过也有例外有些寄存器是写 1 有效或写 0 清除的特殊语义不能简单套用读-改-写。比如 SR 寄存器你读出来的是标志状态写回去的值决定清除哪些标志这时候读-改-写反而会误清标志。每个寄存器动手前先看手册里那一列的访问类型是 rw、r、w1c 还是别的这决定了你能怎么操作它。7.2 影子寄存器与预装载ARR 和 CCR 都有影子寄存器的概念。你写入的值先到预装载寄存器在更新事件发生时才会真正生效。这个机制是为了防止你在计数中途改 ARR 导致波形异常。ARPE 位CR1 的 bit7控制 ARR 是否使用预装载置 1 时改 ARR 要等下次更新事件才生效置 0 时立即生效。CCR 的预装载由 CCMR 的OC1PE 位控制。做 PWM 动态调占空比时建议开启预装载这样占空比的变化会在周期边界平滑过渡不会产生毛刺。我调 LED 呼吸灯时就吃过亏没开预装载改 CCR 时偶尔闪一下开了之后就顺滑了。7.3 调试时的寄存器查看技巧用调试器比如常见的 JTAG/SWD 调试环境单步时可以直接查看 TIMx 的各个寄存器值。我的习惯是配置完一个外设后先在调试器里把相关寄存器的值读一遍和预期对比。比如配完 PWM检查 CR1 的 CEN 是不是 1、CCER 的 CC1E 是不是 1、CCMR1 的 OC1M 是不是 110。肉眼核对寄存器比反复烧录试错快得多。还有一个技巧如果波形不对先看 CNT 有没有在动。CNT 不动说明时钟或 CEN 有问题CNT 在动但没输出说明通道配置或 GPIO 复用有问题。这个二分法能快速定位问题在哪一层。8. 从寄存器到实际项目几个典型场景的配置清单8.1 场景一1kHz 方波输出需求PA6 输出 1kHz 方波占空比 50%。用 TIM3_CH1。配置清单RCC 开 TIM3 和 GPIOA 时钟PA6 配复用推挽PSC711MHz 计数ARR9991kHzCCR150050%CCMR1 的 OC1M110、OC1PE1CCER 的 CC1E1CR1 的 ARPE1、CEN1。这套参数我用了无数次稳定可靠。8.2 场景二红外遥控解码的捕获配置需求捕获 38kHz 载波上的脉宽调制信号。用 TIM2_CH1 输入捕获。配置清单PA0 配浮空输入PSC711us 分辨率ARR65535最大量程CCMR1 的 CC1S01、IC1F0011滤波CCER 的 CC1P 先设 0上升沿DIER 的 CC1IE1NVIC 使能 TIM2 中断。中断里读 CCR1根据边沿切换 CC1P记录时间戳。这个场景的关键是滤波要够红外信号容易受环境光干扰。8.3 场景三编码器接口读电机转速需求读取增量式编码器的 A/B 相计算转速。用 TIM4 的编码器模式。配置清单PA0/PA1 或对应引脚配浮空输入CCMR1 的 CC1S01、CC2S01两通道都配输入CCER 的 CC1P0、CC2P0SMCR 的 SMS011编码器模式 3AB 相都计数。CNT 的值就正比于位置读 CNT 算转速。编码器模式的好处是硬件自动处理正反转和四倍频软件只管读 CNT非常省心。9. 我踩过的那些坑与排查思路9.1 波形死活出不来排查顺序我总结成一句话先看时钟再看 CEN再看通道最后看引脚。时钟没开是最常见的CEN 没置位是第二常见通道没使能CCER排第三GPIO 没配复用排第四。按这个顺序查基本五分钟内能定位。高级定时器还要多查一步 MOE 位。我建议你在代码里加一句断言或者调试打印把 CR1、CCER、BDTR 的值打出来一眼就能看出哪一步漏了。9.2 中断频率不对算出来的周期和实际不符先检查时钟频率假设对不对。APB1 的倍频机制前面提过很多人按 36MHz 算实际是 72MHz结果周期差一倍。其次检查 PSC 和 ARR 有没有忘记加 1。这两个原因占了九成。还有一种情况中断里没清标志导致反复进中断看起来频率变高了。用调试器看 SR 的 UIF 位如果一直是 1就是没清干净。9.3 捕获值抖动大先加输入滤波IC1F再检查信号质量。如果信号本身有振铃滤波也救不了得在硬件上加 RC 或者施密特触发器。软件层面可以在中断里做简单的软件滤波连续两次捕获值差异超过阈值就丢弃。我在测一个带长线的传感器信号时就是靠软件滤波 硬件 RC 双管齐下才稳定的。9.4 多个定时器互相干扰如果你同时用了 TIM2 和 TIM3注意它们的中断优先级。如果两个中断频率都很高优先级配置不当会导致低优先级中断被饿死。用 NVIC 的抢占优先级和子优先级合理分配把实时性要求高的设成高抢占优先级。另外中断函数里尽量别调用会阻塞的函数否则会拖累其他中断。10. 写在最后的一点个人体会定时器这一章我前后翻过不下二十遍每次都有新收获。刚开始觉得寄存器又多又乱后来发现它们其实是有套路的时基单元管时间通道单元管输入输出SMCR 管联动DIER/SR 管中断。把这四块分清楚再多的寄存器也只是这四块的排列组合。我的建议是别一上来就想着把所有功能都学会。先吃透更新中断和PWM 输出这两个最常用的把 PSC/ARR/CCR 的计算练到不用查手册就能写出来。然后做一两个小项目——比如用 PWM 调 LED 亮度、用捕获测一个按键按下的时长——把寄存器配置和实际现象对应起来。等这两个玩熟了输入捕获、编码器、主从模式这些自然就触类旁通。寄存器手册是工具书不是教材。遇到具体问题去查对应的位比从头到尾通读效率高得多。这一章我尽量把查手册时该看哪一位、为什么看这一位讲清楚剩下的就靠你动手了。烧录、示波器、调试器这三样东西备齐定时器没有调不通的。

相关新闻

嵌入式启动流程详解:从复位向量到main函数的完整链路

嵌入式启动流程详解:从复位向量到main函数的完整链路

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

2026/10/19 6:39:56 阅读更多 →
时间触发架构:单片机裸机与RTOS之外的第三种选择

时间触发架构:单片机裸机与RTOS之外的第三种选择

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

2026/10/19 6:38:55 阅读更多 →
低压变频器干扰传感器的机理与现场根治六策

低压变频器干扰传感器的机理与现场根治六策

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

2026/10/19 6:38:55 阅读更多 →

最新新闻

从零了解 Langfuse 6:Agent 与 Tool 调用观测

从零了解 Langfuse 6:Agent 与 Tool 调用观测

内容核验:2026-10-15,参照当日 Langfuse 官方 v4 文档。本文以概念和设计示意为主,不是完整可运行项目;示例金额、分数、通过率和耗时均非实测数据。AgentScope/MCP 节点名称是业务埋点示例,需要显式配置语义映射。版本…

2026/10/19 7:17:12 阅读更多 →
让 AI 重构旧代码,怎样把“行为不变”变成可检查的要求?

让 AI 重构旧代码,怎样把“行为不变”变成可检查的要求?

“行为不变”,要先说清楚哪些行为 旧代码功能正常,只是函数太长、命名难懂、重复判断越来越多。这时让 AI 帮忙整理,很容易得到一份看起来更漂亮的代码。但代码变短了、分支变少了,并不能说明重构成功。 真正需要验收的是&#…

2026/10/19 7:17:12 阅读更多 →
基于Python与face_recognition的人脸识别考勤系统:从摄像头到SQLite完整实现

基于Python与face_recognition的人脸识别考勤系统:从摄像头到SQLite完整实现

简介:面向计算机相关专业毕业设计与课程设计需求,这份基于深度学习的人脸识别考勤系统源码,提供了人脸检测、特征提取、打卡记录等完整流程。项目经导师指导并通过评审,得分98分,适合正在做大作业、期末项目或毕设开发…

2026/10/19 7:17:12 阅读更多 →
手作复现困境:用记录系统把创作流程变成可复用资产

手作复现困境:用记录系统把创作流程变成可复用资产

最近在整理一个叫 artcraft 的个人创作项目,核心就一句话:把“艺术设计”和“手工制作”这两段本来经常脱节的流程,拧成一条可以复用的流水线。以前我做热缩片挂件、小木牌、桌面摆件,基本是兴致来了就动手,做完往柜子…

2026/10/19 7:17:12 阅读更多 →
深度强化学习交易策略实战:PPO、A2C与DDPG联合回测解析

深度强化学习交易策略实战:PPO、A2C与DDPG联合回测解析

简介:基于深度强化学习的自动化股票交易策略设计源码,面向金融工程、量化交易研究者和具备一定Python基础的开发者,解决传统人工交易易受情绪干扰、策略难以自适应市场变化的问题。项目完整实现了PPO、A2C与DDPG三类Actor-Critic算法的训练与…

2026/10/19 7:17:12 阅读更多 →
普通个人电脑跑大模型:显存、量化与CPU+GPU混合推理实战指南

普通个人电脑跑大模型:显存、量化与CPU+GPU混合推理实战指南

前阵子有个朋友问我:“普通个人电脑到底能跑多大的大模型?”我当时没直接甩个数字给他,因为这个问题本身就是一个“多变量博弈”:同样叫“7B”的模型,float16 版本和 int4 量化版本,显存需求能差出三倍&…

2026/10/19 7:16:12 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

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

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →