2023年步進(jìn)電機(jī)實(shí)驗(yàn)報(bào)告_第1頁(yè)
2023年步進(jìn)電機(jī)實(shí)驗(yàn)報(bào)告_第2頁(yè)
2023年步進(jìn)電機(jī)實(shí)驗(yàn)報(bào)告_第3頁(yè)
2023年步進(jìn)電機(jī)實(shí)驗(yàn)報(bào)告_第4頁(yè)
2023年步進(jìn)電機(jī)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

壬建工商大學(xué)

單片機(jī)實(shí)驗(yàn)

課程名稱(chēng):步進(jìn)電機(jī)表實(shí)驗(yàn)

授課班級(jí):2023級(jí)自動(dòng)化三班

任課教師:文遠(yuǎn)落

計(jì)劃學(xué)時(shí):學(xué)時(shí)------------------

實(shí)驗(yàn)成員:張?zhí)僖w福亮王聰慧

秦菱蔚梁欽鄭歡

目錄

摘要.......................................................

第一章概述................................................

1.1實(shí)驗(yàn)?zāi)康?......................................................

1.2實(shí)驗(yàn)規(guī)定.......................................................

1.3步進(jìn)電機(jī)的介紹...................................................

1.4研究思緒......................................................

第二章硬件設(shè)計(jì)............................................

2.151單片機(jī)介紹...................................................

2.2UIN2023A.........................................................................................................................

2.3ZLG7290.............................................................................................................................

2.3.17290工作原理...............................................

2.3.27290引腳圖...................................................

第三章相關(guān)圖像................................................

3.1總電路圖....................................................

3.27290控制數(shù)碼管..................................................

3.3程序流程圖.......................................................

3.3.1控制框圖....................................................

3.3.2流程圖.....................................................

第四章調(diào)試.....................................................

第五章心得體會(huì).................................................

附錄【一】系統(tǒng)程序.............................................

附錄【二】參考文獻(xiàn)............................................../摘

要】:

步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€(xiàn)位移的開(kāi)環(huán)控制元步進(jìn)電機(jī)件。在非超載的情

況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號(hào)的頻率和脈沖數(shù),而不受負(fù)載變化的影響,當(dāng)

步進(jìn)驅(qū)動(dòng)器接受到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度,稱(chēng)為

“步距角”,它的旋轉(zhuǎn)是以固定的角度一步一步運(yùn)營(yíng)的??梢酝ㄟ^(guò)控制脈沖個(gè)數(shù)來(lái)控制角位移

量,從而達(dá)成準(zhǔn)擬定位的目的;同時(shí)可以通過(guò)控制脈沖頻率來(lái)控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,

從而達(dá)成調(diào)速的目的。

本課程設(shè)計(jì)的內(nèi)容是運(yùn)用51單片機(jī),達(dá)成控制步進(jìn)電機(jī)的啟動(dòng)、停止、正轉(zhuǎn)、反轉(zhuǎn)、點(diǎn)動(dòng)

和狀態(tài)顯示的目的,使步進(jìn)電機(jī)控制更加靈活。步進(jìn)電機(jī)驅(qū)動(dòng)芯片采用UIN2023,具有大電流、

高電壓,外電路簡(jiǎn)樸等優(yōu)點(diǎn)。運(yùn)用四位數(shù)碼管(ZLG7290)增設(shè)電機(jī)狀態(tài)顯示功能,各項(xiàng)數(shù)

據(jù)更直觀。實(shí)測(cè)結(jié)果表白,該控制系統(tǒng)達(dá)成了設(shè)計(jì)的規(guī)定。

【關(guān)鍵詞】:?jiǎn)纹瑱C(jī)步進(jìn)電機(jī)UIN2023ZLG7290數(shù)碼管

第一章概述

1.1實(shí)驗(yàn)?zāi)康?/p>

1、單片機(jī)對(duì)步進(jìn)電機(jī)控制可以熟悉步進(jìn)電機(jī)的原理和應(yīng)用。

2、單片機(jī)對(duì)步進(jìn)電機(jī)控制可以熟悉單哦就功能已經(jīng)原理、構(gòu)造。

3、通過(guò)這次實(shí)驗(yàn)?zāi)苓\(yùn)用所學(xué)基本理論知識(shí)、專(zhuān)業(yè)技能來(lái)對(duì)問(wèn)題進(jìn)行分析,思考,解決,提高

對(duì)專(zhuān)業(yè)知識(shí)的掌握以及鍛煉邏輯思維能力。

1.2實(shí)驗(yàn)規(guī)定

實(shí)現(xiàn)步進(jìn)電機(jī)按規(guī)定的速度正轉(zhuǎn)、反轉(zhuǎn),轉(zhuǎn)過(guò)指定的角度,要有點(diǎn)動(dòng)功能。所有命令通過(guò)鍵

