注册 登录
查看: 804|回复: 11

编码器计数一直为零

[复制链接]
发表于 2014-6-26 22:22:04 | 显示全部楼层 |阅读模式
我用山外的例程可以正确计数,但是移植到直立中级篇的例程里面就无法计数,一直为零。不知道什么原因,搞了好久还是没解决,只好上论坛来请教高人。附上我的程序
  1. #include "common.h"
  2. #include "include.h"


  3. extern float Gyro_Now,g_fCarAngle;

  4. extern float OutData[4];                              //SCI示波器参数
  5. extern float Gyro_Now,angle_offset_vertical;          //陀螺仪转化后的角速度,转化后的加速度角度
  6. extern float g_fCarAngle,g_fGyroscopeAngleIntegral;   //融合后的角度
  7. extern volatile int     MMA7361 ,ENC03,real_angle;    //加速度计AD ,陀螺仪AD,模块输出的角度
  8. uint16 g_n1MSEventCount=0;

  9. /*!
  10. *  @brief      PIT0中断服务函数
  11. *  @since      v5.0
  12. */
  13. void PIT_IRQHandler(void)
  14. {
  15.     if(PIT_TFLG(PIT0) == 1 )        //判断是否 PIT0 进入中断
  16.     {
  17.            g_n1MSEventCount ++;
  18.      if(g_n1MSEventCount>=5)
  19.       {
  20.           g_n1MSEventCount=0;
  21.           GetMotorPulse();

  22.       }                          
  23.           else if(g_n1MSEventCount==2)
  24.       {
  25.      // AD_Calculate();                             //AD
  26.     //  Speed_Calculate(g_fCarAngle,Gyro_Now);      //速度计算
  27.       }
  28.       PIT_Flag_Clear(PIT0);                       //清中断标志位
  29.             led_turn(LED0);  //闪烁 LED0
  30.     }
  31. }

  32. /*!
  33. *  @brief      main函数
  34. *  @since      v5.0
  35. *  @note       山外 PIT 定时中断实验
  36. */
  37. void main()
  38. {
  39.     DisableInterrupts;//禁止总中断

  40.     // 在control.h定义了相关宏
  41.     adc_init (ZOUT);          //MMA7361 Z轴
  42.     adc_init (Gyro1);        // ENC03角速度
  43.    // adc_init (Ang);          //角度

  44.     uart_init (UART_PORT, UART_BAUD);
  45.     //初始化 PWM 输出
  46.     //TPM 的管脚 可在  fire_port_cfg.h
  47.     //宏定义 TPM0_PRECISON   改为  1000u
  48.     //PWM数值反转。
  49.    tpm_pwm_init(MOTOR_TPM, MOTOR_CH1,1000,500);
  50.     tpm_pwm_init(MOTOR_TPM, MOTOR_CH2,1000,500);
  51.     tpm_pwm_init(MOTOR_TPM, MOTOR_CH3,1000,500);
  52.     tpm_pwm_init(MOTOR_TPM, MOTOR_CH4,1000,500);
  53.     //lptmr_pulse_init  (LPT0_ALT2, 65535, LPT_Rising);
  54.      tpm_pulse_init(TPM2,TPM_CLKIN0,TPM_PS_1); //初始化 TPM2 为脉冲累加,输入管脚为 TPM_CLKIN0_PIN ,分频系数为 1
  55.    //   tpm_pulse_init(TPM1,TPM_CLKIN0,TPM_PS_1); //初始化 TPM2 为脉冲累加,输入管脚为 TPM_CLKIN0_PIN ,分频系数为 1
  56.     //tpm_pwm_duty(MOTOR_TPM,MOTOR_CH3,500);

  57.     //开启使能端
  58.     gpio_init(MOTOR_EN1,GPO,0);
  59.     gpio_init(MOTOR_EN2,GPO,0);
  60.     gpio_init(MOTOR_EN3,GPO,0);
  61.     gpio_init(MOTOR_EN4,GPO,0);
  62.   //  gpio_init(PTE17,GPO,1);

  63.     /*
  64.     //3 左 反转
  65.     //5 左 正转
  66.     //4 右 正转
  67.     //6 右 反转
  68.      */
  69.     led_init(LED0);                                         //初始化LED0,PIT0中断用到LED0

  70.     pit_init_ms(PIT0, 1);                                //初始化PIT0,定时时间为: 5ms
  71.     set_vector_handler(PIT_VECTORn ,PIT_IRQHandler);      //设置PIT0的中断复位函数为 PIT0_IRQHandler
  72.     enable_irq (PIT_IRQn);                                 //使能PIT0中断
  73.     EnableInterrupts;//中断允许
  74.     while(1)
  75.    {
  76.         #if 0
  77.         OutData[0] = ENC03;
  78.         OutData[1] = MMA7361;//Gyro_Now;
  79.         OutData[2] = angle_offset_vertical ;
  80.         OutData[3] = g_fCarAngle;
  81.         OutPut_Data();
  82.         #endif
  83.            

  84.    }

  85. }
