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,配置中不做分频处理,预分频系 ...
随机推荐
- C语言笔记001-用C语言编写程序
例2-1 在屏幕上显示一个短句"Hello World!". #include <stdio.h> int main(void) { printf("hel ...
- 通过劫持线程arena实现任意地址分配 n1ctf2018_null
通过劫持线程arena,当堆开了一个线程之后,如果没有做好保护随之的危险也悄然而至 BUU上的n1ctf2018_null很好的说明了这个问题 题目链接:BUUCTF在线评测 (buuoj.cn) 看 ...
- 在Deepin 20.2系统中换源并全新图解安装MySQL数据库
在Deepin 20.2系统中换源并全新图解安装MySQL数据库 https://www.ywnz.com/linuxysjk/9249.html ubuntu下apt-get彻底卸载mysql 删除 ...
- gitignore文件不生效的问题解决
如何添加 git的忽略文件 .gitignore 在使用git过程中,我们可能有些文件不需要上传上去,比如一些缓存文件,生成的图片,运行环境的一些配置等等,这时就需要用到.gitignore忽略掉这些 ...
- nim 7. nimble--制作包
1. nim的包管理工具: nimble nim的包管理工具,是nimble. 在安装nim的时候,已经自带了nimble. nible通常需要使用git服务器存储包,因此,本地需要git命令的支持. ...
- TCP协议分析工具TcpEngine V1.2.0使用教程
概述 目前主流的网络数据分析工具主要有两类,一类是http协议分析工具,如fiddler,这类工具擅长对字符串类型协议分析:另一类是原始网络数据包的监听分析,如Wireshark,这类工具擅长分析网络 ...
- PageOffice6 版本常用事件
1.AfterDocumentOpened 事件 打开文件后自动触发的事件是 AfterDocumentOpened 事件,它通常用于实现文件打开后自动执行某些业务逻辑,比如将默认控件全屏.禁止保存. ...
- NFS共享文件
NFS共享文件 服务端 安装NFS [root@localhost www] yum -y install nfs-utils rpcbind 创建需要共享的文件夹share [root@localh ...
- 理解Vue 3响应式系统原理
title: 理解Vue 3响应式系统原理 date: 2024/5/28 15:44:47 updated: 2024/5/28 15:44:47 categories: 前端开发 tags: Vu ...
- 为什么SwiftUI使用struct, 限制使用class
前言 在学习SwiftUI所有的地方,视图元素都定义一个struct并实现View协议,该协议定义body变量返回View类型. 但是为什么,这里一直是指定的struct, 而不是class呢? 尝试 ...