盤(pán)輸入,步進(jìn)電機(jī)在運(yùn)營(yíng)過(guò)程中要有狀態(tài)和數(shù)據(jù)指示。

1.3步進(jìn)電機(jī)的介紹

步進(jìn)電機(jī)是一種感應(yīng)電機(jī),它的工作原理是運(yùn)用電子電路,將直流電變成分時(shí)供電的,多相

時(shí)序控制電流,用這種電流為步進(jìn)電機(jī)供電,步進(jìn)電機(jī)才干正常工作,驅(qū)動(dòng)器就是為步進(jìn)電機(jī)

分時(shí)供電的,多相時(shí)序控制器

雖然步進(jìn)電機(jī)已被廣泛地應(yīng)用,但步進(jìn)電機(jī)并不能像普通的直流電機(jī),交流電機(jī)在常規(guī)

下使用。它必須由雙環(huán)形脈沖信號(hào)、功率驅(qū)動(dòng)電路等組成控制系統(tǒng)方可使用。因此用好步

進(jìn)電機(jī)卻非易事,它涉及到機(jī)械、電機(jī)、電子及計(jì)算機(jī)等許多專(zhuān)業(yè)知識(shí)。

步進(jìn)電機(jī)作為執(zhí)行元件,是機(jī)電一體化的關(guān)鍵產(chǎn)品之一,廣泛應(yīng)用在各種自動(dòng)化控制

系統(tǒng)中。隨著微電子和計(jì)算機(jī)技術(shù)的發(fā)展,步進(jìn)電機(jī)的需求量與日俱增,在各個(gè)國(guó)民經(jīng)濟(jì)領(lǐng)域

都有應(yīng)用。

步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。通俗一點(diǎn)講:當(dāng)步進(jìn)驅(qū)動(dòng)器接受到

一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度(即步進(jìn)角)。您可以通

過(guò)控制脈沖個(gè)數(shù)來(lái)控制角位移量,從而達(dá)成準(zhǔn)擬定位的目的;同時(shí)您可以通過(guò)控制脈沖頻率

來(lái)控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)成調(diào)速的目的。

圖1步進(jìn)電機(jī)剖面圖

1.4研究思緒

1、了解單片機(jī)自身內(nèi)部應(yīng)有的資源,如:中斷、定期器、計(jì)數(shù)器、1\0的使用。

2、了解步進(jìn)電機(jī)的工作原理和作用。

3、根據(jù)步進(jìn)電機(jī)的原理,分析并分派單片機(jī)內(nèi)部資源,并根據(jù)單片機(jī)的資源,來(lái)實(shí)現(xiàn)硬件電路的

設(shè)計(jì)以及軟件程序的編寫(xiě)。

4.、對(duì)于自己不熟悉的東西,查閱資料。

5、在設(shè)計(jì)好單片機(jī)步進(jìn)電機(jī)時(shí),要學(xué)會(huì)分析電路中出現(xiàn)的問(wèn)題,并好好總結(jié)。

第二章硬件設(shè)計(jì)

2.1單片機(jī)的簡(jiǎn)介

單片機(jī)是續(xù)計(jì)算機(jī)出現(xiàn)之后,并隨著電器時(shí)代大到來(lái),人們借助電氣技術(shù)想實(shí)現(xiàn)了自動(dòng)控

制機(jī)械,自動(dòng)生產(chǎn)線(xiàn)甚至自動(dòng)工廠,但依靠計(jì)算機(jī)去完畢每一個(gè)自動(dòng)的過(guò)程,反而有些復(fù)雜以

及資源的亂費(fèi);所以用更方便,更微小,更智能的微型解決器來(lái)解決工業(yè)現(xiàn)場(chǎng)的測(cè)控領(lǐng)域,控

制領(lǐng)域,有著重大意義;更何況目前,彩電,冰箱,空調(diào),錄像機(jī),VCD,遙控器,游戲機(jī),電飯煲等

無(wú)處不見(jiàn)單片機(jī)的影子,所以單片機(jī)將會(huì)更滿(mǎn)足我們的生活,會(huì)更取代大型的計(jì)算機(jī)。

現(xiàn)在單片機(jī)重要按用途,大體上可分為兩大類(lèi):1—通用型單片機(jī)2-專(zhuān)用型單片機(jī)

專(zhuān)用型單片機(jī)是指用途比較專(zhuān)一,出廠時(shí)程序已經(jīng)一次性固化好,不能再修該的單片機(jī)。

例如電子表里的單片機(jī)就是其中的一種。其生產(chǎn)成本很低。A通用型單片機(jī)的用途很

廣泛,使用不同的接口電路及編制不同的應(yīng)用程序就可完畢不同的功能。小到家用電器儀

