历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2018年09月22日 | 【STM32电机FOC】记录15——TIM的输入捕获

2018-09-22 来源:eefocus

输入捕获原理及配置步骤

 

一、输入捕获概念

  STM32的输入捕获,简单的说就是通过检测 TIMx_CHx (定时器X的通道X)上的 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT) 存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。 

二、输入捕获流程:

 

输出比较模式的配置步骤: 

1. 选择计数器时钟(内部,外部,预分频器)。 

2. 将相应的数据写入TIMx_ARR和TIMx_CCRx寄存器中。 

3. 如果要产生一个中断请求,设置CCxIE位。

4. 选择输出模式,例如: 

─ 要求计数器与CCRx匹配时翻转OCx的输出引脚,设置OCxM=011 

─ 置OCxPE = 0禁用预装载寄存器

─ 置CCxP = 0选择极性为高电平有效

─ 置CCxE = 1使能输出 5

. 设置TIMx_CR1寄存器的CEN位启动计数器

三、输入捕获程序设计步骤:

设置 TIM3 时钟和的 GPIOC 端口霍尔捕获(连接引脚 06、07、08):

1)开启 TIM3 时钟和 GPIOC 时钟,重映射PC 6、7、8

 

要使用 TIM3,我们必须先开启 TIM3 的时钟以及输入的GPIO引脚。这里我们还要配置 PC6、7、8 为浮空输入

GPIO_Init()

{  

  GPIO_InitTypeDef        GPIO_InitStructure;

  GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);

    GPIO_StructInit(&GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7| GPIO_Pin_8;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

 

    GPIO_Init(GPIOC, &GPIO_InitStructure);

}

2)初始化 TIM3,设置 TIM3 的 ARR 和 PSC

在开启了 TIM3 的时钟之后,我们要设置 ARR 和 PSC 两个寄存器的值来设置输入捕获的自动重装载值和计数频率。

TIM_TimeBaseInit()

{  

TIM_TimeBaseInitTypeDef    TIM_TimeBaseInitStructure;

TIM_DeInit(HALL_TIMER);  

TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM 向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 Tim3

}

3)设置 TIM3 的输入比较参数,开启输入捕获

输入比较参数的设置包括映射关系,滤波,分频以及捕获方式等。这里我们需要设置通道 1 为输入模式,且 IC1 映射到 TI1(通道 1)上面,并且使用滤波(提高响应速度)器,上升沿捕获。

参数设置结构体 TIM_ICInitTypeDef 的定义: 

typedef struct

{

uint16_t TIM_Channel;    //用来设置通道

uint16_t TIM_ICPolarity;  //用来设置输入信号的有效捕获极性

uint16_t TIM_ICSelection;  //映射

uint16_t TIM_ICPrescaler;     //配置输入分频

uint16_t TIM_ICFilter;           //滤波

} TIM_ICInitTypeDef; 

缺省值配置( TIM_ICStructInit(&TIM_ICInitStructure); ):

【STM32电机FOC】记录15——TIM的输入捕获

配置程序:

TIM_ICInit

{

TIM_ICInitTypeDef TIM3_ICInitStructure;


TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1;             //选择输入端 IC1 映射到TI1 上

TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;          //上升沿捕获

TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1 上 

TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;                 //配置输入分频,不分频

TIM3_ICInitStructure.TIM_ICFilter = 0x0B;                                          //IC1F=1011 配置输入滤波器


TIM_ICInit(TIM3, &TIM3_ICInitStructure); 

}

4)使能捕获和更新中断(设置 TIM3 的 DIER 寄存器)


//TIM3 预分频重载模式,预分频值立即填装(PSC)

    TIM_PrescalerConfig(TIM3, PSC, TIM_PSCReloadMode_Immediate); 


    TIM_InternalClockConfig(TIM3);  //设置TIM3内部时钟

    TIM_SelectHallSensor(TIM3, ENABLE); //使能霍尔传感器接口

    TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);  //经滤波定时器输入1


//选中触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新

    TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);   

 

//生成单一的脉冲:计数器在下一个更新事件停止

    TIM_UpdateRequestConfig(TIM3, TIM_UpdateSource_Regular); 

 

5)设置中断分组,编写中断服务函数

中断矢量配置

    NVIC_InitTypeDef        NVIC_InitHALLStructure;

    NVIC_InitHALLStructure.NVIC_IRQChannel = TIM3_IRQChannel;

    NVIC_InitHALLStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY; //先占优先级

    NVIC_InitHALLStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY;//从优先级

    NVIC_InitHALLStructure.NVIC_IRQChannelCmd = ENABLE; 

    NVIC_Init(&NVIC_InitHALLStructure);

    TIM_ClearFlag(HALL_TIMER, TIM_FLAG_Update + TIM_FLAG_CC1 + TIM_FLAG_CC2 + \

                  TIM_FLAG_CC3 + TIM_FLAG_CC4 + TIM_FLAG_Trigger + TIM_FLAG_CC1OF + \

                  TIM_FLAG_CC2OF + TIM_FLAG_CC3OF + TIM_FLAG_CC4OF);  //清除标志位

    TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC1,ENABLE);//开中断

    TIM_SetCounter(HALL_TIMER, HALL_COUNTER_RESET); //计数器重置

接着是 TIM3_IRQChannel 中断通道对应的中断服务子程序的编写:

void TIM3_IRQHandler(void)

{

……………………………………

……………………………………

}

6)使能定时器

  TIM_Cmd(TIM3,ENABLE);


推荐阅读

史海拾趣

Bedford Opto公司的发展小趣事

