stm32之TIM1和TIM8刹车和死区寄存器TIMX

您所在的位置:网站首页 bkp寄存器全称 stm32之TIM1和TIM8刹车和死区寄存器TIMX

stm32之TIM1和TIM8刹车和死区寄存器TIMX

2023-10-11 07:12| 来源: 网络整理| 查看: 265

因为要用到这部分功能,所以查阅了相关文档,做了相应的实验,现作一记录;初次写博客,思路有些混乱,见谅!

BDTR寄存器 主要是MOE,AOE,BKP,BKE,OSSR,OSSI,LOOK,UTG的设置 ··· TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; TIM_BDTRInitStructure.TIM_DeadTime = DEADTIME; TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable; //使能Break TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low; //Break低有效 TIM_BDTRInitStructure.TIM_AutomaticOutput= TIM_AutomaticOutput_Disable; //刹车手动恢复

··· 下面分别介绍BDRT寄存器各个位的配置: MOE(main output enable):当刹车输入有效时,该位会被硬件异步清0(异步没搞明白什么意思?)。 0:禁止OC和OCN输出或强制为空闲状态; 1:若设置了相应的使能位(即TIMX_CCER的CCxE、CCxNE),则开启OC和OCN输出 我的理解是即使没有使能break功能,MOE位也应该被初始化为0, AOE(automatic output enable):TIM_AutomaticOutput,该位的设置与MOE相关 0:MOE位只能被软件置1, 1:MOE被软件置1或者当刹车信号无效后被更新时间自动置1。 也就是说当刹车信号有效时,MOE位被硬件清0,该位若为0,则MOE位只能由软件置1(即使刹车信号出现一次,之后无效,),若AOE位为1,则MOE除了软件置1外,当刹车信号失效时,在下一个更新事件时,MOE会被自动置1。 BKP(break polarity):TIM_BreakPolarity 刹车输入极性 0:低电平有效; 1:高电平有效; 这个好理解,如字面意思。 BKE(break enable):TIM_Break,使能 0:禁止刹车输入 1:使能刹车输入 就是是否启用break功能 OSSR、OSSI OSSR:设置与MOE相关,即当MOE=1,并且TIM通道为互补输出时有效 0:禁止OC/OCN输出 1:当CCXE或CCXEN=1时,首先开启OC/OCN并输出无效电平,然后OC/OCN使能输出信号等于1, 有个前提就是when inactive,我的理解是当TIM不工作时, OSSI:用于当MOE=0;并且通道是输出时,也就是当刹车信号有效时, 0:禁止OC/OCN输出(OC和OCN的使能信号等于0) 1:当CCXE或CCXEN=1时,OC/OCN首先输出其空闲电平,然后OC/OCN使能输出信号等于1, 有个表格可以将MOE、OSSI、OSSR三者的配置方式说的很明白。 在这里插入图片描述 其中OIS1和OIS1N输出空闲状态,即空闲状态的电平是可以手动设置的,相关寄存器为TIMx_CR2

刹车中断

当配置好刹车功能后,当出现刹车信号时可以进入相应的BRK_IRQHandler进行刹车后的动作。 中断配置较为简单,设置中断优先级分组,中断优先级,使能中断。

问题

1、当刹车信号有效时,SR寄存器的BIF(break interrupt flag)位会置1,BDTR寄存器的MOE位会被置0,从keil的watch窗口看相关寄存器的值确实变了,但是我用下面语句读寄存器的值时,仍然是以前没有刹车信号时的数据,即BIF仍为0,MOE位仍为1,

value = (MOTOR1_TIM->BDTR) & 0x8000; g_value = (TIM1->SR) & 0x0080;

让人很不解,待后续解决,也希望能够得到各位的帮助!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3