打印

香主能帮忙看看吗?---正交编码的问题

[复制链接]
2854|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fish2bear|  楼主 | 2008-11-16 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是KEIL,代码基本是抄自正交编码接口应用笔记,代码中只用了一个TIM3,没有开任何中断。

运行KEIL的Simulator (没有设置断点), 并在端口PA6(TIM3_CH1)和PA7(TIM3_CH2)上按如下顺序输入信号模拟正交编码器
 PA6  1  1  0  0  1  1  0  0
 PA7  0  1  1  0  0  1  1  0
或者逆序:
 PA6  0  1  1  0  0  1  1  0 
 PA7  1  1  0  0  1  1  0  0 
都没有得到TIM3计数器值(程序中是eCounter )的更新,但如果在程序中加入读取PA6和PA7的代码,是可以看到PA6和PA7是按上述顺序更新的。
大家帮忙看看是哪里出了问题。先谢谢了!

附注:
STM32F10xxx 正交编码器接口应用笔记链接如下 http://www.stmicroelectronics.com.cn/stonline/mcu/images/STM32F10xxx_Encoder_AN(CH).pdf

http://www.stmicroelectronics.com.cn/stonline/mcu/images/STM32F10xxx_Encoder_AN(CH).zip  


俺的程序:

int main(void)
{

#ifdef DEBUG
  debug();
#endif

 
  /* Configure the system clocks */
  RCC_Configuration();
    
  /* NVIC Configuration */
  NVIC_Configuration();

  ENC_Init();

  eCounter = TIM3->CNT;
  eTemp =0;
  while(1)
  {
   eTemp++;
   if (eTemp==100000)
   {
   eTemp=0;
   eCounter = TIM3->CNT;
   //eCounter = TIM_GetCounter(TIM3);
   }
  }
}


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|RCC_APB2Periph_AFIO, 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_Init(GPIOA, &GPIO_InitStructure);
  
  /* Enable the TIM3 Update Interrupt */
 // NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;
  //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 // NVIC_Init(&NVIC_InitStructure);

  /* Timer configuration in Encoder mode */
  // TIM_DeInit(TIM3);
  //TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  
  TIM_TimeBaseStructure.TIM_Prescaler = 0x0;  // No prescaling 
  TIM_TimeBaseStructure.TIM_Period = (4*125)-1;  
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
 
  TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, 
                             TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
  TIM_ICStructInit(&TIM_ICInitStructure);
  TIM_ICInitStructure.TIM_ICFilter = 6;
  TIM_ICInit(TIM3, &TIM_ICInitStructure);
  
  // Clear all pending interrupts
  //TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  //TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  //Reset counter
  //TIM3->CNT = 0;
  
  //ENC_Clear_Speed_Buffer();
  
  TIM_Cmd(TIM3, ENABLE);  
}
沙发
fish2bear|  楼主 | 2008-11-17 15:12 | 只看该作者

香主帮帮忙

自己顶一下

使用特权

评论回复
板凳
fish2bear|  楼主 | 2008-11-18 10:41 | 只看该作者

大家帮帮忙啊

没有办法  只有自己顶

使用特权

评论回复
地板
ST_ARM| | 2008-11-18 11:02 | 只看该作者

最好在板子上运行一下

软件模拟很难说。

使用特权

评论回复
5
fish2bear|  楼主 | 2008-11-18 13:24 | 只看该作者

非常谢谢

撇开软件模拟, 你觉得代码有问题吗?
或者是有些设置没有进行正确的设定?

使用特权

评论回复
6
风呼呼| | 2017-7-7 20:08 | 只看该作者
楼主大大,我现在也在这一块碰到了问题,按照网上的配置,计数器没有值。你可以将解决后的代码分享一下吗?也可以发我邮箱1450188108@qq.com,谢谢!

使用特权

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

本版积分规则

8

主题

24

帖子

0

粉丝