(1)、PWM
1、PWM简介
1、含义
PWM(Pulse Width Modulation)即脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术;它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。
2、基本原理
PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也可以这样理解,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
优点及应用范围
由于其控制简单、灵活和动态响应好等优点而成为电力电子技术应用最广泛的控制方式,其应用领域包括测量,通信, 功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此学习PWM具有十分重要的现实意义。
2、 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;
3、PWM工作原理
在定时器中间部分(时基单元)、右下部分(PWM输出)这三个部分。这里主要讲解一下右下部分(PWM输出):
在PWM输出模式下,除了CNT(计数器当前值)、ARR(自动重装载值)之外,还多了一个值CCRx(捕获/比较寄存器值);
当CNT小于CCRx时,TIMx_CHx通道输出低电平;
当CNT等于或大于CCRx时,TIMx_CHx通道输出高电平;
这个时候就可以对其下一个准确的定义了:所谓脉冲宽度调制模式(PWM模式),就是可以产生一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx寄存器确定占空比的信号。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术
(2)使用HAL库创建工程
1、创建项目
点击创建项目,并选择stm32f103c8t6芯片
2、配置RCC和SYS
3、配置TIM时钟
选Internal Clock(内部时钟)
通道1选择:PWM Generation CH1(PWM输出通道1)
Prtscaler (定时器分频系数) : 71
Counter Mode(计数模式):Up(向上计数模式)
Counter Period(自动重装载值) : 500
CKD(时钟分频因子) :No Division (不分频)
TIM4的配置和TIM3一致,例:
4、配置时钟树
5、创建项目
(3)keil代码编写
1、在main.c中添加变量
uint16_t pwm=0; //占空比
2、开启TIM3和TIM4的通道
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);
(4)硬件实操
1、线路连接
3V3 —> 3V3
GND —> GND
RXD —> A9
TXD —> A10
LED灯短脚 —> A6
LED灯长脚 —> 3V3
PB6 —> PC13