找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4931|回复: 1
打印 上一主题 下一主题
收起左侧

单片机霍尔测速电路及C例程

[复制链接]
跳转到指定楼层
楼主
霍尔测速电路及C程序  要的自己拿
下面以常见的玩具电机作为测速对象,用CS3020设计信号获取电路,通过电压比较器实现计数脉冲的输出,既可在单片机实验箱进行转速测量,也可直接将输出接到频率计或脉冲计数器,得到单位时间内的脉冲数,进行换算即可得电机转速。这样可少用硬件,不需编程,但仅是对霍尔传感器测速应用的验证。


测量转速,使用霍尔传感器,被测轴安装有1只磁钢,即转轴每转一周,产生1个脉冲,要求将转速值(转/分)显示在数码管上。
用C语言编制的程序如下:
//硬件:老版STC实验版
//P3-5口接转速脉冲
  1. #include <STC12C5410AD.H>   // 单片机内部专用寄存器定义
  2.   #define uchar unsigned char
  3.   #define uint unsigned int                    //数据类型的宏定义
  4.   uchar code LK[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,} ;//数码管0~9的字型码
  5.   uchar LK1[4]={0xfe,0xfd,0xfb,0xf7};                                                                          //位选码
  6.   uint data z,counter;                                                                                                                  //定义无符号整型全局变量lk
  7.   //====================================================
  8.   void init(void)           //定义名为init的初始化子函数
  9.   {                    //init子函数开始,分别赋值
  10.    TMOD=0X51;            //GATE  C/T  M1  M0  GATE  C/T  M1  M0  计数器T1 定时器T0
  11.                          //  0     1   0   1    0     0   0   1
  12.    TH1=0;                //计数器初始值
  13.    TL1=0;
  14.    TH0=-(50000/256);    //定时器t0  定时50ms
  15.    TL0=-(50000%256);   
  16.    
  17.    EA=1;                       // IE=0X00;      //EA  -  ET1  ES  ET1  EX1  ET0  EX0
  18.    ET0=1;                                      // 1  0    0   0    0    0      1   0
  19.    TR1=1;
  20.    TR0=1;
  21.    TF0=1;
  22.    }
  23.    //=============================================
  24.    void delay(uint k)        //延时程序
  25.    {
  26.             uint data i,j;
  27.            for(i=0;i<k;i++)
  28.               {
  29.          for(;j<121;j++) {;}
  30.            }
  31.    }
  32. //================================================
  33.    void display(void)    //数码管显示
  34.    {
  35.            P1=LK[z/1000];P2=LK1[0];delay(10);         
  36.                 P1=LK[(z/100)%10];P2=LK1[1];delay(10);           
  37.     P1=LK[(z%100)/10];P2=LK1[2];delay(10);
  38.     P1=LK[z%10];P2=LK1[3];delay(10);
  39.            }
  40.    //=========================================
  41.    void main(void)                 //主程序开始
  42.    {
  43.            uint temp1,temp2;
  44.      init();                       //调用init初始化子函数
  45.      
  46.            for(;;)                       
  47.                            {
  48.                           
  49.                            temp1=TL1;temp2=TH1;
  50.                counter=(temp2<<8)+temp1;           //读出计数器值并转化为十进制
  51.                            //z=counter;
  52.                       display();
  53.            }                         //无限循环语句结束
  54.          }                                                        //主程序结束
  55. //===================================================
  56.         // uint chushi=60;
  57. void timer0(void) interrupt 1 using 1
  58. {
  59.          
  60.          TH0=-(50000/256);    //定时器t0  定时50ms
  61.    TL0=-(50000%256);
  62.   
  63.   // chushi--;
  64.   // if(chushi<=0){
  65.          z=counter /0.5 ;   //读出速度
  66. //}
  67.   TH0=0;               //每50MS清一次定时器
  68. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
霍尔测速及C例程.doc (194 KB, 下载次数: 57)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:236171 发表于 2018-12-29 22:26 | 只看该作者
给了黑币没下载下来???????/
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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