STM32上的PWM

发布者:SereneMeadow7最新更新时间:2019-03-06 来源: eefocus关键字:STM32  PWM 手机看文章 扫描二维码
随时随地手机看文章

        在昨天的实验室嵌入式组内分享会上我讲解了PWM、外部中断以及定时器的一些知识,在整理知识点以及制作PPT的过程中也对自己的知识进行了一个总结,所以打算写三篇博客来记录这三个方面的知识点,就以我最近使用的STM32作为平台来记录,其实这三个点是单片机可以说最为基础以及通用的点,任何一个MCU都会有,所以说总结一下还是很有必要的。


        首先就是PWM。


        在昨天的分享会上,我以如何调节灯光的亮暗作为引入来讲解PWM,最容易想到的方法就是加一个可调电阻,就像老式的台灯一样,有一个旋钮,通过调节接入电路电阻的阻值来分压或者分流,降低或者调高灯的亮度。还有一个方法就是调节电压,使工作电压低于额定电压就会使灯的亮度降低,而达到或者超过一点额定电压(超过太多肯定会烧了LED)也可以让灯的亮度提高。最后,我们可以用PWM的方式来调节灯的亮度,使小灯以较高频率的闪烁,通过控制高电平和低电平的时间,来控制灯的亮度。


一、原理介绍


        什么是PWM?   


           脉冲宽度调制(Pulse Width Modulation,PWM)简称脉宽调制


        是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术


        简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。


      什么是占空比?


        占空比就是高电平所占整个周期的时间,如下图所示:


     

        第一个PWM波,周期为10ms,高电平的时间为4ms,所以占空比为40%,同理第二个PWM波为60%,第三个为80%。


        调节占空比相当于实际上在调节有效值,如下图不同占空比的PWM的有效值是不同的。

        什么是PWM的频率?


        PWM的频率的整个周期的倒数,所以说上图PWM的周期为1/0.01,也就是100HZ。改变PWM的频率是通过改变整个的周期实现的。


        所以通过改变高低电平总共的时间、改变高电平占总周期的比例就可以实现任意


频率、任意占空比的PWM波。


     PWM的用途:


        电机调速、功率调制、PID调节、通信等等


     PWM的优点:


        配置简单、抗干扰能力强


二、在32上的PWM


       在STM32上定时器有专门的PWM模式,它的原理就是使用比较输出的方式如下图


             

        ARR为自动重载寄存器,CCR为捕获/比较寄存器,CNT就是定时器的计数器,CNT的值从0开始递增,使用PWM模式后,可以设置有效电平,以及PWM的模式。上图所示的是当CNT的值小于CCRx时,输出低电平,当CNT的值大于CCRx时,输出高点平,所以我们可以通过改变ARR的值来改变PWM的周期,改变CCRx的值来改变PWM的占空比,从而实现任意频率任意占空比的PWM波。


        涉及到的寄存器:



        

        用到的一般就是这三个位,CKD来设置时钟分频,ARPE来使能自动重载预装载,CEN来使能计数器。





        OC1M来配置PWM的模式,PWM模式1,CNT




        CC1P来配置输出极性,可以选择高电平有效或者低电平有效。CC1E来使能捕获/比较。


        PWM的配置过程如下:


        1、使能IO口时钟以及定时器的时钟


        **为什么会使能俩次时钟:因为在单片单片机中IO口、DMA的时钟与低速外设(定时器、ADC、DAC等)并不是共用同一条时钟线的,IO口、DMA以及USB以太网等的时钟线为AHB,主要用于高性能的外设的连接;而定时器、UART等的时钟线为APB,主要用于低带宽的外设的连接。这些涉及到AMBA片上总线规范,在以后的博客中我会单独进行总结。


        2、设置IO口为复用模式、复用为TIM。


        3、配置定时器:设置ARR、PSC控制周期,设置PWM模式


        4、使能定时器通道的输出、使能定时器、


        5、修改CCR寄存器控制PWM的占空比


        代码实现如下:


//TIM14 PWM部分初始化 

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

void TIM14_PWM_Init(u32 arr,u32 psc)

