- 博客(139)
- 收藏
- 关注
原创 STM32——HAL库学习(实物)红外传感器计次,旋转编码器
摘要 EXTI(外部中断/事件控制器)是STM32单片机的“哨兵系统”,用于检测GPIO引脚的电平变化(如上升沿、下降沿或双边沿)并触发中断或事件。STM32F103C8T6的EXTI提供20条独立通道(0~19),支持灵活配置,包括软件触发、优先级管理和与NVIC(嵌套向量中断控制器)的协作。通过AFIO/SYSCFG实现引脚映射,确保EXTI与GPIO的正确连接。实际应用如对射红外传感器(下降沿触发)和旋转编码器(正交信号检测)可通过CubeMX便捷配置中断,并在Keil中编写中断服务函数,实现精准计数
2025-11-03 22:06:56
1086
2
原创 6层高速PCB设计,立创-逻辑派FPGA-G1开发板,万字笔记。基于立创EDA高速PCB,FPGA,GW2A-LV18PG256C8/17、GD32F303CBT6学习笔记
本文详细记录了使用立创EDA专业版设计六层FPGA开发板PCB的全过程,涵盖原理图导入、元件布局、叠层设计、高速信号布线、电源处理等关键环节。作者首先分析了电源树结构,按模块化思路进行元件布局,重点处理了DDR3、HDMI等高速信号的阻抗控制和等长调节。通过合理设置6层板叠层结构(包含两个完整地平面),并严格遵循3W间距原则,确保信号完整性。设计过程中充分考虑了电源载流能力、EMC防护和结构兼容性,最终完成了符合生产规范的Gerber文件输出。文章还分享了立创EDA的使用技巧,如快捷键设置、模块复用等实用功
2025-10-31 07:00:00
2243
1
原创 STM32仿真,低成本学习STM32-LED闪烁-流水灯
摘要:本文介绍了在STM32上实现LED灯控制的具体步骤。首先复制原有工程文件,在仿真软件中搭建LED电路(低电平驱动),通过网络标签连接元件。接着在STM32CubeMX中配置PA1为GPIO输出模式,初始电平设为高电平。使用HAL库函数编写LED闪烁程序,包含电平翻转和延时控制。最后编译并将生成的.hex文件下载到单片机进行验证,成功实现LED亮灭效果。文中还提到后续将补充流水灯程序的实现方法。
2025-10-17 09:01:15
1221
2
原创 STM32cubemx仿真,低成本学习stm32
摘要:本文详细介绍了使用Proteus、STM32CubeMX和Keil5搭建STM32仿真环境的完整流程。首先在Proteus中创建工程并添加STM32F103C8芯片,接着在STM32CubeMX中配置时钟系统(选择外部晶振8MHz,通过PLL倍频至72MHz),生成Keil工程文件。然后在Keil5中进行工程设置(包括编码格式、编译选项等),生成可执行文件后,将.hex文件导入Proteus中的STM32芯片完成仿真环境搭建。整个过程涵盖了从工程创建到编译仿真的关键步骤,为后续STM32开发奠定了基础
2025-10-11 11:03:29
1692
1
原创 STM32 HAL库定时器PWM输出全攻略:从零到精准控制
本文详细介绍了使用STM32 HAL库配置定时器PWM输出的完整方法。首先讲解了PWM基础概念和STM32定时器的PWM模式,然后分步骤演示了通过CubeMX和手动代码两种配置方式,包括时钟源设置、预分频计算、占空比调节等关键参数配置。文章还提供了互补PWM输出、多通道同步等高级技巧,并封装了实用函数。最后给出了LED呼吸灯、舵机控制等典型应用示例,以及调试技巧和性能优化建议,帮助开发者快速掌握STM32的PWM应用。
2026-01-03 11:46:29
1725
3
原创 STM32 USART接收中断:如何判断数据接收完成?
本文探讨了STM32串口通信中判断数据帧接收完成的四种方法:1)超时判断法,通过字节间隔时间判断;2)特定帧头帧尾法,适用于固定格式协议;3)固定长度法,适合已知长度的数据;4)长度字段法,通过数据包中的长度信息判断。文章建议根据实际需求选择合适方法,推荐结合超时机制与协议解析,并介绍了DMA+IDLE中断的高效方案。最后强调要根据数据格式、协议要求和系统资源选择最优方案,其中超时判断与长度字段的组合适用于多数场景,而高性能需求推荐使用DMA+IDLE中断。
2026-01-03 11:39:41
492
原创 STM32 DMA传输配置详解:数据宽度与传输方向设置指南
本文详细介绍了STM32中DMA传输的数据宽度和传输方向配置方法。DMA支持8/16/32位三种数据宽度,需根据外设特性选择并确保内存对齐。传输方向包括内存到外设、外设到内存及内存到内存三种模式,需正确设置DIR寄存器位。文章提供了使用标准库、HAL库和直接寄存器操作的配置示例,并强调了数据宽度匹配、地址递增设置等注意事项。此外还介绍了调试技巧、常见问题解决方案和性能优化建议,如使用FIFO处理数据宽度转换、根据数据量选择传输方式等。合理配置这些参数可充分发挥DMA性能优势,构建高效可靠的嵌入式系统。
2026-01-02 15:58:09
970
原创 STM32如何通过寄存器直接禁止EXTI0中断
本文详细介绍了通过寄存器直接操作禁用STM32 EXTI0中断的方法。主要内容包括:1. EXTI中断系统架构,重点说明EXTI_IMR等关键寄存器功能;2. 具体实现步骤:通过清除EXTI_IMR寄存器位0禁用中断线,操作NVIC寄存器禁用中断控制器,并清除挂起标志;3. 提供了完整示例代码和安全操作方法;4. 强调操作顺序、临界区保护等注意事项。该方法虽不如HAL库直观,但对深入理解STM32中断机制具有重要意义,适用于底层调试和性能优化场景,但建议日常开发仍优先使用标准库保证可维护性。
2026-01-02 15:49:52
724
1
原创 配置STM32F411CEU6的系统时钟-避免芯片内核锁死
本文介绍了在STM32F411芯片上配置系统时钟时遇到的问题及解决方案。作者在使用正点原子提供的sys.c工程时发现内核锁死,原因是开发板晶振频率(8M)与目标板(25M)不匹配。通过重写sys.c和sys.h文件,实现了25M晶振→96MHz系统时钟的配置,完全匹配CubeMX参数(PLLM=25,PLLN=192,PLLP=2)。修改后的代码包含超时兜底机制,确保时钟源切换安全,并精确校准延时到500ms。经过测试,成功生成了预期的四路PWM波形,验证了时钟配置的正确性。
2026-01-01 17:56:43
633
原创 STM32内核锁死补救方法-STM32F411CEU6
摘要:STM32F4系列出现「Cannot halt the core」报错时,表明芯片内核和调试口被双重锁死。根本原因是调试接口被禁用、内核进入死循环、Flash写保护同时触发。解决方案的核心是利用上电300ms窗口期强制擦除:1)Keil中配置全片擦除选项;2)同时按住BOOT0和复位键上电;3)松开复位键后立即点击擦除按钮。该方法通过时序操作在错误程序运行前强制解锁,成功率极高,可使芯片恢复出厂状态。操作时需严格遵循步骤顺序,特别注意按键松开时机与擦除指令的同步性。
2026-01-01 17:39:30
1306
原创 STM32 I2C通信详解:从机地址 vs 寄存器地址
本文通过邮局系统类比,清晰区分了STM32 I2C通信中的从机地址和寄存器地址。从机地址(7位/10位)用于选择总线上的目标设备,如MPU6050的0x68;寄存器地址则指定设备内部的操作位置,如电源管理寄存器0x6B。文章详细解析了两者的结构差异,并提供了HAL库的典型用法:先发送从机地址(需左移1位)建立通信,再指定寄存器地址进行读写操作。通过MPU6050初始化、数据读取等实例代码,展示了完整通信流程。最后给出地址冲突解决方案、总线扫描方法和调试建议,强调"先选设备再选位置"的操作
2025-12-31 17:18:49
1083
原创 使用STM32 HAL库配置ADC单次转换模式详解
本文详细介绍了如何使用STM32 HAL库配置ADC单次转换模式。单次转换模式适用于节能或事件触发的场景,仅执行一次转换后自动停止。文章从硬件准备开始,分步骤讲解了引脚初始化、ADC参数配置、通道设置、转换启动与结果读取的实现方法,并提供了完整的示例代码。同时解析了采样时间、触发方式等关键参数,给出了调试技巧和常见问题解决方案,最后提出了使用DMA、校准等性能优化建议。通过本文可以快速掌握STM32 ADC单次转换的基本配置方法。
2025-12-31 17:12:41
550
2
原创 STM32 I2C通信详解:从机地址与寄存器地址的作用
I2C通信中的地址机制解析 本文系统介绍了I2C总线通信中的关键地址概念。从机地址作为设备的唯一标识(7位或10位),用于总线设备识别;寄存器地址则用于访问设备内部存储单元。文章详细讲解了两种地址的格式、作用及典型应用场景,包括MPU6050传感器、OLED显示屏和EEPROM等实例。同时提供了完整的通信流程分析、常见问题排查方法和STM32硬件配置建议。通过对比从机地址与寄存器地址的特性差异,帮助开发者掌握I2C通信的核心机制,并给出从简单EEPROM到复杂传感器驱动的渐进式学习建议。
2025-12-30 18:57:27
1121
原创 STM32中USART和UART的区别是什么?
摘要:UART和USART是嵌入式通信中常见的串行接口。UART仅支持异步通信,使用TX/RX两根线;而USART支持同步/异步两种模式,增加了时钟信号线(CK)。STM32中,USART功能更丰富,支持硬件流控制、LIN总线等,同步模式下可实现更高波特率。实际应用中,简单通信可选UART,高速同步通信必须使用USART。现代STM32芯片中,USART通常可向下兼容UART功能,但反之不行。开发时应根据具体需求选择接口类型,充分利用外设资源。
2025-12-30 18:47:24
904
原创 STM32定时器中断配置详解:以TIM2为例
本文详细介绍了STM32定时器中断的配置方法,以TIM2为例讲解了五个关键步骤:1)使能定时器时钟;2)配置预分频器和自动重载值;3)设置中断优先级;4)启动定时器;5)编写中断服务函数。文章提供了1ms定时中断的完整示例代码,并扩展介绍了PWM输出、输入捕获等高级应用。同时指出了调试常见问题,如中断标志未清除、时钟未使能等。针对不同STM32系列(F1/F4/F7)的差异进行了说明,强调掌握底层寄存器操作的重要性。通过本文,开发者可系统学习STM32定时器中断配置,从基础应用到高级功能实现。
2025-12-29 13:52:31
751
原创 STM32 GPIO输出模式配置详解:从寄存器层面理解引脚控制
STM32 GPIO寄存器详解及配置方法:本文系统介绍了STM32微控制器的GPIO寄存器组,包括MODER(模式)、OTYPER(输出类型)、OSPEEDR(速度)等7个核心寄存器功能及配置方法。重点解析了输出模式设置、推挽/开漏选择、速度优化等关键配置,提供了完整的LED闪烁示例代码,并对比了F1与F4/F7系列的寄存器差异。文章强调时钟使能、原子操作等最佳实践,给出了位带操作等性能优化技巧,指出寄存器级编程在代码精简、执行效率和控制精度方面的优势,建议开发者结合参考手册灵活选择库函数或直接寄存器操作方
2025-12-29 13:43:09
897
原创 STM32平衡车测试,定时中断读取速度
摘要:本文介绍了STM32中PWM输出和编码器测速的实现方法。首先通过HAL库配置PWM输出并动态调整占空比,然后详细说明了编码器接口的配置流程,包括定时器设置、中断处理和速度计算。重点阐述了编码器溢出检测机制和转速计算公式,通过TIM3记录脉冲数、TIM2提供时间基准来实现精确测速。最后提到在CubeMX中完成配置后,可通过串口输出测试结果。
2025-12-28 09:08:26
805
原创 STM32的ADC是什么,其转换精度通常有那些选项?
本文深入解析STM32微控制器的模数转换器(ADC)模块,重点探讨其转换精度的关键要素。文章指出ADC精度不仅取决于12位分辨率,更受参考电压稳定性、采样时间配置、时钟频率及PCB布局等多因素影响。详细介绍了偏移误差、增益误差等关键参数,并提供了实用建议:使用外部基准电压源、合理配置采样周期、实施软件校准与滤波等优化措施。通过系统性考虑内部误差和外部条件,开发者可充分发挥STM32ADC性能,实现高精度模拟信号采集。
2025-12-28 09:02:52
772
原创 江科大无限透传模块程序编写HC-40,无线调节PID,各种参数。
本文介绍了基于STM32的蓝牙串口通信程序实现过程。主要内容包括:1.硬件连接采用蓝牙模块替代USB转串口;2.程序实现了串口数据收发、OLED显示、按键控制、滑杆和摇杆数据处理等功能;3.详细讲解了数据包格式修改、字符串分割(strtok)、比较(strcmp)和数值转换(atoi/atof)等关键函数的使用;4.提供了完整的main.c和serial.c程序代码,实现了蓝牙指令解析、数据显示和波形绘制等功能。通过该程序,可以完成蓝牙指令接收、数据显示和远程控制等功能,为物联网设备开发提供了实用参考。
2025-12-27 09:18:24
1046
原创 逻辑最清晰的STM32F1/F4标准库工程创建
首先我们来了解一下各个文件的作用是干什么的。在嵌入式开发中,STM32系列微控制器因其强大的性能和丰富的外设资源而广受欢迎。对于初学者和习惯于传统开发方式的工程师来说,标准库(Standard Peripheral Library)提供了一种直观且易于理解的编程接口。本文将详细介绍如何从零开始创建一个STM32F1/F4的标准库工程。开发板:STM32F103C8T6(F1系列)或STM32F407VET6(F4系列)开发环境:Keil MDK-ARM 或 IAR EWARM或者免费的VSCode + AR
2025-12-27 09:11:22
1322
原创 STM32 电源管理模式全解析:低功耗场景该如何选型?
摘要:本文详细解析STM32系列MCU的电源管理模式及其在低功耗场景下的应用。重点介绍四种核心模式(运行、睡眠、停止、待机)的工作机制、功耗范围及适用场景,并提供标准库代码示例。针对不同休眠需求(短时快速响应、中等休眠、长时极低功耗)给出选型策略,强调外设预处理和时钟优化的重要性。最后指出唤醒后时钟恢复、数据保存等实战注意事项,帮助开发者在电池供电场景下优化设备续航能力。
2025-12-26 09:51:29
795
原创 江科大HC-40蓝牙模块测试无限透传模式。
本文介绍了蓝牙模块的基本功能和使用方法。首先概述了经典蓝牙和低功耗蓝牙的区别,以及蓝牙模块的三种连接方式。详细说明了通过AT指令配置模块参数的过程,包括查询波特率、设置模块名称等操作。重点讲解了如何通过手机蓝牙助手小程序实现远程控制功能,包括滑杆调参、摇杆控制、OLED显示和波形绘制等功能。文章还介绍了数据包的解析方法,以及如何在串口通信中处理接收到的控制指令。最后预告了后续将介绍STM32蓝牙互传的程序实现方法。
2025-12-26 09:47:01
439
原创 STM32平衡车: 电机测速+正反测速
本文介绍了基于STM32的电机控制系统实现方案。系统通过定时器配置实现PWM波输出控制电机转速,采用编码器模式进行速度测量。文章详细阐述了减速电机参数计算,包括电机轴每转脉冲数(44个)、输出轴每转脉冲数(836个)以及转速计算公式。同时提供了完整的程序代码,包含PWM初始化、编码器配置、方向控制等功能实现,并通过串口输出调试信息。系统能够准确识别电机正反转状态,动态调整PWM占空比实现转速控制,最终完成了对减速电机的精确速度检测与控制。
2025-12-25 12:37:58
671
原创 STM32F103C8T6中定时器分类以及作用。
STM32F103C8T6单片机定时器功能详解 摘要:STM32F103C8T6内置多种定时器,包括高级控制定时器(TIM1/TIM8)、通用定时器(TIM2-4)、基本定时器(TIM6/7)和看门狗定时器。高级定时器支持互补输出和死区控制,适用于电机驱动;通用定时器可实现PWM输出、输入捕获等常用功能;基本定时器提供简单定时功能;看门狗用于系统监控。SysTick定时器为操作系统提供时基。根据具体应用需求,如电机控制、PWM生成或系统保护等,可选择不同类型的定时器实现相应功能。
2025-12-25 12:37:29
971
原创 编码器测速思路,以及如何进行测速,速度调整
摘要:本文详细解释了编码器脉冲计数中溢出部分的计算方法。当计数器CNT在0-9范围内循环时,每次溢出(从9→0或0→9)代表完成一个完整循环(10个脉冲)。总脉冲数=n×10+x,其中n是完整循环次数,x是当前循环的计数值。通过时钟和里程表等生活化比喻说明原理,并纠正了常见的边界错误(差1错误)。最终得出统一公式:总脉冲数=当前CNT值+n×M(M=10),该公式适用于正反向旋转,结果的正负表示转动方向。
2025-12-24 12:26:22
727
原创 STM32平衡车工具-匿名助手+虚拟串口如何使用。
摘要:匿名助手显示波形的关键是通过串口实现单片机与电脑的数据传输。单片机需按匿名协议打包数据(包含帧头、功能码、数据长度等),通过串口定时发送。匿名助手端需正确配置串口连接,在高级收码中设置匹配的数据帧格式,并在波形显示界面添加对应数据源。注意事项包括协议一致性、数据类型匹配等,常用于显示传感器数据、PID调试曲线等。具体操作涉及虚拟串口设置、数据帧测试和波形添加,是平衡车等项目中观察PWM、PID波形的重要工具。
2025-12-24 12:24:32
1060
原创 STM32-HAL库学习,初识HAL库
摘要:本文介绍了HAL库的基本特点和功能。HAL库与标准库相比具有全系列兼容、易于移植等优势,其文件结构包含多个功能文件夹。文章重点讲解了HAL库的命名规则和两类重要回调函数:初始化回调函数(用于存放外设初始化代码)和中断回调函数(自动处理中断标志位)。这些特性简化了开发流程,用户只需关注功能实现而无需处理底层细节。HAL库通过_weak修饰符允许用户重定义函数,提供更灵活的编程方式。后续将详细介绍HAL库的具体使用方法。
2025-12-23 20:38:41
621
原创 在stm32中什么是hal库,什么是标准库,二者的区别?
摘要:本文对比了STM32开发中的两种主流库——标准库和HAL库。标准库提供寄存器级控制,适合资源受限项目和底层学习;HAL库具有高度抽象和跨平台特性,适合快速开发和复杂应用。文章从架构设计、性能资源、外设支持等方面详细对比了两者差异,并给出选择建议:新项目推荐HAL库,性能关键场景可考虑标准库或LL库。随着ST官方转向HAL库,建议开发者掌握HAL同时保持底层理解能力,根据项目需求灵活选择开发方案。(149字)
2025-12-23 08:37:18
1914
原创 STM32复位源全解析:如何通过寄存器精准判断复位原因
摘要:本文深入解析STM32的复位机制,详细介绍了硬件复位(上电/掉电、看门狗等)、软件复位和低功耗复位等复位源类型。重点讲解了通过RCC_CSR寄存器判断复位原因的方法,并提供了实用的复位检测代码实现,包括复位标志读取、清除和统计功能。文章还分享了不同STM32系列的差异处理、常见问题排查技巧,强调掌握复位源判断对系统调试和稳定性优化的重要性,建议将复位检测作为系统初始化标准流程,以提升产品可靠性和维护效率。
2025-12-22 09:50:16
670
原创 STM32外设基地址与寄存器偏移地址的深度解析
摘要:本文深入解析STM32嵌入式开发中的地址映射机制,重点阐述外设基地址与寄存器偏移地址的关系。通过分析4GB地址空间划分,详细介绍了AHB/APB总线外设的地址计算方法(基地址+偏移地址),并以GPIO和USART为例演示了地址计算过程。文章还讲解了结构体映射技术、位带操作等高级应用,提供了地址验证和调试技巧。最后总结了最佳实践,强调应使用厂商提供的头文件定义而非硬编码地址,并针对不同芯片系列给出了处理建议。这些知识是理解STM32底层开发和优化代码性能的基础。
2025-12-22 09:49:44
1215
原创 STM32 平衡车前置:直流电机正反转 PID 控制(编码器测速 + PWM 驱动)
本文基于STM32F103平台设计了一套电机控制程序,为平衡车开发奠定基础。系统通过TIM1输出PWM驱动电机,TIM3编码器模式实时采集转速,TIM2定时器提供50ms中断触发转速计算。程序实现了电机正反转自动测试功能,采用状态机设计确保数据采集准确性,支持串口调试和匿名上位机通信。该方案采用模块化封装,重点解析了三个定时器的协同工作原理:TIM2作为心跳定时器,TIM3负责测速,TIM1控制PWM输出。这套程序后续可扩展为PID闭环控制,只需加入姿态传感器即可实现平衡车自平衡功能。
2025-12-21 10:12:50
1512
原创 C语言中,malloc和free是什么,在STM32中使用限制是什么,该如何使用?
本文介绍了STM32中malloc和free的使用限制及正确方法。由于STM32内存资源有限且实时性要求高,动态内存分配可能导致碎片化、响应延迟等问题。推荐优先使用静态分配或内存池方案,若必须使用malloc/free,应配置合理堆空间、避免频繁分配释放,并确保配对使用。在RTOS环境中建议使用系统自带的内存管理,或实现自定义内存管理器。关键要限制分配大小、减少分配次数,避免在中断等关键场景使用,同时做好内存监控和错误处理。对于资源受限的STM32,静态内存分配是最安全可靠的选择。
2025-12-21 10:10:20
562
原创 STM32平衡车开发计划2-电机编码器测速
摘要:本文介绍了基于STM32的电机测速系统实现。系统通过PWM控制电机转速,使用编码器进行速度测量。针对减速比为19的电机,详细计算了输出轴每转的编码器脉冲数(836个脉冲/转)和转速转换公式(RPM=脉冲数×0.7177)。程序实现了定时器中断处理、编码器计数和速度计算功能,并通过串口输出调试信息。系统可准确测量电机转速,适用于减速电机控制应用。
2025-12-20 18:59:44
703
原创 什么是内存对齐?在STM32上面如何通过编辑器指令来实现内存对齐。
内存对齐是计算机系统中数据存储的重要概念。本文通过书架和超市购物等生活比喻,解释了内存对齐的基本原理。重点介绍了STM32(ARMCortex-M)处理器的特殊对齐要求,包括4字节字、2字节半字的强制对齐规则。文章提供了多种保证内存对齐的编程方法,如GCC的__attribute__属性、ARM编译器指令和C11标准方法,并给出DMA缓冲区、网络数据包等实际应用示例。最后总结了STM32开发中的最佳实践,强调正确处理内存对齐可以避免硬件错误并提升程序性能。
2025-12-20 18:58:43
876
原创 在STM32中,中断服务函数的命名有什么要求?
摘要:STM32中断服务函数(ISR)必须使用启动文件中预定义的名称,如TIM2_IRQHandler。使用步骤包括:1)编写ISR函数并清除中断标志;2)配置NVIC设置优先级;3)使能外设中断。HAL库可通过回调函数处理中断。注意事项:必须清除中断标志、避免长时间操作、正确配置优先级。常见错误包括命名不规范、未清除标志位、在ISR中调用阻塞函数等。遵循这些规则可确保中断功能正常运行。
2025-12-19 11:45:03
329
原创 编码器测速详情解释:PID闭环控制
摘要:本文详细解释了编码器脉冲计数中n×10的含义,其中n表示溢出次数(完整循环数),10代表每个循环的脉冲数(CNT范围0-9)。通过具体示例说明总脉冲数=n×10+x(x为当前CNT值),并纠正了常见的差1错误。关键点在于:每次CNT从9→0的溢出代表完成10个脉冲,n记录完整循环次数。正向旋转时n为正,反向为负,统一公式total=x+n×M可直接表示方向和脉冲总数。文中还对比了里程表和时钟的类比,帮助理解溢出计数的原理。
2025-12-19 11:44:36
885
原创 C语言中union(共同体)的特电是什么?STM32中常用于处理什么数据?
摘要:C语言中的union(共同体)具有内存共享特性,所有成员共用同一段内存空间,大小为最大成员的大小,同一时间只能存储一个成员的值。其典型特点包括内存覆盖、节省内存、类型转换和大小端检测。在STM32嵌入式开发中,union广泛应用于寄存器位域操作、数据包解析、浮点数转换、多数据类型访问、状态标志位管理和通信协议处理。使用union能有效节省内存并提高访问效率,但需注意数据覆盖和字节序问题。最佳实践是添加清晰注释和类型定义,确保紧凑存储。
2025-12-18 13:32:48
395
原创 STM32编码电机闭环PID调节教程。
本文详细介绍了PID控制原理及其在电机转速控制中的应用。首先通过电池电压变化影响电机转速的例子,说明了闭环控制的必要性。接着阐述了编码器测速原理,包括霍尔传感器正交波形检测和定时器计数方法。在程序实现部分,重点讲解了编码器计数、定时器中断处理和PWM波形生成等技术细节,并演示了如何通过L298N驱动模块控制电机。最后深入探讨了PID控制算法,通过调整P、I参数实现转速的精确控制,分析了参数设置不当可能导致的振荡问题。整个系统实现了电机转速的闭环反馈控制,展示了PID控制在工业自动化中的实际应用。
2025-12-18 13:27:32
1320
原创 基于STM32直流电机的PID调节+程序对比,可应用于倒立摆,平衡车等等
本文用司机开车比喻形象讲解PID控制原理:Kp(大力士)快速缩小误差,Ki(坚持者)消除静差,Kd(刹车手)抑制震荡。针对电机控制特点,重点说明死区(4000PWM启动门槛)和积分限幅(防止输出饱和)的关键作用,并通过实际测试数据验证参数调整效果(Kp=1.5/Ki=0.2/Kd=0.5时,电机能平稳达到100RPM)。最后给出参数调节口诀:先调Kp至响应快速无震荡,再调Ki消除静差,最后用Kd抑制震荡,同时确保死区偏置与最小PWM匹配,积分限幅留有足够调节空间。
2025-12-17 08:56:52
1095
原创 STM32编程方法:通过函数指针来实现PWM电机速度设置,嵌入式。
本文展示了如何使用函数指针实现硬件抽象层(HAL),以STM32控制小车电机为例。通过定义void(*set_speed_left)(int16_t speed)这样的函数指针,将"设置速度"的操作与具体实现解耦。上层代码只需调用函数指针,无需关心底层是PWM还是其他驱动方式。当硬件更换时,只需修改初始化时的函数绑定,无需改动上层逻辑。这种方法实现了硬件隔离,提高了代码的可维护性和可测试性,是嵌入式系统开发中面向接口编程的典型实践。
2025-12-17 08:56:14
398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