在STM上用PWM波形实现2个 LED呼吸灯
STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯
文章目录
- STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯
- 1.PWM
- 1.1 PWM定义
- 1.2 PWM参数
- 1.3 基本原理
- 2.STM32上的PWM
- 2.1 PWM产生
- 2.2 PWM相关寄存器
- 2.2.1 捕获/比较模式寄存器(TIMx_CCMRx)
- 2.2.2 捕获/比较使能寄存器(TIMx_CCER)
- 2.2.3 捕获/比较寄存器(TIMx_CCRx)
- 3. STM32CubeMx创建工程
- 3.1 配置RCC
- 3.2 配置SYS
- 3.3 配置定时器TIM3
- 3.4 配置定时器TIM4
- 3.5 配置时钟
- 3.6 生成项目
- 4.keil代码编写
- 4.1 定义变量
- 4.2 打开PWM通道
- 4.3 在while循环中写入调用代码
- 4.4 编译成HEX,烧录
- 5. 运行效果
- 6. 总结
- 7. 参考文章
软件版本:
STM32CubeMX:6.6.0
KEIl:5.37.0.0
FlyMcu:0.188
硬件:
STM32F103c8t6
1.PWM
1.1 PWM定义
PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
脉宽调制(PWM,Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
1.2 PWM参数
pwm的频率:是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);也就是说一秒钟PWM有多少个周期
单位: Hz
表示方式: 50Hz 100Hz
pwm的周期:T=1/f(周期=1/频率),例如50Hz = 20ms 一个周期,如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期
占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20%
脉宽时间占总周期时间的比例,就是占空比
1.3 基本原理
- PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
- 也可以这样理解,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
- PWM就是在合适的信号频率下,通过一个周期里改变占空比的方式来改变输出的有效电压;PWM频率越大,相应越快。
在PWM输出模式下,除了CNT(计数器当前值)、ARR(自动重装载值)之外,还多了一个值CCRx(捕获/比较寄存器值);
当CNT小于CCRx时,TIMx_CHx通道输出低电平;
当CNT等于或大于CCRx时,TIMx_CHx通道输出高电平;
这个时候就可以对其下一个准确的定义了:所谓脉冲宽度调制模式(PWM模式),就是可以产生一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx寄存器确定占空比的信号。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术
2.STM32上的PWM
2.1 PWM产生
STM32的定时器除了TIM6和7,其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出。
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。通用定时器产生PWM 的定时器框图如下:(其他定时器框图类似)
2.2 PWM相关寄存器
包含三个寄存器:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。在TIMx_CCMRx寄存器中的OCxM位写入110(PWM模式1)或111(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。
2.2.1 捕获/比较模式寄存器(TIMx_CCMRx)
下图为TIMx_CCMR1寄存器的各位描述:
这里需要使用的是模式设置位OCxM,总共有两种PWM模式,这两种PWM 模式的区别就是输出电平的极性相反。
- 110:PWM模式1。在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
- 111:PWM模式2。 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
2.2.2 捕获/比较使能寄存器(TIMx_CCER)
下图为TIMx_CCER
寄存器的各位描述:
该寄存器控制着各个输入输出通道的开关。这里只用到了CC2E
位,该位是输入/捕获 2 输出使能位,要想PWM 从 I/O 口输出,这个位必须设置为 1。
2.2.3 捕获/比较寄存器(TIMx_CCRx)
下图为TIMx_CCR1
寄存器的各位描述:
在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果在OC1端口上产生输出信号。利用这点,我们通过修改这个寄存器的值实现控制 PWM 的输出脉宽。
3. STM32CubeMx创建工程
3.1 配置RCC
3.2 配置SYS
3.3 配置定时器TIM3
- 勾选Internal Clock(内部时钟)
- 通道1选择:PWM Generation CH1(PWM输出通道1)
- Prtscaler (定时器分频系数) : 71
- Counter Mode(计数模式):Up(向上计数模式)
- Counter Period(自动重装载值) : 500
- CKD(时钟分频因子) :No Division (不分频 )
3.4 配置定时器TIM4
TIM4配置与TIM3相同
由右边的芯片显示可知TIM3_CH1由PA6输出,TIM4_CH2由PB6输出
3.5 配置时钟
3.6 生成项目
4.keil代码编写
4.1 定义变量
在main.c中定义一个全局变量
uint16_t pwm=0; //占空比
4.2 打开PWM通道
在主函数中添加两行代码
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
4.3 在while循环中写入调用代码
while (pwm< 500)
{pwm++;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm); __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm); HAL_Delay(1);
}
while (pwm)
{pwm--;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm); HAL_Delay(1);
}
HAL_Delay(200);
4.4 编译成HEX,烧录
5. 运行效果
LED灯的短脚与PA6相连,PB6与PA13(最小板上自带的LED)相连
6. 总结
这次实验,对PWM的部分知识有了初步了解,并用使用定时器的TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动的外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。
7. 参考文章
STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯的效果_多吃点蔬蔡的博客-CSDN博客
sc=%7B%22request%5Fid%22%3A%22166737606116782412520549%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&request_id=166737606116782412520549&biz_id=0&spm=1018.2226.3001.4187)
使用STM32输出PWM波形_不#曾&轻听的博客-CSDN博客_stm32输出pwm波形
在STM上用PWM波形实现2个 LED呼吸灯相关推荐
- STM32F103C8T6核心开发板下,通过TIM3和TIM4输出PWM波形实现2个 LED呼吸灯的效果
使用TIM3和TIM4,分别输出一个PWM波形,驱动一个外接的LED灯以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 文章目录 使用TIM3和TIM4 ...
- 使用STM32输出PWM波形实现2个 LED呼吸灯
目录 一.PWM简介 二.STM32配置PWM输出 三.keil仿真 四.烧录运行 五.现象 六.总结 七.参考链接 一.PWM简介 含义 PWM(Pulse Width Modulation)即脉冲 ...
- STM32输出PWM波形以及实现LED呼吸灯
目录 一.PWM的简介 1.PWM的定义 2.PWM的优点 3.PWM的几种控制方法 (1)等脉宽PWM法 (2)随机PWM (3)SPWM法 4.PWM的主要参数 (1)PWM占空比 (2)PWM的 ...
- 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果
嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...
- 使用STM32输出PWM波形LED呼吸灯的效果
文章目录 前言 一.PWM简介 1.1 关于PWM 1.2 使用步骤 二.使用STM32CUBEMX实现2个 LED呼吸灯的效果 2.1.配置环境 2.2 代码配置 2.3.输出PWM波形 2.4 呼 ...
- STM32输出PWM波形及LED呼吸灯
目录 一.PWM的介绍 1.概述 2.优点 3.主要产生方法 SPWM法 1.等面积法 2.硬件调制法 3.软件生成法 4.PWM电路图 5.PWM基本原理 二.cubemx项目的建立 1.选择芯片S ...
- 嵌入式——使用定时器输出PWM波形,实现 LED呼吸灯的效果
一.实验要求: 使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼 ...
- 使用STM32输出PWM波形并驱动LED呼吸灯
目录 前言 一.PWM 二.工程代码 1.用STM32CubeMx创建工程 创建新项目 配置RCC和SYS 配置定时器TIME3 配置定时器TIM4 配置时钟 生成项目 2.用Keil编写代码 3.硬 ...
- 嵌入式学习--使用定时器输出PWM波形,实现LED呼吸灯的效果
目录 1.任务要求 2.PWM介绍 关于PWM的定义 分频-计数时钟 计数器 定时器输出PWM的原理 定时器的初始化 3.配置STM32CubeMX 4.keil5的代码 5.运行结果 6.心得与体会 ...
最新文章
- 全球比特币和区块链领域创业企业全景图
- 从YARN迁移到k8s,滴滴机器学习平台二次开发是这样做的
- mysql gui tools 问题_Navicat与MySQL GUI Tools管理工具的优缺点对比
- svn is already under version control问题解决
- matlab常用工具箱的调用指令
- numpy-array
- JMETER 第一个实践例子
- java informix 实例
- python编程入门第3版pdf-Python编程入门第3版PDF电子书免费下载
- 突发 , 谷歌官宣安卓改名了!
- POJ3068 Shortest pair of paths 【费用流】
- Python之random.seed()用法
- hibernate详细教程(入门到熟练)
- 利用Sen2cor工具对哨兵2影像进行大气校正和辐射校正
- 【数据结构导论】考试笔记总结(一)
- 人人之间“不简单”,关系图谱“有一套”
- Delta3D(6)教程:创建游戏角色-2
- 验证苹果商店服务器通知 responseBodyV2
- PC端浏览器定位(纯前端)
- Solidworks部分报错及解决方法
热门文章
- 5.10中国品牌日,助力中国产品向中国品牌转变!
- node.js 中Mysql 查询报错 ,解决方法。
- Uniport数据库介绍与使用
- ps2019窗口闪屏_【2018-2019】三星电脑显示器老是闪屏的解决方法word版本 (2页)
- CSS3——弹性盒模型-flex——等分布局、流式布局、圣杯布局(推荐阅读 很棒)
- Tor网络突破IP封锁,爬虫好搭档【入门手册】
- Doxygen文档系统简单使用
- 挣值管理几种情况分析
- 2021-11-14时间可真快
- 读jQuery 权威指南[6]--实用工具函数