STM32F10xxx 正交编码器接口-官方应用笔记

[复制链接]
 楼主| jiaxinhui 发表于 2013-4-25 21:34 | 显示全部楼层 |阅读模式
在马达控制类应用中, 正交编码器可以反馈马达的转子位置及转速信号。TM32F10x系列MCU集成了正交编码器接口,增量编码器可与MCU直接连接而无需外部接口电路。该应用笔记详细介绍了STM32F10x与正交编码器的接口,并附有相应的例程,使用户可以很快地掌握其使用方法。
正交编码器.pdf (323.4 KB, 下载次数: 610)


bsz84 发表于 2013-4-26 08:26 | 显示全部楼层
谢谢楼主!
ranqingfa 发表于 2013-10-24 11:05 | 显示全部楼层
很好,在认真看……
menghe96 发表于 2014-4-22 15:07 | 显示全部楼层
有官网链接吗?  在官网哪里可以找到类似的例程资料啊? 谢谢
tianli1980 发表于 2014-4-22 16:50 | 显示全部楼层
搭车请教:编码器的A B 可以连接到 TIM 的 TI1 TI2 上 ,编码器的零点信号 一般是连到外部中断 里边清除CNT  还是连接到 TIM 在捕获中断清除CNT  个人感觉不出区别来?!
qqq_147258 发表于 2014-5-9 16:50 | 显示全部楼层
各位,如果想要检测编码器翻转时的计数值怎么处理?
有对应的中断吗?
804431966 发表于 2015-3-8 22:31 | 显示全部楼层
谢谢
qq84395064 发表于 2016-3-7 15:47 | 显示全部楼层
/**************************************************************************************
********???ìê?è??ì2a*********°′?üê?è?
TIM3 ó?à′?ì2a???ì
PA.6-> RUN-A2         TIM3-CH1//        
PA.7-> RUN-B2         TIM3-CH2//
PB.0-> RUN-A1         TIM3-CH3//
PB.1-> RUN-B1         TIM3-CH4//
?y??±à???÷ò23???á?ê?±à???÷
****************************************************************************************/
#define ENCODER_TIMER   TIM3  // Encoder unit connected to TIM3
#define ENCODER_PPR           (u16)(100)   // number of pulses per revolution
#define SPEED_BUFFER_SIZE 8

#define COUNTER_RESET   (u16)0
#define ICx_FILTER      (u8) 6 // 6<-> 670nsec

#define TIMx_PRE_EMPTION_PRIORITY 1
#define TIMx_SUB_PRIORITY 0

#define ENCODER_TIM_PERIOD 0xffff//???????65536-1
#define MAX_COUNT          10000//10000???1ms?????10000???


void  EncodingDisk_Init(void)
{           

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_ICInitTypeDef TIM_ICInitStructure;
  /* Encoder unit connected to TIM1, 4X mode */   
  GPIO_InitTypeDef GPIO_InitStructure;
  //NVIC_InitTypeDef NVIC_InitStructure;
  /* TIM1 clock source enable */
  RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//
  /* Enable GPIOA, clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//??GPIOA??
  GPIO_StructInit(&GPIO_InitStructure);
  /* Configure PA.06,07 as encoder input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//PA8 PA9????
  GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Enable the TIM3 Update Interrupt */
//        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY;
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);
  /* Timer configuration in Encoder mode */
  TIM_DeInit(ENCODER_TIMER);
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Prescaler = 0x0;  // No prescaling //??????????0,???
  //TIM_TimeBaseStructure.TIM_Period = (4*ENCODER_PPR)-1;  //????????
  TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD-1;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//?????? T_dts = T_ck_int
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //TIM????
  TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure);
  TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//???????3
  TIM_ICStructInit(&TIM_ICInitStructure);
  TIM_ICInitStructure.TIM_ICFilter =ICx_FILTER;//?????????

  TIM_ICInit(ENCODER_TIMER, &TIM_ICInitStructure);
  // Clear all pending interrupts
  TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);//??TIM1??????
  TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE);
  //ENC_Clear_Speed_Buffer();
  //Reset counter
  TIM3->CNT = 0;
  //CurrentCount = TIM1->CNT;
  TIM_Cmd(ENCODER_TIMER, ENABLE);
// System.Device.Encoder.Enc_GetCount = Enc_GetCount;

}
s16 Enc_GetCount(void)
{
    static  u16   lastCount = 0;
    u16  curCount = ENCODER_TIMER->CNT;//?????
    s32 dAngle = curCount - lastCount;
    if(dAngle >= MAX_COUNT)
    {
      dAngle -= ENCODER_TIM_PERIOD;
    }
    else if(dAngle < -MAX_COUNT)
    {
      dAngle += ENCODER_TIM_PERIOD;
    }
    lastCount = curCount;
    return (s16)dAngle;
}



我的程序死活不行,请楼主帮忙分析下,谢谢。
zhangxuzhaodan 发表于 2016-9-6 16:27 | 显示全部楼层
能够把你的参考例程给我看看,很多都不懂,谢谢了,QQ624323244
Double-明 发表于 2017-4-5 09:57 | 显示全部楼层
qq84395064 发表于 2016-3-7 15:47
/**************************************************************************************
********??? ...

你的编码器程序可以用了吗?你用的是什么芯片啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:点击进入—》我的淘宝店 数据采集板 RS485 CAN 总线通讯评估套件

72

主题

922

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部