智能车制作

标题: 编码器采集程序 [打印本页]

作者: sunzhaoxing2012    时间: 2013-1-26 17:30
标题: 编码器采集程序
今天刚把编码器采集所需的PIT和TIM模块搞定,然后果断的分享了
/***************************************************************
  总线频率88M,PWM频率250HZ,定时器每0.1s去查看脉冲累加器的值
  然后将脉冲数反映到端口B的LED上。
***************************************************************/
#include <hidef.h>     
#include "derivative.h"     

void PA_init() {
     
    PACTL_PAEN=0;                      // 禁止脉冲累加功能
   
    PACTL_PAMOD=0;                     // 事件计数模式
    PACTL_PEDGE=0;                     // 下降沿触发计数
    PACTL_PAOVI=0;                     // 脉冲数据寄存器溢出中断关闭
    PACTL_PAI=0;                       // 脉冲输入中断关闭
    PACNT=0x0000;                      // 脉冲数据寄存器清零
   
    TCTL3|=0X40;                       // 通道7上升沿捕捉
    TIE=0X00;                          // 所有的通道寄存器没有使能
    TIOS_IOS7=0;                       // 通道7为输入捕捉
   
    PACTL_PAEN=1;                      // 脉冲计数允许
}
void SetBusCLK_88M(void)
{   
    CLKSEL=0X00;                    // disengage PLL to system
    PLLCTL_PLLON=1;                   // turn on PLL
    SYNR =0xc0 | 0x0a;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;                      // pllclock=2*osc*(1+SYNR)/(1+REFDV)=176MHz;
    _asm(nop);                         // BUS CLOCK=88M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          // when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;                 // engage PLL to system;
}

void PIT_init() {
  
    PITCFLMT=0X00;                     // 禁用PIT模块
    PITCE|=0X01;                       // 定时器0通道使能位置1
    PITMUX_PMUX0=0;                    // 连接微定时器0与定时器0
    PITFLT|=0X01;                      // 定时器0强制装载位置1
      
    PITMTLD0=219;                      // 微定时器0装载寄存器    220
    PITLD0=39999;                      // 定时器0装载寄存器      40000
                                       // 220*40000/88000000=0.1s
    PITINTE|=0X01;                     // 允许定时器0中断使能
    PITTF|=0X01;                       // 定时器0中断标志位清零
     
    PITCFLMT=0X80;                     // 使能PIT模块
         
}
void PWM_init() {
    PWME_PWME5 = 0;                    // 先禁止各通道输出
    PWMCTL_CON45 = 1;                  // 通道45级联成16位PWM
   
    PWMPRCLK_PCKA = 2;                 // 预分频系数为A 2,总线频率,即22MHZ
    PWMSCLA = 1;                       // SA_CLK = A_CLK / (2*1) ==11MHz
    PWMCLK_PCLK5 = 1;                  // 通道选  clock SA做时钟源
                                             
    PWMCNT45=0;                        // 45计数器清零
    PWMCAE_CAE5=0;                     // 选择输出模式为左对齐输出模式   
    PWMPOL_PPOL5=1;                    // 先输出高电平,计数到DTY时,反转电平
   
    PWMPER45=44000;                    // PWM=11M/44000=250HZ,周期为4ms
    PWMDTY45=16500;                    // 初值设定为90度
     
    PWME_PWME5 = 1;
         
}
void main(void) {
   SetBusCLK_88M();                     // 时钟初始化
   PA_init();                           // 脉冲累加捕捉初始化
   PIT_init();                          // 定时器0初始化
   PWM_init();                          // PWM初始化
   DDRB=0XFF;                           //端口初始化
   EnableInterrupts;                    //开总中断

  for(;;) {  
  }
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0_ISR(void){   
  PACTL_PAEN=0;                          // 输入脉冲计数禁止
  PORTB=PACNT;
  PACNT=0X0000;                          // 脉冲数据寄存器清零
  PACTL_PAEN=1;                          // 输入计数允许
  PITTF_PTF0=1;                          // 清除PIT0的标记
}
#pragma CODE_SEG DEFUALT


作者: 眼角宣泄悲伤    时间: 2013-1-26 19:55

作者: 海到无边    时间: 2013-1-29 21:02
果断顶起来
作者: 海到无边    时间: 2013-1-29 21:04
楼主,总线频率能达到88MHz吗,貌似最多64MHz吧。。。
作者: sunzhaoxing2012    时间: 2013-1-29 22:39
datasheet上PLL最高频率是120M,也就是官方推荐的最高稳定频率是60M,可通过设定SYNR寄存器的值,是可以达到88M,甚至是96M的,我曾在88M下跑过这些程序,挺稳定的,96M就不行了。
作者: 云雾高速公路    时间: 2013-3-10 10:58
很好,顶一个
作者: camphor    时间: 2013-3-14 19:40

作者: 天使降临夜    时间: 2013-3-26 18:42
官方推荐的最高稳定频率是60M,,,我想问一下大神,,你们这些知识从官网哪看到的啊,,为什么我找不到啊,,程门立雪!
作者: sunzhaoxing2012    时间: 2013-3-26 19:20
买龙丘的最小系统,人家送的
作者: jianpeng    时间: 2013-3-26 21:35
楼主太无私了   多谢:D:D
作者: shy20    时间: 2013-4-1 10:28
很好,顶一个
作者: 天亮说晚安snow    时间: 2013-4-20 19:29
敢问大神用的什么软件。。。CodeWarrior没有s128的。。
作者: sunzhaoxing2012    时间: 2013-4-20 20:28
天亮说晚安snow 发表于 2013-4-20 19:29
敢问大神用的什么软件。。。CodeWarrior没有s128的。。

cw5.1
作者: 天亮说晚安snow    时间: 2013-4-20 20:32
sunzhaoxing2012 发表于 2013-4-20 20:28
cw5.1

...10.0是没有的,奇怪了。。。
作者: sunzhaoxing2012    时间: 2013-4-20 20:37
10.0就是没有,感觉软件大了用起来也麻烦,精悍才是王道

作者: 林的0922    时间: 2013-5-12 11:04
如何知道计了多少个数
作者: aivey3536    时间: 2013-5-17 23:40
谢楼主

作者: 去年春恨    时间: 2013-5-17 23:48
顶下
作者: 顺⑦.zì繎.    时间: 2013-6-10 21:23
楼主,怎样知道计了多少个数?
作者: sunzhaoxing2012    时间: 2013-6-11 14:53
用液晶显示,用上位机,用数码管都行

作者: ↑♂§宇☆    时间: 2014-3-10 16:00
赞一个






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