STM32-TIM3-PWM实现不同占空比波形

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

目录

硬件准备

PWM介绍

产生PWM方法

 TIM3模块介绍

 代码部分

详细步骤

总结


硬件准备

首先,需要准备一块带有STM32芯片的开发板,例如STM32F103C8T6或STM32F407VET6。连接开发板到电脑上,并使用Keil,IAR等软件进行编程。本文章用的是Keil软件。

PWM介绍

PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量。

通过修改ccr寄存器值调整pwm波占空比,stm32,单片机,嵌入式硬件

基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率 。

产生PWM方法

有以下几种方法可以产生PWM信号:

1. 模拟方式:使用比较器、多谐振荡器等电路来实现PWM,输出的信号是一个脉冲宽度可变的模拟信号。

2. 软件方式:使用单片机来编写PWM输出程序,通过改变占空比来改变脉冲宽度,输出的信号是数字信号。

3. 硬件方式:使用专用的PWM控制芯片,如NE555、NE556、TL494等,这些芯片内置了比较器和多谐振荡器电路,可以通过调节管脚的电平和电容电阻来产生PWM信号。

4. 混合方式:使用单片机和PWM控制芯片的组合方式,通过软件控制硬件的方式来产生PWM信号。

如下图是用计数器,定时自增,设置一个比较值:

通过修改ccr寄存器值调整pwm波占空比,stm32,单片机,嵌入式硬件

 通过修改ccr寄存器值调整pwm波占空比,stm32,单片机,嵌入式硬件

 TIM3模块介绍

定时器基础:在STM32芯片中,定时器是一种非常有用的工具,它可以用于生成各种脉冲、测量时间间隔等。对于PWM输出而言,我们通常使用定时器的输出比较功能。一个定时器通常有两个或四个通道,每个通道都可以独立地产生PWM波。在PWM波形中,高电平时间占整个周期的比例被称为占空比。

TIM3(Timer3)模块是STM32微控制器中的计时器模块之一。它是一个通用定时器,可以用于测量时间、控制PWM信号、产生周期信号等应用。TIM3模块具有以下特性:

1. 支持多种工作模式,包括定时器模式、PWM输入模式和PWM输出模式。

2. 可以配置为16位或32位定时器。

3. 支持输出比较和输入捕获功能。

4. 可以配置为单脉冲模式,可以在输入捕获时自动停止计数器。

5. 具有多种时钟源,包括内部时钟、外部时钟和自动重载计数器。

6. 支持中断,可以在计数器到达指定值时触发中断。

7. 可以通过DMA控制来进行数据传输。

TIM3模块广泛应用于各种嵌入式应用中,如控制电机、测量时间、产生PWM信号等。

通过修改ccr寄存器值调整pwm波占空比,stm32,单片机,嵌入式硬件

 代码部分

下面是使用STM32的TIM3模块和Keil软件实现不同占空比波形的步骤:

  1. 首先,需要在Keil软件中创建一个新的工程,并选择适合的STM32芯片型号。在这个例子中,我们使用STM32F103C8T6芯片。

  2. 在工程中添加STM32的库文件和头文件。在Keil软件中,可以通过Project->Manage->Pack Installer来下载和添加相关库文件。

  3. 接下来,需要配置TIM3模块的工作模式和时钟频率。在代码中,可以使用以下语句来进行配置:

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_InitStruct.TIM_Period = 1000 - 1; // 1 kHz PWM frequency
    TIM_InitStruct.TIM_Prescaler = 72 - 1; // 72 MHz / 72 = 1 MHz (1 us)
    TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM3, &TIM_InitStruct);
    

    4.接下来,需要配置TIM3的输出模式和输出通道。在代码中,可以使用以下语句来进行配置:

    TIM_OCInitTypeDef TIM_OCInitStruct;
    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStruct.TIM_Pulse = 500 - 1; // 50% duty cycle
    TIM_OC1Init(TIM3, &TIM_OCInitStruct);
    

 可以通过修改定时器TIM3的CCR2_Val寄存器的值,可以改变PWM的占空比。

int main(void)
{ 	
	unsigned char a=0;
	TIM_OCInitTypeDef  TIM3_OCInitStructure;
  	RCC_Configuration();  
  	time_ini();		      
    SysTick_Config(72000);	   //配置SYSTICK时钟节拍为1ms一次
  	while(1){
  		Delay(1);		  //延时1ms	   	
		TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 					  //PWM模式2 
  		TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 		  //输出禁止        
  		TIM3_OCInitStructure.TIM_Pulse = CCR2_Val; 							  //确定占空比
  		TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
  		TIM_OC2Init(TIM3, &TIM3_OCInitStructure);

  		/*调整CCR2_Val的值来改变占空比,逐步的控制LED1的亮度, 占空比大过一定值时,
		亮度的变化就不明显了,所以CCR2_VAL最大设定到17000*/
		if(a==0) CCR2_Val=CCR2_Val+10;										 
		else CCR2_Val=CCR2_Val-10;
		if(CCR2_Val>17000){ CCR2_Val=17000; a=1;} 							  
		else if(CCR2_Val<200){ CCR2_Val=200; a=0;} 
  	}
}

最后,我们需要在代码中设置不同的占空比来生成不同的PWM波形。在代码中,可以使用以下语句来修改占空比:

TIM3_OCInitStructure.TIM_Pulse = 14600;

通过修改ccr寄存器值调整pwm波占空比,stm32,单片机,嵌入式硬件

详细步骤

