STM32高级定时器死区时间的配置及计算

发布者:平和的心态最新更新时间:2018-06-28 来源: eefocus关键字:STM32  高级定时器  死区时间 手机看文章 扫描二维码
随时随地手机看文章

互补输出和死区插入

死区概念

高级控制定时器(TIM1 和 TIM8)可以输出两路互补信号,并管理输出的关断与接通瞬间。这段时间通常称为死区,用户必须根据与输出相连接的器件及其特性(电平转换器的固有延迟、开关器件产生的延迟…)来调整死区时间 
每路输出可以独立选择输出极性(主输出 OCx 或互补输出 OCxN)。可通过对 TIMx_CCER寄存器中的 CCxP 和 CCxNP 位执行写操作来完成极性选择。

TIM1 和 TIM8 断路和死区寄存器 (TIMx_BDTR)

寄存器功能展示 
死区寄存器

1.明确自己定时器系统时钟


系统时钟—>AHB 预分频器 && APB2 预分频器值 得到自己定时器的系统时钟为168M

2.计算tDTS


tDTS=1/定时器系统时间 

//tDTS=1/168M=5.95228ns

3.设定死区时间


配置修改DTG[7:0]来改变死区时间


位 7:0 DTG[7:0]:配置死区发生器 (Dead-time generator setup) 

此位域定义插入到互补输出之间的死区持续时间。 DT 与该持续时间相对应。


DTG[7:5]=0xx => DT=DTG[7:0]x tdtg,其中 tdtg=tDTS。

DTG[7:5]=10x => DT=(64+DTG[5:0])xtdtg,其中 Tdtg=2xtDTS。

DTG[7:5]=110 => DT=(32+DTG[4:0])xtdtg,其中 Tdtg=8xtDTS。

DTG[7:5]=111 => DT=(32+DTG[4:0])xtdtg,其中 Tdtg=16xtDTS。


示例:如果 TDTS=125ns (8MHz),则可能的死区值为: 0 到 15875 ns(步长为 125 ns), 16 us 到 

31750 ns(步长为 250 ns), 32 us 到 63us(步长为 1 us), 64 us 到 126 us(步长为 2 us)

注意: 只要编程了 LOCK(TIMx_BDTR 寄存器中的 LOCK 位)级别 1、 2 或 3,此位域即无法修改。


4.软件实现


u32 T_TDS=119;//11.904ns    168M系统时钟

    //    deat_num(0,255)

    if(death_num >0&& death_num<=127)//公式1

        death_time=(float)death_num*T_TDS/10000;

    else if(death_num>=128 && death_num<=191)//公式2

        death_time=(float)(death_num-128)*2*T_TDS/10000;

    else if(death_num>=192 && death_num<=223)//公式3

        death_time=(float)(death_num-160)*8*T_TDS/10000;

    else if(death_num>=224 && death_num<=255)//公式4

        death_time=(float)(death_num-192)*16*T_TDS/10000;

    else

        death_time=death_time;


软件改进:


    u32 T_TDS=168;//11.904ns    168M系统时钟

    //deat_num--->(0,255)

    if(death_num >0&& death_num<=127)//公式1

        death_time=(float)death_num/T_TDS;

    else if(death_num>=128 && death_num<=191)//公式2

        death_time=(float)(death_num-128)*2/T_TDS;

    else if(death_num>=192 && death_num<=223)//公式3

        death_time=(float)(death_num-160)*8/T_TDS;

    else if(death_num>=224 && death_num<=255)//公式4

        death_time=(float)(death_num-192)*16/T_TDS;

    else

        death_time=death_time;


5.结果现象展示

死区验证

关键字:STM32  高级定时器  死区时间 引用地址:STM32高级定时器死区时间的配置及计算

上一篇:STM32定时器产生PWM--呼吸灯
下一篇:STM32之高级定时器互补输出

推荐阅读最新更新时间:2024-03-16 16:07

