智能车制作

标题: 求助!!LPTMR编码器测速 计数为零 [打印本页]

作者: LGC    时间: 2017-1-11 13:43
标题: 求助!!LPTMR编码器测速 计数为零
使用LPTMR进行编码器测速,寄存器的计数值显示为零,测速函数是写在中断里的,到底是软件的问题还是硬件的问题?
  1. #include "include.h"


  2. /*************************
  3. 设置系统的全局变量
  4. *************************/
  5. extern  u8  LPT_INT_count ;                    //LPT 脉冲计数器
  6. extern u8 TIME0flag_5ms   ;                    //PTI0 5ms标志位
  7. extern u8 TIME0flag_10ms  ;                    //PTI0 10ms标志位
  8. extern u8 TIME0flag_15ms  ;                    //PTI0 15ms标志位
  9. extern u8 TIME0flag_20ms  ;                    //PTI0 20ms标志位
  10. extern u8 TIME0flag_80ms ;                     //PTI0 80ms标志位   

  11. s16 count = 0,RingtSpeedC=0,LeftSpeedC=0 ;
  12. s16  Atemp[6];

  13. u8 SendData[15]={0xff,0xff,0};

  14. extern u8 LPT_INT_count;

  15. #define LIN_COUT 100

  16. void main()
  17. {
  18.    u8 i;
  19.     DisableInterrupts;                             //禁止总中断
  20.   //自行添加代码
  21.     uart_init(UART0,115200);
  22.    
  23. //    FTM_PWM_init(FTM0 , CH0, 8000,0);       //电机占空比设置初始化    占空比 = duty /(MOD +1 ) ;FTM_CnV_REG(FTMx[ftmn], ch) = cv;
  24. //    FTM_PWM_init(FTM0 , CH1, 8000,0);  
  25.     FTM_PWM_init(FTM0 , CH2, 8000,0);       //电机占空比设置初始化    占空比 = duty /(MOD +1 ) ;FTM_CnV_REG(FTMx[ftmn], ch) = cv;
  26.     FTM_PWM_init(FTM0 , CH3, 8000,0);
  27.    
  28.     lptmr_counter_init(LPT0_ALT2, LIN_COUT, 2, LPT_Rising)  ;   //初始化脉冲计数器 ,PTC5输入捕获脚,LIN_cout =100,预处理为2,上升沿捕获
  29.     pit_init_ms(PIT0, 5);                            //初始化PIT0,定时时间为: 5ms
  30.    
  31.     gpio_init (PORTA , 16, GPO,HIGH);              ///LED闪烁
  32.    
  33.     EnableInterrupts;                                    //开总中断
  34.    
  35.     while(1)
  36.     {
  37.       
  38.       
  39.       /*********************
  40.       10ms程序执行代码段
  41.       *********************/
  42.       if(TIME0flag_10ms == 1)
  43.       {
  44.         TIME0flag_10ms = 0 ;
  45.         count = LPTMR0_CNR;                                                     //保存脉冲计数器计算值
  46.         lptmr_counter_clean();                                                  //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
  47.         count = LPT_INT_count * LIN_COUT +  count;                              //间隔10ms的脉冲次数
  48.         
  49.         Atemp[0]=LPT_INT_count;
  50.         Atemp[1]=count;
  51.         
  52.         LPT_INT_count = 0;                                                      //清空LPT中断次数                             
  53.                  
  54.          for(i=0;i<6;i++)
  55.          {
  56.           SendData[i*2+2]=(u8)(Atemp[i]>>8);
  57.           SendData[i*2+3]=(u8)Atemp[i];      
  58.          }
  59.       }  
  60.          
  61.        uart_sendN (UART0, SendData, 15);
  62.          
  63. //         FTM_PWM_Duty(FTM0 , CH0,0);
  64. //         FTM_PWM_Duty(FTM0 , CH1,20);
  65.          FTM_PWM_Duty(FTM0 , CH2,0);
  66.          FTM_PWM_Duty(FTM0 , CH3,20);

  67.       delayms(50);
  68.       PTA16_OUT=~PTA16_OUT;
  69.     }
  70. }
复制代码


作者: Ark    时间: 2017-1-11 14:40
我遇到过,当时是时钟问题
作者: LGC    时间: 2017-1-11 14:43
Ark 发表于 2017-1-11 14:40
我遇到过,当时是时钟问题

是哪个时钟出了问题?

作者: Ark    时间: 2017-1-12 14:09
LGC 发表于 2017-1-11 14:43
是哪个时钟出了问题?

MCG模块里面对PLL的初始化,用的库函数和晶振频率不符,我当时是这个问题

作者: zhang迪    时间: 2017-4-16 18:25
楼主 最后是怎么解决的





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2