器儀表,大到機(jī)器設(shè)備和整套生產(chǎn)線(xiàn)都可用單片機(jī)來(lái)實(shí)現(xiàn)自動(dòng)化控制。

2.2UIN2023

本文選用ULN2023構(gòu)成步進(jìn)電機(jī)的驅(qū)動(dòng)電路,下面但見(jiàn)介紹下ULN2023的結(jié)構(gòu)和特

占?

八、、?

ULN2023是高耐壓、大電流達(dá)林頓陳列,由七個(gè)硅NPN達(dá)林頓管組成。

該電路的特點(diǎn)如下:

ULN2023的每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K的基極電阻,在5V的工作電壓下它能與TTL

和CMOS電路直接相連,可以直接解決原先需要標(biāo)準(zhǔn)邏輯緩沖器來(lái)解決的數(shù)據(jù)。

ULN2023工作電壓高,工作電流大,灌電流可達(dá)500mA,并且可以在關(guān)態(tài)時(shí)承受50V的

電壓,輸出還可以在高負(fù)載電流并行運(yùn)營(yíng)。

ULN2023方框圖如圖2所示。

9

圖2ULN2023內(nèi)部方框圖

運(yùn)用ULN2023以及AT89c54RD設(shè)計(jì)的步進(jìn)電機(jī)驅(qū)動(dòng)電路如圖3所示。

2.3ZLG7290

2.3.17290工作原理

ZLG7290的核心是一塊ZLG7290B芯片,它采用12c接口,能直接驅(qū)動(dòng)8位共陰式數(shù)碼

管,同時(shí)可掃描管理多達(dá)64只按鍵,實(shí)現(xiàn)人機(jī)對(duì)話(huà)的功能資源十分豐富。除具有自動(dòng)消除抖動(dòng)

功能外,它還具有段閃爍、段點(diǎn)亮、段熄滅、功能鍵、連擊鍵計(jì)數(shù)等強(qiáng)大功能,并可提供10種

數(shù)字和21種字母的譯碼顯示功能,用戶(hù)可以直接向顯示緩存寫(xiě)入顯示數(shù)據(jù),并且無(wú)需外接元

件即可直接驅(qū)動(dòng)數(shù)碼管,還可擴(kuò)展驅(qū)動(dòng)電壓和電流。此外,ZLG7290B的電路簡(jiǎn)樸,使用也很

方便。用戶(hù)按下某個(gè)鍵時(shí),ZLG7290的INT引腳會(huì)產(chǎn)生一個(gè)低電平的中斷請(qǐng)求信號(hào),讀取鍵

值后,中斷信號(hào)就會(huì)自動(dòng)撤消。正常情況下,微控制器只需要判斷INT引腳就可以得到鍵盤(pán)輸

入的信息。微控制器可通過(guò)兩種方式得到用戶(hù)的鍵盤(pán)輸入信息。其一是中斷方式,該方式的優(yōu)

點(diǎn)是抗干擾能力強(qiáng),缺陷是要占用微控制器的一個(gè)外部中斷源。其二是查詢(xún)方式,即通過(guò)不斷查

詢(xún)INT引腳來(lái)判斷是否有鍵按下,該方式可以節(jié)省微控制器的一根1/O口線(xiàn),但是代價(jià)是12C

總線(xiàn)處在頻繁的活動(dòng)狀態(tài),消耗電流多并且不利于抗干擾。

2.3.27290引腳圖

1323

Dig7SegA

1224

Dig6SegB

211

Dig5SegC

222

Dig4SegD

37

Dig3SegE

48

Dig2SegF

59

DiglSegG

610

DigOSegH

2016

SDAVCC

1918

SCLOSC2

17

吩/INT0SC1

GND/RES

ZLG7290

圖37290引腳圖

第三章相關(guān)圖像

3.1總體電路圖

PQDMMJ

?Q3TA”

*□

,0????

raiM?r

g■

M

la

2c

2a三

39D

?8c

g??

3.27290控制數(shù)碼管

3.3程序流程圖

3.3.1控制框圖

3.3.2流程圖

ZLG729O庫(kù)函激

第四章調(diào)試

1、按照實(shí)驗(yàn)原理圖連接好電路圖。

2、根據(jù)原理圖編寫(xiě)程序。

3、電路上電,調(diào)試程序,觀測(cè)并控制電機(jī)使其按照預(yù)期的行為工作。

4、當(dāng)電機(jī)可以通過(guò)按鍵控制其正轉(zhuǎn)加減速、反轉(zhuǎn)加減速程序、點(diǎn)動(dòng)后,調(diào)試結(jié)束。

5、優(yōu)化程序,整理實(shí)驗(yàn)結(jié)果。

總的來(lái)說(shuō),過(guò)程比較順利,只是粗心之下,連線(xiàn)出現(xiàn)了錯(cuò)誤,對(duì)于此,我進(jìn)行了深刻

的自我檢討和批評(píng)。在通過(guò)老師的知道后,我們終于實(shí)現(xiàn)了實(shí)驗(yàn)規(guī)定的功能,能實(shí)現(xiàn)正反轉(zhuǎn),快

慢變化及點(diǎn)動(dòng)等。

第五章收獲體會(huì)

一方面是關(guān)于課題的選擇,開(kāi)始是準(zhǔn)備做一個(gè)萬(wàn)年歷,通過(guò)查看資料后發(fā)現(xiàn)計(jì)算機(jī)的過(guò)

程實(shí)現(xiàn)比較的復(fù)雜,而這次的課程設(shè)計(jì)時(shí)間比較短,故放棄了這個(gè)想法。通過(guò)各種篩選,最后決

定做步進(jìn)電機(jī)的相關(guān)設(shè)計(jì),起初看著指導(dǎo)書(shū)上的內(nèi)容覺(jué)得實(shí)現(xiàn)步進(jìn)電機(jī)是比較的簡(jiǎn)樸的,但當(dāng)

我真正開(kāi)始設(shè)計(jì)之后才發(fā)現(xiàn)并沒(méi)有想像中那么的簡(jiǎn)樸。

這學(xué)期的微機(jī)課和單片機(jī)課沒(méi)怎么學(xué)好,故感覺(jué)在做這個(gè)設(shè)計(jì)時(shí)有點(diǎn)困難,比如匯編程

序。后來(lái)決定用c來(lái)編寫(xiě)程序,這樣稍微輕松點(diǎn),在設(shè)計(jì)程序中涉及到了中斷程序的編寫(xiě),發(fā)

現(xiàn)已學(xué)的理論知識(shí)完全用不上來(lái),也許這就是理論脫離時(shí)間的結(jié)果,在期間惡補(bǔ)了單片機(jī)的中

斷知識(shí)及其相應(yīng)的程序編寫(xiě)。

通過(guò)這次課程設(shè)計(jì)實(shí)驗(yàn),我對(duì)步進(jìn)電機(jī)調(diào)速控制系統(tǒng)有了實(shí)際的了解和結(jié)識(shí),提高了動(dòng)手

能力。本次實(shí)驗(yàn)把書(shū)本上、課堂上學(xué)到的知識(shí)靈活地運(yùn)用到實(shí)際的實(shí)物上,感覺(jué)是對(duì)學(xué)以致用

的一種鍛煉和考驗(yàn)提高了用所學(xué)知識(shí)解決實(shí)際問(wèn)題的能力,加深和鞏固的對(duì)知識(shí)的理解和掌

握。控制電路、驅(qū)動(dòng)電路、測(cè)速反饋電路、步進(jìn)電機(jī)幾個(gè)模塊的整合,也實(shí)際中提高了自己對(duì)

系統(tǒng)的結(jié)識(shí),有了些整體的概念和思維觀。實(shí)驗(yàn)是團(tuán)隊(duì)合作完畢的,從設(shè)計(jì)電路到設(shè)計(jì)軟件,

然后仿真到做硬件做出符合規(guī)定的控制系統(tǒng),不僅從實(shí)際中鍛煉了動(dòng)手能力并且學(xué)會(huì)了團(tuán)隊(duì)合

作,互相學(xué)習(xí),提高自己。

這次的課程設(shè)計(jì)總的感覺(jué)就是很累,但在不斷的學(xué)習(xí)機(jī)實(shí)踐當(dāng)中學(xué)到了很多東西,知識(shí)的

提高那是最基礎(chǔ)的,中斷,電路工作及相關(guān)的知識(shí)都是得到了提高;然后就是個(gè)人解決問(wèn)題能

力的提高,雖然說(shuō)這次的設(shè)計(jì)不算一個(gè)大的項(xiàng)目,但也算是小的雛形,課題的選擇,前期的準(zhǔn)備,

理論的實(shí)踐,知識(shí)的提高,解決實(shí)際問(wèn)題及后期的總結(jié)歸納。

付出去收獲往往是成正比的,這次的課程設(shè)計(jì)中得到了充足的體現(xiàn)。

總的來(lái)說(shuō),這次設(shè)計(jì)的步進(jìn)電機(jī)控制電路還是比較成功的在設(shè)計(jì)中碰到了很多問(wèn)題,

最后在自己的思考下,宿舍大家一起通過(guò)劇烈的探討下,終于游逆而解,有點(diǎn)小小的成就感,終

于覺(jué)得平時(shí)所學(xué)的知識(shí)有了實(shí)用的價(jià)值,達(dá)成了理論與實(shí)際相結(jié)合的目的。不僅學(xué)到了不少知