要在STM32上实现不同占空比的PWM波形,需要使用STM32的TIM3定时器,并按照以下步骤进行配置:

  1. 使能TIM3时钟,并选择预分频器的值。预分频器值越小,时钟频率越高,但计数器周期越短。

  2. 配置TIM3的计数模式和计数方向。可以选择向上计数、向下计数或者向上/向下计数。

  3. 配置TIM3的自动重载寄存器(ARR),以设置计数器的最大值。

  4. 配置TIM3的PWM模式和输出通道。可以选择不同的PWM模式(例如,正常PWM、反相PWM或中心对齐PWM)和输出通道(例如,CH1、CH2、CH3和CH4)。

  5. 配置TIM3的比较寄存器(CCR),以设置输出占空比。CCR的值越大,输出的占空比越高。

总结

STM32是一款非常有用的开发板,学习过程需要逐步掌握基本知识和技能,并进行实践项目。本文章主要介绍STM32-TIM3-PWM是一种利用STM32芯片的定时器3实现PWM波形输出的方法。在实现不同占空比的PWM波形时,可以通过改变TIM3的ARR和CCR寄存器的值来实现。

物联网应用技术2班莫丽婷文章来源地址https://www.toymoban.com/news/detail-770253.html

到了这里,关于STM32-TIM3-PWM实现不同占空比波形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 按键调整PWM占空比,实现电机转速调整(基于STM32开发板)

    实验名称 :PWM控制电机转速 实验功能 : 基于正点原子战舰开发板,通过按键(KEY0 / KEY1)改变PWM,进而实现电机转速的调整。当按下KEY0键,电机转速加快;按下KEY1键,电机转速降低。 硬件资源 : 1. 独立按键 KEY0         -  PE4 KEY1         -  PE3 2. 通用定时器 TIM2

    2024年02月09日
    浏览(45)
  • STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度

    现在学习使用STM32 F103C8T6的定时器PWM模式,使用PWM驱动舵机转动不同角度,文章提供源码,测试工程,测试动态效果图。 目录 基础原理:  实验目标: 测试视频结果: 测试工程下载: 这次依旧拿出之前学习过的舵机DS3115,它的基础原理不多加介绍,在往期讲MSP432的文章有所

    2024年02月13日
    浏览(40)
  • STM32主从模式实现两路同步PWM脉冲输出,频率、占空比可调

    原理:定时器1为主模式,定时器8为从模式,TIM1的定时器使能操作作为触发输出[TRGO]触发TIM8并使能TIM8的计数器,同时输出两路频率、占空比以及脉冲数量(小于256个,高级定时器重复计数功能为8位)可调PWM波形。 关键代码: 定时器1(TIM1)设为主模式: 定时器2(TIM8)设为从

    2024年02月13日
    浏览(38)
  • STM32实现PWM输出频率1kHz占空比50%的方波和呼吸灯

    板子:野火指南者 芯片:STM32f103VET6 PWM通道:TIM3的通道1和通道3 GPIO:PA6和PB0 本文主要讲需要怎么做,简要讲解原理,提供全部代码,有利于快速上手。 打开STM32f103VET6的芯片数据手册,打开目录Pinouts and pindescriptions——High-density STM32F103xC/D/E pin definitions,如图所示。 这里选

    2024年02月05日
    浏览(48)
  • STM32 TIM输入捕获测频率占空比库函数

    目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler TIM_SetIC4Prescaler 四、读取CCR函数 TIM_GetCapture1 TIM_GetCapture2 TIM_GetCap

    2024年02月20日
    浏览(32)
  • stm32按键控制改变pwm占空比

    每次按下按键改变TIM_Setcompare函数中占空比值即可。 相关io口,占空比调节级数,是否支持连按根据自己需要自行修改。 main.c #include \\\"delay.h\\\" #include \\\"sys.h\\\" #include \\\"pwm.h\\\" #include \\\"stm32f10x_tim.h\\\" #include \\\"key.h\\\" int t=50;//占空比 void key_function(void)  {  static u8 key = 0;  key = KEY_Scan(0); if(key

    2024年02月08日
    浏览(47)
  • 【STM32基础】第四篇、控制PWM占空比

    目录 第一部分、STM32定时器的基本知识 1、STM32定时器的分类(图片来自野火文档) 2、开发过程中定时器的常用基础功能 3、定时器挂在的总线  第二部分、能用的代码   1、定时器计时代码 2、定时器输出PWM代码 第三部分、总结 1、STM32定时器的分类(图片来自野火文档)  

    2024年02月07日
    浏览(43)
  • STM32 HAL 检测PWM频率/占空比

    配置的系统时钟是100M,Timer的时钟也是100M Timer 的频率为:100M 分频 1000 = 0.1MHz 也就是定时器 每10us 计一个数 打开TIM4_CH2引脚中断 在 main.c 中开启中断 TIM4_CH2引脚中断回调 占空比%: TempPIpre *100 / TempPIpul 周期T: TempPIpul * 10us 频率f: 1 / T

    2024年02月13日
    浏览(39)
  • stm32输入捕获测频率&PWM模式测频率占空比

    本文章转自B站江科大自化协    1,输入捕获测频率 接线图  目录结构 IC.h IC.c pwm.c PWM.h      main.c 编译下载出结果   2.PWM模式测频率占空比 接线图同上 目录结构同上 IC.c  IC.h main.c 编译下载测试     PS:测h   

    2024年02月15日
    浏览(33)
  • 基于HAL库的STM32单定时器多路输入捕获测量PWM的频率和占空比实现(状态机方式实现)

    目录  写在前面 先回顾下定时器的单路捕获PWM 多路捕获PWM的频率和占空比(状态机实现) 我的思路: 状态图 配置 给出示例代码 测试效果         先有了这篇文章实现了单定时器的多通道测量频率,以外部时钟的方式可测量任意频率的方波),奈何不能多路测试PWM波的频率,

    2024年02月12日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包