本文主要是介绍STM32TIM定时器在FOC中一些应用的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、TIM1的相关作用
1.驱动波形生成
目前调试遇到的芯片有两种驱动逻辑:有效逻辑为(1)上高下低(2)上高下高(这里有效指输出高电压打开MOS)
用TIM1的通道1,2,3的OCx/OCxN来输入三相对应的驱动芯片引脚控制全桥的通断。将以通道1为例,介绍一下U相的的驱动配置。
首先明确的是,对应逆变全桥上,上下桥的波形一定是互补的,这是SVPWM算法决定的,因此针对不同驱动芯片的驱动逻辑需要采用不同的驱动配置。
(1)上高下低的驱动逻辑
根据驱动芯片的芯片上桥信号输入为高电平有效,下桥芯输入为低电平有效,我们期望的上下桥互补波形对应的芯片输入波形就如下:

这里解释一下为什么是0矢量的(000)放在波形中间,为的是兼容各种采样时方便三电阻方案选取采样点,放在PWM周期中间进行采样,此时下桥全开可以采出电流。
我们知道TIM1的OC1与OC1N输出的有效性是相反的,即OC1REF被置1(有效)时,OC1输出有效电平,OC1N输出无效电平,为了输出上图的同相波形,我们需要配置OC1与OC1N的有效波形的电平极性相反。
综上需求我们需要操作2个寄存器来实现。
1.TIM1_CCMR1
这里只需要看低字节,高字节配置的是OC2,而CCMR2对应的就是OC3与OC4的配置。



配置如下0110 1000 【0110 1000】,【】内的为通道1的配置,下面配置输出波形的极性。
OC1输出有效性如下:

2.TIM1_CCER
低字节的低四位为通道1 的配置



配置如下0001 1101 1101 【1101】,【】中的为通道1的配置。OC1的有效电平定义为高电平,OC1N的有效电平定义为低电平。结合上一寄存器的OC1输出电平有效性的图,可以发现输出波形与需要的波形一致。
通道2、3配置相同即可。
(2)上高下高的驱动逻辑
与上高下低的配置寄存器相同,只是将CCER的输出极性做了改变
CCER配置如下0001 0101 0101 【0101】。
2.TIM1-CH4触发采样
ST方案中通常使用TIM1的通道4作为TIM1的TRGO信号,再配置AD采样的触发条件为TIM1的TRGO信号,达到采样点灵活可变的需求,以应对单电阻采样的方案,而三电阻方案可固定在周期中点进行采样操作。
二、TIM2定时器捕获霍尔的应用
TIM2定时器作用于霍尔捕捉时的初始化及其注释,详细相关寄存器后续整理。
从手册中获得TIM2的运行框图如下:


TIM2的初始化方法如下:
void TIM2Init(void)
{NVIC_InitTypeDef NVIC_InitHALLStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM2->CR1=(2<<8)+(1<<7);/*^TIM2->CR1=(2<<8)--CKD(时钟分频因子为4分之一定时器时钟,用于输入捕获或对应数字滤波器的分配时基) 10:tDTS = 4 x tCK_INTDTS是Discrimination Threshold of Sample(采样分辨阈值),因为它已经是最高采样频率(即最快采样速度),采样频率设置只能以它为基础进行分频。TIM2->CR1=(1<<7)--TIMx_ARR寄存器缓冲器有效(预装载有效)^*/TIM2->CR2=(1<<7);/*^TIM2->CR2=(1<<7)-- TIMx_CH1,TIMx_CH2 ,TIMx_CH3异或后输入TI1定时器三个输入脚CC1,CC2,CC3(对应三个霍尔)通过一个异或门连接到TI1输入通道 (见C51参考手册220页)霍尔跳变异或值也会跳变:101 001 011 010 110 1005 1 3 2 6 4异或值: 0 1 0 1 0 1 ^*/TIM2->SMCR=(4<<4)+(4<<0);/*^TIM2->SMCR=(4<<4)--计数器触发选择为TI1的边沿检测器 TS[2:0]100的第三位,TI1边缘检测器对上下边缘都会进行检测,有边沿跳变TI1F_ED输出高产生TRC触发信号TIM2->SMCR=(4<<0)--从模式选择:复位模式的触发输入 (TRGI) 的上升沿重新初始化计数器,并且产生一 个更新寄存器的信号^*///滤波时间21usTIM2->CCMR1=(15<<4)+(3<<0);/*^TIM2->CCMR1=(15<<4)--定义了 TI1 输入的采样频率及数字滤波器长度(N),1111:采样频率 fSAMPLING=fDTS/32,N=8TIM2->CCMR1=(3<<0)--CC1通道配置为输入,IC1映射于TRC(这里TRC是作为IC1的输入,是TI1的边缘检测器产生的TRC内部直接映射到IC1的),此模式只工作在SMCR的TS位选中内部触发器时。^*//*注:CCER中CC1P与CC1NP共同控制IC1通道捕获输入信号(TI1产生的TRC)的有效沿,详见手册340页这里默认为00,只捕获非反相的上升沿*/TIM2->CCER=(1<<0);/*^TIM2->CCER=(1<<0)--CC1通道输入捕获使能,开启捕捉^*/NVIC_InitHALLStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitHALLStructure.NVIC_IRQChannelPriority = 0; //TIM2最高级中断,作为角度的捕获和读取NVIC_InitHALLStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitHALLStructure); //设置中断 TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); //开启通道1的捕获中断TIM2->ARR = 600000; //600MS的溢出时间TIM2->PSC=47;//1us时基TIM2->EGR|=(1<<0);//初始化计数器TIM2->CR1|=(1<<0);//开始计数
}u32 TIMEcnt ;
void TIM2_IRQHandler(void)
{if(TIM2->SR&0x0040) //TIF触发中断标记{TIM2->SR &= 0xFFB1; //清中断标志TIMEcnt = TIM2->CCR1; //捕捉计数}
}
这篇关于STM32TIM定时器在FOC中一些应用的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!