stm32_pwm



前言

脉冲宽度调制(pwm),能够以数字信号(方波)等效输出模拟信号。常用于驱动舵机、电机等场景。也是智能车的基础理论之一。

一、PWM理论

pwm通过调整高电平和低电平的占比,来模拟输出正弦波形,可以用于控制电机。
需要用到参数:
Freq(频率)=CK_PSC/(PSC+1)/(ARR+1)
Duty(占空比)=CCR/(ARR+1)
Reso(分辨率)=1/(ARR+1)

其中:
CK_PSC:单片机频率(在stm32中,CK_PSC即为72MHZ)
PSC:预分频器
ARR:自动重装器
CCR:捕获比较器

配置流程

  1. 开启单片机时钟
  2. 配置时基单元
  3. 配置输出比较单元
  4. 配置GPIO

二、代码分析

1.头文件pwm.h

本段就是定义一下用到的函数,不做过多解释。

#ifndef __PWM_H
#define __PWM_H

void PWM_Init(void);
void PWM_SetCompare1(uint16_t Compare1);

#endif

2.pwm.c

配置时钟
开启TIM和GPIO配置的时钟。

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

配置时基单元&&输出比较单元
这里开始配置时基单元。

	TIM_InternalClockConfig(TIM2);//TIM2时钟开启
	//TIM2配置
	//时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//TIM结构体定义并配置参数
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	//输出比较单元
	//TIM2 OC2通道配置
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	TIM_OCInitTypeDef TIM_OCStructure;//通道结构体定义,配置参数
	TIM_OCStructInit(&TIM_OCStructure);//初始化结构体
	TIM_OCStructure.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCStructure.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OCStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCStructure.TIM_Pulse=0;//CCR
	TIM_OC2Init(TIM2,&TIM_OCStructure);
	 
	TIM_Cmd(TIM2, ENABLE);//TIM使能

配置GPIO
这里就是配置GPIO的输出了,也是通过这个来输出pwm信号,就不多说哩。

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

总结

pwm输出好像就这些?具体的参数还请见tim配置文件hhh,一般pwm用这些参数就够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值