5145|6

6

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

关于霍尔测速的问题 [复制链接]

本人刚学单片机不久,想用霍尔传感器41F(开关型)测下电机速度为以后做准备。我的硬件部分已没问题,现在说说程序的问题。我将信号输出接到单片机P3^5即T1口,用T0作定时器,T1作计数器,在一定时间内计数霍尔元件产生的脉冲,从而得到速度。下面是我的程序:
#include#define uchar unsigned char
#define uint unsigned int
#define led P1
sbit dula=P2^6;         //U1寄存器
sbit wela=P2^7;        //U2寄存器
uint z=0;            
uint code table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
    0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};                                                                  
  uint data  chushi=600;                                                                                                                  
  //====================================================
  void init(void)           //定义名为init的初始化子函数
  {                    //init子函数开始,分别赋值
   TMOD=0X51;            //GATE  C/T  M1  M0  GATE  C/T  M1  M0  计数器T1 定时器T                //  0     1   0   1    0     0   0   1
   TH1=0;                //计数器T1初始值
   TL1=0;
   TH0=(65536-50000)/256;    //定时器t0  定时50ms
   TL0=(65536-50000)%256;     
   EA=1;                       // IE=0X00;     //EA  -  ET1  ES  ET1  EX1  ET0  EX0
   ET0=1;                                     // 1  0    0   0    0    0      1   0
   TR1=1;
   TR0=1;
   }
   //=============================================
   void delay(uint k)        //延时程序
   {
            uint  i,j;
           for(i=0;i             
         for(j=0;j<110;j++);
         
   }

//================================================
  void display(uint numdis)
{
    uint m,n,s,k;
    m=numdis/1000;
    n=numdis%1000/100;
        s=numdis%100/10;
        k=numdis%10;
    dula=1;
        P0=table[m];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay(2);

        dula=1;
        P0=table[n];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(2);

              dula=1;
        P0=table;
       dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(2);

        dula=1;
        P0=table[k];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        delay(2);
}                             //数码管显示函数
   //=========================================
   void main(void)                 //主程序开始
   {       led=0xff;
            init();
           while(1)
           {   
                   z=(TH1<<8)+TL1;
               display(z);
        
           }
                             //无限循环语句,等待中断
         }                                                        
//===================================================
void time(void)        interrupt 1 using 0
{        
         
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        chushi--;
        if(chushi<=0)     
     {
            led=~led;  // LED以周期1分钟闪烁,作为指示灯
            TH1=0;
            TL1=0;                 //清零计数器
            chushi=600;         //50ms*600=30s
          }
         
           
}
通过实验,我观察到每次计数到4000左右便清零,我想问下这4000多是不是一分钟计数?还有是不是马达每转一周就产生一个脉冲?另外,我想通过按键来查询上一次最后计数是四千几,或者通过延时来读出准确数值。哪位大神能帮忙解决下,小弟不胜感激!
此帖出自51单片机论坛

最新回复

不错。顶一个。  详情 回复 发表于 2013-12-8 20:42
点赞 关注
 

回复
举报

1080

帖子

2

TA的资源

五彩晶圆(中级)

沙发
 
一分钟时间,由T0定时时间决定。

比如你设置50ms,1分钟 = 60000ms,  每分钟 T0中断次数 = 60000ms/50ms = 1200次

你打开 T1计数器的同时开T0定时中断,然后每次T0定时中断加1,  当值加到1200次时关 T1计数器,此时T1计数器值就时每分钟计数值。
此帖出自51单片机论坛
 
 
 

回复

1080

帖子

2

TA的资源

五彩晶圆(中级)

板凳
 
至于马达每转一周就产生一个脉冲?

这由你的硬件决定,假如你只用一个霍尔元件且马达旋转轴上只装一块单极性磁铁,那么马达每转一周就产生一个脉冲。
此帖出自51单片机论坛
 
 
 

回复

1080

帖子

2

TA的资源

五彩晶圆(中级)

4
 
如果你在马达旋转轴上装了一块多极性磁铁,那么马达每转一周就可能产生数个脉冲,脉冲数由你装的磁铁极数决定。
此帖出自51单片机论坛
 
 
 

回复

1080

帖子

2

TA的资源

五彩晶圆(中级)

5
 
由于普通的常规磁铁或强磁,都是单极性的,基本上可以判断,LZ的马达每转一周就产生一个脉冲。
此帖出自51单片机论坛
 
 
 

回复

1185

帖子

1

TA的资源

纯净的硅(高级)

6
 
不错。顶一个。
此帖出自51单片机论坛
 
 
 

回复

6

帖子

1

TA的资源

一粒金砂(中级)

7
 
我的这个可以测,我观察了下是每转一周产生一个脉冲,半分钟总计大概4000左右(我用的6V电压,小马达型号不知道,好像是飞思卡尔用的)但是最后清零太快了,我希望能准确读到最后的数值,或者通过按键查询,这是不是要涉及中断套中断?
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表