单片机--PWM配置

题目:《单片机-PWM》

引用:脉冲宽度调制

一、了解概况

PWM基本原理:又称脉宽调制,控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形。通常,我们将PWM的高电平称为1,低电平为0。产生PWM的方式有单片机的外设产生PWM波,或者IO口模拟产生PWM波等。

二、说明

本篇文章是基于雅特力AT32F421C8T7的外设–PWM,与其他MCU不同的是,该MCU把PWM并到定时器中,而不是单独的PWM模块。定时器包括一个基本定时器(TRM6)5个通用定时器(TRM3,TRM14,TRM15,TRM16/17)1个高级定时器(TRM1)。其中基本定时器和高级定时器具有输出PWM波形的功能,

三、详细参数

通俗的讲,PWM的产生的原理就是通过定时输出CCRx的值和CNT比较大小,通过判断结果来决定输出是高电平还是低电平。
ARR:最值,定时器最值

CCRx:PWM的比较值

CNT:为计数器值

PWM产生高低电平的原理

PWM重要的几个参数;占空比、周期、时间

四、上代码

IO口的配置

*********************************************************************************************************
*	函 数 名: bsp_InitTMR3_PWM1
*	功能说明: 配置TMR3通道1的PWM相关的GPIO  
*	形    参:*	返 回 值:*********************************************************************************************************
*/
void bsp_InitTMR3_PWM1(void)
{
    GPIO_InitType GPIO_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_TMR3, ENABLE);
		RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOB, ENABLE);
		GPIO_PinAFConfig(GPIOB, GPIO_PinsSource4, GPIO_AF_1);
    /* 配置GPIO */ 
    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pins = GPIO_Pins_4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; /* 复用模式 */
    GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

PWM的配置

/* 周期 */
#define CYCLE_1KHZ 	1000
/*
*********************************************************************************************************
*	函 数 名: bsp_TMR3_PWM1_SetPeriod
*	功能说明: 配置PWM占空比
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/

void bsp_TMR3_PWM1_SetPeriod(uint16_t ucPeriod)
{
	 /* Time Base configuration */
  TMR_TimeBaseStructInit(&TMR_TimeBaseStructure);
  TMR_TimeBaseStructure.TMR_DIV = 8 - 1;;
  TMR_TimeBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up;
  TMR_TimeBaseStructure.TMR_Period = ucPeriod - 1;
  TMR_TimeBaseStructure.TMR_ClockDivision = 0;
  TMR_TimeBaseStructure.TMR_RepetitionCounter = 0;
  TMR_TimeBaseInit(TMR3, &TMR_TimeBaseStructure);

  /* Channe2,Configuration in PWM mode */
  TMR_OCStructInit(&TMR_OCInitStructure);
  TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM2;
  TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
  //TMR_OCInitStructure.TMR_OutputNState = TMR_OutputNState_Enable;
  TMR_OCInitStructure.TMR_Pulse = (uint32_t)((float)PWM_DUTY/ 100 * CYCLE_1KHZ); /* PWM占空比 */;  //百分之50
  TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_Low;
  TMR_OC1Init(TMR3, &TMR_OCInitStructure);
  TMR_CtrlPWMOutputs(TMR3, ENABLE);
  /* TMR1 counter enable */
  TMR_Cmd(TMR3, ENABLE);
}

也可以通过该库函数控制PWM输出的占空比

void TMR_SetCompare2(TMR_Type* TMRx, uint32_t Compare2)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值