智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 8699|回复: 20
打印 上一主题 下一主题

[分享] 编码器采集程序

  [复制链接]

28

主题

166

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1649
威望
810
贡献
379
兑换币
404
注册时间
2012-10-11
在线时间
230 小时
毕业学校
山东理工大学
跳转到指定楼层
1#
发表于 2013-1-26 17:30:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
今天刚把编码器采集所需的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

4

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
威望
144
贡献
74
兑换币
75
注册时间
2014-3-7
在线时间
20 小时
毕业学校
安徽师范大学
21#
发表于 2014-3-10 16:00:23 | 只看该作者
赞一个

回复 支持 反对

使用道具 举报

28

主题

166

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1649
威望
810
贡献
379
兑换币
404
注册时间
2012-10-11
在线时间
230 小时
毕业学校
山东理工大学
20#
 楼主| 发表于 2013-6-11 14:53:07 | 只看该作者
用液晶显示,用上位机,用数码管都行
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
736
威望
396
贡献
196
兑换币
192
注册时间
2012-9-6
在线时间
72 小时
毕业学校
广东石油化工学院
19#
发表于 2013-6-10 21:23:22 | 只看该作者
楼主,怎样知道计了多少个数?
回复 支持 反对

使用道具 举报

1

主题

104

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1743
威望
695
贡献
474
兑换币
381
注册时间
2012-7-24
在线时间
287 小时
毕业学校
浙工大
18#
发表于 2013-5-17 23:48:46 | 只看该作者
顶下
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

注册会员

Rank: 2

积分
187
威望
99
贡献
50
兑换币
66
注册时间
2013-3-21
在线时间
19 小时
毕业学校
中国民航大学
17#
发表于 2013-5-17 23:40:01 | 只看该作者
谢楼主
回复 支持 反对

使用道具 举报

20

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2157
QQ
威望
1132
贡献
547
兑换币
695
注册时间
2012-11-27
在线时间
239 小时
16#
发表于 2013-5-12 11:04:27 | 只看该作者
如何知道计了多少个数
回复 支持 反对

使用道具 举报

28

主题

166

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1649
威望
810
贡献
379
兑换币
404
注册时间
2012-10-11
在线时间
230 小时
毕业学校
山东理工大学
15#
 楼主| 发表于 2013-4-20 20:37:38 | 只看该作者
10.0就是没有,感觉软件大了用起来也麻烦,精悍才是王道
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
63
威望
39
贡献
10
兑换币
13
注册时间
2013-4-19
在线时间
10 小时
14#
发表于 2013-4-20 20:32:27 | 只看该作者
sunzhaoxing2012 发表于 2013-4-20 20:28
cw5.1

...10.0是没有的,奇怪了。。。
回复 支持 反对

使用道具 举报

28

主题

166

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1649
威望
810
贡献
379
兑换币
404
注册时间
2012-10-11
在线时间
230 小时
毕业学校
山东理工大学
13#
 楼主| 发表于 2013-4-20 20:28:55 | 只看该作者
天亮说晚安snow 发表于 2013-4-20 19:29
敢问大神用的什么软件。。。CodeWarrior没有s128的。。

cw5.1
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 20:02 , Processed in 0.051412 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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