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_INT
    DTS是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 100
                                                      5     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) 的上升沿重新初始化计数器,并且产生一 个更新寄存器的信号
    ^*/
    
    
    //滤波时间21us
    TIM2->CCMR1=(15<<4)+(3<<0);
    /*^
    TIM2->CCMR1=(15<<4)--定义了 TI1 输入的采样频率及数字滤波器长度(N),1111:采样频率 fSAMPLING=fDTS/32,N=8
    TIM2->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;               //捕捉计数
		
	}
}

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值