PWM的概念和原理

  • 一、PWM是什么?
  • 二、如何实现?
  • 三、STM32中的PWM
  • 四、使用库函数配置PWM将LED0设置为呼吸灯

一、PWM是什么?

PWM(Pulse width modulation)脉冲宽度调制。PWM是通过编程控制输出方波的频率和占空比(高低电平的比例)。应用:测量,通信,功率控制与变换等各种领域(呼吸灯、电机)。

二、如何实现?

PWM是由定时器驱动,定时器的周期就是PWM的周期,为了控制高低电平的比例,会在定时器的基础上加上一个比较寄存器,同时需要和IO口结合输出PWM波。

三、STM32中的PWM

STM32中PWM属于定时器的功能,通过直接配置定时器就可以使用PWM,除了定时器的基本配置以外,还要加入一个比较计数值确定一个周期内翻转电平的时机,还需要GPIO输出方波,需要用到GPIO的复用功能。
PWM波的高低带你平的顺序是由极性PWM模式计数模式共同决定。极性决定有效电平(默认电平),PWM模式指的是一个周期内有效电平和无效电平的顺序。

注意:只有有定时器服用功能的GPIO才可以输出PWM。

四、使用库函数配置PWM将LED0设置为呼吸灯

1、原理
如下图低电平0灯亮,高电平1灯灭。如果快速翻转电平,我们肉眼看到灯的亮度为原来的一半

通过再极短时间内控制LED亮灭时间的比例,可以达到控制灯的亮度,用数字信号的方法,达到模拟的控制效果——PWM调控方法
宏观和微观的区别:
微观上:数字信号控制灯的亮和灭,不断切换并保证切换的速度足够快,快到人的肉眼识别不了。
宏观上:灯的亮度效果变化了。
2、代码思路

(1)使能时钟
GPIOF时钟
TIM14时钟
(2)初始化GPIO为复用功能

GPIOInitStruct.GPIO_Mode  = GPIO_Mode_AF
GPIO_Init(...);

(3)将定时器14通道1的复用功能映射到GPIOF9

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
参数:
GPIOx:哪一组GPIO
GPIO_PinSource:哪个引脚
GPIO_AF:哪个复用功能

(4)初始化定时器

TIM_TimeBaseInit(...);

(5)初始化PWM的参数(比较值、极性、PWM模式)

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
参数:
TIMx:哪个定时器
TIM_OCInitStruct:定时器PWM的初始化结构

(6)使能PWM的预装载和重装载功能

 TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM14, Enable);

(7)启动定时器
TIM_Cmd(TIM14,ENABLE);
(8)根据需要调节PWM的占空比(修改比较计数值)
3、示例代码

void TIM14CH1_PF9Init(void)
{GPIO_InitTypeDef GPIOInitStruct;TIM_TimeBaseInitTypeDef TIMInitStruct;TIM_OCInitTypeDef TIMOCInitStruct;//1-使能时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);//2-初始化引脚PF9 为复用AF功能GPIOInitStruct.GPIO_Pin   = GPIO_Pin_9;//确定要初始化的引脚号GPIOInitStruct.GPIO_Mode  = GPIO_Mode_AF;//复用功能GPIOInitStruct.GPIO_OType = GPIO_OType_PP;//复用推挽GPIOInitStruct.GPIO_Speed = GPIO_Speed_100MHz;GPIOInitStruct.GPIO_PuPd  = GPIO_PuPd_NOPULL;//浮空输入模式GPIO_Init(GPIOF,&GPIOInitStruct);//3-指定连接PF9引脚复用到 TIM14功能  GPIO的复用功能配置寄存器 GPIO_AFRL  GPIO_AFRHGPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_TIM14);//4-初始化TIM14时基单元  ARR  PSC  CNT计数模式TIMInitStruct.TIM_Prescaler = 84-1;// 84Mhz/84 = 1Mhz   1us/脉冲TIMInitStruct.TIM_Period    = 1000-1;//计1000个脉冲  对应1ms TIMInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//不分频//TIMInitStruct.TIM_CounterMode  = TIM_CounterMode_Up;//递增  TIM14只能递增不用设置TIM_TimeBaseInit(TIM14,&TIMInitStruct);//5-定时器的输出功能配置--配置PWM输出模式  PWM输出极性  配置CCRx初值.... TIMOCInitStruct.TIM_OCMode      = TIM_OCMode_PWM1;//CNT < CCR 输出有效电平  CNT>=CCR输出无效电平TIMOCInitStruct.TIM_OCPolarity  = TIM_OCPolarity_Low;//低电平有效TIMOCInitStruct.TIM_Pulse       = 0;//默认CCR1 = 0 灯灭 100%TIMOCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//开启TIM_OC1Init(TIM14,&TIMOCInitStruct);//6.使能预装载和重装载TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM14, Enable);//6-开启TIM14TIM_Cmd(TIM14,ENABLE);
}