識(shí),并且鍛煉了自己的能力,使自己對(duì)以后的路有了更加清楚的結(jié)識(shí)。同時(shí),對(duì)未來(lái)有了更多的

信心。最后,對(duì)文老師表達(dá)忠心的感謝,老師,你辛勞了。

《附錄【一】系統(tǒng)程序

主程序:

/***************************************************************

*********

基于51單片機(jī)的異步電機(jī)控制程序

**************************************************************

**********/

#include<reg51.h>

#include"VIIC_C51.Hn

#includeHZLG7290,h"

#defineucharunsignedchar

#defineuintunsignedint

/*四相步進(jìn)電動(dòng)機(jī)單、雙八拍運(yùn)營(yíng)狀態(tài)表

111111100?FEHA

111111OOOFCHoAB

111111010。FDHB

111110010F9HoBC

11111011?0FBH?C

11110011?0F3HCD

111101110F7HD

11110110OF6H0DA

*/

sbitPA=P1A0;〃P1控制電機(jī)

sbitPB=P1Al;

sbitPC=P「2;

sbitPD=PlA3;

sbitRST=P1A4;

sbitKEY_INT=P3-2;〃看是否更改為P3A2

sbitSCL=P1A6;

sbitSDA=P1A7;

ucharcodestep_tab[9]={0xff,0xfe,0xfc,0xfd,Oxf9,0xfb,0xf3,0xf7,0xf6};

uintcodede1aytime[4]={60,40,20,10};//延時(shí)時(shí)間列表

〃變量的定義

uchardirection;?〃狀態(tài)變量0-正向」一反向

ucharcontinuous;?〃狀態(tài)變量。。一指定步數(shù)運(yùn)營(yíng),1—連續(xù)速度運(yùn)營(yíng)

ucharrun;。//狀態(tài)變量0—電機(jī)未運(yùn)營(yíng),1-電機(jī)運(yùn)營(yíng)中

ucharspeed_num;//連續(xù)速度運(yùn)營(yíng)標(biāo)號(hào)1—4

ucharcur_step;〃八拍運(yùn)營(yíng)狀態(tài)

ucharstep_num;//指定運(yùn)營(yíng)的步數(shù),范圍0-99

〃鍵值定義

#defineKey_dir1〃方向鍵

#defineKey_Run2?!▎?dòng)鍵

#defineKey_stop3。//停止鍵

#defineKet_Step4//單步運(yùn)營(yíng)鍵

#defineKey_step_add5〃步數(shù)加鍵

#defineKey_step_sub6“/步數(shù)減鍵

#defineKey_speed_add7。//速度加鍵

#defineKey_speed_sub8〃速度減鍵

#defineKey_Con_Set9?!ㄟB續(xù)運(yùn)營(yíng)與指定步數(shù)運(yùn)營(yíng)切換鍵。

//定義鍵盤(pán)中斷標(biāo)志,FlagINT0=1表達(dá)有鍵按下

volatilebitF1agINTO=0;

voidKeyProsess(ucharkey);

/*************************************************************

***********

函數(shù):INT0_SVC()

功能:ZLG7290鍵盤(pán)中斷服務(wù)程序

說(shuō)明:中斷觸發(fā)方式選擇負(fù)邊沿觸發(fā),因此不必等待中斷請(qǐng)求信號(hào)恢復(fù)為高電平

***************************************************************

voidINT0_SVC()interrupt0

unsignedcharKeyValue;

〃讀取鍵值

KeyValue=ZLG7290_GetKey();

?!ń鉀Q鍵值

?KeyProsess(KeyValue);

}

/**************************************************************

**********

函數(shù):Delay()

功能:定期器實(shí)現(xiàn)延時(shí)tms

**************************************************************

**********/

voidDelay(unsignedintt)

