stm32 刹车 功能

stm32  有pwm输出,可以用来驱动电机,刹车就是关掉pwm紧急停止的意思。
高级控制定时器(TIM1 和 TIM8)可以输出两路互补信号,并管理输出的关断与接通瞬间。
这段时间通常称为死区,用户必须根据与输出相连接的器件及其特性(电平转换器的固有延
迟、开关器件产生的延迟...)来调整死区时间
 
 
打算使用stm32f100系列开发一款风机驱动器,发现刹车输入的结果和手册上的有所不同,请高手解释一下刹车输入后的具体时序,谢谢!!

输出状态.jpg (28.44 KB, 下载次数: 0)

输出状态.jpg

刹车输入状态.jpg (46.79 KB, 下载次数: 1)

刹车输入状态.jpg
 
STM32输出互补PWM时,设置死区和刹车::::OSSR位,0:当定时器不工作时,禁止OC/OCN输出(OC/OCN使能输出信号=0);
                                      1:当定时器不工作时,一旦CCxE=1或CCxNE=1,OC/OCN使能并输出无效电平,
然后置OC/OCN使能输出信号=1。
                                       解释:定时器不工作的含义:就是令某一通道失能,即CCxE=0或CCxNE=0。这时一旦当CCxE或CCxNE其中有一个使能时,而另一个失能时,这时失能的通道输出无效电平,使能的通道输出程序中配置的模式。
死区用来防止全桥短路,刹车就是全导通,你做过h桥就知道了

死区和刹车功能配置,高级定时器才有的,通用定时器不用配置
        TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//运行模式下输出选择
        TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//空闲模式下输出选择
        TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;         //锁定设置
        TIM_BDTRInitStructure.TIM_DeadTime = 0x90;                                         //死区时间设置
        TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;                 //刹车功能使能
        TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//刹车输入极性
        TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自动输出使能;//1:MOE(主输出使能)能被软件置’1’或在下                   一个更新事件被自动置’1’(如果刹车输入无效)。
        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);     
在配置完pwm后,开启所有输出(MOE为1)

刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态;
高级控制定时器 TIM1 能够输出两路互补信号并且能够管理输出的瞬时关
断和接通。这段时间通常被称为死区,应该根据连接到输出的器件和它们的特性
(电平转换的延时、电源开关的延时等)来调整死区时间。
特别的是,在转换到 IDLE 状态时(MOS 下降到 0)死区被激活。
同时设置 CCxE 和 CCxNE 位将插入死区,如果存在刹车电路,则还要设置
MOE 位。 每一个通道都有一个 10 位的死区发生器。 参考信号 OCxREF 可以产生 2
路输出 OCx 和 OCxN。如果 OCx 和 OCxN 为高有效:
· OCx 输出信号与参考信号相同,只是它的上升沿相对于参考信号的上
升沿有一个延迟。
· OCxN 输出信号与参考信号相反,只是它的上升沿相对于参考信号的下
降沿有一个延迟。
如果延迟大于当前有效的输出宽度(OCx 或 OCxN), 则不会产生相应的脉冲。

