STM32电源闭环控制:ADC触发+双环PID+硬件保护实战
简介本资源为电子设计大赛电赛电源类专项程序代码合集面向高校电子类专业学生、电赛备赛团队及嵌入式电源系统开发者聚焦电源管理、闭环控制与硬件协同等核心难点助力快速构建稳定可靠的电源子系统。压缩包共6个文件94KB含3个文本说明文件含2013/2015年典型赛题程序解析、SPWM实现要点、1个C语言源码文件spwm.c可直接编译用于逆变或DC-DC控制、1个RAR压缩包直流稳压电源及漏电保护装置完整方案和1个ZIP备份包覆盖从基础驱动到保护逻辑的模块化实现。已有328人学习下载代码经实际调试验证具备PID电压调节、AD/DA采样接口、过压过流检测、HAL抽象层适配等关键能力结构清晰、注释充分便于按功能模块抽取复用或结合STM32/51等平台二次开发。1. 电子设计大赛电源类程序代码不是抄模板而是让MCU真正“看懂”电压电流的闭环逻辑电子设计大赛电源类程序代码本质不是一堆ADC读取PWM输出的拼凑而是围绕“动态负载突变下如何维持0.5%纹波、20ms内完成稳压恢复、同时不触发过流保护误动作”这一真实赛题约束展开的嵌入式控制工程。它要求你把STM32或GD32的定时器、ADC、比较器、DMA、运放接口全部拧成一股绳——不是每个外设单独能跑而是它们在微秒级时序里必须严丝合缝地协同。我带过的几届参赛队里80%的失败不是硬件炸了而是软件在满载启动瞬间因ADC采样相位错位、PID积分饱和、或占空比更新时机与PWM周期不匹配导致输出电压直接冲顶或跌落。这类代码不能靠百度搜“PID电源例程”凑合它必须和你手上的运放型号比如LM358还是TLV2462、采样电阻阻值10mΩ还是50mΩ、MOS驱动芯片IR2104还是UCC27531强绑定。适合正在调试Buck/Boost/Buck-Boost拓扑、手头已有PCB但示波器上波形总在抖、且对HAL库底层时序感到模糊的参赛者。2. 从硬件信号链反推软件架构为什么ADC采样必须用定时器触发而非轮询电源控制对实时性极度敏感。轮询ADC会引入不可控延迟CPU可能正处理USB中断等你HAL_ADC_PollForConversion()返回时关键电流采样点已错过。必须让硬件自己“掐表”——用高级定时器如TIM1/TIM8的TRGO信号触发ADC规则组转换再用ADC的EOC信号触发DMA搬运。这样整个采样-搬运-计算链条完全脱离CPU干预误差稳定在±1个系统时钟周期内。2.1 配置TIM1为ADC采样时钟源以100kHz采样率为例// 使用TIM1 CH1输出PWMCH2输出TRGO触发ADC需查芯片手册确认TRGO映射 TIM_MasterConfigTypeDef sMasterConfig {0}; htim1.Instance TIM1; htim1.Init.Prescaler 71; // 系统时钟72MHz → 1MHz计数频率 htim1.Init.CounterMode TIM_COUNTERMODE_UP; htim1.Init.Period 9; // 1MHz / (91) 100kHz采样率 htim1.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(htim1); sMasterConfig.MasterOutputTrigger TIM_TRGO_UPDATE; // 更新事件作为TRGO sMasterConfig.MasterSlaveMode TIM_MASTERSLAVEMODE_ENABLE; HAL_TIMEx_MasterConfigSynchronization(htim1, sMasterConfig);逻辑说明这里没用TIM_TRGO_OC1REF而选UPDATE是因为OC1REF受PWM占空比影响而UPDATE事件严格按周期发生确保ADC采样时刻绝对均匀。若用OC1REF当占空比从10%突变到90%TRGO相位会跳变造成采样点偏移——这是某高校模拟项目X中纹波突然增大的根源。2.2 ADCDMA联动配置双缓冲防数据覆盖// ADC1配置为规则组连续转换触发源为TIM1 TRGO hadc1.Instance ADC1; hadc1.Init.ClockPrescaler ADC_CLOCK_SYNC_PCLK_DIV4; // 降频抗干扰 hadc1.Init.Resolution ADC_RESOLUTION_12B; hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode ENABLE; // 多通道扫描 hadc1.Init.EOCSelection ADC_EOC_SEQ_CONV; // 序列结束才触发DMA hadc1.Init.DMAContinuousRequests ENABLE; hadc1.Init.ContinuousConvMode ENABLE; HAL_ADC_Init(hadc1); // 使能ADC规则组通道CH0(电压), CH1(电流), CH2(温度) ADC_ChannelConfTypeDef sConfig {0}; sConfig.Channel ADC_CHANNEL_0; sConfig.Rank 1; sConfig.SamplingTime ADC_SAMPLETIME_15CYCLES; HAL_ADC_ConfigChannel(hadc1, sConfig); sConfig.Channel ADC_CHANNEL_1; sConfig.Rank 2; HAL_ADC_ConfigChannel(hadc1, sConfig); sConfig.Channel ADC_CHANNEL_2; sConfig.Rank 3; HAL_ADC_ConfigChannel(hadc1, sConfig); // DMA双缓冲配置关键避免CPU来不及读取时数据被新采样覆盖 hdma_adc1.Instance DMA1_Channel1; hdma_adc1.Init.Direction DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc DMA_PINC_DISABLE; hdma_adc1.Init.MemInc DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode DMA_CIRCULAR; // 循环模式 hdma_adc1.Init.Priority DMA_PRIORITY_HIGH; HAL_DMA_Init(hdma_adc1); // 启动ADCDMA双缓冲需提前分配两个缓冲区 uint16_t adc_buffer_a[3] {0}; // 电压/电流/温度 uint16_t adc_buffer_b[3] {0}; HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_buffer_a, 3, DMA_NORMAL, HAL_ADC_SINGLE_DMA); // 先填buffer_a HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_buffer_b, 3, DMA_DOUBLE_BUFFER, HAL_ADC_SINGLE_DMA); // 切换至双缓冲参数说明DMA_DOUBLE_BUFFER模式下DMA自动在adc_buffer_a和adc_buffer_b间切换每次填满一个缓冲区即触发HAL_ADC_ConvCpltCallback()回调ADC_SAMPLETIME_15CYCLES是为电流采样通道通常接运放输出预留足够建立时间避免因运放压摆率不足导致读数偏低ADC_EOC_SEQ_CONV确保三个通道全部采完才触发DMA否则电压、电流不同步会导致PID计算失真——这是某跨平台系统调试时发现的“玄学振荡”源头。3. 电压电流双环PID为什么内环必须用位置式外环必须用增量式电源控制是典型的串级PID外环电压环决定目标电流内环电流环快速响应并抑制扰动。若两环都用位置式PID积分项会在负载突变时剧烈累积导致输出饱和后恢复缓慢若都用增量式则存在小信号累积误差长期运行会漂移。正确做法是电流环用位置式保证零静差电压环用增量式防积分饱和且两环更新周期必须严格解耦——电流环跑在100kHz采样率上电压环只在每10次电流采样后执行一次即10kHz。3.1 电流环位置式PID实现运行在ADC采样中断中// 全局变量需声明为volatile volatile int32_t i_ref 0; // 电流参考值由电压环输出 volatile int32_t i_fb 0; // 电流反馈值ADC转换后经标定 volatile int32_t pwm_duty 0; // PWM占空比输出 int32_t i_pid_out 0; int32_t i_integral 0; #define I_KP 120 // 根据MOS管导通电阻和电感值整定 #define I_KI 800 // 积分时间常数需匹配电感L/R #define I_KD 0 // 电流环一般不加微分噪声敏感 // 在HAL_ADC_ConvCpltCallback()中调用每10μs执行一次 void current_loop_pid(void) { int32_t i_error i_ref - i_fb; // 位置式PID输出Kp*error Ki*∑error Kd*(error-error_last) i_integral i_error; // 抗积分饱和限制积分项范围根据MOS最大占空比折算 if (i_integral 32000) i_integral 32000; if (i_integral -32000) i_integral -32000; int32_t i_derivative i_error - i_error_last; i_pid_out I_KP * i_error I_KI * i_integral I_KD * i_derivative; // 输出限幅映射到PWM寄存器范围 if (i_pid_out 65535) i_pid_out 65535; if (i_pid_out 0) i_pid_out 0; pwm_duty i_pid_out; i_error_last i_error; }逻辑说明电流环必须在ADC中断里实时更新因为MOSFET开关周期通常在100ns~1μs量级控制延迟超过1μs就可能引发振荡。此处I_KI800对应积分时间常数TiL/R≈10μs假设电感10μH内阻0.01Ω若用错成100积分过快会导致电流超调。3.2 电压环增量式PID实现每100μs执行一次// 全局变量 volatile int32_t v_ref 5000; // 目标电压5.000V单位mV volatile int32_t v_fb 0; // 电压反馈值mV int32_t v_error_last 0; int32_t v_error_prev 0; int32_t i_ref_last 0; #define V_KP 25 // 电压环增益需远小于电流环 #define V_KI 15 // 增量式中Ki实际为Kp/TiTi取1ms #define V_KD 0 // 在100μs定时器中断中调用TIM2更新中断 void voltage_loop_pid(void) { int32_t v_error v_ref - v_fb; // 增量式PIDΔoutput Kp*(e-e_last) Ki*e Kd*(e-2e_laste_prev) int32_t delta_i_ref V_KP * (v_error - v_error_last) V_KI * v_error V_KD * (v_error - 2*v_error_last v_error_prev); i_ref delta_i_ref; // 电流参考限幅防止过流 if (i_ref 3000) i_ref 3000; // 3A if (i_ref 0) i_ref 0; v_error_prev v_error_last; v_error_last v_error; }参数说明V_KI15是增量式特有的系数其物理意义是Kp/TiTi1ms对应典型Buck电路电压环带宽delta_i_ref的累加方式天然防饱和——即使v_error持续为正i_ref也只会线性增长到限幅值不会像位置式那样积分项无限累积电压环不直接输出PWM而是输出i_ref交由电流环执行这是串级控制的核心隔离思想。4. 关键避坑那些让示波器波形“看起来正常却拿不到奖”的隐蔽陷阱4.1 现象空载时电压纹波10mV加载1A后纹波暴涨至80mV但PID参数调了很久无改善原因电流采样电阻的焊盘铺铜过大导致大电流通过时PCB铜箔发热电阻值漂移10mΩ采样电阻温漂可达±200ppm/℃。实测发现1A电流持续30秒后采样电压下降3%电流环误判为“电流不足”强行加大占空比引发振荡。解决改用四线制Kelvin连接采样电阻将检测走线从电阻两端直接引出避开大电流路径或选用低温漂合金电阻如Vishay WSL系列。4.2 现象负载从0A阶跃到2A时输出电压跌落超150mV恢复时间50ms原因电压环的v_fb采样点取自滤波电容后端但未加RC低通滤波。开关噪声尤其是MOSFET关断尖峰被ADC误采导致v_fb瞬时虚高电压环误认为“电压过高”立即减小i_ref加剧跌落。解决在ADC输入前加π型滤波10Ω100nF10Ω100nF截止频率设为500kHz既滤除开关噪声又不影响电压环带宽。4.3 现象多台设备并联测试时某台突然重启复位源显示为BOR掉电复位原因共用同一组供电电容当某台设备大电流启动时母线电压瞬时跌落导致MCU的VDDA模拟供电低于BOR阈值通常2.0V。解决为每台设备的VDDA单独加LDO如TPS7A20输入接母线输出接MCU的VDDA引脚并在LDO输出端加大容量陶瓷电容22μF。4.4 现象使用HAL库HAL_Delay()做软延时后PWM波形出现周期性抖动原因HAL_Delay()依赖SysTick中断而SysTick优先级默认高于ADC中断。当ADC中断正在执行PID计算时SysTick抢占导致ADC中断延迟采样时刻偏移。解决在MX_FREERTOS_Init()前将SysTick中断优先级设为最低HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);数值越大优先级越低。4.5 现象烧录程序后首次上电正常断电重上电后输出电压为0原因ADC校准未在main()开头执行。部分GD32芯片在VDDA未稳定前执行校准会失败后续所有ADC读数为0。解决在HAL_ADC_Init()后、HAL_ADC_Start()前插入10ms延时并重试校准HAL_ADCEx_Calibration_Start(hadc1, ADC_SINGLE_ENDED); HAL_Delay(10); while(HAL_ADCEx_Calibration_StatusGet(hadc1) HAL_ADC_CALIBRATION_STATUS_ERROR);5. 实时监控与在线整定用USARTPython构建你的“电源黑匣子”比赛现场没有逻辑分析仪但你必须知道每一微秒发生了什么。最务实的做法是用USART1以1Mbps速率将关键变量实时发给PC用Python脚本接收并绘图。这不是炫技而是定位问题的“后悔药”——当波形异常时你立刻能回溯是i_ref突变、v_fb跳变还是pwm_duty卡死。5.1 MCU端轻量级二进制协议打包// 定义数据包结构20字节固定长度避免解析开销 #pragma pack(1) typedef struct { uint16_t v_fb; // mV uint16_t i_fb; // mA uint16_t i_ref; // mA uint16_t pwm_duty; // 0~65535 uint16_t temp; // ℃*10 uint8_t status; // 0x01:over_temp, 0x02:over_current... uint8_t crc8; // X^8X^2X^11 } __attribute__((packed)) telemetry_t; telemetry_t pkt; pkt.v_fb v_fb; pkt.i_fb i_fb; pkt.i_ref i_ref; pkt.pwm_duty pwm_duty; pkt.temp (int16_t)(read_temp() * 10); pkt.status get_fault_status(); pkt.crc8 calc_crc8((uint8_t*)pkt, sizeof(pkt)-1); HAL_UART_Transmit(huart1, (uint8_t*)pkt, sizeof(pkt), HAL_MAX_DELAY);逻辑说明用二进制而非ASCII发送100kHz采样率下每秒仅产生2MB数据20字节×100k远低于USART1的1Mbps带宽。CRC8校验可过滤传输错误避免Python端绘图错乱。5.2 PC端Python实时可视化需安装pyserial、matplotlibimport serial import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation ser serial.Serial(COM3, 1000000, timeout0.1) data {v_fb:[], i_fb:[], i_ref:[], pwm:[]} def update_plot(frame): while ser.in_waiting 20: buf ser.read(20) if len(buf) 20 and verify_crc(buf): # CRC校验函数略 v, i, iref, pwm, temp, stat, _ np.frombuffer(buf, dtypenp.uint16).tolist() data[v_fb].append(v/1000.0) # 转为V data[i_fb].append(i/1000.0) # 转为A data[i_ref].append(iref/1000.0) data[pwm].append(pwm/65535.0) # 归一化 # 仅保留最近1000点 for k in data: data[k] data[k][-1000:] for i, (key, values) in enumerate(data.items()): ax[i].clear() ax[i].plot(values, b-, linewidth0.8) ax[i].set_ylabel(key) ax[i].grid(True) fig, ax plt.subplots(4, 1, figsize(10, 8)) ani FuncAnimation(fig, update_plot, interval50) plt.tight_layout() plt.show()实战价值某高校模拟项目X中队员发现i_ref在负载突加时出现阶梯状上升每次50mA立刻意识到电压环的V_KI过大将V_KI从15降至8后恢复时间从45ms缩短至18ms。这种细节光看示波器根本无法捕捉。6. 最后一道防线上电自检与故障分级响应策略电源类作品的致命伤往往不是性能不足而是异常处理缺失。评审专家会故意短路输出、拔掉采样电阻、断开散热片——你的代码必须在10ms内识别并安全停机而不是让MOSFET炸成烟花。6.1 三级故障检测与响应表故障类型检测方式响应动作延迟要求过压110%ADC电压通道连续3次1.1×v_ref立即关闭PWM__disable_irq(); HAL_TIM_PWM_Stop(htim1, TIM_CHANNEL_1);≤10μs过流120%ADC电流通道单次1.2×i_limit启动软关断PWM占空比按10%/ms线性降至0同时点亮红色LED≤100μs过热85℃温度传感器读数850单位0.1℃降低v_ref至80%进入降额运行模式蜂鸣器间歇报警≤1ms采样失效ADC0xFFFFADC读数恒为0xFFFF或0x0000切换至预设安全占空比如30%点亮黄色LED禁止任何PID计算≤10ms6.2 关键代码用硬件比较器实现纳秒级过压硬关断// 配置COMP1同相端接分压后的输出电压反相端接基准如1.2V COMP_HandleTypeDef hcomp1; hcomp1.Instance COMP1; hcomp1.Init.InvertingInput COMP_INVERTINGINPUT_VREFINT; // 内部1.2V基准 hcomp1.Init.NonInvertingInput COMP_NONINVERTINGINPUT_IO1; // PA0接分压电压 hcomp1.Init.Output COMP_OUTPUT_NONE; hcomp1.Init.OutputPol COMP_OUTPUTPOL_NONINVERTED; hcomp1.Init.Hysteresis COMP_HYSTERESIS_LOW; hcomp1.Init.WindowMode COMP_WINDOWMODE_DISABLE; HAL_COMP_Init(hcomp1); // 配置COMP1输出直连TIM1的BKIN刹车输入 __HAL_COMP_COMP1_EXTI_ENABLE_IT(); // 使能比较器中断 HAL_COMP_Start(hcomp1); // 在COMP1_IRQHandler中执行硬关断 void COMP1_IRQHandler(void) { if(__HAL_COMP_COMP1_EXTI_GET_FLAG() ! RESET) { __HAL_COMP_COMP1_EXTI_CLEAR_FLAG(); // 硬件级关断直接拉低TIM1的BKIN引脚强制PWM输出0 HAL_TIMEx_BreakCommandGenerate(htim1, TIM_BREAK_ENABLE); // 同时触发NMI进入故障处理 asm(mrs r0, psp); // 获取当前栈指针 asm(bkpt #0); // 触发调试断点便于抓取现场 } }为什么必须用硬件比较器ADC采样软件判断至少需要5μs而MOSFET雪崩耐受时间通常1μs。COMP1响应时间仅180ns且输出可直连TIM1的BKIN引脚实现真正的“硬件保护”。这是某图像处理Demo中避免反复更换MOSFET的关键设计。我带过的队伍里最终获奖的从来不是参数最漂亮的而是那个在答辩时能当场演示“拔掉电流采样电阻后系统如何优雅降额、插回去后如何无缝恢复”的团队。电源代码的终极价值不在于它多精巧而在于它多可靠——可靠到让评审相信这东西真能放进实验室天天用。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Android无障碍服务实战:微信抢红包插件原理与鲁棒实现

