導航:首頁 > 操作系統 > 基於單片機的電機測速系統

基於單片機的電機測速系統

發布時間:2024-06-24 10:36:27

A. 鍩轟簬鍗曠墖鏈虹殑鐢靛姩鏈鴻皟閫熷疄楠岀郴緇熻捐

鍓嶈█
1
1.鎬諱綋璁捐℃柟妗
2
錛堜竴錛夋柟妗堜竴錛歅WM娉㈣皟閫
2
錛堜簩錛夋柟妗堜簩錛氭櫠闂哥¤皟閫
2
2.鍗曞厓妯″潡璁捐
3
錛堜竴錛
H妗ラ┍鍔ㄧ數璺璁捐℃柟妗
3
錛堜簩錛
璋冮熻捐℃柟妗
5
錛堜笁錛夌郴緇熺‖浠剁數璺璁捐
6
1.鐢墊簮鐢佃礬
6
2錛嶩妗ラ┍鍔ㄧ數璺
6
3錛庡熀浜庨湇灝斾紶鎰熷櫒鐨勬祴閫熸ā鍧
7
4錛嶭CD鏄劇ず妯″潡
8
錛堝洓錛
璋冮熻捐℃ā鍧
9
1錛嶱WM娉㈣蔣浠惰蔣浠惰捐
9
2錛庢祴閫熻蔣浠惰捐
12
3.緋葷粺鍔熻兘璋冭瘯
13
錛堜竴錛夎皟璇曡蔣浠朵粙緇
13
錛堜簩錛夌洿嫻佺數鏈虹殑璋冮熷姛鑳戒豢鐪
14
1錛庤皟閫熷墠鐨勬嘗褰㈠浘
14
2錛庤皟閫熷悗鐨勬嘗褰㈠浘
14
錛堜笁錛夌數鏈洪熷害鐨勬祴閲忓苟鏄劇ず鍔熻兘浠跨湡
15
錛堝洓錛夌郴緇熺殑鐢佃礬鍘熺悊鍥
15
錛堜簲錛夌郴緇熺殑PCB鍥
16
4.璁捐℃葷粨
17
5.鍙傝冩枃鐚
17
闄勫綍
17

B. 設計一個由單片機控制的電機轉速檢測系統,實時監測電機的轉速,達到設定值,聲音報警提示謝謝好心人啊!

LCD1602顯示,如果轉速達到5000R/MIN,蜂鳴器就會報警
#include <reg52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/*-----------------------埠命名------------------------*/
sbit lcdrs=P2^7; //LCD的數據/命令選擇端
sbit lcdrw=P2^6; //LCD的讀寫選擇端
sbit lcden=P2^5; //LCD的使能信號端
sbit warning=P3^1; //蜂鳴器端
/*-------------------------------------------------------*/
/*-----------------------定義參數------------------------*/
uint i,j,z,count,zhuan,msec; //定義參數
uchar num,ge,shi,,qian; //變數聲明
uchar code table0[]={"Velometer"}; //定義顯示參數
uchar code table1[]={"Speed: r/min"};
/*-------------------------------------------------------*/
/*-----------------------毫秒延時------------------------*/
void delay0(uint z) //延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}

/*-------------------------------------------------------*/
/*--------------------向LCD1602寫命令--------------------*/
void write_com(uchar com)//寫命令子函數--寫指令
{
lcdrs=0;lcden=0;lcdrw=0; //此時命令
P0=com;//命令寫入P0口
delay0(5);
lcden=1;
delay0(5);//出現下降沿
lcden=0;
}

/*-------------------------------------------------------*/
/*--------------------向LCD1602寫數據--------------------*/
void write_data(uchar date)//寫命令子函數--寫數據
{
lcdrs=1;lcden=0;lcdrw=0;
P0=date;//數據寫入P0
delay0(5);
lcden=1;
delay0(5);//出現下降沿
lcden=0;
}

/*-------------------------------------------------------*/
/*-------------------外部中斷0計數程序-------------------*/
void counter(void) interrupt 0
{
EX0=0; //關外部中斷0
count++;
if(count==4) //4次循環為電機轉一圈
{
count=0; //初始化計數
z++; //轉圈計數加1
} //計數+1
EX0=1; //開外部中斷0
return;
}

