1、为啥要学PWM
PWM 是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式,其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此学习 PWM 具有十分重要的现实意义。
STM32F1 除了基本定时器 TIM6 和 TIM7,其他定时器都可以产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4 路的 PWM 输出。
2、通用定时器 PWM 输出配置
#include "stm32f10x.h"
void TIM3_CH1_PWM_Init(u16 per,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用功能重映射就需要开启 AFIO 时钟
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
/*第一个参数是选择是部分重映射还是完全重映射,因为映射到灯接到的GPIO才能看到呼吸效果*/
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射
TIM_TimeBaseInitStructure.TIM_Period=per; //自动装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//比较输出模式选择
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//输出极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
TIM_OC1Init(TIM3,&TIM_OCInitStructure); //输出比较通道1初始化
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的预装载寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器
TIM_Cmd(TIM3,ENABLE); //使能定时器
}
void delay_nms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000; //自己定义
while(i--) ;
}
}
int main( void )
{
u16 i=0;
u8 fx=0;
TIM3_CH1_PWM_Init(500,72-1); //频率是2Kh
while(1)
{
if(fx==0)
{
i++;
if(i==300)
{
fx=1;
}
}
else
{
i--;
if(i==0)
{
fx=0;
}
}
/*修改 TIMx_CCRx 的值控制占空比*/
TIM_SetCompare1(TIM3,i); //i值最大可以取499,因为ARR最大值是499.
delay_nms(10);//延迟是为了人眼能看到呼吸效果
}
}
3、测试验证,实测可以达到初步效果,实验完成,不同硬件环境需要自定义修改对应的代码,方可实现对应效果。
--END--
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
PWM
+关注
关注
114文章
5193浏览量
214217 -
微处理器
+关注
关注
11文章
2271浏览量
82548 -
脉冲宽度调制
+关注
关注
7文章
81浏览量
13744
发布评论请先 登录
相关推荐
STM32 PWM驱动舵机实验
STM32 simulink驱动舵机效果如图5.1所示,本次实验用到的Simulink简易模型如图5.2所示,电路图接法如图5.3所示,YF-STM32-ALPHA开发板舵机接口位置如图5.4所示
转:基础篇--STM32视频 13.STM32 PWM输出实验
【众想】大黄蜂STM32视频教程 ----刘洋边讲边写基础篇-- 13.STM32 PWM输出实验http://www.stmcu.org/module/forum/thread-6
发表于 07-14 16:56
基于STM32单片机进行PWM输出实验的详细资料说明
本文档的主要内容详细介绍的是基于STM32单片机进行PWM输出实验的详细资料说明包括了:1.通用定时器PWM概述,2.常用寄存器和库函数配置,3.手把手写
发表于 03-18 08:00
•18次下载
使用STM32F103RB单片机实现PWM呼吸灯实验的资料免费下载
本文档的主要内容详细介绍的是使用STM32F103RB单片机实现PWM呼吸灯实验的资料免费下载。
发表于 04-07 08:00
•8次下载
STM32学习心得二十七:PWM DAC数模转换实验及PWM知识复习
记录一下,方便以后翻阅~主要内容:1) PWM原理复习;2) DAC PWM数模转换原理;3) 相关实验代码解读。实验功能:官方资料:《STM3
发表于 11-30 12:21
•11次下载
STM32 使用PWM实现呼吸灯
STM32 PWM实现呼吸灯使用STM32F103ZET6 定时器4 CH2通道产生PWM波,在GPIOD,GPIO_PIN13引脚LED1产生呼吸灯效果。
发表于 12-24 19:41
•55次下载
评论