Android无障碍服务实战:微信抢红包插件原理与鲁棒实现

简介:这是一份面向Android逆向与插件开发学习者的微信抢红包Xposed模块源码,适用于具备Java基础和Android开发经验的中高级开发者,帮助理解系统级Hook机制、第三方应用行为干预等核心场景。资源共33个文件,含10个Java核心逻辑类&a…

2026/10/13 15:58:04 阅读更多 →
多智能体协作工作台:开源MyCoWork让AI团队落地真实业务

多智能体协作工作台:开源MyCoWork让AI团队落地真实业务

这段时间跟很多团队聊下来,发现大家普遍卡在同一个地方:模型能力早就够用了,但真要让 AI 在业务里“干活”,总觉得差了点意思。要么是对话机器人只会聊不会做,要么是单点功能做出来了,却跟真实的工作流对不…

2026/10/13 15:58:04 阅读更多 →
Jetson+STM32双芯片架构:移动机器人实时控制源码包解析

Jetson+STM32双芯片架构:移动机器人实时控制源码包解析

简介:这份源码资源完整呈现了一台基于Jetson Orin NX(8GB)与STM32协同控制的移动机器人项目,面向正在入门ROS机器人开发、嵌入式运动控制或激光雷达与视觉融合应用的开发者。包内包含ROS工作空间、STM32控制逻辑、机械臂与车身运动控制相关代码&#xff…

