STM32伺服编码器接口

2020-06-29来源: eefocus关键字:STM32  伺服编码器接口  高级定时器

在STM32的高级定时器和一般定时器中有Encoder interface mode(编码器接口),TI1和TI2分别对应TIM_CH1 和TIM_CH2 通道。


一、计数规则如下:

表55的是编码器不同的信号下计数方向。

这里写图片描述

1.仅在TI1边沿计数:上升沿触发时,若对应TI2为低电平,则计数器向下计数;对应为高电平,则向上计数。如图2.在○1和○2处,TI1的上升沿对应TI2为低电平,所以计数器向上计数;同样的,在○3处则相反。


2.在TI1和TI2边沿计数:若TI1、TI2上升沿捕捉时,TI1上升边沿对应TI2位于低电平,则向上计数;TI2上升边沿对应TI1高电平,向上计数,所以为双倍。

这里写图片描述

二、功能配置

1.设置I/O口(启动时钟,工作在定时器模式下,无上拉)


2.配置定时器(选择编码器接口模式)


void Encoder_Config()

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_ICInitTypeDef TIM_ICInitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);

GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

TIM_DeInit(TIM1);

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //单倍模式

TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_Period = 500*4;  //计数周期

TIM_TimeBaseStructure.TIM_Prescaler = 0; //时钟分频

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

TIM_ICStructInit(&TIM_ICInitStructure);

TIM_ICInitStructure.TIM_ICFilter = 0; //滤波,0表示不滤波

TIM_ICInit(TIM1,&TIM_ICInitStructure);

TIM_EncoderInterfaceConfig(TIM1,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);

//设置定时器工作在编码器接口模式。

TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);

TIM_ClearITPendingBit(TIM1,TIM_IT_Update);

TIM_ClearFlag(TIM1,TIM_FLAG_Update);

TIM_SetCounter(TIM1,0); //设置计数初值

TIM_Cmd(TIM1,ENABLE);

}


三 注意事项


配置硬件寄存器时,首先需要使能相应的时钟。顺序不能颠倒,否则寄存器设置无效。

伺服编码器接口,在单相时,每相的电平由另外一相决定,AB相同时捕捉时,电平由彼此决定。

编码器在AB相捕捉时,禁止使用双边沿触发。手册说明如下:

    Manual P358

    

    11: non-inverted/both edges

    

    The circuit is sensitive to both TIxFP1 rising and falling edges (capture or trigger operations

     in reset, external clock or trigger mode), TIxFP1 is not inverted (trigger operation in gated mode).

     This configuration must not be used in encoder mode.


4 使用TI1和TI2时,需要将TI1CN和TI2CN(通道1和2的互补通道)下拉保持为低电平。详见手册。

关键字:STM32  伺服编码器接口  高级定时器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501496.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:2.TouchGFX界面应用之Hello world
下一篇:绝对值编码器数据接收的问题

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

关于STM32CubeMx printf重定向,及报错。"FILE" is undefined
PFP *//* USER CODE BEGIN 0 */PUTCHAR_PROTOTYPE{    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);    return ch;}/* USER CODE END 0 */ 这样写会报错"FILE" is undefined  添加头文件 stdio.h即可
发表于 2020-06-06
【STM32】keil MDK下重定向printf到串口(基于STM32CubeMX)
概述在keil MDK环境下重定向printf与keil C51不同,由于本人使用了STM32CubeMX生成工程模板,HAL_USART_Transmit函数即是模板里串口输出的函数。由于printf最终是调用fputc输出数据,fputc是一个弱引用(weak)函数,覆写即可重定向printf。代码清单extern USART_HandleTypeDef husart1;int fputc(int ch, FILE *f) {    HAL_USART_Transmit(&husart1, (uint8_t *)&ch, 1, 0xFFFF);    return ch
发表于 2020-06-06
STM32CubeMx启动串口调试功能Printf调试
## 概述项目中往往需要调试信息,调试stm32的时候,需要标准库里面的printf函数。在keil MDK环境下重定向printf与keil C51不同,由于本人使用了STM32CubeMX生成工程模板,HAL_USART_Transmit函数即是模板里串口输出的函数。由于printf最终是调用fputc输出数据,fputc是一个弱引用(weak)函数,覆写即可重定向printf。代码清单/* USER CODE BEGIN Includes */#include "FreeRTOS.h"#include "task.h"#include "queue.h"
发表于 2020-06-06
STM32CubeMx启动串口调试功能Printf调试
STM32F1xx HAL库中文版——USART篇
38.1 UART Firmware driver registers structures //串口固件驱动寄存器结构38.1.1 UART_InitTypeDefUART_InitTypeDef被定义在stm32f1xx_hal_uart.h头文件中数据字段:• uint32_t BaudRate 波特率• uint32_t WordLength 字长• uint32_t StopBits 停止位• uint32_t Parity 奇偶校验位• uint32_t Mode 模式• uint32_t HwFlowCtl 硬件流控制• uint32_t OverSampling 过采样字段的文档:• uint32
发表于 2020-06-06
Stm32-输入捕获
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。STM32 的输入捕获,简单地说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)中。1. 相关寄存器介绍1) 捕获/比较模式寄存器 (TIMx_CCMRx) 当在输入捕获模式下使用的时候,对应上图的第二行描述,从图中可以看出,TIMx_CCMR1 明显是针对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八位[15:8]则用
发表于 2020-06-06
Stm32-输入捕获
STM32库函数和寄存器的区别
库函数版和寄存器版的系统时钟设置的区别:**1.**库函数的目的是让用户应用的,而寄存器更加原始库函数的系统时钟是默认设置的,且放在启动文件里。而寄存器版的系统时钟是Stm32_Clock_Init(336,8,2,7);.**2.**库函数的快捷的,但不是每个芯片都有的;寄存器是复杂的,但是每个芯片厂商都有提供系统的寄存器设置信息。分别打开库函数和寄存器版的I/O口设置:库函数:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);gotoh后先通过assert_param();函数检查格式是否正确同时只要是ENABLE,RCC->AHB1ENR
发表于 2020-06-06
STM32库函数和寄存器的区别
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved