STM32——PWM知识详解

一、PWM简介

1.定义

脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。

2.主要参数

(1)PWM占空比
PWM信号保持高电平的时间百分比称为占空比。如果信号始终为高电平,则它处于100%占空比,如果它始终处于低电平,则占空比为0%。如图1所示,T1为占空比,T为一个PWM周期。
在这里插入图片描述
图1 图片来源于网络

(2)PWM的频率
PWM信号的频率决定PWM完成一个周期的速度。STM32的MDK编译器可以选择5MHZ,10MHZ,20MHZ和50MHZ。

二、PWM产生方式

通过STM32控制板,有两种方式能产生PWM,第一是利用普通IO口输出PWM,第二种是利用定时器的PWM的IO口或复用IO口

1.普通IO口与PWM口

(1)PWM端口
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出。

(2)普通IO口
一般能够输出PWM的端口都会在主要功能那一栏出现CHx的标志,而普通定时器没有出现这种标志。如图所示,上面的红框就是普通的定时器,不是专用的PWM端口。
在这里插入图片描述
图2 普通IO定时器与PWM定时器
(3)两者区别
1)一般而言,尽量选用PWM口进行PWM输出,因为普通IO口模拟PWM的输出频率越高,进入定时器中断的次数就越快,中断间隔的时间越短,如果再有其他类型的中断也要处理时,会因为中断的优先级嵌套等待响应,影响控制精度,PWM输出误差增大,也会影响其他如ADC等中断处理,甚至会较出现单片机逻辑出错,死机或者跑飞的情况。

2)普通IO也可以输出PWM,只是产生PWM一般用转用芯片(开关电源上用的较多)或者单片机的PWM内置模块如定时器,很小直接用MCU的IO口线直接输出因为那样太耗MCU资源了。

(4)STM32f103c8t6的PWM口
因为自己在用stm32最小系统,因此在此贴出其PWM口配置。
[注]不是所有的芯片都有重映像功能的,STM32f103c8t6这四个定时器就不需要重映像。

详细配置如下:
TIM1_CH1->PA8;
TIM1_CH2->PA9;
TIM1_CH3->PA10;
TIM1_CH4->PA11;

TIM2_CH1->PA0;
TIM2_CH2->PA1;
TIM2_CH3->PA2;
TIM2_CH4->PA3;

TIM3_CH1->PA6;
TIM3_CH2->PA7;
TIM3_CH3->PB0;
TIM3_CH4->PB1;

TIM4_CH1->PB6;
TIM4_CH1->PB7;
TIM4_CH1->PB8;
TIM4_CH1->PB9;

2.普通IO口产生PWM

(1)方法:定时器中断
普通IO口如何产生一个pwm?其实就是通过一个高低电平周期性的变化。这种思想很重要,确定频率就可以确定周期(T=1/f)也就是在一个周期内产生pwm的时间可以确定下来了。

如何改变占空比?确定了时间,高电平的时间不就是想要的占空比么,比如要产生一个频率1khz,占空比为70%的pwm,根据频率我们知道了周期为1ms,产生一个占空比为70%的不就是0.7ms的时间给高电平么,(我们用定时器中断的方式,使0.1ms产生一次中断,计数中断次数,中断处理函数前七次中断都给高电平就ok了。
参考链接:https://blog.csdn.net/m0_51095029/article/details/116426226
代码如下(示例)

//#include "stm32f10x.h"
#include "stdio.h"
#include "usart.h"
#include "tim.h"
#include "led.h"
#include "misc.h"

void TIM2_NVIC(void);
void TIM2_Init(void);
unsigned char ucLed;
unsigned char ucLCK;

int main(void)
{
   
  SysTick_Config(72000);			// 定时1ms(HCLK = 72MHz)
  TIM2_Init();
	TIM2_NVIC();
	LED_Init();
 
	while(1)
		        {
    
				 LED_Disp(ucLed);
				}
STM32中的PWM是通过定时器来生成的。在STM32F1系列中,并不是所有的定时器都支持PWM功能。支持PWM硬件输出技术的定时器有"通用定时器"和"高级控制定时器"这两种类型,而"基本定时器"则不支持PWM硬件输出技术。\[1\]\[2\]要使用PWM功能,需要配置定时器的基本设置,并设置一个比较计数值来确定一个周期内翻转电平的时机。此外,还需要使用GPIO的复用功能来输出方波。PWM波的高低电平顺序由极性、PWM模式和计数模式共同决定。需要注意的是,只有具有定时器复用功能的GPIO才能输出PWM信号。\[3\]所以,如果你想在STM32中使用PWM功能,需要根据具体的型号和定时器类型进行配置和编程。 #### 引用[.reference_title] - *1* *2* [STM32笔记之 PWM(脉宽调制)](https://blog.csdn.net/qq_42992084/article/details/108547321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【STM32详解PWM的概念和原理](https://blog.csdn.net/qq_43533553/article/details/128206887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值