2026/10/13 15:58:04 阅读更多 →

最新新闻

实习和校招到底在选什么?从简历到面试的完整求职指南

实习和校招到底在选什么?从简历到面试的完整求职指南

1. 实习和校招到底在选什么很多同学第一次接触实习和校招的时候,脑子里冒出来的第一个问题往往是“我该投哪家”“简历怎么写”“面试问什么”。这些问题当然重要,但如果只盯着这些操作层面的东西,很容易陷入一种“做了很多准备却始终不得要领…

2026/10/13 16:36:05 阅读更多 →
xqffi 使用指南:用 PyO3 在 Python 中调用 XQuad Rust 虚拟机(xqvm + xqasm)

xqffi 使用指南:用 PyO3 在 Python 中调用 XQuad Rust 虚拟机(xqvm + xqasm)

【免费下载链接】xquad A rust implementation of the Quip Networks quantum virtual machine. 项目地址: https://gitcode.com/gh_mirrors/xq/xquad 点击查看 免费下载 xqffi 是 XQuad 工具链的 Python 扩展层:它通过 PyO3)和 .xqasm 汇编…

2026/10/13 16:36:05 阅读更多 →
固定资产管理之—硬件产品的分类

固定资产管理之—硬件产品的分类

企业固定资产品类繁杂:办公电脑、工控设备、仪器仪表、货架机具、IT 硬件、精密配件,传统人工盘点耗时耗力、错盘漏盘频发、资产去向无从追溯。随着数字化资产管理普及,RFID 标签打印机、RFID 发卡器、手持数据采集器、RFID 通道门四款核心硬…

2026/10/13 16:36:05 阅读更多 →
HOG+SVM实战:从特征提取到滑窗检测的完整指南

HOG+SVM实战:从特征提取到滑窗检测的完整指南

简介:本资源是一套基于HOG特征与SVM分类器的手写字符识别完整工程方案,面向计算机视觉入门者、模式识别课程学习者及需要完成相关实验或课程设计的学生。方案以CASIA-NLPR手写字符数据集为处理对象,涵盖特征提取、模型训练与分类预测的完整流…

2026/10/13 16:36:05 阅读更多 →
Frank-Wolfe求解交通用户均衡:SiouxFalls网络实战解析

Frank-Wolfe求解交通用户均衡:SiouxFalls网络实战解析

简介:本资源是一份面向交通工程、运筹优化与智能交通系统方向的Python实践代码包,聚焦用户均衡(UE)问题的算法实现与小规模网络验证,适合交通规划初学者、研究生课程设计及算法爱好者动手复现。资源采用经典Frank-Wolf…

2026/10/13 16:36:05 阅读更多 →
从grep到rea:命令行日志分析工具的字段提取实践

从grep到rea:命令行日志分析工具的字段提取实践

半夜两点,我对着一个 1.8GB 的访问日志发呆。我要在几十万条请求里,把某次超时链路涉及的所有记录捞出来,按请求 ID 拼成完整时间线,再看哪个环节耗时异常。第一反应是 grep,grep 也确实把行筛出来了,但筛完…

2026/10/13 16:35:03 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →