如何实时测转速?对每个信号周期(每个高+低电平5ms----500ms)都要测量,测量完毕(在一个周

2020-02-09 11:39发布

如何实时测转速?对每个信号周期(每个高+低电平5ms----500ms)都要测量,测量完毕(在一个周期内)马上做出处理,请大家给予指点。不能通过定时时间内计算脉冲个数来测量,那样太慢,下面的程序为什么不能够测量?

转速问题if(T0IF)   //time0 200us中断0.2ms
{
   T0IF=0;
   TMR0=53;               
    if(!in1)//发动机开始旋转RA2口平时转速为0的时候一直为高,转速以来马上变低
      {     
                        
                        if(gaodi) {  tlow++;} //低 电平时间长
                        else  
   
                            {
                                      
                              if (thigh>=250) //1200转以下设标志位speed1=1                              {
                             tlow=0;
                             thigh=0;
                             speed1=1;led2=0;
                               }
                             else  if ((thigh>=130) &&   (thigh<250))//1200--2400转以下设标志位speed2=1                               {
                              tlow=0;
                              thigh=0;
                             speed2=1;   led2=1;
                                }
                            else  //2400转以上 设标志位speed3=1
                                {
                              //tlow=0;
                              //thigh=0;   
                              speed3=1; led2=0;
                                }
                            } //上次为高的标志   
                            gaodi=0;
                       }  
                 else  
                        {
                           if(!gaodi)
                           {
                                  thigh++;  // 高 电平时间长

                           }
                            gaodi=1;        
                         }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
zxcv12345
1楼-- · 2020-02-10 07:14
 精彩回答 2  元偷偷看……
sagetom
2楼-- · 2020-02-10 11:58
在结构上多动一下脑筋,使用格雷码可以很好的解决问题。就是在快也可以。慢速同样可以。
在一定速度范围内,不存在时间的问题。
zxcv12345
3楼-- · 2020-02-10 17:40
回复【8楼】sagetom
-----------------------------------------------------------------------

格雷码高深哦
if(T0IF)   //time0 200us中断0.2ms  
{  
   T0IF=0;  
   TMR0=53;               
    if(!in1)//发动机开始旋转RA2口平时转速为0的时候一直为高,转速以来马上变低  
      {      
                        
                        if(gaodi) {  tlow++;} //低 电平时间长
                        else   
     
                            {  
                                       
                              if (thigh>=250) //1200转以下设标志位speed1=1                              {  
                             tlow=0;  
                             thigh=0;  
                             speed1=1;  
                               } ,,,,,,,,,,,,,,,,,,,,
请问这样测量是否正确?好像程序没怎么运行
eduhf_123
4楼-- · 2020-02-10 21:52
回复【7楼】zxcv12345
4楼讲得很好、但太复杂了,使用16位定时器
-----------------------------------------------------------------------

你能保证500ms的周期中,16位的定时器不会溢出么?

我想说的是,我保证它会溢出。

一周热门 更多>