当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]引言:生成脉宽调制(PWM)信号是嵌入式系统中最基本的需求之一,无论您是在驱动舵机、调光LED,还是控制电机驱动器。尽管高层抽象层(如HAL或Arduino)可以通过一行代码实现PWM信号,但这些层会掩盖底层的硅片逻辑。

引言:生成脉宽调制(PWM)信号是嵌入式系统中最基本的需求之一,无论您是在驱动舵机、调光LED,还是控制电机驱动器。尽管高层抽象层(如HAL或Arduino)可以通过一行代码实现PWM信号,但这些层会掩盖底层的硅片逻辑。

在本项目中,我们将摒弃使用库函数,从零开始通过纯C语言和裸机寄存器操作(CMSIS)在STM32F411CEU6“黑板”上配置一个通用定时器。我们将配置TIM3同时驱动PB4和PB5上的两个独立硬件PWM输出,初始化后完全绕过CPU。

工作原理:硅层

硬件定时器本质上是一种自主运行的高速数字计数器。它利用MCU内部时钟源(在此情况下为默认的16 MHz内部高速振荡器,即HSI),在后台静默运行。

STM32F411 Blackpill

引脚映射表:

•PB4 -> TIM3_CH1 (AF2) -> 电阻(330欧姆)-> LED 1 -> GND(信号:1 kHz,25%占空比)

•PB5 -> TIM3_CH2 (AF2) -> 电阻(330欧姆)-> LED 2 -> GND(信号:1 kHz,75%占空比)

•GND -> 接地参考 -> 公共接地线

该架构依赖于三个主要的16位寄存器协同工作:

•预分频器(PSC):将输入的16 MHz时钟分频至可管理的频率。对于1 MHz的定时器计数,我们将其除以16(PSC = 15)。

•自动重载寄存器(ARR):上限值。计数器(CNT)会一直递增,直到与ARR相匹配,然后立即重置为0。这决定了PWM的频率。

•捕获/比较寄存器(CCR):阈值。硬件比较器会检查CNT是否小于CCR,这决定了PWM占空比。

机制(PWM模式1):

•当CNT小于CCR时:物理引脚被拉高。

•当CNT大于或等于CCR时:引脚变为低电平。

•当 CNT 达到 ARR 时:计数器重置为 0,引脚再次拉高。

分步配置流程:配置裸机外设需要在三个层次上遵循严格的顺序操作:RCC(时钟)、GPIO(引脚复用)和定时器外设。

第一层:为模块供电(RCC)

默认情况下,外设的时钟被关闭以节省功耗。没有时钟的外设完全无法响应——对其寄存器写入将毫无作用。我们必须在 AHB1 总线上启用 GPIOB 的时钟,在 APB1 总线上启用 TIM3 的时钟。

第二层:通过备用功能进行路由

要使一个引脚传输硬件生成的PWM信号,必须将其从标准的CPU输入/输出寄存器中分离,并交由定时器多路复用器处理。

将 MODER 中的引脚模式设置为替代功能(0b10)。

将引脚映射到替代功能低寄存器(AFRL)中的AF2,该寄存器在硅片上明确将PB4连接到TIM3_CH1,PB5连接到TIM3_CH2。

第三层:定时器设置与预加载缓冲区 我们使用标准公式计算寄存器:

频率 = 输入时钟 / ((PSC + 1) * (ARR + 1))

CCR = 职责比例 × (ARR + 1)

关键的是,我们启用了输出比较预加载位(OCxPE)。该功能起到至关重要的安全缓冲作用:当您在应用循环中更新占空比时,硬件会拦截写入操作,并等待当前计数周期完成后再执行,从而彻底消除周期中间的波形抖动。

常见陷阱与故障排除:

•引脚输出无信号?在访问任何外设寄存器前,请确保已启用 RCC->AHB1ENR 和 RCC->APB1ENR。

•使用 TIM1 而不是 TIM3?高级定时器如 TIM1 需要你显式地在 TIM1_BDTR 寄存器中设置主输出使能(MOE)位,否则引脚将完全处于关闭状态。

•覆盖通道?在CCMR1中配置通道属性时,务必使用读取-修改-写入的位操作(|=)。若直接使用赋值操作(=)来配置通道2,将静默清除通道1的设置。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

如果你能仅凭大脑、肌肉运动和眨眼来操控无人机,那会怎样?在这个项目中,我们将构建一个实时脑机接口(BCI),通过EEG(脑活动)、EMG(肌肉活动)和EOG(眼动)信号来控制一架DJI Tello无人机。

关键字: 嵌入式系统 机器人 无人机

使用Arduino蓝牙模块的舵机控制器项目是一个无线嵌入式系统,通过蓝牙通信实现对舵机电机的远程控制。本项目以Arduino® UNO R4 WiFi作为主控制器,并采用HC-05蓝牙模块实现无线连接。该系统允许用户通过...

关键字: 嵌入式系统 舵机电机 伺服控制器 HC-05蓝牙模块

在LED照明(室内灯、车灯、显示屏背光)中,PWM调光通过高速开关LED来调节亮度,但若PWM频率过低或滤波不足,人眼或摄像头会感知到频闪(Flicker)——导致视觉疲劳、头痛或视频画面滚动条纹。本文介绍频闪的测量方法...

关键字: LED驱动 PWM

呼吸灯是嵌入式开发中最经典的入门级实践项目,它通过让LED亮度从暗慢慢变亮,再从亮慢慢变暗,模拟人呼吸的节奏,不仅效果直观,还能帮开发者快速理解PWM(脉冲宽度调制)的核心原理。几乎所有初学单片机的开发者,都会在点亮LE...

关键字: PWM LED

当前,嵌入式系统正向多架构、高复杂度与全生命周期管理快速演进,研发团队面临维护多款产品、适配不同架构、承接新旧迭代项目、兼顾功能安全认证、跨团队协作、代码长期维护等一系列挑战。传统单套工具难以满足上述诸多需求,多套独立工...

关键字: 嵌入式系统 半导体 MCU

在嵌入式开发、工业控制、电力电子等领域,PWM(脉冲宽度调制,Pulse Width Modulation)是应用最广泛的模拟量控制技术之一。小到智能家电的电机调速、LED亮度调节,大到新能源汽车的电机驱动、光伏并网逆变...

关键字: PWM 嵌入式

PWM 波形偶尔抖一下,后级电机或电源环路就可能把它放大成噪声和发热。单片机定时器虽然能自动翻转引脚,但更新时刻和死区配置不对,输出并不会天然稳定。

关键字: 单片机 PWM 定时器

在嵌入式系统中,看门狗(Watchdog Timer, WDT) 是防止程序跑飞的最后一道防线。但“滥用”或“乱喂狗”反而会让看门狗失效——该复位时不复位,不该复位时却误复位。本文将梳理看门狗的正确配置方法,并剖析三种典...

关键字: 看门狗 嵌入式系统

在嵌入式系统开发中,MCU(微控制器)异常复位是开发者最常遇到也最头疼的问题之一:产品在测试阶段运行正常,批量出货后却不定期出现自动复位;低温环境下运行没问题,高温环境下频繁复位;空载测试正常,带负载运行突然复位。这些偶...

关键字: MCU 嵌入式系统

脉冲宽度调制(PWM)是嵌入式系统、电源控制、电机驱动等领域应用最广泛的调制技术,传统PWM设计通常采用固定频率输出,依靠调整占空比实现功率调节。但在实际应用中,固定频率PWM存在电磁干扰集中、谐振激发、音频噪声明显等痛...

关键字: PWM EMC
关闭