微機原理-無刷直流風(fēng)扇調(diào)速與測速分析_第1頁
微機原理-無刷直流風(fēng)扇調(diào)速與測速分析_第2頁
微機原理-無刷直流風(fēng)扇調(diào)速與測速分析_第3頁
微機原理-無刷直流風(fēng)扇調(diào)速與測速分析_第4頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、工學(xué)院微機原理 (3 級)項目報告項目名稱:微機原理課程設(shè)計項目題目:無刷直流風(fēng)扇調(diào)速與測速指導(dǎo)教師:系別:機電系專業(yè):機械設(shè)計制造及其自動化組員信息 學(xué)號:姓名:王組員信息 學(xué)號:姓名:郭完成時間:2014 年12月 01日至 2016年1 月 3日成績:評閱人:目錄一、學(xué)習(xí)目標(biāo) .(1)二、項目要求 .(1)三、轉(zhuǎn)速測量和調(diào)節(jié)系統(tǒng)的硬件構(gòu)成 .(1)四、程序流程圖并說明方案思路 .(3)五、風(fēng)扇轉(zhuǎn)速與占空比之間的關(guān)系表格和曲線 .( 4)六、設(shè)計程序 .(5)七、分析設(shè)計過程出現(xiàn)的問題 .(12)八、方案總結(jié) .(13)一、學(xué)習(xí)目標(biāo)本次系統(tǒng)作業(yè)的目的在于:通過脈沖寬度調(diào)節(jié)實現(xiàn)無刷直流風(fēng)扇轉(zhuǎn)

2、速的改變;借助風(fēng)扇轉(zhuǎn)動時產(chǎn)生的脈沖信號,測量風(fēng)扇的轉(zhuǎn)速并顯示; 比較每組風(fēng)扇從某一轉(zhuǎn)速 (600r/min) 到另一轉(zhuǎn)速 (2000r/min) 穩(wěn)定運轉(zhuǎn)的所需要的時間。通過比較試驗結(jié)果的估算結(jié)果并討論結(jié)果差異的主要原因, 讓學(xué)生展示對無刷直流風(fēng)扇數(shù)學(xué)模型建立和調(diào)節(jié)方法局限性有深入理解。二、項目要求檢查項目要求轉(zhuǎn)速顯示風(fēng)扇轉(zhuǎn)速能夠顯示在 LED上,轉(zhuǎn)速單位是 r/min ,刷新周期為 1 秒鐘左右風(fēng)扇轉(zhuǎn)速可調(diào)風(fēng)扇轉(zhuǎn)速可以改變,根據(jù)要求轉(zhuǎn)速在 700-1400r/min風(fēng)扇轉(zhuǎn)速與顯示通過簡單方法給風(fēng)扇加負(fù)載,隨著轉(zhuǎn)速的下降應(yīng)該看到轉(zhuǎn)速變化的顯示轉(zhuǎn)速指令輸入環(huán)節(jié)通過串口或鍵盤輸入給定轉(zhuǎn)速給定某一轉(zhuǎn)

3、速, 1200-1500 之間,看顯示轉(zhuǎn)速的穩(wěn)定性轉(zhuǎn)速調(diào)節(jié)功能在穩(wěn)定轉(zhuǎn)動條件下 1500r/min ,在 30cm 處加載一個外加一個風(fēng)扇,對照加載前后的穩(wěn)態(tài)轉(zhuǎn)速隨機提出有關(guān)轉(zhuǎn)速測量、 PWM 輸出和轉(zhuǎn)速控制方面的問回答問題題,要有針對性,檢查設(shè)計過程中的付出。三、系統(tǒng)硬件構(gòu)成12風(fēng)扇電路:接線:黃線接 Vcc,黑線接地,綠線接P32,藍(lán)線接 P25。輸出: OC輸出,如下圖四、畫程序流程圖并說明方案思路開始初始化中斷產(chǎn)生PWM 波查詢有無按鍵操作N查詢是否收到串口數(shù)據(jù)N查詢風(fēng)扇轉(zhuǎn)速是否更新N查詢是否需要反饋調(diào)整N顯示轉(zhuǎn)速和占空比YYYY調(diào)整占空比更新目標(biāo)轉(zhuǎn)速刷新數(shù)碼管緩存數(shù)據(jù)計算需要的占空比

