STM32——使用PWM波完成呼吸灯


实验环境

软件:
STM32CubeMX
KEIL5
mcuisp
串口通信助手
硬件:
STM32F103C8Tx
杜邦线,面包板,USB转TTL


一、PWM工作原理

1.基本特性

脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。广泛应用于电机控制、灯光的亮度调节、功率控制等领域。
在这里插入图片描述

2.PWM两个基本参数

周期(Period): 一个完整PWM波形所持续的时间
占空比(Duty): 高电平持续时间(Ton)与周期时间(Period)的比值
占空比计算公式: Duty = ( Ton / Period ) x 100%

3.PWM信号电压调节原理

在这里插入图片描述

4.PWM输出工作原理

功能单元功能
输入捕获单元用于捕获外部触发信号,捕获方式为上升沿/下降沿/双边沿捕获。发生捕获事件时,将此刻计数器的值锁存到捕获/比较寄存器中,供用户读取,同时可以产生捕获中断。
捕获/比较寄存器TIMx_CCR寄存器在输入捕获模式下用于存放发生捕获事件时的当前计数值;在输出比较模式下用于存放预设的比较值。该寄存器具备预装载功能。
输出比较单元用于信号输出。定时器通过将预设的比较值与计数器的值做匹配比较,以实现各类输出,如PWM输出、单脉冲输出等。预设的比较值存放在捕获/比较寄存器中。

二、HAL库配置

1.TIM3、4通道引脚分布

在这里插入图片描述

2.TIM配置

(1)配置定时器3。如图,位置1选中定时器3;位置2选择时钟源为“Internal Clock”,通道2选择“PWM Generation CH2”
在这里插入图片描述

位置3设置分频系数为71,计数周期为500,其它默认。
位置4设置占空比初始值为10,其实这里不写也没影响。

(2)TIM4同理配置,如图
在这里插入图片描述

3.时钟RCC配置

(1)打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。
在这里插入图片描述
(2)系统时钟选择HSE,PLL锁相环倍频9倍,系统时钟来源选择为PLL,置APB1分频器为 /2
在这里插入图片描述

4.项目配置

(1)选择项目名称,选择IDE为MDK-ARM
在这里插入图片描述
(2)选择复制所有库文件到项目当中
在这里插入图片描述

三、项目代码修改

1.修改工程。打开工程,主要修改main.c文件。定义一个变量,用来存储占空比:

在这里插入图片描述

代码:

uint16_t duty_num = 10;	//占空比
int flag = 0;	//逐亮或逐暗标志

2.开始TIM2的通道3,4,输出PWM。
在这里插入图片描述

代码:

HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);	//打开tim3的通道2
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);	//打开tim4的通道2

3.编写PWM波形生成函数
每隔50毫秒,占空比加10,如果超过500(也就是PWM周期),将标志flag置1,减少占空比,如果小于10,将标志flag置0,增加占空比

void TIM34_PWM()
{
	  HAL_Delay(30);	//延时30ms
		if(flag==0)
		{
			duty_num = duty_num + 10;	//当flag=2时将占空比增加10
		}
		if(flag==1)
		{
			duty_num = duty_num - 10;	//当flag=1时将占空比减少10
		}
		
		if(duty_num > 500)
		{
			flag=1;	//将标志转为逐暗
		}
		if(duty_num < 10)
		{
			flag=0;	//将标志转为逐亮
		}
		__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,duty_num);	//配置PWM波形
		__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_2,duty_num);
		
  }

4.修改while循环中的代码

 while (1)
  {
		
		TIM34_PWM();//调用PWM波生成函数
  }

修改后,保存,编译、下载,重新上电。可以看到外设LED以及最小开发板自带的LED,从亮倒暗,逐渐变化。

四、STM32F103C8开发板接线

根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9

总电路:
红——A7
B7——C13

五、程序运行结果