/*-------------------------------------------------------*/
/*-----------------內部中斷0計時計數程序-----------------*/
void Timer_0(void) interrupt 1
{
TH0=0x3C; //50ms定時
TL0=0xB0;
msec++;
if(msec==20) //50*20=1S
{
msec=0;
zhuan=z*60;
z=0;
}
}
/*-------------------------------------------------------*/
/*----------------------埠初始化-----------------------*/
void int_all()
{
warning=0; //關蜂鳴器
z=0; //初始化z的值
count=0; //初始化count的值
zhuan=0; //初始化轉的值
TMOD=0x01; //內部中斷定時器選擇
TH0=0x3C; //50ms定時
TL0=0xB0;
lcdrw=0; //選擇LCD寫數據指令
lcden=0; //使能信號開始為低
write_com(0x38); //16*2顯示,5*7點陣,八位數據
delay0(15);
write_com(0x38);
delay0(15);
write_com(0x38);
write_com(0x08);//顯示關、關游標,不閃爍
write_com(0x01);//清屏
delay0(15);
write_com(0x04);
delay0(15);
write_com(0x0c);
EA=1; //開中斷總開關
ET0=1; //開內部中斷0
TR0=1; //計時器開始工作
IT0=1; //外部中斷0為下降沿觸發
EX0=1; //開外部中斷0
}

/*-------------------------------------------------------*/
/*------------------------LCD顯示------------------------*/
void display ()
{
write_com(0x01); //清屏
write_com(0x06); //調用寫命令函數,向右移動游標(增量)
write_com(0x80|0x03); //初始位置
for(num=0;table0[num] != '\0';num++) //第一行的字元
{
write_data(table0[num]);
delay0(1);
}
write_com(0x80|0x40); //換行
for(num=0;table1[num]!='\0';num++)
{
write_data(table1[num]);
delay0(1);
}
qian=(zhuan/1000+'0'); //轉換轉速的千位
=(zhuan/100%10+'0'); //轉換轉速的百位
shi=(zhuan/10%10+'0'); //轉換轉速的十位
ge=(zhuan%10+'0'); //轉換轉速的個位
write_com(0x80|0x46);
write_data(qian);
delay0(50);
write_com(0x80|0x47);
write_data();
delay0(50);
write_com(0x80|0x48);
write_data(shi);
delay0(50);
write_com(0x80|0x49);
write_data(ge);
delay0(5000);
}

/*-------------------------------------------------------*/
/*-------------------轉速過高警告程序--------------------*/
void warning_speed()
{
if(zhuan>2400||zhuan<800) //高於5000轉打開警告
{
warning=1;
}
if(zhuan<=2400&&zhuan>800) //低於5000轉關閉警告
{
warning=0;
}
}
/*-------------------------------------------------------*/
/*------------------------主函數-------------------------*/
void main()
{
int_all(); //全局初始化
while(1)
{
warning_speed(); //轉速警告
display (); //LCD顯示
}
}

C. 基於51單片機直流電機調速測速模擬原理

基於51單片機直流電機調速測速模擬原理是以STC90C52RC單片機為主控晶元,利用PWM的原理,通過按鍵對直流電機進行調速,實現正反轉;採用霍爾感測器對直流電機的轉動進行計數,並通過主控晶元將採集到的計數值轉化為直流電機的當前速度值;利用LCD1602顯示模塊將計算得到的值進行實時顯示。

D. 單片機直流電機調速系統的設計

單片機控制的直流電機調速系統

摘要:本文採用AT89C52作為主控晶元,設計了一種直流電機高速系統。AT89C52產生單極性工作制的定頻PWM脈沖,配合驅動能力強大的L298,從而實現控制和調整直流電機轉速和轉向的功能。利用軟體編程,能夠設置多個占空比不同的脈沖,使得電機轉速可以逐步增大或減小,同時在LCD上顯示電機的工作狀態,易於觀察和識別。本設計主要由電機調速控制模塊和LCD顯示模塊組成,具有電路簡單,可靠性高,運行穩定的特點,是對於小型直流電機調速裝置的一種探究。

關鍵詞:AT89C52 定頻PWM LCD 直流電機

目 錄

1 緒論... 1

2 方案設計... 1

2.1 功能要求... 1

2.2 方案論證... 1

3 系統硬體的設計... 3

3.1 電機調速控制模塊... 3

3.2 LCD顯示模塊... 6

3.3 硬體設計總原理圖... 11

4 系統軟體的設計... 12

4.1 主程序... 12

5 調試及性能分析... 14

5.1 調試與測試... 14

6 結論... 15

7 致謝... 15

參考文獻... 17

附錄... 18

E. 基於單片機的直流電機調速系統設計怎麼測速

測速電路自己設計的話可以使用
紅外對管
測速,或者
激光測速
。。。網上也有程序的
測速感測器
,自己找找就好了,有數據手冊,可以說明怎麼使用的,一般就是
高低電平
變化。你的
直流電機
上需要加一個測速
碼盤
,靠這個檢測的,也有其他方式,具體看你的測速感測器是什麼樣的。

