打印
[APM32F1]

依据手册推导APM32F103ZE的高级定时器的死区计算方法

[复制链接]
590|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zjh20070904 于 2022-6-18 10:19 编辑

1 概述
高级定时器有个死区控制功能,依据手册配置想要的死区时间时比较麻烦,于是依据手册自己总结了配置死区时间的计算方法。

2 计配置DTS寄存器的计算方法2.1 关键寄存器描述




2.2 计算方法
1)依据死区时间确定范围
对于CLKDIV配置为00TMR1的时钟分别为8M72MHz时,对应的死区配置范围是:
DTS[7:0]数值范围
计算死区范围公式
8MHz系统时钟
72MHz系统时钟
0
127
DTS[7:0]*TDTS
0ns
15875ns
0ns
1763.8ns
128
191
(DTS-128+64)*TDTS*2
16us
31.75us
1.77us
3.527us
192
223
(DTS-192+32)*TDTS*8
32us
63us
3.55us
7us
224
255
(DTS-224+32)*TDTS*16
64us
126us
7.11us
14.33us

其中TDTS=CKD/TMR1_CLK

2)依据死区时间范围代入对应的公式计算要配置的寄存器数值



3 应用案例
代码中的时钟关系如下
1)系统时钟为72MHz
2APB2的时钟未分频即72MHz
3TMR1挂接在APB2总线上,且时钟分频系数CLKDIV为00,因此TMR1的时钟为72MHz
4CLKDIV默认配置为:00


3.1 TMR1_BDT_ConfigStruc.deadTime=36
配置说明
PWM波形
无死区配置的波形
死区配置参数:36
死区时间
500ns



3.2 TMR1_BDT_ConfigStruc.deadTime=(72+128-64)
配置说明
PWM波形
无死区配置的波形
死区配置参数:72+128-64
死区时间
2us




3.3 TMR1_BDT_ConfigStruc.deadTime=(36+192-32)
配置说明
PWM波形
无死区配置的波形
死区配置参数:36+192-32
死区时间
4us




3.4 TMR1_BDT_ConfigStruc.deadTime=(36+224-32)
配置说明
PWM波形
无死区配置的波形
死区配置参数:36+224-32
死区时间
8us




3.5 CLKDIV对死区的影响
配置说明
PWM波形
CLKDIV:00
死区时间:4us
CLKDIV:01
死区时间:8us




4 应用案例代码
int main(void)
{
    GPIO_Config_T GPIO_ConfigStruct;
    TMR_BaseConfig_T TMR_TimeBaseStruct;
    TMR_OCConfig_T OCcongigStruct;
        TMR_BDTConfig_T TMR1_BDT_ConfigStruc;
        
    RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_TMR1 | RCM_APB2_PERIPH_GPIOB));

    GPIO_ConfigStruct.pin = GPIO_PIN_13;
    GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
    GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOB, &GPIO_ConfigStruct);

    GPIO_ConfigStruct.pin = GPIO_PIN_8;
    GPIO_Config(GPIOA, &GPIO_ConfigStruct);

    TMR_TimeBaseStruct.clockDivision = TMR_CLOCK_DIV_2;
    TMR_TimeBaseStruct.countMode = TMR_COUNTER_MODE_UP;
        TMR_TimeBaseStruct.division =72-1;        
    TMR_TimeBaseStruct.period = 40-1;
    TMR_ConfigTimeBase(TMR1, &TMR_TimeBaseStruct);
        
    OCcongigStruct.idleState = TMR_OC_IDLE_STATE_RESET;
    OCcongigStruct.mode = TMR_OC_MODE_PWM1;
    OCcongigStruct.nIdleState = TMR_OC_NIDLE_STATE_RESET;
    OCcongigStruct.nPolarity = TMR_OC_NPOLARITY_HIGH;
    OCcongigStruct.outputNState = TMR_OC_NSTATE_ENABLE;
    OCcongigStruct.outputState = TMR_OC_STATE_ENABLE;
    OCcongigStruct.polarity = TMR_OC_POLARITY_HIGH;
    OCcongigStruct.pulse =16;
    TMR_ConfigOC1(TMR1, &OCcongigStruct);
        
        
        
        TMR1_BDT_ConfigStruc.RMOS=TMR_RMOS_STATE_DISABLE;
        TMR1_BDT_ConfigStruc.IMOS=TMR_IMOS_STATE_ENABLE;
        TMR1_BDT_ConfigStruc.lockLevel=TMR_LOCK_LEVEL_OFF;
        TMR1_BDT_ConfigStruc.deadTime=(36+192-32);
        TMR1_BDT_ConfigStruc.BRKState=TMR_BRK_STATE_DISABLE;
        TMR1_BDT_ConfigStruc.BRKPolarity=TMR_BRK_POLARITY_LOW;
        TMR1_BDT_ConfigStruc.automaticOutput=TMR_AUTOMATIC_OUTPUT_DISABLE;
        TMR_ConfigBDT(TMR1,&TMR1_BDT_ConfigStruc);

    TMR_ConfigOC1Preload(TMR1, TMR_OC_PRELOAD_ENABLE);
    TMR_EnableAutoReload(TMR1);
               
    TMR_Enable(TMR1);
        TMR_EnablePWMOutputs(TMR1);
        
    while(1)
    {
    }
}



使用特权

评论回复
沙发
麻花油条| | 2022-9-7 16:59 | 只看该作者
厉害啊,给你一个大大的赞

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