PWM互补输出带死区时间和刹车控制代码讲解
时隔11天,我又回来了
之间写了STM32的三种定时器的一些基本概念,今天我来讲解一下相关的程序应用。
我们直接从野火的固件库例程中拷贝一个串口的例程:USART接发。
由于我们这个例程是关于互补输出,因此需要两个GPIO;死区时间用软件配置,而刹车控制也需要使用一个GPIO。所以我们在正通道中选择PA8,在互补通道中选择PB13,刹车控制选用PB12。
首先,在目标文件下的User文件夹下新建AdvanceTim文件夹,在其目录下创建bsp_AdvanceTim.c和bsp_AdvanceTim…h两个文件。
然后先在.h文件中添加条件编译语句:
#ifndef __BSP_ADVANCETIME_H
#define __BSP_ADVANCETIME_H
#include "stm32f10x.h"
#endif /* __BSP_ADVANCETIME_H */
在编写主体程序时,我们先来看看其原理:
我们先假设占空比为50%,需要配置CNT,CCR,ARR,当CNT从0向上计数时,初始设的有效电平为高电平,当CNT<CCR,则CNT一直为高电平,当CNT到达CCR时,电平就会发生跳变,从高变低,当到达ARR时,CNT清零,电平翻转,如此反复。
我们在刚刚创建的.c文件中配置GPIO为复用输出模式:
static void ADVANCE_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*输出比较通道初始化*/
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);
/*输出比较通道互补通道GPIO初始化*/
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1N_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM_CH1N_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;