简单明了的说明STM32的PWM原理以及实现方法

这篇具有很好参考价值的文章主要介绍了简单明了的说明STM32的PWM原理以及实现方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

申明以下都是个人理解,仅供参考。如果错误欢迎指教。本文不讲底层,根据实际使用来逆向讲解。

1.什么是pwm?

pwm最简单的理解就是“功率”,调节PWM的占空比就是调节功率。

2.如何调节占空比?

简单明了的说明STM32的PWM原理以及实现方法

图1 

 根据图1很容易看出来调节CCRX的值就可以调节占空比,CCRX的值越大,占空比越大(在不超过ARR时)。

在默认有效值为高电平的时,当CCRX的值等于ARR时PWM的波形为一条直线(即全是逻辑电平1)全功率输出。

3.什么是有效值,什么是CCRX,什么是ARR,什么是占空比?

先贴一段代码:

void TIM2_PWM_Init(u16 arr,u16 psc)
{  
	GPIO_InitTypeDef 		    GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  	TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  	        TIM_OCInitStructure;
	
    
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2| RCC_APB1Periph_TIM3, ENABLE);	 //使能定时器2/3时钟
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  	 //使能GPIO外设时钟
	
 
        //引脚功能配置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2; //TIM2_CH1  // TIM2_CH2 // TIM3_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          //复用推挽输出!!
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);


        //初始化TIM2
	TIM_TimeBaseStructure.TIM_Period = arr;                     //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
	TIM_TimeBaseStructure.TIM_Prescaler =psc;                   //设置用来作为TIMx时钟频率除数的预分频值 
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //设置时钟分频系数:不分频  //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);             //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

	
	//初始化TIM2 Channel1、Channel2 PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;           //选择定时器模式:TIM脉冲宽度调制模式2
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   //输出极性:TIM输出比较极性高
	TIM_OCInitStructure.TIM_Pulse = 0;	  //跳变值
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);                    //根据T指定的参数初始化外设TIM2 OC1  通道1
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);                    //根据T指定的参数初始化外设TIM2 OC2  通道2
	TIM_OC3Init(TIM2, &TIM_OCInitStructure);                    //根据T指定的参数初始化外设TIM2 OC2  通道3
	
 
	TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的预装载寄存器
	TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的预装载寄存器
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的预装载寄存器
    TIM_ARRPreloadConfig(TIM2, ENABLE);			 // 使能TIM2重载寄存器ARR
	TIM_Cmd(TIM2, ENABLE);  //使能TIM2
	

}

 TIM_SetCompare2(TIM3,400);	


void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
{
  /* Check the parameters */
  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
  /* Set the Capture Compare2 Register value */
  TIMx->CCR2 = Compare2;
}

CCRX:就是设置定时器的比较值,

ARR:自动重装载寄存器周期的值

PWM占空比=CCRX/ARR或者是WM占空比=(ARR-CCRX)/ARR

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   //输出极性:TIM输出比较极性高

这句话就是用来设置有效值。

TIM脉冲宽度调制模式有两种(看别人总结的):

PWM1:TIMx_CNT<TIMx_CCRX,输出高电平(有效值默认为高),否则输出低电平。

PWM2:TIMx_CNT>TIMx_CCRX,输出高电平(有效值默认为高),否则输出低电平。

如图分析,即在t0-t1,t2-t3,t4-t5时间段输出高电平.

4.PWM输出频率

PWM输出频率=时钟频率/(ARR+1)*(PSC+1)

5.keil软件仿真波形输出

选择完模式,设置有效电平,设置CCRX,ARR就可以开始使用PWM了。

下图是软件仿真输出波形配置。

简单明了的说明STM32的PWM原理以及实现方法

图2 

配置图片如下,GPIOX_DIR.X 例如本例程使用的PA0则写为GPIOA_DIR.0。还有Display Type要选择为Bit。

简单明了的说明STM32的PWM原理以及实现方法

图3 

 下图为PA0 PA1的波形。PA0,PA1分别为定时器2的通道1,通道2.如果显示no signel,参考软件仿真输出波形配置(图2)。

简单明了的说明STM32的PWM原理以及实现方法

图4 

 上图波形是PWM1模式下生成的。

最后附上源码,有需要测试的可以下载 

链接:https://pan.baidu.com/s/1S6e3zdv62SktAtIjBtD5DA 
提取码:7n7b文章来源地址https://www.toymoban.com/news/detail-416373.html

