霍爾測速電路及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)
2017-9-18 18:35 上傳
點擊文件名下載附件
|