• 【STM32】详解PWM的概念和原理


    一、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(...);
    
    • 1
    • 2

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

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

    (4)初始化定时器

    TIM_TimeBaseInit(...);
    
    • 1

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

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

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

    	TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);
    	TIM_ARRPreloadConfig(TIM14, Enable);
    
    • 1
    • 2

    (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_AFRH
    	GPIO_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-开启TIM14
    	TIM_Cmd(TIM14,ENABLE);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    AI的制作思维导图
    centos7 firewalld ip转发设置、安装docker-compose出现错误、docker-compose部署Yapi
    常用排序算法时间与空间复杂度
    PHP基础笔记-NO.3
    leetcode-22. 括号生成
    zero_damaged_pages 隐含参数,处理磁盘页损坏(先占位)
    Web前端开发技术课程大作业——南京旅游景点介绍网页代码html+css+javascript
    设计原则之【单一职责原则】
    记录Pcap4j使用的一次异常调查和分析
    智慧矿山解决方案-最新全套文件
  • 原文地址:https://blog.csdn.net/qq_43533553/article/details/128206887