智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1370|回复: 0
打印 上一主题 下一主题

电机测速,搞不懂ECT输入捕捉周期和AD采样周期的区别和联系,另外这里TC0寄存未设置,

[复制链接]

18

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1311
威望
709
贡献
366
兑换币
430
注册时间
2013-11-9
在线时间
118 小时
毕业学校
湖北汽车工业学院
跳转到指定楼层
1#
发表于 2014-12-4 20:07:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void ECT0_Init(void)
  {                                                         
   TIOS=0xFE; //通道0设置为输入捕捉
   TCTL3=0x00;            
   TCTL4=0x01; //上升沿捕捉
   TSCR2=0x87;   //溢出中断允许,128分频,125KHz,相当于计数器数一下耗时1/125000 s,约0.524s溢出一次
   TSCR1=0x80;   //主定时器开启           TSCR1_TEN=1

   TIE_C0I=1;   //中断允许
}
unsigned int ABS(unsigned int x,unsigned int y)
{
   if(x>y)
   return x-y;
   else
   return y-x;
}
//******************溢出中断函数*********************
#pragma CODE_SEG NON_BANKED
  void interrupt 16 over_flow(void)
{  
     TFLG2_TOF=1;
     counter ++;         // T0C???
     if( counter>=2)
     {
         counter=0;
         moter_speed=0;
     }
}
//*************中断子函数****************************
//当检测到下降沿,向CPU发出请求,进入中断函数
#pragma CODE_SEG NON_BANKED
void interrupt 8 timer0_ISR(void)
{
   static unsigned long int m=0;
   static unsigned long int n=0;
   static unsigned long int a=0,k=0;
   TFLG1_C0F=1;     //清中断标志位
     m=TC0;
     k=65535*counter+m;
     counter=0;
     a=62500/(k-n)*5;    //104166,r/s    //放大5倍
     n=m;
     if(ABS(a, moter_speed)>=50)
      a= moter_speed;
     if(ABS(a, moter_speed)>=30&&ABS(a, moter_speed)<50)
      a=( moter_speed*2+a*8)/10;
     moter_speed=a;   
}  
//*********************main主函数*********************

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 16:53 , Processed in 0.042711 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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