当前位置:首页 > 单片机 > 单片机
[导读]搞过全桥电机驱动的都知道控制死区时间的重要性,一般解决方案是搭建电路控制死区时间或直接使用全桥驱动芯片。 而STM32拥有两个高级定时器,可以直接输出具有调节死区时间的PWM。 现以TIM1通道1输出占空比为50%,死

搞过全桥电机驱动的都知道控制死区时间的重要性,一般解决方案是搭建电路控制死区时间或直接使用全桥驱动芯片。

而STM32拥有两个高级定时器,可以直接输出具有调节死区时间的PWM。

现以TIM1通道1输出占空比为50%,死区时间为5us来做个例子。

首先TIM1通道1的PWM输出端口为PA8,互补输出通道为PB13,所以需要开启相应模块的时钟:

RCC->APB2ENR|=1<<11; //TIM1时钟使能

RCC->APB2ENR|=1<<2; //GPIOA时钟使能

RCC->APB2ENR|=1<<3; //GPIOB时钟使能

将需要使用的PA8,PB13口设置为复用式推挽输出并上拉:

GPIOA->CRH&=0XFFFFFFF0; //清PA8状态

GPIOA->CRH|=0X0000000B; //复用功能输出 推挽式

GPIOA->ODR|=3<<8; //PA8上拉

GPIOB->CRH&=0XFF0FFFFF; //清PB13状态

GPIOB->CRH|=0X00B00000; //复用功能输出 推挽式

GPIOB->ODR|=3<<13; //PB13上拉

接着需要设置的是TIM1->ARR和TIM1->PSC 这两个寄存器。

预分频器寄存器TIM1->PSC 对系统频率进行分频,得到定时器计数频率:

fCK_CNT=fck_PSC/(PSC[15:0]+1)

计数器自动重装寄存器TIM1->ARR对定时器计数频率进行分频,得到PWM频率:

fPWM=fCK_CNT/(ARR[15:0]+1)

stm32参考手册里的高级控制定时器框图表达的很明确了:

接下来就开始设置有关互补输出和死区控制的寄存器了。

1、刹车和死区寄存器TIM1->BDTR

DTG[7:0] 决定了插入的死区持续时间,假设DT表示其持续时间则:

DTG[7:5]=0xx => DT=DTG[7:0] × Tdtg,Tdtg = TDTS;

DTG[7:5]=10x => DT=(64+DTG[5:0]) × Tdtg,Tdtg = 2 × TDTS;

DTG[7:5]=110 => DT=(32+DTG[4:0]) × Tdtg,Tdtg = 8 × TDTS;

DTG[7:5]=111 => DT=(32+DTG[4:0])× Tdtg,Tdtg = 16 × TDTS;

TDTS为系统时钟周期时长,Tdtg为系统时钟周期时长乘以倍数后的时长。

这样当我需要5us的死区持续时间时,则可这么计算:

死区时间=1/72*1000X(32+DTG)X8=5us (72Mhz)

TIM1->BDTR|=0xCD; //72Mhz,死区时间=13.89nsX(32+DTG)X8=5us

MOE位为主输出使能,将在后面置位。

其他位的具体设置可参考《STm32参考手册》P244页,以下设置寄存器都不做详细介绍。

2、捕获/比较使能寄存器TIM1_CCER 这里要设置的只是使能通道x的互补输出,或输出极性:

TIM1->CCER|=1<<2; //CH1互补输出使能

剩下的还需要设置:

捕获/比较模式寄存器 TIMx_CCMR1 设置输出PWM的模式和开启预装载功能:

TIM1->CCMR1|=6<<4; //CH1 PWM模式1

TIM1->CCMR1|=1<<3; //CH1预装载使能

控制寄存器1 TIM1->CR1

TIM1->CR1|=1<<7; //使能ARR自动重装入缓冲器

最后,惯例,写个初始化函数:

////////////////////////////////////////////////////////////////////////////////// //初始化TIM1 PWM部分 PWM1模式//PWM互补输出//arr:自动重装值 决定PWM输出频率//psc:时钟预分频数 决定计数器频率 //修改日期:2011/10/11 占空比=(VAL/arr)*100%//修改人://////////////////////////////////////////////////////////////////////////////////

void TIM1_PWM_Init(u16 arr,u16 psc)