到了这里,关于简单明了的说明STM32的PWM原理以及实现方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32pwm 时钟 配置 周期 频率 关系配置原理

    PWM(脉冲宽度调制)是一种常用的电子信号调制技术,用于控制电子设备中的电平和电流。它通过调整脉冲的宽度来控制信号的平均功率。 在PWM信号中,一个周期由一个固定的频率确定,称为PWM频率。每个周期内,脉冲的高电平时间称为占空比,表示高电平时间与周期时间的

    2024年02月09日
    浏览(29)
  • STM32(7)-定时器输出PWM的原理分析

    概念+代码 OC(Output Compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器的前3个通道额外拥有死区生成和互补输出的功

    2024年02月04日
    浏览(45)
  • 【正点原子STM32】DAC数模转换器(DAC特性、DAC工作原理、DAC输出实验配置步骤、DAC输出三角波实验、DAC输出正弦波实验配置步骤、PWM + RC滤波器、PWM DAC技术实现原理)

    一、DAC简介 1.1、什么是DAC? 1.2、DAC的特性参数 1.3、STM32各系列DAC的主要特性 二、DAC工作原理 2.1、DAC框图简介(F1/ F4 /F7/H7) 2.2、参考电压/模拟部分电压 2.3、DAC数据格式 2.4、触发源 2.5、DMA请求 2.6、DAC输出电压 三、DAC输出实验 3.1、实验简要 3.2、DAC寄存器介绍 3.3、DAC输出实

    2024年04月16日
    浏览(31)
  • STM32——高级定时器输出指定个数PWM波原理及实战

    相比于通用定时器特性: 1)重复计数器 2)死区时间带可编程的互补输出 3)断路输入,用于将定时器的输出信号置于用户可选的安全配置中 1,配置定时器基础工作参数 HAL_TIM_PWM_Init() 2,定时器PWM输出MSP初始化 HAL_TIM_PWM_MspInit() 配置NVIC、CLOCK、GPIO等 3,配置PWM模式/比较值等

    2024年01月16日
    浏览(48)
  • stm32 笔记 PWM输入模式测量脉宽和占空比原理

    在测量占空比之前,我们先一步一步来,先让 STM32 可以测量脉宽。 TIM3_CH1(tim3 定时器通道 1)捕获模式测量脉宽步骤如下: 1.输入捕获到 PWM 上升沿触发 2.发送中断,通知用户此时被触发,用户获得当前计数器值 3.计数器清零,然后继续计数... 让 STM32 芯片一直重复这三步即

    2024年01月15日
    浏览(29)
  • 步进电机简单使用:STM32 PWM输出固定数目的脉冲数(基于CubeMX)

    使用步进电机之前,我们需要了解步距角的概念:步进电机接收到一个脉冲转动的角度,步进电机步距角通常 为1.8°,即步进电机接收到一个脉冲转动1.8°,则若步进电机接收到360°/1.8°=200个脉冲,步进电机就能转动一圈 步进电机通过驱动器控制,驱动器如下图所示(都比较

    2024年02月06日
    浏览(32)
  • STM32精准脉冲数PWM生成方法解答

    本文介绍了在STM32上生成精准脉冲数PWM的方法,包括使用定时器中断法和两个定时器结合产生PWM脉冲的方法。详细讨论了定时器的配置和工作原理,以及如何通过定时器控制脉冲的个数和周期。通过示例代码和硬件仿真,展示了如何实现精准的脉冲数PWM输出。

    2024年02月03日
    浏览(32)
  • STM32产生PWM实现正弦输出

    本文使用 STM32-G070RB的定时器TIM1产生PWM波,并外接一阶低通滤波器,实现DAC效果,最终在示波器上显示正弦输出。主要分为两步:实现 PWM 输出,实现DAC功能。 实验用具 STM32-G070RB STM32CubeMX STM32CubeIDE PWM输出正弦波原理 1 个 PWM 波形假设为 500Hz(目标定时器频率) ,等效正弦波

    2024年02月06日
    浏览(32)
  • 深入理解 STM32 串口空闲中断的工作原理与实现方法

    STM32 微控制器的串口空闲中断是一种重要的通信机制,用于处理数据接收方面的任务。 本文深入解析了 STM32 串口空闲中断的工作原理,包括触发条件和中断服务函数的实现方法,并给出了相应的代码示例。 STM32 微控制器的串口通信是嵌入式系统中常见的通信方式之一。为了

    2024年02月01日
    浏览(31)
  • STM32使用PWM实现led亮度变化

    这里我以stm32F103c8te为例,讲解一下pwm如何输出, pwm又是如何控制led灯的亮度变化,以及具体代码又是 如何是实现的。最后结语中也给出了一个小练习。 首先我们搞清楚一个概念什么是频率。比如我们stm32F103的系统频率是72M 就是指1秒钟能产生的72M的脉冲(高电平或者低电平

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包