{

do

{。//TH=64536

?TH1=OxFC;

8TL1=Ox18;

TR1=1;//啟動(dòng)定期器T1并等待中斷

。whi1e(!TF1);

ooTFl=0;o//中斷請(qǐng)求標(biāo)致清零

。TRI=0;//停止T1定期器

}while(—t);

/***************************************************************

*********

函數(shù):DispDir()

功能:顯示方向子程序

說(shuō)明:dat0正向,1反向

******************************************************

******************/

voidDispDir(uchardat)

(

if(dat==0)

°{

ZLG7290_SendCmd(0x60+7,0xOf);//"F"表達(dá)正轉(zhuǎn)

?e1se

°(

ZLG7290_SendCmd(0x60+7,0x0b);//"B"表達(dá)反轉(zhuǎn)

}

I*****************************************************************

*******

函數(shù):DispSpeed()

功能:顯示速度號(hào)子程序

說(shuō)明:dat1~4。代表四種不同的速度

********************************************************************

****/

voidDispSpeed(uchardat)

{

?ZLG7290_SendCmd(0x60+5,dat);

)

/*************************************************************

***********

函數(shù):DispStepNum()

功能:顯示運(yùn)營(yíng)步數(shù)號(hào)程序

說(shuō)明:間接實(shí)現(xiàn)轉(zhuǎn)過(guò)指定角度=步距角*步數(shù)

*************************************************************

***********/

voidDispStepNum(uchardat)

(

unsignedchard;

d=dat/10;

oZLG7290_SendCmd(Ox60+l,d);

。d=dat—d*10;

ZLG7290_SendCmd(0x60+0,d);

)

/***********************************************************

*************

函數(shù):DispContinuous()

功能:顯示運(yùn)營(yíng)狀態(tài),連續(xù)還是指定步數(shù)

說(shuō)明:0一指定步數(shù)運(yùn)營(yíng),1一連續(xù)速度運(yùn)營(yíng)

*************************************************************

***********/

voidDispContinuous(uchardat)

(

if(dat==0)

(

ZLG7290_SendCmd(0x60+3,OxOd);〃d表達(dá)指定步數(shù)運(yùn)營(yíng)狀態(tài)

°)

else

6(

。ZLG7290_SendCmd(0x60+3,0xOc);//'C'表達(dá)連續(xù)速度運(yùn)營(yíng)

}

)

/*********************************************************************

***

函數(shù):OnStep()

功能:實(shí)現(xiàn)單步運(yùn)營(yíng)

******************************************************************

******/

voidOneStep()

(

if(direction==0)

{〃正向

8if(cur_step==8)

00{

o。cur_step=1;

}else

6{

ocur_step++;

°}

o?P1=step_tab[cur_step];//輸出

。}

else

e(

?if(cur_step<=1)

6{

?<>cur_step=8;

}else

(

oocur_step-

?P1=step_tab[cur_step];〃輸出

)

)

/***********************************************************

****************

函數(shù):OnContinue()

功能:連續(xù)運(yùn)營(yíng)

*************************************************************

**************/

voidOnContinue()

(

if(continuous!=0)

。{//連續(xù)運(yùn)營(yíng)

gwhi1e(run!=0)

0(

。?OneStep();

。。Delay(delaytime[speed_num-1]);//延遲目的改變轉(zhuǎn)速

。}

)

eIse

{//指定步數(shù)運(yùn)營(yíng)

?if(step_num!=0)

0{

MDneStep();

Delay(50);//50ms延遲

8step—num—;

。DispStepNum(step—num);〃更新顯示步數(shù)即顯示剩下沒(méi)有執(zhí)行的步數(shù)

。Mf(run==0)return;〃若停止鍵按下,則停止

)

oeIse

grun=0;//停止

return;

}

}

/*************************************************************

***************

函數(shù):KeyProsess()

功能:鍵值解決程序

********************************************************

voidKeyProsess(ucharkey)

{

switch(key)

(

?caseKey_dir。:。//方向鍵

gif(run==0)

。{

“f(direction==0)

3direction=1;

。else

gdirection=0;

sDispDir(direction);

)

^break;

ocaseKey_Run"http://啟動(dòng)鍵

f(run==0)

?!眜n=1;

。}

。break;

ocaseKey_stop:〃停止鍵

if(run!=0)

°{

run=0;

)

。break;

CaseKet_Step://單步運(yùn)營(yíng)鍵實(shí)現(xiàn)點(diǎn)動(dòng)功能

“f(run=0)

grim=1;

。OneStep();

。run=0;

0)

break;

caseKey_step_add:〃步數(shù)加鍵。n=(步距角*60)/(360*t*0.001)單位r/min

>if(run==0)

(

=>if(step_num==99)

00

step_num=0;

}eIse

0

88Step_num++;

}

。oDispStepNum(step_num);

°}

obreak;

℃aseKey_step_sub:。//步數(shù)減鍵

。if(run==0)

。{

if(step_num==0)

?step_num=99;

}eIse

°{

g<>step_num—;

6)

sDispStepNum(step_num);

)

?break;

ocaseKey_speed_add:“/速度力口鍵

if(run=0)

if(speed_num4)

8speed_num=1;

8。}e1se

6{

。speed_num++;

000}

oeDispSpeed(speed_num);

00}

break;

。caseKey_speed_sub://速度減鍵

。if(run==0)

00{

if(speed_num==1)

06{

?speed_num=4;

g}else

8{

speed_num—;

)

o“DispSpeed(speed_num);

)

。。break;

℃aseKey_Con_Set。://連續(xù)運(yùn)營(yíng)與指定步數(shù)運(yùn)營(yíng)切換鍵。

Xf(run==0)

if(continuous==0)

0001

。continuous=1;

}else

0001

8continuous=0;

00}

。。DispContinuous(continuous);

)

break;

。default:

。break;

)

)

/******************************************************************

****************

函數(shù):SystemInit()

功能:系統(tǒng)初始化

**********************************************************

************************/

voidSystemInit()

“//初始化單片機(jī)

?TM0D=Oxll;//定期器設(shè)立,T0,T1方式1:16位定期器

?Delay(300);“/延時(shí)300ms等待ZLG7290復(fù)位完畢

EA=0;

ITO1;//INTO,負(fù)邊沿觸發(fā)中斷

?EXOh//允許外部中斷INTO

FlagINTO=0;

?EA=1;

。//初始化步進(jìn)電機(jī)控制器

direction=0;〃狀態(tài)變量0。-正向,1-反向

continuous=0;〃狀態(tài)變量0■指定步數(shù)運(yùn)營(yíng)」一連續(xù)速度運(yùn)營(yíng)

”un=1;//,狀態(tài)變量0。-電機(jī)未運(yùn)營(yíng),1—電機(jī)運(yùn)營(yíng)中

ospeed_num=1;<>//連續(xù)速度運(yùn)營(yíng)標(biāo)號(hào)1-4

cur_step=0;//八拍運(yùn)營(yíng)狀態(tài)

?step_num=0;。//。指定運(yùn)營(yíng)的步數(shù),范圍0-99

DispContinuous(continuous);

DispStepNum(step_num);

2ispSpeed(speed_num);

DispDir(direction);

P1=step_tab[cur_step];〃輸出

)

/***************************************************************

******************

主函數(shù)main()

**********************************************************

************************/

voidmain(void)

oSystemlnit();//系統(tǒng)初始化

whi1e(l)//循環(huán)檢測(cè)按鍵狀態(tài)

°if(run==1)

°{

。OnContinue();

)

。}

)

庫(kù)函數(shù)程序:

I************************************************************

********

VIIC_C51.C

此程序是12c操作平臺(tái)(主方式的軟件平臺(tái))的底層的C子程序,如發(fā)送數(shù)據(jù)

及接受數(shù)據(jù),應(yīng)答位發(fā)送,并提供了幾個(gè)直接面對(duì)器件的操作函數(shù),它很方便的

與用戶(hù)程序連接并擴(kuò)展.?…

注意:函數(shù)是采用軟件延時(shí)的方法產(chǎn)生SCL脈沖,固對(duì)高晶振頻率要作

一定的修改....(本例是lus機(jī)器周期,即晶振頻率要小于12MHZ)

********************************************************I

#include<reg52.h>/*頭文獻(xiàn)的包含*/

#include<intrins.h>

#defineucharunsignedchar/*宏定義*/

#defineuintunsignedint

#define_Nop()_nop_()/*定義空指令*/

/*常,變量定義區(qū)*/

/*端口位定義*/

sbitSDA=P1A7;/*模擬12C數(shù)據(jù)傳送位*/

sbitSCL=P1A6;/*模擬12c時(shí)鐘控制位*/

/*狀態(tài)標(biāo)志

*/

bitack;/*應(yīng)答標(biāo)志位*/

/************************************************************

*****

起動(dòng)總線(xiàn)函數(shù)

函數(shù)原型:voidStart_I2c();

功能:?jiǎn)?dòng)12c總線(xiàn),即發(fā)送12c起始條件.

****************************************************************

****/

voidStart_I2c()

SDA=1;/*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/

_Nop();

SCL=1;

_Nop();/*起始條件建立時(shí)間大于4.7us,延時(shí)*/

_Nop();

_Nop();

_Nop();

_Nop();

SDA=0;/*發(fā)送起始信號(hào)*/

_Nop();/*起始條件鎖定期間大于4us*/

_Nop();

_Nop();

_Nop();

_Nop();

SCL=0;/*鉗住I2c總線(xiàn),準(zhǔn)備發(fā)送或接受數(shù)據(jù)*/

_Nop();

_Nop();

)