【STM32】详解PWM的概念和原理相关推荐

  1. c#打开数据库连接池的工作机制_详解数据库连接池概念、原理、运行机制等

    概述 数据库连接池是负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个.那么其中的运行机制又是怎样的呢?今天主要介绍一下数据库连接池原理和常用的连接池. ...

  2. 详解变频器、逆变器工作原理

    我现在知道直流怎么变为交流,通过PWM波,我感觉无人机的电调就是个逆变器,就是把直流变为交流,莫非就是飞控输出PWM,电调就是专为交流电?不讲道理是PWM遇到电机线圈就自动变为交流电了么. 摘自:ht ...

  3. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...

  4. 详解音频编解码的原理、演进和应用选型等

    本文来自网易云音乐音视频实验室负责人刘华平在LiveVideoStackCon 2017大会上的分享,并由LiveVideoStack根据演讲内容整理而成(本次演讲PPT文稿,请从文末附件下载). 1 ...

  5. 深入浅出多线程编程实战(五)ThreadLocal详解(介绍、使用、原理、应用场景)

    深入浅出多线程编程实战(五)ThreadLocal详解(介绍.使用.原理.应用场景) 文章目录 一.ThreadLocal简介 二.ThreadLocal与Synchronized区别 三.Threa ...

  6. 即时通讯音视频开发(十八):详解音频编解码的原理、演进和应用选型

    1.引言 大家好,我是刘华平,从毕业到现在我一直在从事音视频领域相关工作,也有一些自己的创业项目,曾为早期Google Android SDK多媒体架构的构建作出贡献. 就音频而言,无论是算法多样性, ...

  7. STM32详解一startup_stm32f10x_hd_vl(超值类型STM32F100xx)和startup_stm32f10x_hd(大容量的STM32F101xx,STM32F102xx,S)

    STM32详解一 转载w282529350 最后发布于2013-12-09 14:31:06 阅读数 8413  收藏 展开 STM32详解1 一.在进入主题之前我们先了解一些必要的基础知识----s ...

  8. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

  9. IPv6技术详解:基本概念、应用现状、技术实践(上篇)(转)

    最近在搞IPV6的项目,百度搜了下,这个还是写的很清楚,转载下, 原文是这里,https://www.cnblogs.com/imstudy/p/9056334.html 严禁转载,请告知 本文来自微 ...

最新文章

  1. Windbg 教程-调试非托管程序的基本命令下
  2. 2021年程序员1月薪资大幅度上涨,你的2021有奔头了吗?
  3. 在Windows下编译zlib1.2.5
  4. ubuntu安装php7-mysql,ubuntu上安装php7.0+nginx+mysql
  5. 线程八锁,同步锁的应用
  6. 对于android和iphone计划
  7. linux系统安全(二): 日志(转)
  8. yum [Errno 256] No more mirrors to try 解决方法
  9. springmvc07 Json处理
  10. MATLAB的安装步骤
  11. 爬完点评爬某东,爬他个600多本书籍资料
  12. C语言实现复数计算器
  13. STM32F7以太网HAL库源文件(stm32f7xx_hal_eth.c)笔记
  14. python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源)
  15. 北京公共计算机考试准考证打印
  16. Unity录音并且保存文件(去掉录音无效片段)
  17. sap甲方_SAP顾问现状
  18. 网众无盘多服务器,网众无盘多配置建立方案
  19. 可变对像+元组与字典2020-11-10
  20. leadsoft成套电器报价系统Winner解决方案

热门文章

  1. 如何才能写出好的APP新闻报道及软文?
  2. 开源项目mini-ipc简介
  3. 【2022】招商银行信用卡中心春招实习生技术岗B卷
  4. 【无标题】鱼池转发命令
  5. Acer宏基笔记本电脑,宏碁暗影骑士擎AN515-58原装出厂恢复原厂预装Windows11/Win10镜像oem专用系统
  6. [转]2d游戏开发:游戏地图编辑器
  7. UVALive 3351 Easy and Not Easy Sudoku Puzzles 位运算~判断简单数独
  8. DFT,IDFT,FFT,IFFT算法的C++实现
  9. 分享saas门店收银系统源码的商品发布与编辑功能重构
  10. php贺卡生成,抖音私信名片卡片消息链接图文xml生成制作方法php代码插件软件解析...