{

RCC->APB2ENR|=1<<11; //TIM1时钟使能

RCC->APB2ENR|=1<<2; //GPIOA时钟使能

RCC->APB2ENR|=1<<3; //GPIOB时钟使能

GPIOA->CRH&=0XFFFFFF00; //PA8,PA9输出

GPIOA->CRH|=0X000000BB; //复用功能输出 推挽式

GPIOA->ODR|=3<<8; //PA8,PA9上拉

GPIOB->CRH&=0XF00FFFFF; //PB13,PB14输出

GPIOB->CRH|=0X0BB00000; //复用功能输出 推挽式 GPIOB->ODR|=3<<13; //PB13,PB14上拉

TIM1->ARR=arr; //设定计数器自动重装值 fPWM=fCK_CNT/(ARR[15:0]+1) TIM1->PSC=psc; //预分频器设置 fCK_CNT=fck_PSC/(PSC[15:0]+1)

TIM1->BDTR|=0xCD; //72Mhz算,死区时间=13.89nsX(32+DTG)X8=5us

TIM1->CCER|=1<<2; //CH1互补输出使能

TIM1->CCMR1|=6<<4; //CH1 PWM1模式

TIM1->CCMR1|=1<<3; //CH1预装载使能

TIM1->CR1|=1<<7; //使能ARR自动重装入缓冲器

TIM1->BDTR|=1<<15; //主输出使能TIM1->CR1|=0x01; //使能定时器1

}

主函数调用

int main(void){

TIM1_PWM_Init(399,8); //预分频9,PWM频率=72000000/9/400=20khz

TIM1->CCR1=200;

TIM1->CCER|=0x01; //CH1 OC1信号输出使能

}

最后接上示波器查看波形:



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式开发中,STM32的时钟系统因其灵活性和复杂性成为开发者关注的焦点。然而,看似简单的时钟配置背后,隐藏着诸多易被忽视的陷阱,轻则导致系统不稳定,重则引发硬件损坏。本文从时钟源选择、PLL配置、总线时钟分配等关键环...

关键字: STM32 时钟系统

在嵌入式系统开发中,STM32系列微控制器的内部温度传感器因其低成本、高集成度特性,广泛应用于设备自检、环境监测等场景。然而,受芯片工艺差异和电源噪声影响,其原始数据存在±1.5℃的固有误差。本文从硬件配置、校准算法、软...

关键字: STM32 温度传感器

在能源效率与智能化需求双重驱动下,AC-DC转换器的数字控制技术正经历从传统模拟方案向全数字架构的深刻变革。基于STM32微控制器的PFM(脉冲频率调制)+PWM(脉冲宽度调制)混合调制策略,结合动态电压调整(Dynam...

关键字: AC-DC STM32

当前智能家居产品需求不断增长 ,在这一背景下 ,对现有浇花装置缺陷进行了改进 ,设计出基于STM32单片机的全 自动家用浇花机器人。该设计主要由机械结构和控制系统构成 ,机械结构通过麦克纳姆轮底盘与喷洒装置的结合实现机器...

关键字: STM32 麦克纳姆轮 安全可靠 通过性强

用c++编程似乎是让你的Arduino项目起步的障碍吗?您想要一种更直观的微控制器编程方式吗?那你需要了解一下Visuino!这个图形化编程平台将复杂电子项目的创建变成了拖动和连接块的简单任务。在本文中,我们将带您完成使...

关键字: Visuino Arduino ESP32 STM32

基于STM32与LoRa技术的无线传感网络凭借其低功耗、广覆盖、抗干扰等特性,成为环境监测、工业自动化等场景的核心解决方案。然而,如何在复杂电磁环境中实现高效休眠调度与动态信道优化,成为提升网络能效与可靠性的关键挑战。本...

关键字: STM32 LoRa

在实时控制系统、高速通信协议处理及高精度数据采集等对时间敏感的应用场景中,中断响应延迟的优化直接决定了系统的可靠性与性能上限。STM32系列微控制器凭借其灵活的嵌套向量中断控制器(NVIC)、多通道直接内存访问(DMA)...

关键字: STM32 DMA

数字电源技术向高功率密度、高效率与高动态响应方向加速演进,STM32微控制器凭借其基于DSP库的算法加速能力与对LLC谐振变换器的精准控制架构,成为优化电源动态性能的核心平台。相较于传统模拟控制或通用型数字控制器,STM...

关键字: STM32 数字电源

STM32微控制器凭借其针对电机控制场景的深度优化,成为高精度、高可靠性驱动系统的核心选择。相较于通用型MCU,STM32在电机控制领域的核心优势集中体现在FOC(磁场定向控制)算法的硬件加速引擎与PWM死区时间的动态补...

关键字: STM32 电机控制

无线充电技术加速渗透消费电子与汽车电子领域,基于Qi协议的无线充电发射端开发成为智能设备能量补给的核心课题。传统模拟控制方案存在响应滞后、参数调整困难等问题,而基于STM32的数字PID控制结合FOD(Foreign O...

关键字: STM32 无线充电
关闭