4、3程序主要用查詢法判斷需要執(zhí)行的操作,并且利用中斷處理函數(shù)來產(chǎn)生各種對應(yīng)的標(biāo)志位來通知主循環(huán),在主循環(huán)中進(jìn)行要求的運算。其中 T0 定時約 500us,它的每次中斷相當(dāng)于輸出一個載波脈沖,實際上是用載波脈沖數(shù)為200 個,載波周期為500us 的方式構(gòu)成周期為100ms的 PWM波。 T1 用做波特率發(fā)生器。 T2 定時 60ms。每次 T2 中斷能重置一次按鍵處理標(biāo)志位,這個標(biāo)志位能保證每60ms內(nèi)只允許處理一次按鍵操作,讓按鍵處理既能高速增減,也能準(zhǔn)確;此外當(dāng)有合計25 次 T2 的中斷發(fā)生時,它能保存當(dāng)前的轉(zhuǎn)速值并且通知主循環(huán)刷新數(shù)碼管顯示請況, 因此我們計算轉(zhuǎn)速的方式是 “統(tǒng)計 1.5

5、s 內(nèi)風(fēng)扇的轉(zhuǎn)動圈數(shù)” 。利用在 T2 中斷的定時判斷, 也能把當(dāng)前數(shù)碼管的顯示請況發(fā)回PC機。串口通訊方面,也是利用一個標(biāo)志位來申明是否接受了數(shù)據(jù)。使用“操作符+操作數(shù)據(jù)”的 5 字節(jié)字符串?dāng)?shù)據(jù)格式,例如用“ A0980”代表需要風(fēng)扇按 n=980r/min 的速度運行。通知標(biāo)志被主循環(huán)檢測到的時候, 會將串口數(shù)據(jù)檢查并且保存成整數(shù)形式, 方便后續(xù)函數(shù)的調(diào)用。 當(dāng)串口數(shù)據(jù)不合理時,會發(fā)送信息到 PC機。五、風(fēng)扇轉(zhuǎn)速與占空比之間的關(guān)系表格和曲線編程實現(xiàn)單片機給 PC定時發(fā)送轉(zhuǎn)速與占空比數(shù)據(jù)后,取對應(yīng)的數(shù)據(jù)制表如下。占空比 (%)10095908580757065605550轉(zhuǎn)速21401960

6、182017401680160015001420130011801060n/(r/min)占空比 (%)454035302520151050轉(zhuǎn)速90074058044010000000n/(r/min)將 500 個轉(zhuǎn)速與占空比數(shù)據(jù)擬合成關(guān)系曲線如下4可以發(fā)現(xiàn),在風(fēng)扇正常轉(zhuǎn)動時,轉(zhuǎn)速與占空比有著正相關(guān)的關(guān)系,占空比越大,風(fēng)扇的轉(zhuǎn)速越高。此外,當(dāng)占空比小于26%時,風(fēng)扇停轉(zhuǎn)。六、設(shè)計程序1、主程序:#include <reg52.h>#define jingzhen 11059200UL/*使用 11.0592M晶體 */#define botelv 9600UL/*波特率定義為 9

7、600*/volatile unsigned char sending;sbit dula =P26;/ 段選信號的鎖存器控制sbit wela =P27;/ 位選信號的鎖存器控制sbit PwmOut=P25;/PWM 輸出位置藍(lán)線sbit need_steady=P34; /接地后開始調(diào)整sbit HideValue =P35; /接地后顯示目標(biāo)轉(zhuǎn)速sbit K3=P36;/ 增加占空比按鈕sbit K4=P37;/ 減少占空比按鈕unsigned char code wei=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/數(shù)碼管各位的碼表unsigned

8、 char code duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0-9的碼表unsigned char SPEED,SPEED_temp,count_time,count_send,wait;unsigned char PWM_count,PWM_turn,PWM_max; /控制 PWM波的計數(shù),轉(zhuǎn)變值,周期個數(shù),unsigned char Number8=0,value6=0; /數(shù)碼管顯示緩存和串口字符串?dāng)?shù)據(jù)緩存int Target;bit flag=0,flag_k=0,flag_send=0,flag_direct

