32单片机——pwm波输出

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

目前学习单片机是为了参加各种的机器人比赛,而PWM是控制舵机和电机法宝,在经过一段时间的学习后准备作一下总结,也方便之后的查询。


一、什么是PWM波

脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
——百度

是不是看不懂呢,我也看不懂,我们只需要了解在单片机当中PWM有什么用就好了,见过呼吸灯吧就是那种渐渐变亮渐渐变暗的那种,还有舵机的方向的控制,电机转动方向和速度的控制都离不开PWM,而这也是我们在单片机中使用PWM的原因。

二、代码示例

1.32中利用定时器TIM1的通道1输出PWM

代码如下(示例):

# include "pwm.h"
// 通过查数据手册得到 TIM1的通道一的默认GPIO是PA8 
void PWM_INIT(u16 arr,u16 psc){   // (arr+1)(psc+1)/72M 周期的计算公式 
	                                               	
	GPIO_InitTypeDef GPIO_InitStructure; //GPIO口初始化设置 
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //计时器初始化设置结构体 
	TIM_OCInitTypeDef  TIM_OCInitStructure; // 定时器通道初始化结构体 

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能计数器1时钟 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIOA时钟 
	                                                                     	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出,输出TIM1 CH1 的PWM波形 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO口速率 
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 

	
	TIM_TimeBaseStructure.TIM_Period = arr;     //自动重装载值 
	TIM_TimeBaseStructure.TIM_Prescaler =psc;  //设置预分频系数 	
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 技 术模式向上计数 
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始 化 

 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 脉冲调试模式 
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 
	TIM_OCInitStructure.TIM_Pulse = 0;   //设置待装入捕获比较寄存器的脉冲值
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性为高(改为低的话一个周期内的波形相反) 
	TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //初始化 

    TIM_CtrlPWMOutputs(TIM1,ENABLE);//MOE主输出使能	
	TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //预装载使能 
	TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIM1在ARR 上的预装载寄 存器 
	TIM_Cmd(TIM1, ENABLE);  //使能TIM 1
//TIM_SetCompare1(TIM1,5)//比较函数 
}

2.使用解析

不管上面我写的PWM模块代码还是其他的情况,我们不需要完完整整的知道从头到尾怎么写,我们要做的是在能够灵活的利用这些基础的代码,并在这个基础上进行修改实现更复杂的代码。

在主函数中,我们通过定义重装载值和预分频系数来改变PWM波的周期,TIM_SetCompare1(TIM1,N)利用这个比较函数来改变占空比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

おもいね

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值