目录
前言
本次实验是使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。
一、PWM简介
1、含义
PWM(Pulse Width Modulation)即脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术;它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。
2、基本原理
PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也可以这样理解,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
二、创建项目
1、用STM32CubeMx新建工程
点击ACCESS TO MCU SELECTOR,在Part Number里选择我们的核心板(STM32F103C8)
2、配置RCC和SYS
在目录System Core下选择RCC,将HSE改成Crystal/Ceramic Reasonator.
点击SYS,然后将Debug改成Serial Wire
3、配置定时器TIME3
1、勾选Internal Clock(内部时钟)
2、通道1选择:PWM Generation CH1(PWM输出通道1)
3、Prtscaler (定时器分频系数) : 71
4、Counter Mode(计数模式):Up(向上计数模式)
5、Counter Period(自动重装载值) : 500
6、CKD(时钟分频因子) :No Division (不分频 )
4、配置定时器TIM4
配置与上面一样
5、配置时钟
点击CLOCK CONFIGURATION,然后将HCLK改为72Mhz,记得点击回车保存
6、生成项目
点击Project Manager,填写项目名称,并将IDE改为MDK-ARM
点击Code Generator,进行如下勾选,然后点击GENERATE CODE
三、Keil编写代码
1、定义变量
在main.c中定义一个全局变量
uint16_t pwm=0; //占空比
2、打开PWM通道
在主函数中添加两行代码:
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
3、在while循环中写入调用代码
while (pwm< 500)
{
pwm++;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);
HAL_Delay(1);
}
while (pwm)
{
pwm--;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);
HAL_Delay(1);
}
HAL_Delay(200);
四、硬件连接
USB转TTL
3V3 —> 3V3
GND —> GND
RXD —> A9
TXD —> A10
LED灯连接
LED灯短脚 —> A6
LED灯长脚 —> 3V3
PB6 —> PC13
五、烧录
六、结果
七、总结
通过本次实验,我了解了PWM的基本原理,对其有了初步理解,并运用他去驱动的外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现了2个 LED呼吸灯的效果。
参考:
https://blog.csdn.net/qq_45237293/article/details/111997424