打印

STM32的定时器作为编码器的问题

[复制链接]
8873|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nieyaohua|  楼主 | 2011-10-24 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近正在用STM32的定时器进行编码器的配置进行脉冲的读取,在网上查很多资料,我配置后通过软件仿真但总是没有反应,计数器的值没有什么变化,求高人指点迷津。
配置程序如下:
#include "stm32f10x_lib.h"
#define ENCODER_TIMER   TIM3  
#define ENCODER_PPR           (u16)(500)   
#define ENCODER_TIM_PERIOD 2000   
#define MAX_COUNT 2300   
#define SPEED_SAMPLING_TIME 4000
#define COUNTER_RESET   (u16)0
#define ICx_FILTER      (u8) 6
#define TIMx_PRE_EMPTION_PRIORITY 1
#define TIMx_SUB_PRIORITY 0
#define SPEED_SAMPLING_FREQ ((u16)(2000/(SPEED_SAMPLING_TIME+1)))
GPIO_InitTypeDef GPIO_InitStructure;
ErrorStatus HSEStartUpStatus;
volatile s32  CurrentCount  ;
void RCC_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 nCount);
void GPIO_Configuration(void);
void ENC_Init(void)                  
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_ICInitTypeDef TIM_ICInitStructure;
   
/* Encoder unit connected to TIM3, 4X mode */     
  GPIO_InitTypeDef GPIO_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
   
  /* TIM3 clock source enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  /* Enable GPIOA, clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
   
  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;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
  /* Enable the TIM3 Update Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;
  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  
  TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD;   
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
  TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure);
  
//TIM_EncoderMode:触发源 TIM_ IC1Polarity:TI1 极性  TIM_ IC2Polarity:TI2 极性  
  TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); //TIMx:x 可以是 2,3 或者 4,来选择 TIM 外设  
  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);
  TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE);
  //Reset counter
  TIM3->CNT = COUNTER_RESET;
   
//  ENC_Clear_Speed_Buffer();
   
  TIM_Cmd(ENCODER_TIMER, ENABLE);   
   
}

int main(void)
{
  #ifdef DEBUG
  debug();
  #endif
  RCC_Configuration();
  NVIC_Configuration();
  GPIO_Configuration();
  ENC_Init() ;
  while(1)
  {
    CurrentCount= TIM_GetCounter(TIM3);
  }
  
}
沙发
香水城| | 2011-10-24 16:01 | 只看该作者
你能确认软件仿真的功能有效吗?

使用特权

评论回复
板凳
nieyaohua|  楼主 | 2011-10-24 16:02 | 只看该作者
应该有效吧,这样不是能看的更清楚吗?这个你以前是不是做过,能不能给点指导?

使用特权

评论回复
地板
nieyaohua|  楼主 | 2011-10-24 16:03 | 只看该作者
应该有效吧,这样不是能看的更清楚吗?这个你以前是不是做过,能不能给点指导?

使用特权

评论回复
5
香水城| | 2011-10-24 16:19 | 只看该作者
我没有做过。我们也从来没有人用过软件仿真。你最好直接在芯片上测试验证。

使用特权

评论回复
6
香水城| | 2011-10-24 16:24 | 只看该作者
给你个文档和例程看看吧。

【应用笔记】STM32F10xxx正交编码器接口.pdf

323.4 KB

【应用笔记】STM32F10xxx正交编码器接口例程.zip

871.28 KB

使用特权

评论回复
7
oldhuang| | 2012-11-12 22:31 | 只看该作者
我需要这个例程...

使用特权

评论回复
8
oldhuang| | 2012-11-12 22:32 | 只看该作者
我需要这个例程...

使用特权

评论回复
9
wangyong123846| | 2012-11-30 15:36 | 只看该作者
这资料好

使用特权

评论回复
10
文峰聊书斋| | 2013-3-15 19:07 | 只看该作者
如何做实验呀,没有伺服电机的编码器反馈到STM32的TIM CH1 CH2上,没法做实验验证我写的定时器编码器模式接口是否是正确的?

使用特权

评论回复
11
cjhk| | 2013-3-15 21:24 | 只看该作者
好资料  多看例程   多模仿  这样才能学到很多东西   呵呵   这个主要还是看例程   

使用特权

评论回复
12
cjhk| | 2013-3-15 21:24 | 只看该作者
谢谢版主的资料  谢谢了  版主   我顶你  呵呵

使用特权

评论回复
13
ABCDELF| | 2013-4-11 15:52 | 只看该作者
这个东西到官网怎么找啊

使用特权

评论回复
14
ABCDELF| | 2013-4-11 15:54 | 只看该作者
香水城 发表于 2011-10-24 16:24
给你个文档和例程看看吧。

像stm32正交编码器的应用笔记到官网怎么下载
我找了几个点都没点头绪

使用特权

评论回复
15
hsz9191| | 2013-4-24 14:25 | 只看该作者
还是香主给力,顶起

使用特权

评论回复
16
cjhk| | 2013-4-24 19:31 | 只看该作者
谢谢了   香主   谢谢你的共享资料   谢谢

使用特权

评论回复
17
papermx| | 2014-4-18 16:33 | 只看该作者
请问下如果不是增量式的编码器,应该如何连接呢?买的是旋转编码器,计脉冲的原理是一样的吗?

使用特权

评论回复
18
cxq88998| | 2014-6-16 20:46 | 只看该作者
旋转编码器,计脉冲的原理是一样的吗?

使用特权

评论回复
19
GUN_xing| | 2015-5-11 16:27 | 只看该作者
。。。。为啥这资料下载不了?

使用特权

评论回复
20
sky9218| | 2020-12-13 15:51 | 只看该作者
香水城 发表于 2011-10-24 16:24
给你个文档和例程看看吧。

找到了。谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