F. 用51單片機測電機的轉速,,,,,謝謝各位。。

用一個轉速感測器或者編碼器,利用單片機引腳的脈沖沿捕獲中斷,1個計數器用於記錄2相鄰脈沖捕獲時間間隔,一個計數器用於記錄脈沖數。
然後計算1s時間內脈沖的個數就是頻率啦,再通過換算的電機轉速;

G. 鍩轟簬51鍗曠墖鏈虹殑杞閫熸祴閲忚捐★紝紼嬪簭緙栧啓錛佺數璺浠跨湡鍥

嫻嬮噺杞閫燂紝浣跨敤鍏夌數浼犳劅鍣錛岃嫻嬬數鏈哄甫鍔ㄧ焊鐗囨棆杞錛屾垜浠鍦ㄧ焊鐗囦笂寮浜10灝忓瓟錛岀數鏈烘瘡鏃嬭漿涓鍛ㄥ氨浼氫駭鐢10涓鑴夊啿錛屼駭鐢12涓鑴夊啿錛岃佹眰灝嗚漿閫熷礆紙杞/鍒嗭級鏄劇ず鍦ㄦ暟鐮佺′笂銆

瀹為獙紼嬪簭濡備笅錛

#include<REG52.H>

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

#defineLED_DATP1

sbitLED_SEG0=P0^3;

sbitLED_SEG1=P0^2;

sbitLED_SEG2=P0^1;

sbitLED_SEG3=P0^0;

//sbitpin_SpeedSenser=P3^5;//鍏夌數浼犳劅鍣ㄤ俊鍙鋒帴鍦═1涓

#defineTIME_CYLC100//12M鏅舵尟錛屽畾鏃跺櫒10ms涓鏂涓嬈鎴戜滑1縐掕$畻涓嬈¤漿閫//1000ms/10ms=100

#definePLUS_PER10//鐮佺洏鐨勯嬌鏁錛岃繖閲屽亣瀹氱爜鐩樹笂鏈10涓榻匡紝鍗充紶鎰熷櫒媯嫻嬪埌10涓鑴夊啿錛岃や負1鍦

#defineK100.0//鏍″噯緋繪暟