{  

//此部分需手动修改IO口设置

RCC->APB1ENR|=1<<8; //TIM14时钟使能    

RCC->AHB1ENR|=1<<5;    //使能PORTF时钟

GPIO_Set(GPIOF,PIN9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出

GPIO_AF_Set(GPIOF,9,9); //PF9,AF9 


TIM14->ARR=arr; //设定计数器自动重装值 

TIM14->PSC=psc; //预分频器不分频 

TIM14->CCMR1|=6<<4;  //CH1 PWM1模式  

TIM14->CCMR1|=1<<3; //CH1 预装载使能    

TIM14->CCER|=1<<0;    //OC1 输出使能

TIM14->CCER|=1<<1;    //OC1 低电平有效    

TIM14->CR1|=1<<7;    //ARPE使能 

TIM14->CR1|=1<<0;    //使能定时器14   

}  

        通过修改TIM14->CCR1的值可以修改PWM的占空比,可以使用宏定义,这样使修改更加方便。


#define PWM_VAL TIM14->CCR1   

        主程序中:


TIM14_PWM_Init(100-1,8400-1); //10Khz的计数频率,100HZ的PWM. 


        如果设置PWM_VAL的值为50,就产生了占空比为50%为的PWM波。


三、总结


        以上就是关于PWM的原理介绍以及在STM32上的寄存器配置过程。PWM通常是我们最先接触的,同时它差不多也是开发时用到最多的,所以说熟练掌握PWM的配置与使用是至关重要的。


关键字:STM32  PWM 引用地址:STM32上的PWM

上一篇:STM32上的外部中断
下一篇:使用stm32产生三角波和正弦波

推荐阅读最新更新时间:2024-03-16 16:24

STM32的指令周期
在keil中编程时,写了一行代码,然后就想知道,执行这句C代码需要多长时间。 时钟周期在这就不解释了,频率的倒数。 指令周期,个人理解就是cpu执行一条汇编指令所需要的时间。 我们知道cm3使用的三级流水线,那么到底一条指令的执行需要多少个时钟周期。下面通过keil软件仿真,来计算一个指令所需的时钟周期。 使用STM32F103RC,。配置其主时钟HCLK为72mhz测试代码如下: 然后开始仿真 编译通过后,点击dbg按钮,调出如下窗口: 并且设置以上的断点,开始单步调试。并记录时间, 单步调试 这样便可以计算出执行 MVOS r1,#0x04 所用的时间视为29.20833-29.19
[单片机]
<font color='red'>STM32</font>的指令周期
STM32信息安全—密码学基本原理(上)
假设这样一个场景: 有一个女孩Alice,她喜欢Bob,给他发了一封信‘我喜欢你’,另一个女孩Eve想搞破坏,拦截了这封信,篡改了它,再发给Bob,改为‘我不喜欢你’ 我们可以采取什么措施实现: 交换机密/消息:除了目标接收方Bob,其他人都看不到消息的内容 保证消息的完整性:消息被Eve篡改后,Bob能识别出来 (身份)认证:Bob要确定收到的消息确实来自Alice 这就需要密码学帮忙解决。 对消息进行加密 通过加密、解密机制,可以保证交换数据的机密性 两大类加解密机制:以AES为代表的对称加密算法和以RSA/ECC椭圆曲线为代表的非对称加密算法 加解密都需要密钥参与,只是对称加密过程中,加解密使用相同的密
[单片机]
STM32再学习——实时时钟(RTC)
RTC,是RealTimeCounter的缩写。在MCU中,其实是一组连续计数的计数器,各个产品及系列各不相同。因此,在相应的软件配置下,可提供时钟日历的功能。当然,修改这个计数器的值也就重新设置了系统当前的时间和日期。 本文引用地址:http://www.eepw.com.cn/article/182407.htm RTC只是一个时钟,但与RTC相连的有两个系统时钟,一个是APB1接口的PCLK1另一个是RTC时钟 。这样,RTC功能也就分为两个部分:第一部分,APB1接口部分,与APB1总线相连,MCU也就是通过这条总线对其进行读写操作。另一部,RTC核,由一系列可编程计数器组成,这部分又再细分为两个组件:预分频模块与
[单片机]
<font color='red'>STM32</font>再学习——实时时钟(RTC)
在Mac OS X中使用VIM开发STM32(1)
在先前的博文⎣在Mac OS X中搭建STM32开发环境⎤中,我们在Mac中DIY出了最简单的交叉编译和下载环境。但是,只有交叉编译和下载环境是不够的,方便起见,我们需要一个像Keil或者IAR for ARM一样的集编辑源代码、调试与一体的开发环境。当然我们可以选择eclipse,BUT,既然都已经走到这一步了,我们为什么不来一个彻彻底底的DIY呢? 所以,我又看到了VIM这款一直以来低调奢华的编辑器,由于其跨平台的特性,我计划一劳永逸的搞定它!从此不必再纠结用什么IDE更好了,收费的、摸不着头脑的、配置纠结的都特么滚犊子,简直受够了!VIM配置好了以后,可以装进U盘带走,走到哪写到哪,你是不是也激动了?走起
[单片机]
在Mac OS X中使用VIM开发<font color='red'>STM32</font>(1)
基于STM32的平衡小车设计过程
一、简介 接触STM32开发一段时间了,想用STM32做一个有意思的项目,经历了无数的调参调参再调参,终于让它站稳了,接一下就一步步的跟大家介绍一下,项目的整体实现过程— 二、项目介绍 STM32平衡小车是一种基于STM32芯片的智能小车,它可以通过自动控制来保持平衡,使其可以在不同的地形上稳定行驶。其使用范围非常广泛。需要用到一些基本的硬件组件,例如电机、轮子、陀螺仪、加速度计、电池等。通过设计的电路板进行连接,组成一个完整的系统。 三、硬件设计 根据上述需求,我进行了电路图设计 四、软件设计 4.1电机驱动编写 4.1.1电机引脚说明 编码电机 引脚说明: M1电机电源线(12V) GND编码器地线 C
[单片机]
基于<font color='red'>STM32</font>的平衡小车设计过程
STM32】stm32f407 + DS18B20 碰出不一样的火花
前言 之前在这篇文章:【STM32学习记录4】1.44寸TFT液晶屏显示字符、汉字和图片 卖了一个关子: 开发板:stm32f407VET6 开发环境:keil5 MDK 一、硬件基础——DS18B20 1.DS18B20简介 2.硬件连接 根据手册,DS18B20的硬件接法很简单,分为以下两种: 需要注意的是不管哪一种接法DQ上一定要接个上拉电阻 1.【寄生接法】 DS18B20_GND → to→ STM32F407_GND DS18B20_VCC → to→ STM32F407_GND DS18B20_DQ → to→ STM32F407_P** DQ引脚可接任意IO口 关于寄生方式,
[单片机]
【<font color='red'>STM32</font>】stm32f407 + DS18B20 碰出不一样的火花
STM32 RTC 时钟
6.2.8 RTC 时钟 通过设置备份域控制寄存器(RCC_BDCR)里的RTCSEL 位,RTCCLK时钟源可以由 HSE/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。 LSE时钟在备份域里,但HSE和LSI时钟不是。因此: ● 如果LSE被选为RTC时钟: ─ 只要V BAT 维持供电,尽管V DD 供电被切断,RTC仍继续工作。 ● 如果LSI被选为自动唤醒单元(AWU)时钟: ─ 如果V DD 供电被切断, AWU状态不能被保证。有关LSI校准,详见6.2.559/754节LSI时钟。 ● 如果HSE时钟128分频后作为RTC时钟: ─ 如果V DD 供电被切断或内部电压调压器
[单片机]
<font color='red'>STM32</font> RTC 时钟
意法半导体进一步提高半导体集成规模推出达到汽车应用标准的8位微控制器系列产品
中国 , 2006 年 12 月 7 日 — 世界 领先 的车用 微控制器供应 商之一的意法半导体(纽约证券交易所代码: STM) ,今天宣布 ST7FMC 系列微控制器已经通过汽车级质量标准测试 ,达到了汽车市场特别严格的要求。 以工业标准的 8 位内核为核心,专门为无刷直流 (BLDC) 电机 设计,该系列产品适合各种车身应用,如燃油泵和水泵、冷却风扇和车厢风机。 ST7FMC 产品系列的系统集成度高于微处理器或者数字信号处理器 (DSP) 解决方案。该微控制器系列产品最大限度地减少了对外部组件的数量需求,降低了印刷电路板 (PCB
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved