智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: zhiyang1989
打印 上一主题 下一主题

编码器PT7口测速

  [复制链接]

16

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
威望
685
贡献
247
兑换币
86
注册时间
2012-2-2
在线时间
140 小时
毕业学校
三江
11#
 楼主| 发表于 2012-5-14 13:06:06 | 只看该作者
zsk- 发表于 2012-5-14 10:04
我一会儿可以把我的贴给你,现在用的手机没法贴

好的 真心感谢。。。
回复 支持 反对

使用道具 举报

10

主题

353

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1657
威望
1031
贡献
326
兑换币
60
注册时间
2012-2-23
在线时间
150 小时
12#
发表于 2012-5-14 21:27:04 | 只看该作者
zhiyang1989 发表于 2012-5-14 13:06
好的 真心感谢。。。

void SET_PLL(void) //设置总线频率为24M
{
CLKSEL=0x00;
PLLCTL=0xe1;
SYNR=2;
REFDV=1;     //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16M*3/2=48M  
PLLCTL=0x60;
asm NOP;     
asm NOP;
asm NOP;
while((CRGFLG&0x08)==0);
CLKSEL=0x80;  //BUS Clok=pllclk/2=24M
}
void PIT_Init(void) //定时10ms中断初始化函数
{
    PITCFLMT_PITE=0;//PIT定时中断通道0关
    PITCE_PCE0=1;//定时器通道0使能
    PITMTLD0=240-1;//8位定时器初值设定。240分频即24M/240 10us
    PITMUX=0x00;
    PITLD0=1000-1;//16位定时器初值设定  1000*10us=10ms
    PITINTE_PINTE0=1;//定时器中断通道0中断使能
    PITCFLMT_PITE=1;//定时器通道0使能
}
void TIM_Init(void)//脉冲累计初始化
{
    PACTL=0x50;//下降沿触发
    PACNT=0x0000;//清0
}  
void Servo_Init(void)                   //舵机 16 位PWM 控制6050,5175,4300 : 875
{
    PWME_PWME1=0;         //disable PWM1 servo
    PWMPRCLK=0x23;     //CLKA:8 分频3M ,CLKB:总线时钟6M
    PWMCLK=0 ;      //这就是默认值//通道1 用clock A 时钟源 //24MHZ/8=3M
    PWMPOL_PPOL1=0; //先高电平
    PWMCAE=0X00;    //对齐方式默认 左对齐 都是
    PWMCTL_CON01=1; //通道01级联
    PWMPER01=30000;//60000:20ms;;;20000//舵机的频率是300Hz,10ms   
    PWMDTY01=4500;//6000左极限,3500右极限,4500中间
    PWMCNT01=0;   //写计数寄存器,会使PWMDTYx,PWMPERx 进入锁存器,同时使能通道时会从此值 
    PWME_PWME1=1; //PWM 通道1 输出
}
void Forward_Init(void) // 假定前进方向,初始化函数
{  
    PWME_PWME7=0;  //CLOCKA=3M,CLOCKB=6M
    PWME_PWME5=0;
    PWMPOL_PPOL5=1; //low electrical level first,,high electrical level first,but high level makes mc33886 disabled
    PWMPOL_PPOL7=1;
    PWMCAE=0X00; //对齐方式默认左对齐
    PWMCTL_CON45=1;
    PWMCTL_CON67=1; //16BIT连接
    PWMPER45=750;   //设置的频率是8MHZ
    PWMPER67=750; //   
    PWMDTY45=100;
    PWMDTY67=0; //占空比精度1/750
    PWMCNT45=0;
    PWME_PWME5=1;
    PWME_PWME7=1;
}
void main(void)
{
/* put your own code here */
  DisableInterrupts;
  //RTI_Init();
  SET_PLL();
  PIT_Init();  
  TIM_Init();
  Servo_Init ();
  Forward_Init();
  SciInit();
  DDRB=0xff;          //定义为输出
  ATD0DIEN=0xFFFF;
  DDR1AD0=0x00;                              
  DDRA=0x00;
  EnableInterrupts; }
      //prefinal_weight=final_weight;
  } /* loop forever */
  /* please make sure that you never leave main */
#pragma CODE_SEG NON_BANKED
void interrupt 66 PIT0(void) ///////10ms
{
  PITTF_PTF0=1;
  pulse_count=PACNT; //PT7接受脉冲
  PACNT=0;}        
#pragma CODE_SEG DEFAULT  

回复 支持 反对

使用道具 举报

16

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
威望
685
贡献
247
兑换币
86
注册时间
2012-2-2
在线时间
140 小时
毕业学校
三江
13#
 楼主| 发表于 2012-5-15 12:54:39 | 只看该作者
zsk- 发表于 2012-5-14 21:27
void SET_PLL(void) //设置总线频率为24M
{
CLKSEL=0x00;

我知道问题所在了 是因为我的编码器输出的波形幅度太小了导致接收不到PANCT里面的值 不过还是真心谢谢你啊 好人哪。。。。。。
回复 支持 反对

使用道具 举报

17

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
971
威望
589
贡献
180
兑换币
13
注册时间
2012-3-27
在线时间
101 小时
毕业学校
青岛工学院
14#
发表于 2012-5-15 19:43:43 | 只看该作者
楼主可否把他的贴也给我发个呢
回复 支持 反对

使用道具 举报

16

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
威望
685
贡献
247
兑换币
86
注册时间
2012-2-2
在线时间
140 小时
毕业学校
三江
15#
 楼主| 发表于 2012-5-15 22:50:42 | 只看该作者
chenjian 发表于 2012-5-15 19:43
楼主可否把他的贴也给我发个呢

void SET_PLL(void) //设置总线频率为24M
{
CLKSEL=0x00;
PLLCTL=0xe1;
SYNR=2;
REFDV=1;     //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=2*16M*3/2=48M  
PLLCTL=0x60;
asm NOP;     
asm NOP;
asm NOP;
while((CRGFLG&0x08)==0);
CLKSEL=0x80;  //BUS Clok=pllclk/2=24M
}
void PIT_Init(void) //定时10ms中断初始化函数
{
    PITCFLMT_PITE=0;//PIT定时中断通道0关
    PITCE_PCE0=1;//定时器通道0使能
    PITMTLD0=240-1;//8位定时器初值设定。240分频即24M/240 10us
    PITMUX=0x00;
    PITLD0=1000-1;//16位定时器初值设定  1000*10us=10ms
    PITINTE_PINTE0=1;//定时器中断通道0中断使能
    PITCFLMT_PITE=1;//定时器通道0使能
}
void TIM_Init(void)//脉冲累计初始化
{
    PACTL=0x50;//下降沿触发
    PACNT=0x0000;//清0
}  
void Servo_Init(void)                   //舵机 16 位PWM 控制6050,5175,4300 : 875
{
    PWME_PWME1=0;         //disable PWM1 servo
    PWMPRCLK=0x23;     //CLKA:8 分频3M ,CLKB:总线时钟6M
    PWMCLK=0 ;      //这就是默认值//通道1 用clock A 时钟源 //24MHZ/8=3M
    PWMPOL_PPOL1=0; //先高电平
    PWMCAE=0X00;    //对齐方式默认 左对齐 都是
    PWMCTL_CON01=1; //通道01级联
    PWMPER01=30000;//60000:20ms;;;20000//舵机的频率是300Hz,10ms   
    PWMDTY01=4500;//6000左极限,3500右极限,4500中间
    PWMCNT01=0;   //写计数寄存器,会使PWMDTYx,PWMPERx 进入锁存器,同时使能通道时会从此值 
    PWME_PWME1=1; //PWM 通道1 输出
}
void Forward_Init(void) // 假定前进方向,初始化函数
{  
    PWME_PWME7=0;  //CLOCKA=3M,CLOCKB=6M
    PWME_PWME5=0;
    PWMPOL_PPOL5=1; //low electrical level first,,high electrical level first,but high level makes mc33886 disabled
    PWMPOL_PPOL7=1;
    PWMCAE=0X00; //对齐方式默认左对齐
    PWMCTL_CON45=1;
    PWMCTL_CON67=1; //16BIT连接
    PWMPER45=750;   //设置的频率是8MHZ
    PWMPER67=750; //   
    PWMDTY45=100;
    PWMDTY67=0; //占空比精度1/750
    PWMCNT45=0;
    PWME_PWME5=1;
    PWME_PWME7=1;
}
void main(void)
{
/* put your own code here */
  DisableInterrupts;
  //RTI_Init();
  SET_PLL();
  PIT_Init();  
  TIM_Init();
  Servo_Init ();
  Forward_Init();
  SciInit();
  DDRB=0xff;          //定义为输出
  ATD0DIEN=0xFFFF;
  DDR1AD0=0x00;                              
  DDRA=0x00;
  EnableInterrupts; }
      //prefinal_weight=final_weight;
  } /* loop forever */
  /* please make sure that you never leave main */
#pragma CODE_SEG NON_BANKED
void interrupt 66 PIT0(void) ///////10ms
{
  PITTF_PTF0=1;
  pulse_count=PACNT; //PT7接受脉冲
  PACNT=0;}        
#pragma CODE_SEG DEFAULT  

回复 支持 反对

使用道具 举报

17

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
971
威望
589
贡献
180
兑换币
13
注册时间
2012-3-27
在线时间
101 小时
毕业学校
青岛工学院
16#
发表于 2012-5-16 10:36:30 | 只看该作者
zhiyang1989 发表于 2012-5-15 22:50
void SET_PLL(void) //设置总线频率为24M
{
CLKSEL=0x00;

谢了
回复 支持 反对

使用道具 举报

17

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
971
威望
589
贡献
180
兑换币
13
注册时间
2012-3-27
在线时间
101 小时
毕业学校
青岛工学院
17#
发表于 2012-5-16 10:36:54 | 只看该作者
谢了
回复 支持 反对

使用道具 举报

46

主题

247

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2760

优秀会员奖章

QQ
威望
1192
贡献
1120
兑换币
73
注册时间
2011-11-7
在线时间
224 小时
18#
发表于 2012-5-20 01:15:03 | 只看该作者
聊得不错!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
威望
287
贡献
93
兑换币
0
注册时间
2011-10-26
在线时间
32 小时
19#
发表于 2012-5-27 23:27:37 | 只看该作者
zhiyang1989 发表于 2012-5-15 12:54
我知道问题所在了 是因为我的编码器输出的波形幅度太小了导致接收不到PANCT里面的值 不过还是真心谢谢你啊 ...

大神,你问题解决了嘛?
    我的PACNT有值,就是用变量读不出来。求大神赐予解决办法!!
回复 支持 反对

使用道具 举报

6

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
威望
246
贡献
115
兑换币
2
注册时间
2012-3-23
在线时间
31 小时
毕业学校
华南师范大学
20#
发表于 2012-5-31 19:10:42 | 只看该作者
zhiyang1989 发表于 2012-5-15 12:54
我知道问题所在了 是因为我的编码器输出的波形幅度太小了导致接收不到PANCT里面的值 不过还是真心谢谢你啊 ...

你好,你的问题是怎么样解决的,我遇到和你相同的问题,在示波器能够显示,可是测量到的值都是0
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 23:37 , Processed in 0.055781 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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