unsignedcharcodetable[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchardataDisbuf[4];//鏄劇ず緙撳啿鍖

uintTcounter=0;//鏃墮棿璁℃暟鍣

bitFlag_Fresh=0;//鍒鋒柊鏍囧織

bitFlag_clac=0;//璁$畻杞閫熸爣蹇

bitFlag_Err=0;//瓚呴噺紼嬫爣蹇

//鍦ㄦ暟鐮佺′笂鏄劇ず涓涓鍥涗綅鏁

voidDisplayFresh();

//璁$畻杞閫燂紝騫舵妸緇撴灉鏀懼叆鏁扮爜綆$紦鍐插尯

voidClacSpeed();

//鍒濆嬪寲瀹氭椂鍣═0

voidinit_timer0();

//鍒濆嬪寲瀹氭椂鍣═1

voidinit_timer1();

//寤舵椂鍑芥暟

voidDelay(uintms);

voidit_timer0()interrupt1/*interruptaddressis0x000b*/

{

TF0=0;//d瀹氭椂鍣T0鐢ㄤ簬鏁扮爜綆$殑鍔ㄦ佸埛鏂

//

TH0=0xC0;/*initvalues*/

TL0=0x00;

Flag_Fresh=1;

Tcounter++;

if(Tcounter>TIME_CYLC)

{Flag_clac=1;//鍛ㄦ湡鍒幫紝璇ラ噸鏂拌$畻杞閫熶簡

}

}

voidit_timer1()interrupt3/*interruptaddressis0x001b*/

{

TF1=0;//瀹氭椂鍣═1鐢ㄤ簬鍗曚綅鏃墮棿鍐呮敹鍒扮殑鑴夊啿鏁

//瑕侀熷害涓嶆槸寰堝揩錛孴1姘歌繙涓嶄細鐩婂

Flag_Err=1;//濡傛灉閫熷害寰堥珮錛屾垜浠搴旇冭檻鍙﹀栦竴縐嶆祴閫熸柟娉曪紝錛氳剦鍐插藉害綆楄漿閫

}

voidmain(void)

{

Disbuf[0]=0;//寮鏈烘椂錛屽垵濮嬪寲涓0000

Disbuf[1]=0;

Disbuf[2]=0;

Disbuf[3]=0;

init_timer0();

init_timer1();

while(1)

{

if(Flag_Fresh)

{Flag_Fresh=0;

DisplayFresh();//瀹氭椂鍒鋒柊鏁扮爜綆℃樉紺

}

if(Flag_clac)

{Flag_clac=0;

ClacSpeed();//璁$畻杞閫燂紝騫舵妸緇撴灉鏀懼叆鏁扮爜綆$紦鍐插尯

Tcounter=0;//鍛ㄦ湡瀹氭椂娓呴浂

TH1=TL1=0x00;//鑴夊啿璁℃暟娓呴浂

}

if(Flag_Err)//瓚呴噺紼嬪勭悊

{

//鏁扮爜綆℃樉紺哄瓧姣'EEEE'

Disbuf[0]=0x9e;//寮鏈烘椂錛屽垵濮嬪寲涓0000

Disbuf[1]=0x9e;

Disbuf[2]=0x9e;

Disbuf[3]=0x9e;

while(1)

{DisplayFresh();//涓嶅啀嫻嬮絳夊緟澶嶄綅i

}

}

}

}

//鍦ㄦ暟鐮佺′笂鏄劇ず涓涓鍥涗綅鏁

voidDisplayFresh()

{

P2|=0xF0;

LED_SEG0=0;

LED_DAT=table[Disbuf[0]];

Delay(1);

P2|=0xF0;

LED_SEG1=0;

LED_DAT=table[Disbuf[1]];

Delay(1);

P2|=0xF0;

LED_SEG2=0;

LED_DAT=table[Disbuf[2]];

Delay(1);

P2|=0xF0;

LED_SEG3=0;

LED_DAT=table[Disbuf[3]];

Delay(1);

P2|=0xF0;

}

//璁$畻杞閫燂紝騫舵妸緇撴灉鏀懼叆鏁扮爜綆$紦鍐插尯

voidClacSpeed()

{

uintspeed;

uintPlusCounter;

PlusCounter=TH1*256+TL1;

speed=K*(PlusCounter/PLUS_PER)/60;//K鏄鏍″噯緋繪暟錛屽傞熷害涓嶅噯錛岃皟鑺侹鐨勫ぇ灝

Disbuf[0]=(speed/1000)%10;

Disbuf[1]=(speed/100)%10;

Disbuf[2]=(speed/10)%10;

Disbuf[3]=speed%10;

}

//鍒濆嬪寲瀹氭椂鍣═0

voidinit_timer0()

{

TMOD&=0xf0;//瀹氭椂10姣縐/*Timer0mode1withsoftwaregate*/

TMOD|=0x01;/*GATE0=0;C/T0#=0;M10=0;M00=1;*/

TH0=0xC0;/*initvalues*/

TL0=0x00;

ET0=1;/*enabletimer0interrupt*/

EA=1;/*enableinterrupts*/

TR0=1;/*timer0run*/

}

//寤舵椂鍑芥暟

voidDelay(uintms)

{

uchari;

while(ms--)

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

}

//鍒濆嬪寲瀹氭椂鍣═1

voidinit_timer1()

{

TMOD&=0x0F;/*Counter1mode1withsoftwaregate*/

TMOD|=0x50;/*GATE0=0;C/T0#=1;M10=0;M00=1;*/

TH1=0x00;/*initvalues*/

TL1=0x00;

ET1=1;/*enabletimer1interrupt*/

EA=1;/*enableinterrupts*/

TR1=1;/*timer1run*/

}

閱讀全文

與基於單片機的電機測速系統相關的資料

熱點內容
阿里雲伺服器登錄密碼忘了怎麼辦 瀏覽:495
linuxwwwdata 瀏覽:992
用蘋果終端java編譯 瀏覽:364
安卓怎麼拼接截屏 瀏覽:17
如何從安卓手機上修改wifi密碼 瀏覽:226
安卓12一加如何升級 瀏覽:86
冒險小虎隊pdf下載 瀏覽:542
程序員黑話今晚加班 瀏覽:930
androidgetmethod 瀏覽:798
編程輸出1112 瀏覽:792
加密貨幣礦怎麼樣 瀏覽:212
信息流優化師和程序員 瀏覽:101
pythonkivy框架 瀏覽:734
xshell怎樣返回上一條命令 瀏覽:489
python函數內存機制 瀏覽:829
手機國際網路伺服器地址 瀏覽:398
安卓系統投影儀怎麼連接外接設備 瀏覽:816
陰線向下接進20日均線選股源碼 瀏覽:433
穴點陣圖pdf 瀏覽:46
高頻量化演算法 瀏覽:909