/***************************************************************

****

結(jié)束總線(xiàn)函數(shù)

函數(shù)原型:voidStop」2c();

功能:結(jié)束12c總線(xiàn),即發(fā)送I2C結(jié)束條件.

********************************************************************/

voidStop_I2c()

(

SDA=0;/*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/

_Nop();/*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/

SCL=1;/*結(jié)束條件建立時(shí)間大于4口s*/

_Nop();

_Nop();

_Nop();

_Nop();

_Nop();

SDA=1;/*發(fā)送12c總線(xiàn)結(jié)束信號(hào)*/

_Nop();

_Nop();

_Nop();

_Nop();

****************************************************************

***

字節(jié)數(shù)據(jù)傳送函數(shù)

函數(shù)原型:voidSendByte(ucharc);

功能:將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì)

此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0假)

發(fā)送數(shù)據(jù)正常,ack=1;ack=0表達(dá)被控器無(wú)應(yīng)答或損壞。

*********************************************************

***********/

voidSendByte(ucharc)

(

ucharBitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳送的數(shù)據(jù)長(zhǎng)度為8位*/

(

if((c?BitCnt)&0x80)SDA=l;/*判斷發(fā)送位*/

elseSDA=0;

_Nop();

SCL=1;/*置時(shí)鐘線(xiàn)為高,告知被控器開(kāi)始接受數(shù)據(jù)位*/

_Nop();

_Nop();/*保證時(shí)鐘高電平周期大于4口s*/

_Nop();

_Nop();

_Nop();

SCL=0;

}

_Nop();

_Nop();

SDA=1;/*8位發(fā)送完后釋放數(shù)據(jù)線(xiàn),準(zhǔn)備接受應(yīng)答位*/

_Nop();

_Nop();

SCL=1;

_Nop();

_Nop();

_Nop();

if(SDA==l)ack=0;

elseack=1;/*判斷是否接受到應(yīng)答信號(hào)*/

SCL=0;

_Nop();

_Nop();

/**************************************************************

*****

字節(jié)數(shù)據(jù)傳送函數(shù)

函數(shù)原型:ucharRcvByte();

功能:用來(lái)接受從器件傳來(lái)的數(shù)據(jù),并判斷總線(xiàn)錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),

發(fā)完后請(qǐng)用應(yīng)答函數(shù)。

**************************************************************

******I0

ucharRcvByte()

(

ucharretc;

ucharBitCnt;

retc=0;

SDA=1;/*置數(shù)據(jù)線(xiàn)為輸入方式*/

for(BitCnt=0;BitCnt<8;BitCnt++)

(

_Nop();

SCL=0;/*置時(shí)鐘線(xiàn)為低,準(zhǔn)備接受數(shù)據(jù)位*/

_Nop();

_Nop();/*時(shí)鐘低電平周期大于4.7ns*/

_Nop();

_Nop();

_Nop();

SCL=1;/*置時(shí)鐘線(xiàn)為高使數(shù)據(jù)線(xiàn)上數(shù)據(jù)有效*/

_Nop();

_Nop();

retc=retC<<1;

if(SDA=l)retc=retc+1;/*讀數(shù)據(jù)位,接受的數(shù)據(jù)位放入retc中*/

_Nop();

_Nop();

SCL=O;

_Nop();

_Nop();

return(retc);

/*********************************************************

***********

應(yīng)答子函數(shù)

原型:voidAck_I2c(bita);

功能:主控器進(jìn)行應(yīng)答信號(hào),(可以是應(yīng)答或非應(yīng)答信號(hào))

***************************************************************

*****/

voidAck_I2c(bita)

(

if(a==0)SDA=0;/*在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)*/

e1seSDA=1;

_Nop();

Nop();

_Nop();

SCL=1;

_Nop();

_Nop();/*時(shí)鐘低電平周期大于4口s*/

_Nop();

_Nop();

_Nop();

SCL=0;/*清時(shí)鐘線(xiàn),鉗住12c總線(xiàn)以便繼續(xù)接受*/

_Nop();

_Nop();

/****************************************************************

***

向無(wú)子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)

函數(shù)原型:bitISendByte(ucharsla,ucahrc);

功能:從啟動(dòng)總線(xiàn)到發(fā)送地址,數(shù)據(jù),結(jié)束總線(xiàn)的全過(guò)程,從器件地址sla.

假如返回1表達(dá)操作成功,否則操作有誤。

注意:使用前必須已結(jié)束總線(xiàn)。

********************************************************************

bitISendByte(ucharsia,ucharc)

Start_I2c();/*啟動(dòng)總線(xiàn)*/

SendByte(sla);/*發(fā)送器件地址*/

if(ack==O)return(0);

SendByte(c);/*發(fā)送數(shù)據(jù)*/

if(ack==0)return(0);

Stop_I2c();/*結(jié)束總線(xiàn)*/

return(l);

I*************************************************************

******

向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)

函數(shù)原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);

功能:從啟動(dòng)總線(xiàn)到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線(xiàn)的全過(guò)程,從器件

地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。

假如返回1表達(dá)操作成功,否則操作有誤。

注意:使用前必須已結(jié)束總線(xiàn)。

****************************************************************

****/

bitISendStr(uchars1a,ucharsuba,uchar*s,ucharno)

uchari;

Start_I2c();/*啟動(dòng)總線(xiàn)列

SendByte(s1a);/*發(fā)送器件地址*/

if(ack==O)return(O);

SendByte(sub

溫馨提示

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

評(píng)論

0/150

提交評(píng)論