9、=0;/ 通知標(biāo)志5void Timer0Init(void); /初始化函數(shù)void Timer2Init(void);void Ext0Init(void);void UARTInit(void);void check();void VALUE_To_Num(int num,unsigned char d);/數(shù)據(jù)填入數(shù)碼管函數(shù)void direct();/ 直接與反饋調(diào)節(jié)PWM函數(shù)void adjust();void Display();void send(unsigned char d);void sendc(unsigned char * pd);void sendc_num(uns

10、igned char * pd);void main()flag_direct=0;flag_send=0;wait=5;PWM_count=0,PWM_turn=170,PWM_max=200;Timer0Init();Timer2Init();Ext0Init() ;UARTInit();need_steady=1;/ 接地后開始調(diào)整HideValue=1;/ 接地后顯示目標(biāo)轉(zhuǎn)速K3=1;/ 增加占空比按鈕K4=1;/ 減少占空比按鈕while(1)/ 主循環(huán)if(flag_k)/ 控制每 60ms 允許通過按鍵調(diào)整一次PWM_turnif(!K3&&PWM_turn<

11、;190) PWM_turn+;if(!K4&&PWM_turn>10 ) PWM_turn-;flag_k=0;if(flag_direct)check();direct();flag_direct=0;wait=4;/ 傳送了直接值后不能馬上進(jìn)行反饋調(diào)整,誤差太大了if(flag)/ 控制約 1.5s允許調(diào)整數(shù)碼管顯示值6VALUE_To_Num(500*(SPEED_temp)/25),4);if(wait>0)wait-;/ 減緩約 4.56s才允許反饋調(diào)整if(0=wait)&&(!need_steady)/ 滿足條件時啟用轉(zhuǎn)速反饋調(diào)整ad

12、just();flag=0;VALUE_To_Num(PWM_turn,0);if(!HideValue)VALUE_To_Num(Target,0);/ 直接按下K2 顯示當(dāng)前的目標(biāo)轉(zhuǎn)速的值,可以檢查有沒有收到串口數(shù)據(jù)if(flag_send)sendc_num(Number); flag_send=0;Display();2、初始化子程序void Timer0Init(void)TMOD |= 0x01; TL0 = 0x33; TH0 = 0xFE;TF0 = 0;EA =1;/ET0 = 1;/TR0 = 1;void Timer2Init(void)RCAP2H = 0x28;RCA

13、P2L = 0x00;EA=1;ET2=1;TR2=1;/T0 16位定時/ 設(shè)置定時初值/ 設(shè)置定時初值/ 清除 TF0 標(biāo)志總中斷打開定時器 0 中斷打開/ 定時器 0 開始計時/ 定時 60ms/ 打開總中斷/ 打開定時器 2 中斷/ 定時器 2 開始計時void ext0Init(void)7INT0=1;/ 置高接收口P3.2PX0=1;/ 設(shè)置高中斷優(yōu)先級EA=1;/ 全局中斷開IT0=1;/ 邊沿觸發(fā)EX0=1;/ 外部中斷0 開void UARTInit(void)/9600bps11.0592MHzEA=0;/ 暫時關(guān)閉中斷TMOD|=0x20;/ 定時器 1 工作在模式2,

14、自動重裝模式SCON=0x50;/ 串口工作在模式1TH1=256-jingzhen/(botelv*12*16); /計算定時器重裝值TL1=256-jingzhen/(botelv*12*16);PCON|=0x80;/ 串口波特率加倍PS=1;/ 給串口中斷高優(yōu)先級ES=1;/ 串行中斷允許TR1=1;/ 啟動定時器1REN=1;/ 允許接收EA=1;/ 允許中斷3、中斷操作程序/*外部中斷0 統(tǒng)計轉(zhuǎn)速脈沖*/void ext0(void) interrupt 0/ 負(fù)責(zé)統(tǒng)計速度值,信號下降沿產(chǎn)生中斷SPEED+;/*定時器 0 負(fù)責(zé)調(diào)控PWM波*/void time0(void) in

15、terrupt 1 using 1/ 負(fù)責(zé)產(chǎn)生PWM波TL0 = 0x33;/ 設(shè)置定時初值TH0 = 0xFE;/ 設(shè)置定時初值PwmOut=PWM_count<PWM_turn?1:0;/ 計數(shù)值在0199 共 200 個組成 ;PWM_turn=0時只輸出低電平,PWM_turn=PWM_max 時只輸出高電平PWM_count+;if(PWM_count>=PWM_max)/PWM_count達(dá)到頂端時回到初始PWM_count=0;/*串行中斷服務(wù)函數(shù)接受速度控制命令8*/void serial() interrupt 4static unsigned char writ

