《片機課程設(shè)計-- 簡易直流電壓表的設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《片機課程設(shè)計-- 簡易直流電壓表的設(shè)計(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、湖南工業(yè)大學
課程設(shè)計
資料袋
電氣與信息工程學院(系、部) 2012 ~ 2013學年第 1 學期
課程名稱單片機應用系統(tǒng)指導教師肖伸平職稱教授
學生姓名米林專業(yè)班級自動化1002班學號1040700910
題目簡易直流電壓表的設(shè)計
成績起止日期 2012年 12 月31日~ 2013年 1 月11日
目錄清單
序號
材 料 名 稱
資料數(shù)量
備 注
1
課程設(shè)計任務(wù)書
2
課程設(shè)計說明書
3
課程設(shè)計圖紙
張
4
5
6
湖南工業(yè)大學
課程設(shè)計任務(wù)書
201
2、2—2013學年第 1 學期
電氣與信息工程學院(系、部)自動化專業(yè)1002班級
課程名稱:單片機應用系統(tǒng)
設(shè)計題目:基于單片機的步進電機控制器
完成期限:自 2012年 12 月31日至 2013年 1月11日共 2 周
內(nèi)
容
及
任
務(wù)
試題 設(shè)計一個基于單片機的步進電機控制器。已知三相步進電機以三相6拍方式工作,A、B、C分別由P1.2、P1.1、P1.0控制,正轉(zhuǎn)時狀態(tài)是:A→AB→B→BC→C→CA→A(100→110→010→011→001→101→100)。開關(guān)SA斷開時,步進電機正轉(zhuǎn),每步定時1mS,對應速度167轉(zhuǎn)/分;開關(guān)
3、SA閉合時,步進電機反轉(zhuǎn),每步定時2mS,對應速度83轉(zhuǎn)/分。步進電機正轉(zhuǎn)速度(167轉(zhuǎn)/分)或反轉(zhuǎn)速度(-83轉(zhuǎn)/分)要求顯示在LED數(shù)碼管上。
注:要求首先采用PROTEUS完成單片機最小系統(tǒng)的硬件電路設(shè)計及仿真;程序仿真測試通過后,再下載到單片機板上進行硬件調(diào)試。
進
度
安
排
起止日期
工作內(nèi)容
2012. 12.31
講述設(shè)計內(nèi)容及基本原理
2013.1.1-2013.1.8
進行系統(tǒng)的設(shè)計
2013.1.10-2013.1.11
進行系統(tǒng)的調(diào)試
主
要
參
考
資
料
[1] 劉苗生、潘宗預.單片機測控系統(tǒng)設(shè)計.中國物質(zhì)出版社,2006年
4、
[2] 周潤景,張麗娜.基于PROTEUS的電路及單片機系統(tǒng)設(shè)計與仿真[M] .北京航天航空大學出版社,2006
指 導 教 師 (簽字):年月日
系(教研室)主任(簽字):年月日
(單片機應用系統(tǒng))
設(shè)計說明書
(題目)
基于單片機的步進電機控制器
起止日期: 2012年 12 月31日至 2013年 1 月11日
學生姓名
米林
班級
自動化1002班
學號
成績
指導教師(簽字)
電氣與信息工程學院
2013年1月11日
一、設(shè)計任務(wù):
試題 設(shè)計一個基于單片機的步進電機控制器。已知三相步進電機以三相6拍方式工作,A、B、
5、C分別由P1.2、P1.1、P1.0控制,正轉(zhuǎn)時狀態(tài)是:A→AB→B→BC→C→CA→A(100→110→010→011→001→101→100)。開關(guān)SA斷開時,步進電機正轉(zhuǎn),每步定時1mS,對應速度167轉(zhuǎn)/分;開關(guān)SA閉合時,步進電機反轉(zhuǎn),每步定時2mS,對應速度83轉(zhuǎn)/分。步進電機正轉(zhuǎn)速度(167轉(zhuǎn)/分)或反轉(zhuǎn)速度(-83轉(zhuǎn)/分)要求顯示在LED數(shù)碼管上。
注:要求首先采用PROTEUS完成單片機最小系統(tǒng)的硬件電路設(shè)計及仿真;程序仿真測試通過后,再下載到單片機實訓板上執(zhí)行。
二、單片機最小系統(tǒng)硬件資源介紹:
※ 89C51單片機;
※ 4位共陽極數(shù)碼管;
※ 2路獨立式開關(guān)
6、按鍵;
※ 外部晶振電路;
※ 3個LED發(fā)光二極管
三、設(shè)計方案:
根據(jù)要求整個設(shè)計大體可分為四塊:
一是2個按鍵K0,K1,將用戶所需來選擇步進電機的工作狀態(tài)。我們將開關(guān)連入單片機的P1口,通過按鍵開關(guān)的高低電平狀態(tài)來讀入我們所需的控制信號。硬件上直接把開關(guān)分別接在單片機的接口上,通過查詢端口信號來動作,將控制信號處理。在設(shè)計開關(guān)部分時,還考慮到機械抖動的影響,采取硬件方式—并聯(lián)電容來去抖。
二是3個LED發(fā)光二極管的顯示步進電機工作狀態(tài)模塊。在設(shè)計中步進電機正轉(zhuǎn)是黃燈亮,反轉(zhuǎn)是紅燈亮,停止不轉(zhuǎn)是綠燈亮。設(shè)計中將3個發(fā)光二極管分別接到單片機P3口,受到單片機的輸出信號控制。
7、
三是步進電機的工作模塊。要想步進電機按照我們想要的方式運轉(zhuǎn),將步進電機一端接到+12V的電源,一端接到單片機P3口,受單片機的輸出信號控制。
四是4位數(shù)碼管顯示步數(shù)的模塊。設(shè)計中主要是利用軟件編程的算法來實現(xiàn)步數(shù)的累計和顯示,同樣,4位數(shù)碼管接到單片機的P0口和P2口受單片機輸出信號的控制,在硬件上使用的是動態(tài)顯示的接法。
四、設(shè)計思路與原理
此系統(tǒng)主要由單片機、步進電機、速度顯示模塊、工作狀態(tài)控制與顯示模塊組成。整體框圖如圖1。
圖1 系統(tǒng)整體框圖
1、步進電機的工作原理
步進電機通過輸入脈沖信號進行控制,即電機的總轉(zhuǎn)動角度由輸入脈沖總數(shù)決定,而電機的轉(zhuǎn)速由脈沖信號頻率決定。步
8、進電機的驅(qū)動電路是根據(jù)單片機產(chǎn)生的控制信號進行工作。因此,單片機通過向步進電機驅(qū)動電路發(fā)送控制信號就能實現(xiàn)對步進電機的控制。
如圖2所示,U1、V1、W1接電源,分別有三個開關(guān)控制,U2、V2、W2分別接地。
如果給處于錯齒狀態(tài)的相通電,則轉(zhuǎn)子在電磁力的作用下,將向磁導率最大(即最小磁阻位置)位置轉(zhuǎn)動,即向趨于對齒的狀態(tài)轉(zhuǎn)動。
圖2 步進電機工作原理圖
2、步進電機的啟??刂?
步進電機由于其電氣特性,運轉(zhuǎn)時會有步進感 ,即振動感。為了使電機轉(zhuǎn)動平滑 ,減小振動 ,可在步進電機控制脈沖的上升沿和下降沿采用細分的梯形波 ,可以減小步進電機的步進角 ,提高電機運行的平穩(wěn)性。在步進電機停轉(zhuǎn)時
9、 ,為了防止因慣性而使電機軸產(chǎn)生順滑 ,則需采用合適的鎖定波形 ,產(chǎn)生鎖定磁力矩 ,鎖定步進電機的轉(zhuǎn)軸 ,使步進電機的轉(zhuǎn)軸不能自由轉(zhuǎn)動。
3、步進電機的轉(zhuǎn)向控制
如果給定工作方式正序換相通電 ,步進電機正轉(zhuǎn)。若步進電機的勵磁方式為三相六拍 ,即 A-AB-B-BC-C-CA。如果按反序通電換相 ,即則電機就反轉(zhuǎn)。在這種工作方式下,繞組以A—AB—B—BC—C—CA—A時序(或反時序)轉(zhuǎn)換6次,磁場旋轉(zhuǎn)一周,轉(zhuǎn)子前進一個齒距,每次切換均使轉(zhuǎn)子轉(zhuǎn)動1. 5°,故這種通電方式稱為三相六柏工作方式。其步距角為:
表1六拍的數(shù)學模型
步序
控制位
工作
狀態(tài)
10、
控制
模型
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
C相
P1.1
B相
P1.0
A相
1
0
0
0
0
0
0
0
1
A
01H
2
0
0
0
0
0
0
1
1
AB
03H
3
0
0
0
0
0
0
1
0
B
02H
4
0
0
0
0
0
1
1
0
BC
06H
5
0
0
0
0
0
1
0
0
C
04H
6
0
0
0
0
0
1
0
1
CA
05H
4、步數(shù)顯示模塊原理
速度顯示模
11、塊和工作狀態(tài)顯示模塊,都是通過單片機輸出信號控制發(fā)光二極管LED的亮滅。其中速度顯示模塊中LED構(gòu)成數(shù)碼管,要求顯示4位十進制數(shù),故用到4位數(shù)碼管。要控制多位的顯示電路,需要有字段控制和字位控制??刂品绞椒譃殪o態(tài)顯示方式和動態(tài)顯示方式。靜態(tài)顯示方式,每一位的顯示器都需要配一個8位輸出口來輸出該字位的七段碼,需要片外擴展輸出口。而動態(tài)顯示方式將各數(shù)碼管的對應字段的引腳都并聯(lián)在一起,線路簡單,減少接口,不需片外擴展。這里選用動態(tài)顯示方式。
5、步進電機工作方式
(1)K0為啟/??刂崎_關(guān),控制整個系統(tǒng)的開啟和關(guān)閉。
(2)K1為正/反轉(zhuǎn)控制開關(guān),控制步進電機的轉(zhuǎn)向。
6、工作狀態(tài)顯示模塊
12、
LED發(fā)光二極管顯示步進電機的工作狀態(tài),它們分別接到單片機的P3.3~P3.5。讓單片機輸出通過一個反相器再接到LED陰極,LED陽極接VCC。這樣可以提高電流,有利于二極管的導通,我們可以通過控制P3口的數(shù)據(jù),實現(xiàn)LED的亮滅。
7、位數(shù)碼管顯示步數(shù)模塊
LED數(shù)碼管實際上是由七個發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示。當數(shù)碼管特定的段加上電壓后,這些特定的段就會發(fā)亮,以形成我們眼睛看到的字樣了。通過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。
P0口和P2口的前四個分別接步數(shù)顯示中對
13、數(shù)碼管的字段控制及數(shù)碼管片選,這里主要是由軟件算法來實現(xiàn)單片機輸出的控制。
五、 設(shè)計內(nèi)容:
1、程序流程圖
首先是數(shù)碼管顯示清零,單片機再讀入P1口輸入的按鍵狀態(tài),先判斷是否啟動,如果沒有啟動則是綠燈亮并再判斷,如果啟動了,就接著判斷所需的電機工作模式,再讀入P1口狀態(tài)判斷電機的轉(zhuǎn)向,輸出控制信號為正轉(zhuǎn)黃燈亮,反轉(zhuǎn)紅燈亮,由此可以讓步進電機按照指定的方式運轉(zhuǎn),并且累計步數(shù)再顯示到數(shù)碼管上。最后檢驗P1口是否狀態(tài)改變,如果改變則步數(shù)清零重新開始判斷,不改變則繼續(xù)轉(zhuǎn)動。流程圖如圖3所示。
開始
數(shù)碼管顯示清零
啟動?
選擇工作模式
正轉(zhuǎn)?
b賦予正向指針增量
b賦予反向指針增
14、量
黃燈亮
紅燈亮
P3輸出控制模塊使電機運轉(zhuǎn)
P1口改變?
步數(shù)自增一
調(diào)用步數(shù)顯示程序
綠燈亮
N
N
N
Y
Y
Y
圖3
2、 PROTUES仿真圖
PROTEUS仿真圖圖4所示。
圖4
3、 程序
#include
#include
void delay1(void);
void delay2(void);
void display(int);
int bs=0;
main()
{
char a,b,c,d,j,*q,
done[14]={0x01,0x03,
15、0x02,0x06,0x04,0x05,0x00,0x01,0x05,0x04,0x06,0x02,0x03,0x00};
a=P3;
q=done;
P3=0x20; //P3.5口置1,綠燈亮,不工作
delay1();
L: a=P3;
while(!(a&0x08)) //判斷是否啟動,若沒啟動則重新啟動
{ P3=0x20;
a=P3;
delay1();}
if(a&0x10) //判斷電機是否要正轉(zhuǎn)
{ P3=0x80; //P3.4口為1,
16、電機正轉(zhuǎn),紅燈亮
b=0;}
else
{ P3=0x40; //P3.4口為,電機反轉(zhuǎn),黃燈亮
if(a&0x04)b=7;
else b=4;
}
d=b;
while(1)
{ c=*(q+b); //判斷電機步數(shù)是否走完
if(c==0)b=d; //步數(shù)走完,電機重新再走
else
{ P1=c; //從P1輸出電機控制信號
b++;
if(a&0x10)
{
bs=83;
display(bs)
17、;
display(bs);
}
else
bs=167;
display(bs); //顯示步數(shù)
j=a;
a=P3;
if(a!=j) //判斷P3口狀態(tài)信號是否改變
{ if(!(a&0x08))bs=0; //若為停止信號,總步數(shù)清零
goto L; } //狀態(tài)信號改變,返回到開始,重新對電機控制
}
}
}
void delay1()
{ int i,j;
for(i=0;i<2
18、00;i++)
for(j=0;j<300;j++);
}
void display(int n)
{ unsigned char tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
unsigned char i,k,t,num[4];
num[0]=n%10; //將總步數(shù)的各位分別存在num數(shù)組中
num[1]=(n/10)%10;
num[2]=(n/100)%10;
num[3]=(n/1000)%10;
for(t=0;t<
19、5;t++) //掃描5次
{ k=0x08; //位選碼指向最左一位,第四位
for(i=0;i<4;i++)
{ P2=k; //從P2口輸入位選碼
P0=~(tab[num[i]]); //取出顯示碼,并從P0口輸出顯示碼
k=k>>1; //求下一個位選碼
delay2();
}
}
}
void delay2()
{ int i,j;
for(i=0;i<10;i++)
for(j=0;j<60;j
20、++);
}
六、心得體會
本次課設(shè)是在實習與考試之中穿插進行的,所以時間比較緊張,給課設(shè)的順利完成增加了難度。單片機應用技術(shù)是一門應用性很強綜合性很強的學科,在這次課設(shè)中,我充分感受到了這一點,在老師給的課題之中,是來自于各個方面各個領(lǐng)域的應用,不得不說,單片機很強大,確實改變了我們的生活。
課設(shè)里最困難的部分就是編寫程序和仿真調(diào)試,也許硬件連接沒問題,程序運行沒問題,但是,當把程序?qū)?,發(fā)現(xiàn)電動機就是不轉(zhuǎn),燈就是不亮,數(shù)碼管就是亂跳,這是很考驗耐心的時候,一遍一遍地去調(diào)試程序,修改連接部分,有時真的看著很崩潰,但是當你不放棄地調(diào)試,才有仿真成功的可能,在這種反復中,對我們自身的能
21、力是提高很多的。另一個收獲就是關(guān)于軟件的使用了。PROTEUS,KEIL51,以前好像也用過,但是平時較少接觸,這次的課設(shè)讓我比較熟練的掌握了這兩個學習軟件強大的功能。
單片機技術(shù)一直是比較實用的一門學科,拿到課程設(shè)計的題目也想著可以好好檢驗自己的學習成果,一直認為,期末考試是所謂的應試教育,而課程設(shè)計似乎更加地考驗所學的知識,所謂實踐與理論相結(jié)合就是這個道理吧。課程設(shè)計總能讓我有一種我站在山面前的感覺,看上去比較陌生高大,但是攀登的技巧早已在平時的學習中習得,不斷地去攀登,不斷地在回味課堂上老師講的東西,書本上的東西,這是一種奇妙的體驗。
我明白遇到的電路或者課題并不一定在你的知識范圍之內(nèi),而面對新的東西,我們要冷靜地去尋求解決之道,去搜尋網(wǎng)絡(luò)資源,圖書館資源以及和同學們的討論之中,再結(jié)合自己所學過的知識來吃透理解那些未知的東西,擴寬知識面,這樣就會覺得學到了遠遠超過課堂的東西,但是卻源于課堂,這就是課設(shè)的意義吧,確實很有收獲。