基于STM32单片机设计指纹考勤机+上位机管理
1. 前言 随着信息科学技术的不断进步,信息科学技术已进入到了当今生活的方方面面,尤其是每个行业的经管领域,这类智能化信息技术处理是提高效率、从严管制、公平审查较为有效的方法。考勤登记,作为企业职工的基本管理,是对职工每日出勤管理的根本根据。但是,目前我国绝大多数企业在考勤登记时,依然利用的是古板的考勤方法,比如: 人工注册、打卡、机器打卡等,不光考勤速度较为缓慢,并且在考勤登记时候要专门职员在一边进行记载、统计数据、制成EXCEL表,而报表做完后最终交到主管手里时,有时候时间已过了好几天,根本不行,也不可以施展考勤真实的监视作用。并且还有可能呈现考勤数据不准确,考勤职员纪录犯错,乃至卖弄虚假的这种现象,极度破坏了企业对职工的日常
[单片机]
基于<font color='red'>STM32</font>单片机设计指纹考勤机+上位机管理
stm32程序下载成功但是不运行
调试stm32程序,发现如下问题: STM32编写程序,当程序中没有sd卡部分时,程序正常下载,正常运行。当程序中运行sd卡加文件系统时程序能正常下载但是不能正常的运行。发现问题就要解决问题呀,好了大家一起来和我解决问题吧!​ 根据自己问题,上网查找解决办法,最终将问题锁定在堆栈设置问题上。(堆栈设置的空间不够大) 解决办法:在​stm32的程序目录下查找STM32F10x.s(或者是startup_stm32f10x_hd,这取决于你是用的寄存器还是函数库) 在打开文件,在文件的开头很醒目的位置,发现了关于堆栈的设置。​​ 从中我们可以看出来对于栈(stack)的大小设置为0x200,堆(heap)的大小为
[单片机]
<font color='red'>stm32</font>程序下载成功但是不运行
openmv舵机云台 自动追踪色块 STM32源程序
之前做的舵机云台自动瞄色块的装置 现在已经拆掉了,所以没有图片 就是类似19年国赛电磁的发挥部分要求 单片机源程序如下: #include control.h u8 key = 0; u8 mode = 0; u8 sign = 0; u16 mode_r = 0; u16 mode_p = 0; void TIM1_UP_IRQHandler(void) //TIM1中断 { if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(T
[单片机]
STM32单片机实现DMA+ADC+UART功能
突然想测试一下STM32单片机ADC采样速率问题,按照常规方法,可以通过ADC采样,然后将采样值打印出来。但是这种方法在处理和打印数据的时候会占用很多时间,导致处理数据的时间超过了ADC的采样时间。于是想到了ADC采样的数据用DMA功能存储,并通过串口打印。但是串口打印依然要占用单片机时间,那能不能串口数据的输出也采用 DMA功能呢?这样ADC采样的数据通过DMA直接存储,然后串口通过DMA功能直接输出采样到的数据。这样速度程序执行速度不就极大的提升了吗?说干就干,使用STM32F103C8T6单片机,标准库函数,keil5软件,编写一个测试程序。 首先实现ADC采样并通过DMA存储 #ifndef __ADC_H #de
[单片机]
<font color='red'>STM32</font>单片机实现DMA+ADC+UART功能
stm32 直接读写寄存器代码风格总结
简单的总结了一下stm32 寄存器读写代码风格,以备后用: 根据memory mapping 直接写寄存器代码风格: #define GPIOA_BASE1 (uint32_t)0x40010800 #define GPIOA_CRH ((uint32_t*)(GPIOA_BASE1+0x04)) 转换为指针之后,直接读写: *GPIOA_CRH=0x000004B0; //A端口 //复用推挽输出 结构体指针解决连续多个寄存器读写设置: #define Usart1_BASE 0x40013800 typedef struct { __IO uint32_t SR; __IO
[单片机]
<font color='red'>stm32</font> 直接读写寄存器代码风格总结
基于STM32从零写操作系统系列---熟悉win+linux交叉编译环境
本章将讲述交叉编译环境的学习,环境平台是ubuntu,工具链是gcc-arm-none-eabi。 目的: 熟悉交叉编译环境,了解如何下载BIN格式的程序文件到单片机。 实验1: 一个简单的交叉编译与程序下载过程 环境搭建(以我的平台为例): 安装win7 64位系统,具体教程可百度 在windows系统上安装VMware虚拟机,具体教程可百度 在虚拟机上新建虚拟机,安装ubuntu系统 在ubuntu系统使用命令安装make(如果没有),gcc-arm-none-eabi交叉编译工具 在windows系统上安装ST-Link Utility软件,用于下载bin格式文件到是stm32单片机 在windows系统上安装编
[单片机]
基于<font color='red'>STM32</font>从零写操作系统系列---熟悉win+linux交叉编译环境
stm32的usart操纵超级终端(usart 操纵串口)
为了测试前面的无线模块的程序,写了一个usart操纵Windows超级终端的程序小程序。 废话少说,上代码: 1.硬件配置的头文件: ******************** (C) COPYRIGHT 2011 SDUEM ******************** * File Name : hw_config.h * Author : wzb@sduem * Version : V2.2.0 * Date : 05/13/2011 * Description : Hardware Configuration & Setup ******************
[单片机]
STM32 USB HID设置(STM32CubeMX)
STM32F070F6P USB HID设置 1、打开STM32CubeMX软件,选择“NEW”新建一个工程 2、选择芯片型号STM32F070F6P 3、在Swap PA9/10- PA11/12前打勾 4、在“USB”下的“Device(FS)”前打勾 5、设置晶振,在“RCC”下的“High Speed Clock(HSE)”下选择第三项(此芯片需外接晶振) 6、在MiddleWares下的USB_DEVICE选择“Custon Human Interface Device Class(HID)”选项 7、点击Clock Configuration 标签,在弹出的对话框点YES.自动配置时
[单片机]
<font color='red'>STM32</font> USB HID设置(STM32CubeMX)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved