STM32TIM定时器在FOC中一些应用的理解

2023-10-21 10:59

本文主要是介绍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中一些应用的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253954

相关文章

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

深入理解Go之==的使用

《深入理解Go之==的使用》本文主要介绍了深入理解Go之==的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录概述类型基本类型复合类型引用类型接口类型使用type定义的类型不可比较性谈谈map总结概述相信==判等操作,大

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个