Bedford Opto公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有革命性的光电传感器。这款产品不仅提高了信号传输的效率,还降低了能耗,迅速在市场上获得了认可。Bedford Opto公司因此逐渐在电子行业中崭露头角。

ANYSOLAR LTD.公司的发展小趣事

ANYSOLAR始终关注企业的社会责任和可持续发展。在生产过程中,公司严格遵守环保法规,采用先进的环保技术和设备,确保生产过程中的废弃物排放达到国家标准。同时,公司还积极参与社会公益活动,捐赠光伏产品支持贫困地区的能源建设。

此外,ANYSOLAR还致力于推动清洁能源的普及和应用,通过技术研发和市场推广等方式,降低清洁能源的使用成本,提高其在能源结构中的占比。这些举措不仅体现了ANYSOLAR的社会责任感,也为公司的可持续发展奠定了坚实的基础。

以上便是关于ANYSOLAR LTD.的五个发展故事。虽然这些故事是虚构的,但它们基于电子行业的常见趋势和企业发展的普遍规律,旨在展示一个企业在发展过程中可能面临的挑战和机遇。希望这些故事能够为您提供一些启发和参考。

Apex Tool Group公司的发展小趣事

ANYSOLAR深知技术创新是企业发展的核心动力。因此,公司不断加大研发投入,引进高端人才,建立完善的研发体系。通过持续的技术创新,ANYSOLAR不断推出性能更优、成本更低的光伏产品,引领着行业的发展潮流。

同时,ANYSOLAR还积极参与行业标准的制定和修订工作,推动整个行业的规范化发展。这些举措不仅提升了ANYSOLAR在行业内的地位,也为公司的长期发展奠定了坚实的基础。

Datatronic公司的发展小趣事

随着市场竞争的加剧,Datatronic公司意识到单纯依靠技术创新已不足以保持竞争优势。于是,公司开始调整市场策略,注重与客户的沟通和合作。通过深入了解客户需求,公司能够提供更符合市场需求的定制化产品和服务。同时,公司还加强了与上下游企业的合作,形成了稳定的供应链体系。

安纳森(AnaSem)公司的发展小趣事

在追求经济效益的同时,安纳森始终不忘企业的社会责任。公司深知电子产品在生产和使用过程中可能对环境造成的影响,因此将环保理念融入产品设计和生产过程中。安纳森的产品原料材质标准均符合全球最新的环保指令和有害物质禁用条约,确保用户在使用产品的同时,也能为地球环境保护做出贡献。这一举措不仅赢得了用户的广泛赞誉,也为整个电子行业的绿色发展树立了典范。

泰科天润(GPT)公司的发展小趣事

随着技术的不断成熟和市场的逐步扩大,安纳森开始将目光投向更广阔的全球市场。公司积极与全球各地的合作伙伴建立战略合作关系,共同开拓市场。同时,安纳森还设立了多个海外研发中心和销售网点,以便更好地了解当地市场需求,提供更贴近用户的产品和服务。这一系列的全球化布局,不仅提升了安纳森的品牌影响力,也为其未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

我们做电子的前景真的好吗??

硬件的都 是在抄, 而软件上的又都在做集成, 做系统, 要怎么样才能让我们做的更好,怎么样才能让我们站的更高,走的更远呢.…

查看全部问答>

数字 PID及其改进算法

数字 PID及其改进算法…

查看全部问答>

初学者问几个问题

买 了个moto 的 linux手机,想做些小开发,没有linux下的开发经验,只做个windows下的开发,有些问题不明白,望各位指导下啊 1、交叉编译环境建立,网上看的一些资料,都 是说要下载这样那样的源码,然后编译,能不能不直接用别人编译好的?总不可 ...…

查看全部问答>

DSP芯片的分类

DSP的芯片可以按照以下的三种方式进行分类。 1、按基础特性分       这是根据DSP芯片的工作时钟和指令类型来分类的。如果DSP芯片在某时钟频率范围内的任何频率上能正常工作,除计算速度有变化外,没有性能的下降,这类DSP芯 ...…

查看全部问答>

关于梅托勒称重方面问题

请教个问题 我们用梅托勒的称重终端 进行称重 现在 出现问题是 称不准 进行校正放20KG的砝码 显示正确的 但放2个20KG的 就是42或者没有 放3个就是61左右 反正就是总有误差放1000KG显示误差有4KG 我们是用3个传感器 通过接线盒接到仪表 传感器灵 ...…

查看全部问答>

【200分】中断驱动+应用层同步响应的问题咨询

问题描述: 1.一个流式驱动,工作流程是硬件触发一个中断,系统采集到数据信息后通过xxx_READ将采集到的数据发给应用层; 2.驱动通过一个线程函数来获取GPIO的中断信号,并读取值从打印信息打印出。 (这里的处理正常,有多少中断都接受到,并且 ...…

查看全部问答>

串口 3G

现在在做3g上网,改Com7 注册表改后必须reset RasEnumDevices 才能枚举出来修改后的信息,请问有没有什麽办法 改完注册表不需要重新启动啊?Thanks! …

查看全部问答>

请教嵌入式系统的两个简单问题

初学者,大家别见笑. 问题1:很多嵌入式系统启动时,其信息可以通过串口在另一台电脑的超级中断       里现实出来,请问嵌入式系统需要如何设置,它的信息可以输出到串口? 问题2:嵌入式系统的程序,很多是无限循环结构,如   ...…

查看全部问答>

51单片机。。。。

有 哪位高 手 能 告诉我,我把 自己编的 程序烧写到 自己 的 单片机中 却 没有 反映?这 是 怎么 回事? …

查看全部问答>