霍尔测速电路及C程序 要的自己拿
下面以常见的玩具电机作为测速对象,用CS3020设计信号获取电路,通过电压比较器实现计数脉冲的输出,既可在单片机实验箱进行转速测量,也可直接将输出接到频率计或脉冲计数器,得到单位时间内的脉冲数,进行换算即可得电机转速。这样可少用硬件,不需编程,但仅是对霍尔传感器测速应用的验证。
测量转速,使用霍尔传感器,被测轴安装有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清一次定时器
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
霍尔测速及C例程.doc
(194 KB, 下载次数: 57)
|