程序烧录运行后,查看外设LED灯以及最小开发板自带LED的状态
在这里插入图片描述
这样通过PWM制作的呼吸灯就完成了

六、总结

PWM(脉冲宽度调制)控制技术——通过 对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。根据拟合波形的频率、幅值和半周期脉冲数,准确计算 PWM 波各脉冲宽度和间隔,据此控制开关器件的通断,就可得到所需 PWM 波形,再将PWM波形通过引脚输出,就可以实现呼吸灯,通过这种思想也可以用来控制电机转速。

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32呼吸灯C8T6是一款基于STM32微控制器的呼吸灯开发板。STM32是意法半导体(STMicroelectronics)推出的一系列高性能32位微控制器,具有丰富的外设和强大的处理能力。呼吸灯是一种简单而美观的灯效,通过改变LED的亮度和暗度,模拟人类呼吸的过程,常用于装饰灯光和指示灯设计。 该呼吸灯开发板采用了C8T6芯片,它是STM32F103C8T6微控制器的完整模块化版本。该芯片集成了32位ARM Cortex-M3内核,并具备64KB的Flash存储器和20KB的SRAM内存。此外,该开发板还具备丰富的外设,包括多个通用输入输出引脚、模拟输入通道、多种通信接口等,可满足各种应用需求。 使用STM32呼吸灯C8T6进行开发时,可以通过编程控制LED灯的亮度和暗度,实现呼吸灯效果。一般来说,可以使用PWM(脉宽调制)技术来控制LED的亮度。通过在一段时间内改变LED的占空比,即高电平的时间相对于周期的占比,来实现呼吸灯效果。可以通过改变PWM输出的占空比,使得LED的亮度逐渐增加或减小,从而形成呼吸灯的效果。 通过STM32的开发环境,如Keil、CubeMX等,可以轻松地进行编程和调试,实现呼吸灯效果的设计。可以根据需要进行灵活的灯效设计,包括呼吸频率、亮度变化曲线等参数调整。同时,还可以与其他传感器或模块进行结合,实现更多的功能和创意。 总之,STM32呼吸灯C8T6是一款功能强大的开发板,具备丰富的外设和灵活的编程环境。它可以用于呼吸灯效果的设计与开发,满足各种灯光装饰和指示灯的需求。 ### 回答2: STM32呼吸灯是一种基于STM32C8T6微控制器的电路设计,用于实现呼吸效果的LED灯。STM32是意法半导体公司的一款32位单片机系列,C8T6是其中一种型号。 实现呼吸灯效果的关键是调节LED的亮度,使其呈现出逐渐增强和逐渐减弱的效果。在这个电路设计中,我们使用STM32C8T6的PWM(脉冲宽度调制)输出功能来控制LED的亮度。 首先,我们需要将LED连接到STM32C8T6的一个GPIO(通用输入输出)引脚上。然后,在代码中设置该引脚为PWM输出模式。接下来,我们需要编写代码来控制PWM的占空比,从而调节LED的亮度。 在实现呼吸灯效果时,我们可以使用一个循环来逐渐增大PWM的占空比,然后再逐渐减小占空比。这个循环可以根据自定义的时间间隔来进行调节,以达到我们想要的呼吸效果。 具体实现时,可以使用定时器来控制呼吸灯效果的循环。定时器可以在每个时间间隔结束时触发中断,然后在中断服务函数中更新PWM的占空比。 通过合理设置定时器的值和PWM的占空比增减步长,我们可以实现一个流畅的呼吸灯效果。同时,还可以根据需要调整时间间隔和占空比的范围,以获得不同的呼吸速度和亮度变化范围。 总的来说,通过使用STM32C8T6的PWM输出功能,我们可以实现呼吸效果的LED灯。这种呼吸灯设计可以应用于各种场景,如智能家居、装饰灯等。同时,借助STM32系列单片机的功能强大性和灵活性,我们可以根据实际需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值