STM32 CubeMX 学习:004-PWM
背景
上一讲,我们介绍了 STM32 CubeMX 学习:定时器 ,并示范了如何使用定时器来定时。这一讲我们来试试PWM(Pulse Width Modulation, 脉冲宽度调制),这是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。
HOST-OS : Windows-10
STM32 Cube :v5.6
MCU : STM32F429
LIB : stm32cube_fw_f4_v1250
知识
基本概念
脉冲调制有两个重要的参数,(在STM32中,这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX)
- 输出频率 : 频率越高,则模拟的效果越好。
- 占空比 : 占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。
PWM值 :在一个周期内,开关管导通时间长短相加的平均值。导通时间越长,则直流输出的平均值越大。(因此,可以等效于模拟电路)
例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。
PWM输出频率 : 指这一次导通到下一次导通的时间的倒数。
PWM占空比:指的是输出的PWM中,高电平保持的时间 与 该PWM的时钟周期的时间之比。
如,一个PWM的频率是1000Hz(时钟周期就是1ms,1000us),如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。
PWM分辨率 :分辨率也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率),16位的的PWM理论就是1:65535(单斜率)。频率就是这样的,如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80,那么它的分辨率最小就是1:80了,但是它也快了,也就是说PWM的输出频率高了。
PWM斜率:
- 假设一个PWM从0计数到80,之后又从0计数到80.这个就是单斜率。
- 假设一个PWM从0计数到80,之后是从80计数到0.这个就是双斜率。可见,双斜率的计数时间多了一倍,所以输出的PWM频率就慢了一半,但是分辨率却是1:(80+80) =1:160,就是提高了一倍。
单片机是如何控制产生PWM的:
- 假设PWM是单斜率,设定最高计数是80,我们再设定一个比较值是10,那么T/C从0计数到10时(这时计数器还是一直往上计数,直到计数到设定值80),单片机就会根据你的设定,控制某个IO口在这个时候是输出1还是输出0还是端口取反,这样,就是PWM的最基本的原理了。
补充:PWM"死区"(电机控制方面有关:让桥臂上的上面两个管子或下面两个同时给高电平即为刹车。不让同边导通 为 死区。)
- 通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。
- 死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。(就是上、下半桥的元件都是关断的)死区时间控制在通常的低端单片机所配备的PWM中是没有的。死区时间是PWM输出时,为了使H桥或半H桥的上下管不会因为开关速度问题发生同时导通而设置的一个保护时段,所以在这个时间,上下管都不会有输出,当然会使波形输出中断,死区时间一般只占百分之几的周期。但是PWM波本身占空比小时,空出的部分要比死区还大,所以死区会影响输出的纹波,但应该不是起到决定性作用的。
STM32 与 PWM
在STM32中,每个定时器有四个通道,每一个通道都有一个捕获比较寄存器, 将寄存器值和计数器值比较,通过比较结果输出高低电平,实现PWM信号。
在PWM输出模式下,除了CNT(计数器当前值)、TIMX_ARR (自动重装载值)之外,还多了一个值CCRx(捕获/比较寄存器值)。
上文提到,脉冲调制有两个重要的参数,输出频率分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。
- TIMX_ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。
- 在计数时会不停的和TIMX_CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于TIMX_CCRX值的话电平极性反相。所以这也就控制了占空比。
- 当 CNT 小于 TIMX_ARR 时,TIMx_CHx通道输出低电平;当 CNT 等于或大于 TIMX_CCRX 时,TIMx_CHx通道输出高电平。
PWM的工作模式:
- PWM模式1(向上计数) :计数器从0计数加到自动重装载值(TIMx_ARR),然后重新从0开始计数,并且产生一个计数器溢出事件。
- PWM模式2(向下计数) :计数器从自动重装载值(TIMx_ARR)减到0,然后重新从重装载值(TIMx_ARR)开始递减,并且产生一个计数器溢出事件。
PWM频率计算
Fpwm =Tclk / ((arr+1)*(psc+1))(单位:Hz)
- arr 是计数器值
- psc 是预分频值
占空比:
- duty circle = TIM3->CCR1 / arr(单位:%)
- TIM3->CCR1 用户设定值
比如 定时器频率Tclk = 72Mhz arr=499 psc=71。 那么PWM频率就是720000/500/72= 2000Hz,即2KHz。
arr=499,TIM3->CCR1=250 则pwm的占空比为50%
CubeMX 配置 PWM (以 TIM4 为例)
需要配置好 RCC 时钟
1)在Pinout & Configuration中,选择一个 定时器 (例如 TIM4)
2)"Mode"
- "Clock Source" :选择 "Internal CLock"
- "Channle 1":选择 "PWM Generation CH1"
3)"Configuration " - "Parameter Settings"中
- PSC : 167
- Counter Mode: Up
- Counter Period: 999
- auto-reload preload: Enable
- Trigger Event Selection : Reset
- Mode : PWM模式
- Pulse:占空比值 先给0
- Fast Mode : PWM脉冲快速模式(Disable, 和我们配置无关,不使能)
- CH Polarity : 通道极性(这个通道的初始电平高低)
- "Configuration " - "NVIC Settings"中 : 勾选 "Enabled" (开启中断)
5)右上角,"GENERATE CODE"
STM32 CubeMX 学习:004-PWM的更多相关文章
- stm32定时器学习二——PWM设置
/* STM32 嵌入式学习入门(5)——PWM的实现 上一篇博文介绍了定时器和PWM的基本的原理,本篇博文从代码层面来介绍PWM的具体实现.同样,还是以博主所用的开发板——正点原子开发板STM32F ...
- cubemx+stm32串口学习汇总资料
这篇文章是串口中断的文章--STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助. http://www.stmcu.org.cn/module/forum/thread-616613- ...
- stm32串口学习笔记
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- STM32 FSMC学习笔记+补充(LCD的FSMC配置)
STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD
- 基于STM32的学习型通用红外遥控设备的设计实现(三)
CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 http://blo ...
- STM32 TIM 多通道互补PWM波形输出配置快速入门
platform:stm32f10xxx lib:STM32F10x_StdPeriph_Lib_V3.5.0 前言 在做三相逆变的时候,需要软件生成SVPWM波形,具体的算法需要产生三对互补的PWM ...
- 【转载-Andrew_qian】stm32中断学习
[转载]stm32中断学习 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大 ...
- STM32 CubeMx使用教程
一.STM32CubeMX 简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以 ...
- STM32 Cubemx 输出可调频率与占空比的PWM
这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现. 1.建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2.配置时钟,我这里配的是内部时钟, ...
- 基于STM32F030F4P9和STM32 CUBEMX 输出PWM波形
STM32F030F4P9定时器功能比较丰富,在此记录项目中使用其自动输出PWM波形(频率:50HZ).CubeMX配置定时器如下图说明. 在此定时器基础时钟为48MHZ,配置中不做分频处理,预分频系 ...
随机推荐
- 五:大数据架构回顾-LambdaPlus架构
Blink是阿里云在 Apache Flink 基础上深度改进的实时计算平台,Blink旨在将流处理和批处理统一,实现了全新的 Flink SQL 技术栈,在功能上,Blink支持现在标准 SQL 几 ...
- 【python爬虫案例】用python爬取百度的搜索结果!2023.3发布
目录 一.爬取目标 二.展示结果数据 三.编写爬虫代码 3.1 请求头和cookie 3.2 分析请求地址 3.3 分析页面元素 3.4 获取真实地址 3.5 保存结果数据 四.同步讲解视频 五.附完 ...
- MacOS Endnote修改引用样式和文献序号样式方法
目录 1. 打开Endnote的Style Manager 2. 修改文献序号样式"1."" -> [1]" 3. 修改引用样式为上标形式 1. 打开En ...
- VS Code侧边栏的“资源管理器”丢了
选择"查看"下的"命令面板" 输入:View: Reset View Locations 所有的视图会恢复到默认的位置.
- C++:查漏补缺笔记
文章目录 数组 一维数组 初始化数组 数组名 二维数组 函数 函数声明 函数的分文件 函数重载 指针 空指针 野指针 const 结构体指针 指针++ 指针与函数 地址传递 C++引用 面向对象易错点 ...
- angular打包优化
打包生产环境时需要的配置如下: 在angular.json里的"configurations"里配置: "configurations": { "pr ...
- LOTO示波器软件PC缓存(波形录制与回放)功能
当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存. 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形.一帧数据的量 ...
- C# 程序集、模块和类型概念及关系
目录 C# 程序集.模块和类型概念及关系 概述 程序集 模块 类型 程序集.模块和类型的关系 总结 引用 C# 程序集.模块和类型概念及关系 概述 在 C# 中,程序集.模块和类型是构成 .NET 应 ...
- 第三方调用saltstack
python api使用 实例及工作原理解析 指定target 函数,命令等等,就可以可以了. [root@mcw01 ~]# python Python 2.7.5 (default, Aug 4 ...
- Linux使用宝塔面板发布.NetCore3.1
1,安装宝塔面板 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0 ...