16、e_point=0;static bit read_able=0;unsigned char Temp;if(RI)/ 判斷是接收中斷產(chǎn)生RI=0;/ 標(biāo)志位清零Temp=SBUF;/ 讀入緩沖區(qū)的值if(read_able)valuewrite_point=Temp;write_point+;if(write_point>4)/ 只讀入 4 個字節(jié)flag_direct=1;/ 通知主函數(shù)可以調(diào)節(jié)PWM了read_able=0;write_point=0;wait=4;/ 立即暫停反饋調(diào)整if(Temp='A')/'A'作為特征碼檢測,也可以使用其他的字

17、母來規(guī)定控制代碼write_point=0;/ 一旦收到A_ _ _ _,指針回到開頭并且允許接受數(shù)據(jù)read_able=1;if(TI)/如果是發(fā)送標(biāo)志位,清零TI=0;sending=0; /清正在發(fā)送標(biāo)志/*定時器 2 調(diào)節(jié)數(shù)碼管的刷新速度*/void time2(void) interrupt 5 using 1/ 定時器 2 中斷TF2=0;/必要的軟件清中斷標(biāo)志count_time+;flag_k=1;if (count_time>=25)9flag=1;SPEED_temp=SPEED;SPEED=0;count_time=0;count_send+;if (count_s

18、end>=5)flag_send=1;count_send=0;4、輔助處理程序/*檢查串口數(shù)據(jù)*/void check()unsigned char i; for(i=0;i<4;i+)if(valuei<'0'|valuei>'9')valuei='0'Target=(value0-'0')*1000+(value1-'0')*100+(value2-'0')*10+(value3-'0');if(Target>2180|Target<280)

19、/ 禁止不可調(diào)節(jié)范圍的PWMsendc("范圍外的轉(zhuǎn)速值!n");/*將數(shù)據(jù)填入數(shù)碼管緩存*/void VALUE_To_Num(int Num,unsigned char d)unsigned char i; for(i=7;i>3;i-)Numberi-d=Num%10; Num=Num/10;/*直接調(diào)節(jié)PWM函數(shù)*/void direct()if(Target>2180|Target<280)/ 禁止不可調(diào)節(jié)范圍的PWM10return;if(Target<1520)PWM_turn=(0.00003*Target*Target+ 0.013

20、11*Target+ 53.467);/使用分段函數(shù)更貼合PWM-n的關(guān)系elsePWM_turn=(-0.00009*Target*Target + 0.4299 *Target - 302.08); if(PWM_turn>200) PWM_turn=200;/*反饋調(diào)節(jié)PWM函數(shù)*/void adjust()double num;num=SPEED_temp*20;if(Target>2180|Target<280)/ 禁止不可調(diào)節(jié)范圍的PWMreturn;if(Target<1520)PWM_turn=PWM_turn+( 0.00006*Target + 0.

21、01311)*(Target-num);/原理是 dy=f'(x)*dxelse/屬于比例調(diào)節(jié)PWM_turn=PWM_turn+(-0.00018*Target + 0.4299)*(Target-num);if(num<(Target/4)/防堵轉(zhuǎn)檢測direct();wait=4;if(PWM_turn>200) PWM_turn=200;/*數(shù)碼管顯示程序*/void Display()unsigned char num; unsigned int m; for(num=0;num<8 ;num+)P0=weinum; wela=1; wela=0;P0=du

22、anNumbernum;dula=1;dula=0;for(m=128;m>0;m-);/ 時間間隔短,利用人眼的余輝效應(yīng),覺得每個數(shù)碼管都一直在亮。11/*-發(fā)送一個字節(jié)-*/void send(unsigned char d)/發(fā)送一個字節(jié)的數(shù)據(jù),形參d 即為待發(fā)送數(shù)據(jù)。SBUF=d; /將數(shù)據(jù)寫入到串口緩沖sending=1;/設(shè)置發(fā)送標(biāo)志while(sending); /等待發(fā)送完畢/*-發(fā)送一個字符串-*/void sendc(unsigned char * pd)while(*pd)!='0') /發(fā)送字符串,直到遇到0 才結(jié)束send(*pd); /發(fā)送一個字符pd+; /移動到下一個字符void sendc_num(unsigned char * pd)unsigned char t; for(t=0;t<8;t+)if(t=4) send(' ');send(*pd)+'0');/發(fā)送一個字符pd+;/移動到下一個字符send('n');七、分析設(shè)計過程出現(xiàn)的問題1. 在設(shè)計 PWM的調(diào)控方式的過程中,我們遇到了一個選擇 PWM波周期的問題。查閱資料后發(fā)現(xiàn), PWM波的周期大小能直接影響小風(fēng)扇的輸出轉(zhuǎn)矩。在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論