首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • 霍尔元件测速电路

    时间:2020-12-09 20:05:51 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:霍尔 元件 电路

     霍尔测速 测速就是工农业生产中经常遇到得问题,学会使用单片机技术设计测速仪表具有很重要得意义。要测速,首先要解决就是采样得问题。在使用模拟技术制作测速表时,常用测速发电机得方法,即将测速发电机得转轴与待测轴相连,测速发电机得电压高低反映了转速得高低。使用单片机进行测速,可以使用简单得脉冲计数法。只要转轴每旋转一周,产生一个或固定得多个脉冲,并将脉冲送入单片机中进行计数,即可获得转速得信息。

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

     1

     脉冲信号得获得 霍尔传感器就是对磁敏感得传感元件,常用于开关信号采集得有 CS3020、CS3040 等,这种传感器就是一个 3 端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常就是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。如图 1 所示就是 CS3020 得外形图,将有字面对准自己,三根引脚从左向右分别就是 Vcc,地,输出。

     图 1

     CS3020 外形图 使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴得圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。这种传感器不怕灰尘、油污,在工业现场应用广泛。

     2

     硬件 电路设计 测速得方法决定了测速信号得硬件连接,测速实际上就就是测频,因此,频率测量得一些原则同样适用于测速。

     通常可以用计数法、测脉宽法与等精度法来进行测试。所谓计数法,就就是给定一个闸门时间,在闸门时间内计数输入得脉冲个数;测脉宽法就是利用待测信号得脉宽来控制计数门,对一个高精度得高频计数信号进行计数。由于闸门与被测信号不能同步,因此,这两种方法都存在±1 误

     差得问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用。等精度法则对高、低频信号都有很好得适应性。

     图 2 就是测速电路得信号获取部分,在电源输入端并联电容 C 2 用来滤去电源尖啸,使霍尔元件稳定工作。HG 表示霍尔元件,采用 CS3020,在霍尔元件输出端(引脚 3)与地并联电容 C 3 滤去波形尖峰,再接一个上拉电阻 R 2 ,然后将其接入 LM324 得引脚 3。用 LM324 构成一个电压比较器,将霍尔元件输出电压与电位器 R P1 比较得出高低电平信号给单片机读取。

     C 4 用于波形整形,以保证获得良好数字信号。LED 便于观察,当比较器输出高电平时不亮,低电平时亮。微型电机 M 可采用

     型,通过电位器 R P1 分压,实现提高或降低电机转速得目得。

     C 1 电容使电机得速度不会产生突变,因为电容能存储电荷。

     电压比较器得功能:比较两个电压得大小(用输出电压得高或低电平,表示两个输入电压得大小关系):

     当“+”输入端电压高于“-”输入端时,电压比较器输出为高电平;

     当“+”输入端电压低于“-”输入端时,电压比较器输出为低电平; 比较器还有整形得作用,利用这一特点可使单片机获得良好稳定得输出信号,不至于丢失信号,能提高测速得精确性与稳定性。

     HGCS3020MR P1101R P2203R 110K R 2510ΩC 147μC 2104C 3104C 4104LM324+5V-+OUT+-123+123411 图、2

     测速电路原理图 3

     测速程序 测量转速,使用霍尔传感器,被测轴安装有 1 只磁钢,即转轴每转一周,产生 1 个脉冲,要求将转速值(转/分)显示在数码管上。

     用 C 语言编制得程序如下: //硬件:老版 STC 实验版 //P3-5 口接转速脉冲

      #include <STC12C5410AD、H>

      // 单片机内部专用寄存器定义

      #define uchar unsigned char

     #define uint unsigned int

     //数据类型得宏定义

      uchar code LK[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,} ;//数码管0~9 得字型码

      uchar LK1[4]={0xfe,0xfd,0xfb,0xf7};

      //位选码

      uint data z,counter;

     //定义无符号整型全局变量 lk

      //====================================================

      void init(void)

     //定义名为 init 得初始化子函数

      {

     //init 子函数开始,分别赋值

      TMOD=0X51;

     //GATE

     C/T

     M1

     M0

     GATE

     C/T

     M1

     M0

     计数器 T1 定时器 T0

     //

     0

      1

      0

      1

     0

      0

      0

      1

     TH1=0;

     //计数器初始值

     TL1=0;

     TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(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;

     TF0=1;

     }

     //=============================================

     void delay(uint k) //延时程序

     {

     uint data i,j;

      for(i=0;i<k;i++)

     {

     for(;j<121;j++) {;}

      }

     } //================================================

     void display(void)

     //数码管显示

     {

      P1=LK[z/1000];P2=LK1[0];delay(10);

     P1=LK[(z/100)%10];P2=LK1[1];delay(10);

     P1=LK[(z%100)/10];P2=LK1[2];delay(10);

      P1=LK[z%10];P2=LK1[3];delay(10);

      }

     //=========================================

     void main(void)

      //主程序开始

     {

     uint temp1,temp2;

     init();

      //调用 init 初始化子函数

      for(;;)

     {

      temp1=TL1;temp2=TH1;

     counter=(temp2<<8)+temp1;

     //读出计数器值并转化为十进制

      //z=counter;

      display();

      }

     //无限循环语句结束

      }

     //主程序结束 //===================================================

     // uint chushi=60;

     void timer0(void) interrupt 1 using 1 {

      TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(50000%256);

      // chushi--;

      // if(chushi<=0){

     z=counter /0、5 ;

      //读出速度

     //}

      TH0=0;

      //每 50MS 清一次定时器

     TL1=0; } 霍尔测速 测速就是工农业生产中经常遇到得问题,学会使用单片机技术设计测速仪表具有很重要得意义。要测速,首先要解决就是采样得问题。在使用模拟技术制作测速表时,常用测速发电机得方法,即将测速发电机得转轴与待测轴相连,测速发电机得电压高低反映了转速得高低。使用单片机进行测速,可以使用简单得脉冲计数法。只要转轴每旋转一周,产生一个或固定得多个脉冲,并将脉冲送入单片机中进行计数,即可获得转速得信息。

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

     1

     脉冲信号得获得 霍尔传感器就是对磁敏感得传感元件,常用于开关信号采集得有 CS3020、CS3040 等,这种传感器就是一个 3 端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常就是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。如图 1 所示就是 CS3020 得外形图,将有字面对准自己,三根引脚从左向右分别就是 Vcc,地,输出。

     图 1

     CS3020 外形图 使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴得圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器

     对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。这种传感器不怕灰尘、油污,在工业现场应用广泛。

     2

     硬件 电路设计 测速得方法决定了测速信号得硬件连接,测速实际上就就是测频,因此,频率测量得一些原则同样适用于测速。

     通常可以用计数法、测脉宽法与等精度法来进行测试。所谓计数法,就就是给定一个闸门时间,在闸门时间内计数输入得脉冲个数;测脉宽法就是利用待测信号得脉宽来控制计数门,对一个高精度得高频计数信号进行计数。由于闸门与被测信号不能同步,因此,这两种方法都存在±1 误差得问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用。等精度法则对高、低频信号都有很好得适应性。

     图 2 就是测速电路得信号获取部分,在电源输入端并联电容 C 2 用来滤去电源尖啸,使霍尔元件稳定工作。HG 表示霍尔元件,采用 CS3020,在霍尔元件输出端(引脚 3)与地并联电容 C 3 滤去波形尖峰,再接一个上拉电阻 R 2 ,然后将其接入 LM324 得引脚 3。用 LM324 构成一个电压比较器,将霍尔元件输出电压与电位器 R P1 比较得出高低电平信号给单片机读取。

     C 4 用于波形整形,以保证获得良好数字信号。LED 便于观察,当比较器输出高电平时不亮,低电平时亮。微型电机 M 可采用

     型,通过电位器 R P1 分压,实现提高或降低电机转速得目得。

     C 1 电容使电机得速度不会产生突变,因为电容能存储电荷。

     电压比较器得功能:比较两个电压得大小(用输出电压得高或低电平,表示两个输入电压得大小关系):

     当“+”输入端电压高于“-”输入端时,电压比较器输出为高电平;

     当“+”输入端电压低于“-”输入端时,电压比较器输出为低电平; 比较器还有整形得作用,利用这一特点可使单片机获得良好稳定得输出信号,不至于丢失信号,能提高测速得精确性与稳定性。

     HGCS3020MR P1101R P2203R 110K R 2510ΩC 147μC 2104C 3104C 4104LM324+5V-+OUT+-123+123411 图、2

     测速电路原理图 3

     测速程序 测量转速,使用霍尔传感器,被测轴安装有 1 只磁钢,即转轴每转一周,产生 1 个脉冲,要求将转速值(转/分)显示在数码管上。

     用 C 语言编制得程序如下: //硬件:老版 STC 实验版 //P3-5 口接转速脉冲

     #include <STC12C5410AD、H>

      // 单片机内部专用寄存器定义

      #define uchar unsigned char

     #define uint unsigned int

     //数据类型得宏定义

      uchar code LK[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,} ;//数码管0~9 得字型码

      uchar LK1[4]={0xfe,0xfd,0xfb,0xf7};

      //位选码

      uint data z,counter;

     //定义无符号整型全局变量 lk

      //====================================================

      void init(void)

     //定义名为 init 得初始化子函数

      {

     //init 子函数开始,分别赋值

     TMOD=0X51;

     //GATE

     C/T

     M1

     M0

     GATE

     C/T

     M1

     M0

     计数器 T1 定时器 T0

     //

     0

      1

      0

      1

     0

      0

      0

      1

     TH1=0;

     //计数器初始值

     TL1=0;

     TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(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;

     TF0=1;

     }

     //=============================================

     void delay(uint k) //延时程序

     {

     uint data i,j;

      for(i=0;i<k;i++)

     {

     for(;j<121;j++) {;}

      }

     } //================================================

     void display(void)

     //数码管显示

     {

      P1=LK[z/1000];P2=LK1[0];delay(10);

     P1=LK[(z/100)%10];P2=LK1[1];delay(10);

     P1=LK[(z%100)/10];P2=LK1[2];delay(10);

      P1=LK[z%10];P2=LK1[3];delay(10);

      }

     //=========================================

     void main(void)

      //主程序开始

     {

     uint temp1,temp2;

      init();

      //调用 init 初始化子函数

      for(;;)

     {

      temp1=TL1;temp2=TH1;

     counter=(temp2<<8)+temp1;

     //读出计数器值并转化为十进制

      //z=counter;

      display();

      }

     //无限循环语句结束

      }

     //主程序结束 //===================================================

     // uint chushi=60; void timer0(void) interrupt 1 using 1 {

      TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(50000%256);

      // chushi--;

      // if(chushi<=0){

     z=counter /0、5 ;

      //读出速度

     //}

      TH0=0;

      //每 50MS 清一次定时器

     TL1=0; }

     霍尔测速 测速就是工农业生产中经常遇到得问题,学会使用单片机技术设计测速仪表具有很重要得意义。要测速,首先要解决就是采样得问题。在使用模拟技术制作测速表时,常用测速发电机得方法,即将测速发电机得转轴与待测轴相连,测速发电机得电压高低反映了转速得高低。使用单片机进行测速,可以使用简单得脉冲计数法。只要转轴每旋转一周,产生一个或固定得多个脉冲,并将脉冲送入单片机中进行计数,即可获得转速得信息。

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

     1

     脉冲信号得 获得 霍尔传感器就是对磁敏感得传感元件,常用于开关信号采集得有 CS3020、CS3040 等,这种传感器就是一个 3 端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常就是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。如图 1 所示就是 CS3020 得外形图,将有字面对准自己,三根引脚从左向右分别就是 Vcc,地,输出。

     图 1

     CS3020 外形图 使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴得圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。这种传感器不怕灰尘、油污,在工业现场应用广泛。

     2

     硬件 电路设计 测速得方法决定了测速信号得硬件连接,测速实际上就就是测频,因此,频率测量得一些原则同样适用于测速。

     通常可以用计数法、测脉宽法与等精度法来进行测试。所谓计数法,就就是给定一个闸门时间,在闸门时间内计数输入得脉冲个数;测脉宽法就是利用待测信号得脉宽来控制计数门,对一个高精度得高频计数信号进行计数。由于闸门与被测信号不能同步,因此,这两种方法都存在±1 误

     差得问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用。等精度法则对高、低频信号都有很好得适应性。

     图 2 就是测速电路得信号获取部分,在电源输入端并联电容 C 2 用来滤去电源尖啸,使霍尔元件稳定工作。HG 表示霍尔元件,采用 CS3020,在霍尔元件输出端(引脚 3)与地并联电容 C 3 滤去波形尖峰,再接一个上拉电阻 R 2 ,然后将其接入 LM324 得引脚 3。用 LM324 构成一个电压比较器,将霍尔元件输出电压与电位器 R P1 比较得出高低电平信号给单片机读取。

     C 4 用于波形整形,以保证获得良好数字信号。LED 便于观察,当比较器输出高电平时不亮,低电平时亮。微型电机 M 可采用

     型,通过电位器 R P1 分压,实现提高或降低电机转速得目得。

     C 1 电容使电机得速度不会产生突变,因为电容能存储电荷。

     电压比较器得功能:比较两个电压得大小(用输出电压得高或低电平,表示两个输入电压得大小关系):

     当“+”输入端电压高于“-”输入端时,电压比较器输出为高电平;

     当“+”输入端电压低于“-”输入端时,电压比较器输出为低电平; 比较器还有整形得作用,利用这一特点可使单片机获得良好稳定得输出信号,不至于丢失信号,能提高测速得精确性与稳定性。

     HGCS3020MR P1101R P2203R 110K R 2510ΩC 147μC 2104C 3104C 4104LM324+5V-+OUT+-123+123411 图、2

     测速电路原理图 3

     测速程序 测量转速,使用霍尔传感器,被测轴安装有 1 只磁钢,即转轴每转一周,产生 1 个脉冲,要求将转速值(转/分)显示在数码管上。

     用 C 语言编制得程序如下: //硬件:老版 STC 实验版 //P3-5 口接转速脉冲

      #include <STC12C5410AD、H>

      // 单片机内部专用寄存器定义

      #define uchar unsigned char

     #define uint unsigned int

     //数据类型得宏定义

      uchar code LK[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,} ;//数码管0~9 得字型码

      uchar LK1[4]={0xfe,0xfd,0xfb,0xf7};

      //位选码

      uint data z,counter;

     //定义无符号整型全局变量 lk

      //====================================================

      void init(void)

     //定义名为 init 得初始化子函数

      {

     //init 子函数开始,分别赋值

      TMOD=0X51;

     //GATE

     C/T

     M1

     M0

     GATE

     C/T

     M1

     M0

     计数器 T1 定时器 T0

     //

     0

      1

      0

      1

     0

      0

      0

      1

     TH1=0;

     //计数器初始值

     TL1=0;

     TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(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;

     TF0=1;

     }

     //=============================================

     void delay(uint k) //延时程序

     {

     uint data i,j;

      for(i=0;i<k;i++)

     {

     for(;j<121;j++) {;}

      }

     } //================================================

     void display(void)

     //数码管显示

     {

      P1=LK[z/1000];P2=LK1[0];delay(10);

     P1=LK[(z/100)%10];P2=LK1[1];delay(10);

     P1=LK[(z%100)/10];P2=LK1[2];delay(10);

      P1=LK[z%10];P2=LK1[3];delay(10);

      }

     //=========================================

     void main(void)

      //主程序开始

     {

     uint temp1,temp2;

     init();

      //调用 init 初始化子函数

      for(;;)

     {

      temp1=TL1;temp2=TH1;

     counter=(temp2<<8)+temp1;

     //读出计数器值并转化为十进制

      //z=counter;

      display();

      }

     //无限循环语句结束

      }

     //主程序结束 //===================================================

     // uint chushi=60;

     void timer0(void) interrupt 1 using 1 {

      TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(50000%256);

      // chushi--;

      // if(chushi<=0){

     z=counter /0、5 ;

      //读出速度

     //}

      TH0=0;

      //每 50MS 清一次定时器

     TL1=0; } 霍尔测速 测速就是工农业生产中经常遇到得问题,学会使用单片机技术设计测速仪表具有很重要得意义。要测速,首先要解决就是采样得问题。在使用模拟技术制作测速表时,常用测速发电机得方法,即将测速发电机得转轴与待测轴相连,测速发电机得电压高低反映了转速得高低。使用单片机进行测速,可以使用简单得脉冲计数法。只要转轴每旋转一周,产生一个或固定得多个脉冲,并将脉冲送入单片机中进行计数,即可获得转速得信息。

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

     1

     脉冲信号得获得 霍尔传感器就是对磁敏感得传感元件,常用于开关信号采集得有 CS3020、CS3040 等,这种传感器就是一个 3 端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常就是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。如图 1 所示就是 CS3020 得外形图,将有字面对准自己,三根引脚从左向右分别就是 Vcc,地,输出。

     图 1

     CS3020 外形图 使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴得圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器

     对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。这种传感器不怕灰尘、油污,在工业现场应用广泛。

     2

     硬件 电路设计 测速得方法决定了测速信号得硬件连接,测速实际上就就是测频,因此,频率测量得一些原则同样适用于测速。

     通常可以用计数法、测脉宽法与等精度法来进行测试。所谓计数法,就就是给定一个闸门时间,在闸门时间内计数输入得脉冲个数;测脉宽法就是利用待测信号得脉宽来控制计数门,对一个高精度得高频计数信号进行计数。由于闸门与被测信号不能同步,因此,这两种方法都存在±1 误差得问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用。等精度法则对高、低频信号都有很好得适应性。

     图 2 就是测速电路得信号获取部分,在电源输入端并联电容 C 2 用来滤去电源尖啸,使霍尔元件稳定工作。HG 表示霍尔元件,采用 CS3020,在霍尔元件输出端(引脚 3)与地并联电容 C 3 滤去波形尖峰,再接一个上拉电阻 R 2 ,然后将其接入 LM324 得引脚 3。用 LM324 构成一个电压比较器,将霍尔元件输出电压与电位器 R P1 比较得出高低电平信号给单片机读取。

     C 4 用于波形整形,以保证获得良好数字信号。LED 便于观察,当比较器输出高电平时不亮,低电平时亮。微型电机 M 可采用

     型,通过电位器 R P1 分压,实现提高或降低电机转速得目得。

     C 1 电容使电机得速度不会产生突变,因为电容能存储电荷。

     电压比较器得功能:比较两个电压得大小(用输出电压得高或低电平,表示两个输入电压得大小关系):

     当“+”输入端电压高于“-”输入端时,电压比较器输出为高电平;

     当“+”输入端电压低于“-”输入端时,电压比较器输出为低电平; 比较器还有整形得作用,利用这一特点可使单片机获得良好稳定得输出信号,不至于丢失信号,能提高测速得精确性与稳定性。

     HGCS3020MR P1101R P2203R 110K R 2510ΩC 147μC 2104C 3104C 4104LM324+5V-+OUT+-123+123411 图、2

     测速电路原理图 3

     测速程序 测量转速,使用霍尔传感器,被测轴安装有 1 只磁钢,即转轴每转一周,产生 1 个脉冲,要求将转速值(转/分)显示在数码管上。

     用 C 语言编制得程序如下: //硬件:老版 STC 实验版 //P3-5 口接转速脉冲

     #include <STC12C5410AD、H>

      // 单片机内部专用寄存器定义

      #define uchar unsigned char

     #define uint unsigned int

     //数据类型得宏定义

      uchar code LK[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,} ;//数码管0~9 得字型码

      uchar LK1[4]={0xfe,0xfd,0xfb,0xf7};

      //位选码

      uint data z,counter;

     //定义无符号整型全局变量 lk

      //====================================================

      void init(void)

     //定义名为 init 得初始化子函数

      {

     //init 子函数开始,分别赋值

     TMOD=0X51;

     //GATE

     C/T

     M1

     M0

     GATE

     C/T

     M1

     M0

     计数器 T1 定时器 T0

     //

     0

      1

      0

      1

     0

      0

      0

      1

     TH1=0;

     //计数器初始值

     TL1=0;

     TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(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;

     TF0=1;

     }

     //=============================================

     void delay(uint k) //延时程序

     {

     uint data i,j;

      for(i=0;i<k;i++)

     {

     for(;j<121;j++) {;}

      }

     } //================================================

     void display(void)

     //数码管显示

     {

      P1=LK[z/1000];P2=LK1[0];delay(10);

     P1=LK[(z/100)%10];P2=LK1[1];delay(10);

     P1=LK[(z%100)/10];P2=LK1[2];delay(10);

      P1=LK[z%10];P2=LK1[3];delay(10);

      }

     //=========================================

     void main(void)

      //主程序开始

     {

     uint temp1,temp2;

      init();

      //调用 init 初始化子函数

      for(;;)

     {

      temp1=TL1;temp2=TH1;

     counter=(temp2<<8)+temp1;

     //读出计数器值并转化为十进制

      //z=counter;

      display();

      }

     //无限循环语句结束

      }

     //主程序结束 //===================================================

     // uint chushi=60; void timer0(void) interrupt 1 using 1 {

      TH0=-(50000/256);

     //定时器 t0

     定时 50ms

     TL0=-(50000%256);

      // chushi--;

      // if(chushi<=0){

     z=counter /0、5 ;

      //读出速度

     //}

      TH0=0;

      //每 50MS 清一次定时器

     TL1=0; }

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识