占空比的计算:
STM32 的高级定时器时钟 TIM1CLK 为固定 72MHz, TIM1 预分频为 0x0(系统
高速时钟不分频), 所以 TIM1 计数器时钟频率为 72MHz。I/O 口时钟为固定值
50MHz,PA8、PA9、PA10、PA11 设为推拉模式。
TIM1 在下面定义的频率下工作:
TIM1 频率= TIM1CLK/(TIM1_Period + 1) = 17.57 KHz。
TIM1 CC1 寄存器的值为 0x7FFF, 所以 TIM1_CH1 和 TIM1_CH1N 产生一个频
率为 17.57KHz 的信号,这个信号的占空比为:
TIM1_CH1 占空比 = TIM1_CCR1 /(TIM1_Period + 1) = 50%。
TIM1 CC2 寄存器的值为 0x3FFF, 所以 TIM1_CH2 和 TIM1_CH2N 产生一个
17.57KHz 的信号,它的占空比为:
TIM1_CH2 占空比 = TIM1_CCR2 / (TIM1_Period + 1)= 25%。
TIM1 CC3 寄存器的值为 0x1FFF, 所以 TIM1_CH3 和 TIM1_CH3N 产生一个
17.57KHz 的信号,它的占空比为:
TIM1_CH3 占空比 = TIM1_CCR3 / (TIM1_Period + 1) = 12.5%。
TIM1 波形可以在示波器上显示出来。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

 
  1. //Set the Dead time  
  2. /* 
  3. To set the deadtime(TD),is to determ the regesiter DTG[7:0] 
  4. DTG[7:0]:(Dead-time generator setup)  
  5. DTG[7:5]=0xx => DT=DTG[7:0]*Tdtg, Tdtg = Tdts;  
  6. DTG[7:5]=10x => DT=(64+DTG[5:0])*Tdtg, Tdtg = 2*Tdts;  
  7. DTG[7:5]=110 => DT=(32+DTG[4:0])*Tdtg, Tdtg = 8*Tdts;  
  8. DTG[7:5]=111 => DT=(32+DTG[4:0])*Tdtg, Tdtg = 16*Tdts;  
  9. Tdts is determined by CKD[1:0], which is from Timer control regesity TIMx_CR1[9:0]  
  10. representing the meaning of the Timer clock Devider 
  11. CKD[1:0] = 00    Tdts = TCK_INT 
  12. CKD[1:0] = 01    Tdts = 2 * TCK_INT 
  13. CKD[1:0] = 10    Tdts = 4 * TCK_INT 
  14. CKD[1:0] = 11    Reserved 
  15. Where TCK_INT is the Timer Clock. 
  16. Here, the Tdts = TCK_INT = 1/72 uS. 
  17. So, the DT maybe as long as follows: 
  18. 0nS  ~   1763nS  The step is 1/72 uS 
  19. 1777nS   ~   3527nS  The step is 2*1/72 uS 
  20. 3555nS   ~   7000nS  The step is 8*1/72 uS 
  21. 7111nS   ~   14000nS     The step is 16*1/72 uS 
  22. Here, We make the DT equals to 600 nS, which is in the limitation of No.1. 
  23. So, DTG[7:0] = 0.6/(1/72) = 43 = 0x2B. 
  1. TIM_BDTRInitStructure.TIM_DeadTime = 0x2B;  
时钟的周期是(1/72)us,Tdts = TCK_INT,CKD[1:0] = 00,600ns=0.6us,0.6/(1/72)=72*0.6=43.2=0x2b
<think>好的,我需要帮助用户了解STM32刹车系统中的应用或实现方法,特别是STM32刹车控制的实现方案。首先,我要整理已有的引用内容,看看哪些信息可以直接应用。 根据引用[1],STM32的高级定时器支持互补输出和刹车功能,提到了硬件刹车输入和快刹与慢刹的区别。引用[2]详细说明了硬件刹车的优势,比如快速关闭PWM,处理死区时间等。引用[3]虽然主要讲CAN控制器,但可能涉及实时通信方面的应用,但可能和刹车系统关联不大,暂时可以忽略。 用户的问题集中在刹车控制的实现方案,所以需要结合硬件刹车功能和相关定时器配置。我应该分点回答,结构清晰。首先介绍硬件刹车和软件刹车的区别,然后详细说明实现步骤,包括配置定时器、刹车输入、中断处理等。需要确保使用正确的LaTeX格式,如独立公式用$$...$$,行内用$...$。 可能需要补充一些外部知识,比如刹车输入引脚配置、寄存器设置等,但引用已经提供了足够的信息。注意引用标记要放在相关内容的末尾,如[^1][^2]。 最后生成相关问题,考虑用户可能感兴趣的后续问题,比如应用场景、设计注意事项、与CAN的配合等。确保问题与刹车系统相关,并且基于已有引用内容。</think>### STM32刹车控制实现方案 STM32刹车控制功能主要通过高级定时器(如TIM1/TIM8)实现,分为**硬件刹车**和**软件刹车**两种方式,以下是具体实现方案: --- #### 一、硬件刹车实现 1. **硬件刹车输入配置** 使用STM32定时器的专用刹车引脚(如BKIN),通过外部信号(如过流检测、急停按钮)触发硬件刹车。 - 配置GPIO为输入模式并映射到定时器刹车功能 - 设置刹车信号极性(高电平或低电平有效) - 启用刹车输入滤波(防抖动) 2. **定时器刹车参数设置** 在定时器配置中需设置以下关键寄存器: - **刹车使能位**(MOE):控制PWM输出的总开关 - **刹车响应模式**:选择立即关闭输出(快刹)或渐变关闭(慢刹) - **死区时间调整**:防止上下桥臂直通,公式: $$ T_{dead} = (DTG[7:0] \times T_{clk}) + T_{delay} $$ 其中$T_{clk}$为时钟周期,$T_{delay}$为硬件固有延迟[^1]。 --- #### 二、软件刹车实现 1. **紧急关断逻辑** 通过中断或DMA实时监测系统状态(如温度、电流),触发软件刹车: ```c void TIM1_BRK_IRQHandler() { if (CHECK_EMERGENCY()) { // 检测紧急状态 TIM1->BDTR &= ~TIM_BDTR_MOE; // 关闭主输出 TIM1->CCER = 0x00; // 禁用所有通道 } } ``` 2. **状态约束机制** 结合引用[2]提到的**状态机设计**,实现多级刹车响应: - Level 1:降低PWM占空比(软刹车) - Level 2:关闭特定通道输出 - Level 3:完全关闭定时器并触发故障保护 --- #### 三、典型应用场景 1. **电机紧急制动** 在无刷电机驱动中,硬件刹车可在$10\mu s$内关闭所有PWM输出,避免MOS管损坏[^1]。 2. **电源系统保护** 搭配ADC检测过压/过流,通过刹车功能切断电源输出。 3. **安全关键系统** 如汽车电子中的ABS系统,结合CAN总线实现多节点协同刹车[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值