回复

使用道具 举报

 楼主| 发表于 2014-6-26 22:23:43 | 显示全部楼层
  1. void GetMotorPulse(void)                                  //获取FTM 正交解码 的脉冲数(负数表示反方向)
  2. {
  3.       valL=tpm_pulse_get(TPM2);                         //保存脉冲计数器计算值
  4.    //  valR = tpm_pulse_get(TPM1);                         //保存脉冲计数器计算值
  5.      // tpm_pulse_clean(TPM1);
  6.     //   tpm_pulse_clean(TPM2);
  7.    //lptmr_pulse_clean();
  8.     //  pit_delay_ms(PIT1,5);

  9.        g_nLeftMotorPulseSigma+= valL;
  10.        g_nRightMotorPulseSigma+=valR;
  11. #if 1
  12.         printf("valL=%d\n",valL);
  13.         printf("valR=%d\n",valR);
  14. #endif
  15. }
  16. //***********************************
串口读出来的数一直是零
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-26 22:25:16 | 显示全部楼层
我按照kl26BUG的帖子 bug也修复过了
回复 支持 反对

使用道具 举报

发表于 2014-6-26 23:41:50 | 显示全部楼层
我们有提供中级篇的KL26代码,有网友测过可用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-27 09:26:12 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-26 23:41
我们有提供中级篇的KL26代码,有网友测过可用的

恩  我就是奇怪你们的计数例程我也可以正常计数,为什么一直到中级篇里串口发出的计数就一直为零?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-27 09:59:18 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-26 23:41
我们有提供中级篇的KL26代码,有网友测过可用的

我刚刚翻了下以前的帖子,发现有个帖子和我的情况一样,希望你看一下是不是你们的BUG?
http://www.vcan123.com/forum.php ... &extra=page%3D7
回复 支持 反对

使用道具 举报

发表于 2014-6-27 10:25:54 | 显示全部楼层
浮躁。 发表于 2014-6-27 09:59
我刚刚翻了下以前的帖子,发现有个帖子和我的情况一样,希望你看一下是不是你们的BUG?
http://www.chux ...

好的,等下测一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-27 18:44:35 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-27 10:25
好的,等下测一下

请问是什么情况
回复 支持 反对

使用道具 举报

发表于 2015-2-12 00:45:12 | 显示全部楼层
不知道你的问题解决没,请教一下,我的也是类似问题必须TPM0初始化后才能脉冲计数,我用TPM0的通道0和1作为电机pwm,刚开始是输出相同pwm没有发现问题,现在两轮给不同pwm了,计数就成有问题了,10ms pit中断,100线编码器显示0,1,0,1清计数器的函数去掉后记的脉冲值根本就不对。。现在很急求帮助啊!
回复 支持 反对

使用道具 举报

发表于 2015-6-8 15:40:38 | 显示全部楼层

请问这个问题解决了吗?我也遇到同样的问题,求帮助
回复 支持 反对

使用道具 举报

发表于 2015-6-8 20:41:27 | 显示全部楼层
z3214456cc 发表于 2015-2-12 00:45
不知道你的问题解决没,请教一下,我的也是类似问题必须TPM0初始化后才能脉冲计数,我用TPM0的通道0和1作为 ...

这个旧版本的库是有这bug,新版本的没这问题。
回复 支持 反对

使用道具 举报

发表于 2016-1-19 19:57:14 | 显示全部楼层
上拉电阻。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部