簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置.doc_第1頁(yè)
簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置.doc_第2頁(yè)
簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置.doc_第3頁(yè)
簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置.doc_第4頁(yè)
簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置.doc_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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)介

1、2013年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置(C題)【本科組】 2013年9月7日 摘要 本題要求設(shè)計(jì)一個(gè)簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制系統(tǒng),其中角度傳感器、步進(jìn)電機(jī)和單片機(jī)890C521是系統(tǒng)核心部件。系統(tǒng)接收角度傳感器反饋的信號(hào),通過(guò)PCF8591將接收的信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),將數(shù)值送入單片機(jī)中進(jìn)行計(jì)算,可得出擺桿的位置,進(jìn)而單片機(jī)控制步進(jìn)電機(jī),對(duì)擺桿進(jìn)行控制,達(dá)到所要的旋轉(zhuǎn)或者倒立的控制目標(biāo)。 關(guān)鍵詞:簡(jiǎn)易旋轉(zhuǎn)倒立擺 步進(jìn)電機(jī) 單片機(jī) 角度傳感器 目錄1 設(shè)計(jì)任務(wù)及要求61。1 設(shè)計(jì)任務(wù)61。2 基本要求62主控制器件的論證與選擇72。1控制器選用72.2控制系統(tǒng)方案選擇72.3角度的獲

2、取模塊論證與選擇72。4步進(jìn)電機(jī)及其驅(qū)動(dòng)模塊的選擇82.5 AD/DA的選擇83 系統(tǒng)的硬件設(shè)計(jì)83.1總體電路框圖8圖3-1 系統(tǒng)框圖93.2系統(tǒng)電路與程序設(shè)計(jì)103.2.1 STC89C52單片機(jī)最小系統(tǒng)103.2.2 PCF8591模塊圖如圖32。113。3。3 模塊芯片TB6560AHQ原理圖如圖3-3.113.3。4 供電電源124系統(tǒng)軟件總體設(shè)計(jì)框圖145 測(cè)試方案與測(cè)試結(jié)果146 總結(jié)16參考文獻(xiàn)17附錄18簡(jiǎn)易旋轉(zhuǎn)倒立擺及控制裝置(C題)【本科組】1 設(shè)計(jì)任務(wù)及要求1。1 設(shè)計(jì)任務(wù)設(shè)計(jì)并制作一套簡(jiǎn)易旋轉(zhuǎn)倒立擺及其控制裝置。旋轉(zhuǎn)倒立擺的結(jié)構(gòu)如圖1-1 所示。電動(dòng)機(jī) A 固定在支架

3、 B 上,通過(guò)轉(zhuǎn)軸 F 驅(qū)動(dòng)旋轉(zhuǎn)臂 C 旋轉(zhuǎn)。擺桿 E 通過(guò)轉(zhuǎn)軸 D 固定在旋轉(zhuǎn)臂 C 的一端,當(dāng)旋轉(zhuǎn)臂 C 在電動(dòng)機(jī) A 驅(qū)動(dòng)下作往復(fù)旋轉(zhuǎn)運(yùn)動(dòng)時(shí),帶動(dòng)擺桿 E 在垂直于旋轉(zhuǎn)臂 C 的平面作自由旋轉(zhuǎn).圖1-1 旋轉(zhuǎn)倒立擺結(jié)構(gòu)示意圖1.2 基本要求 (1)擺桿從處于自然下垂?fàn)顟B(tài)(擺角 0°)開(kāi)始,驅(qū)動(dòng)電機(jī)帶動(dòng)旋轉(zhuǎn)臂作往復(fù)旋轉(zhuǎn)使擺桿擺動(dòng),并盡快使擺角達(dá)到或超過(guò)-60° +60°; (2)從擺桿處于自然下垂?fàn)顟B(tài)開(kāi)始,盡快增大擺桿的擺動(dòng)幅度,直至完成圓周運(yùn)動(dòng);(3)在擺桿處于自然下垂?fàn)顟B(tài)下,外力拉起擺桿至接近 165°位置,外力撤除同時(shí),啟動(dòng)控制旋轉(zhuǎn)臂使擺桿保持

4、倒立狀態(tài)時(shí)間不少于 5s;期間 旋轉(zhuǎn)臂的轉(zhuǎn)動(dòng)角度不大于 90°。 2主控制器件的論證與選擇2.1控制器選用方案一: 采用ARM,運(yùn)行速度快,引腳多,內(nèi)部資源豐富,具有很高的運(yùn)算速率,但是價(jià)格較高,對(duì)于初學(xué)者,ARM不易掌握。方案二: 采用STC89C52單片機(jī), 選用STC89C52單片機(jī)作為控制核心,它具有8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路,且容易燒錄,使用方便。所以我們選用STC89V52作為主控芯片 2。2控制系統(tǒng)方案選擇方案一:采用在

5、面包板上搭建簡(jiǎn)易單片機(jī)系統(tǒng)在面包板上搭建單片機(jī)系統(tǒng)可以方便的對(duì)硬件做隨時(shí)修改,也易于搭建,但是系統(tǒng)連線較多,不僅相互干擾,使電路雜亂無(wú)章,而且系統(tǒng)可靠性低.方案二:自制單片機(jī)印刷電路板自制印刷電路實(shí)現(xiàn)較為困難,實(shí)現(xiàn)周期長(zhǎng),此外也會(huì)花費(fèi)較多的時(shí)間,影響整體設(shè)計(jì)進(jìn)程。方案三:采用單片機(jī)最小系統(tǒng)。單片機(jī)最小系統(tǒng),能明顯減少外圍電路的設(shè)計(jì),降低系統(tǒng)設(shè)計(jì)的難度,非常適合本系統(tǒng)的設(shè)計(jì).綜上所述,我們選擇方案三。 2.3角度的獲取模塊論證與選擇方案一:采用加速度傳感器加速度傳感器采用模擬量輸出,需要放大電路及A/D完成角度的測(cè)量,測(cè)量精度高,但是擺桿上不易安裝重物,且不易固定。方案二:采用增量式光電旋轉(zhuǎn)編碼

6、器光電旋轉(zhuǎn)編碼器是一種角度(角速度)檢測(cè)裝置,它將輸入給軸的角度量,利用光電轉(zhuǎn)換原理轉(zhuǎn)換成相應(yīng)的電脈沖。旋轉(zhuǎn)編碼器具有體積小,精度高,工作可靠,接口數(shù)字化等優(yōu)點(diǎn).但是旋轉(zhuǎn)編碼器安裝較為不便,增加了系統(tǒng)硬件電路設(shè)計(jì)的工作量。方案三:采用電位器作為角度傳感器簡(jiǎn)易旋轉(zhuǎn)倒立擺系統(tǒng)的角度測(cè)量也可采用可變電阻器.精密的可變電阻器具易獲得、重復(fù)性高、分辨率高、高頻響應(yīng)特性好、易使用等特點(diǎn)。且電位器傳感器結(jié)構(gòu)簡(jiǎn)單,體積小,價(jià)格低廉,受環(huán)境因素影響小,性能穩(wěn)定。綜合以上三種方案微調(diào)電位器可以很好地達(dá)到我們的要求,角度有效范圍載33.3度左右,由于本課題精度不高,考慮帶經(jīng)濟(jì)性和靈活性,我們選擇方案三。2。4步進(jìn)電

7、機(jī)及其驅(qū)動(dòng)模塊的選擇方案一:采用直流減速電機(jī),轉(zhuǎn)速較低,反應(yīng)速度慢,但是驅(qū)動(dòng)模塊簡(jiǎn)單。方案二:采用型號(hào)為57 步進(jìn)電機(jī),為兩相四線步進(jìn)電機(jī),它的步距角僅為1。8°,扭矩為0.50N/m,有較高的空載啟動(dòng)頻率,在十六細(xì)分后能實(shí)現(xiàn) 0.225°的步距角能夠滿足本系統(tǒng)的控制要求,驅(qū)動(dòng)電路較復(fù)雜,用42/57專(zhuān)用驅(qū)動(dòng)模塊TB6560AHQ驅(qū)動(dòng),能滿足要求,而驅(qū)動(dòng)L298N模塊功率較小,無(wú)法滿足要求,易造成失步。 最終選定的步進(jìn)電機(jī)為57步進(jìn)電機(jī),驅(qū)動(dòng)電路模塊選用TB6560AHQ模塊。2.5 AD/DA的選擇方案一:采用ADC0832 ADC0832為8位分辨率A/D轉(zhuǎn)換芯片,其最

8、高分辨可達(dá)256級(jí),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在05V之間。芯片轉(zhuǎn)換時(shí)間僅為32S,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗(yàn),以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度慢且穩(wěn)定性能較差,而且占用I/O口多。方案二: 采用PCF8591PCF8591具有I2C總線結(jié)構(gòu)的多通道8bits的逐次逼近型ADC和一個(gè)內(nèi)置8bits單通道ADC,功能多,速度超快,功耗低,單電源供電,串行輸入輸出,節(jié)約I/O口資源,并能在一個(gè)處理系統(tǒng)中外接多個(gè)PCF8591,能進(jìn)行更多更強(qiáng)的處理. 綜上,從各方面考慮,我們選擇方案二。3 系統(tǒng)的硬件設(shè)計(jì)3。1總體電路框圖為了使系統(tǒng)能夠?qū)崿F(xiàn)各種復(fù)雜

9、的控制功能,本設(shè)計(jì)采用一種功能強(qiáng)大的、高速低功耗性?xún)r(jià)比高的單片機(jī)STC89C52完成對(duì)其他部分控制.本設(shè)計(jì)采用SV01A103AEA01R00 旋轉(zhuǎn)角度傳感器(旋轉(zhuǎn)電位器)對(duì)擺桿的傾斜角度進(jìn)行數(shù)據(jù)采集,通過(guò)PCF8591 D/A轉(zhuǎn)換芯片將數(shù)據(jù)送入單片機(jī),單片機(jī)通過(guò)數(shù)據(jù)分析控制TB6560AHQ驅(qū)動(dòng)電路,進(jìn)而控制步進(jìn)電機(jī)使步進(jìn)機(jī)旋轉(zhuǎn)達(dá)到設(shè)定的位置,用數(shù)碼管顯示A/D的數(shù)據(jù)??傮w框圖如圖3-1所示。按鍵電路模式選 擇擇 電 源單片機(jī)驅(qū)動(dòng)模塊步進(jìn)機(jī)數(shù)碼管顯示傳感器AD模塊 圖31 系統(tǒng)框圖3.2系統(tǒng)電路與程序設(shè)計(jì) 3.2.1 STC89C52單片機(jī)最小系統(tǒng) 最小系統(tǒng)包括復(fù)位、按鍵 、顯示和電源部分,

10、而下載模塊用單片機(jī)最小系統(tǒng)直接下載,減少了系統(tǒng)的浪費(fèi),而且防止連續(xù)的拔插單片機(jī).STC89C52單片機(jī)最小系統(tǒng)如圖3-4所示.圖3-4 最小系統(tǒng) 3.2.2 PCF8591模塊圖如圖3-2。 圖3-2 PCF8591模塊圖3。3。3 模塊芯片TB6560AHQ原理圖如圖33。 圖33 模塊芯片TB6560AHQ原理圖 3.3.4 供電電源由于需要驅(qū)動(dòng)57步進(jìn)電機(jī),防止失步,其需要的功率較大,我們采用現(xiàn)有的直流穩(wěn)壓電源直接供電,電源模塊的示意圖如圖35.為了達(dá)到較好的工作效果,我們選用兆信RXD302雙路電源供電,具有很好的可靠性和靈活性,電壓電流均可調(diào),而且還在帶一個(gè)5V電壓輸出端。圖35 電

11、源電路4系統(tǒng)軟件總體設(shè)計(jì)框圖如圖4-1所示。 初始化 模式選擇讀傾角傳感器電壓A/D轉(zhuǎn)換單片機(jī)處理讀到的A/D數(shù)據(jù)控制驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)擺桿是否達(dá)到要求狀態(tài)否結(jié)束是圖4-1 總體程序框圖5 測(cè)試方案與測(cè)試結(jié)果測(cè)試結(jié)果(S)模式模式一模式二第一次4925第二次3435這次設(shè)計(jì)的要求,所設(shè)計(jì)的系統(tǒng)要有較高的靈敏度和相應(yīng)的轉(zhuǎn)矩,這兩樣是最為重要的,我們所設(shè)計(jì)的系統(tǒng),不能很好地滿足要求,有待進(jìn)一步改進(jìn)6 總結(jié)經(jīng)過(guò)四天三夜的辛勤努力,此次基于單片機(jī)為控制核心的簡(jiǎn)易旋轉(zhuǎn)倒立擺的系統(tǒng)設(shè)計(jì)終于完成。通過(guò)合理的系統(tǒng)構(gòu)建和軟件編程,本系統(tǒng)也未能夠完成題目的要求,實(shí)現(xiàn)擺桿的旋轉(zhuǎn)及倒立,實(shí)際測(cè)試表明,所設(shè)計(jì)系統(tǒng)的穩(wěn)定性有待

12、改進(jìn).但由于時(shí)間緊,任務(wù)重,系統(tǒng)還有一些功能未能實(shí)現(xiàn),比如擺桿在受到干擾后,能夠及時(shí)恢復(fù)倒立狀態(tài)。若經(jīng)過(guò)改進(jìn),相信性能還會(huì)有進(jìn)一步的提升.本次競(jìng)賽極大的鍛煉了我們各方面的能力,雖然我們遇到了很多困難和障礙,但總體上成功與挫折交替,困難與希望并存,我們將繼續(xù)努力爭(zhēng)取更大的進(jìn)步。 參考文獻(xiàn) 1劉寶延。步進(jìn)電機(jī)及其驅(qū)動(dòng)控制系統(tǒng)M.哈爾濱:哈爾濱工業(yè)大學(xué)出版社,1972.2周航慈。單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)M。北京:北京航空航天大學(xué)出版社,1991.3 郁有文.傳感器原理及工程應(yīng)用M.西安:西安電子科技大學(xué)出版,2008. 4 宋戈.51單片機(jī)應(yīng)用開(kāi)發(fā)范例大全M。北

13、京:人民郵電出版社,2010。5張毅剛。單片機(jī)原理及應(yīng)用M.北京:高等教育出版社,2009。6 吳建平.傳感器原理及應(yīng)用M.北京:機(jī)械工業(yè)出版社,2009。7 唐繼賢。51單片機(jī)工程應(yīng)用實(shí)例M.北京:北京航空航天大學(xué)出版社,2009。附錄第一部分NOMOD51;-; This file is part of the C51 Compiler package; Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.;-; STARTUP.A51: This code is executed af

14、ter processor reset.;; To translate this file use A51 with the following invocation:;; A51 STARTUP。A51;; To link the modified STARTUP.OBJ file to your application use the following; BL51 invocation:; BL51 your object file list, STARTUP.OBJ controls;;-;; User-defined Power-On Initialization of Memory

15、; With the following EQU statements the initialization of memory; at processor reset can be defined:;; ; the absolute start-address of IDATA memory is always 0IDATALEN EQU 80H ; the length of IDATA memory in bytes。;XDATASTART EQU 0H ; the absolute startaddress of XDATA memoryXDATALEN EQU 0H ; the le

16、ngth of XDATA memory in bytes。;PDATASTART EQU 0H ; the absolute startaddress of PDATA memoryPDATALEN EQU 0H ; the length of PDATA memory in bytes。; Notes: The IDATA space overlaps physically the DATA and BIT areas of the; 8051 CPU. At minimum the memory space occupied from the C51 ; run-time routine

17、s must be set to zero。;-;; Reentrant Stack Initilization; The following EQU statements define the stack pointer for reentrant; functions and initialized it:; Stack Space for reentrant functions in the SMALL model。IBPSTACK EQU 0 ; set to 1 if small reentrant is used.IBPSTACKTOP EQU 0FFH+1 ; set top o

18、f stack to highest location+1。;; Stack Space for reentrant functions in the LARGE model. XBPSTACK EQU 0 ; set to 1 if large reentrant is used。XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1。; Stack Space for reentrant functions in the COMPACT model. PBPSTACK EQU 0 ; set to 1 if comp

19、act reentrant is used.PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.;-; Page Definition for Using the Compact Model with 64 KByte xdata RAM;; The following EQU statements define the xdata page used for pdata; variables。 The EQU PPAGE must conform with the PPAGE control used; in th

20、e linker invocation.;PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.;PPAGE EQU 0 ; define PPAGE number。;PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte; (most 8051 variants use P2 as uppermost address byte);;-; Standard SFR Symbols ACC DATA 0E0HB DATA 0F0HSP DATA 81HDPL DATA 82

21、HDPH DATA 83H NAME ?C_STARTUP?C_C51STARTUP SEGMENT CODE?STACK SEGMENT IDATA RSEG ?STACK DS 1 EXTRN CODE (?C_START) PUBLIC ?C_STARTUP CSEG AT 0?C_STARTUP: LJMP STARTUP1 RSEG ?C_C51STARTUPSTARTUP1:IF IDATALEN > 0 MOV R0,IDATALEN 1 CLR AIDATALOOP: MOV R0,A DJNZ R0,IDATALOOPENDIFIF XDATALEN <>

22、0 MOV DPTR,#XDATASTART MOV R7,LOW (XDATALEN) IF (LOW (XDATALEN) <> 0 MOV R6,(HIGH (XDATALEN)) +1 ELSE MOV R6,#HIGH (XDATALEN) ENDIF CLR AXDATALOOP: MOVX DPTR,A INC DPTR DJNZ R7,XDATALOOP DJNZ R6,XDATALOOPENDIFIF PPAGEENABLE > 0 MOV PPAGE_SFR,#PPAGEENDIFIF PDATALEN <> 0 MOV R0,LOW (PDA

23、TASTART) MOV R7,#LOW (PDATALEN) CLR APDATALOOP: MOVX R0,A INC R0 DJNZ R7,PDATALOOPENDIFIF IBPSTACK 0EXTRN DATA (?C_IBP) MOV ?C_IBP,#LOW IBPSTACKTOPENDIFIF XBPSTACK > 0EXTRN DATA (?C_XBP) MOV ?C_XBP,#HIGH XBPSTACKTOP MOV ?C_XBP+1,#LOW XBPSTACKTOPENDIFIF PBPSTACK > 0EXTRN DATA (?C_PBP) MOV ?C_PB

24、P,#LOW PBPSTACKTOPENDIF MOV SP,#?STACK1; This code is required if you use L51_BANK.A51 with Banking Mode 4; EXTRN CODE (?B_SWITCH0); CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 LJMP ?C_START END第二部分/* 標(biāo)題: * DA-AD試驗(yàn)* /*主程序*/#include<reg52.h>#include <I2C.H>#define PCF8591 0x90 /P

25、CF8591 地址/else IOsbit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24;sbit first=P25; /按鍵1 模式1選擇sbit second=P26; /按鍵2 模式2選擇sbit third=P27; /按鍵3 模式3選擇sbit fouth=P30; /按鍵4 模式4選擇sbit fith=P31; /按鍵5 模式清零選擇sbit shi_neng=P10; /使能控制位sbit fang_xiang=P11;/旋轉(zhuǎn)方向控制位sbit mai_chong=P12; / 脈沖控制位/此表為 LED 的字模, 共陰數(shù)碼管 09

26、unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; unsigned char AD_CHANNEL;unsigned long xdata LedOut8;signed int D32;unsigned int ad=0,ad0=0;unsigned int ms15=0;unsigned char i=0,a=0,b=0,c=0,e=0;unsigned char xiang;signed char n=0;unsigned int xx();void round();void s

27、ystem()TMOD=0x01;TH0=(655352000)/256;TL0=(65535-2000)%256;IE=0x8a;IT0=0;TR0=1; /*DAC 變換, 轉(zhuǎn)化函數(shù) */bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val) Start_I2c(); /啟動(dòng)總線 SendByte(sla); /發(fā)送器件地址 if(ack=0)return(0); SendByte(c); /發(fā)送控制字節(jié) if(ack=0)return(0); SendByte(Val); /發(fā)送DAC的數(shù)值 if(a

28、ck=0)return(0); Stop_I2c(); /結(jié)束總線 return(1);/*ADC發(fā)送字節(jié)命令數(shù)據(jù)函數(shù) */bit ISendByte(unsigned char sla,unsigned char c) Start_I2c(); /啟動(dòng)總線 SendByte(sla); /發(fā)送器件地址 if(ack=0)return(0); SendByte(c); /發(fā)送數(shù)據(jù) if(ack=0)return(0); Stop_I2c(); /結(jié)束總線 return(1);/*ADC讀字節(jié)數(shù)據(jù)函數(shù) */unsigned char IRcvByte(unsigned char sla) uns

29、igned char c; Start_I2c(); /啟動(dòng)總線 SendByte(sla+1); /發(fā)送器件地址 if(ack=0)return(0); c=RcvByte(); /讀取數(shù)據(jù)0 Ack_I2c(1); /發(fā)送非就答位 Stop_I2c(); /結(jié)束總線 return(c);/*/main() system();shi_neng=0;first=1;second=1;third=1;fouth=1;fith=1; while(1) /*以下AD-DA處理*/ switch(AD_CHANNEL) case 0: ISendByte(PCF8591,0x41); D0=IRcvB

30、yte(PCF8591)2; /ADC0 模數(shù)轉(zhuǎn)換1 放大2倍顯示 break; case 1: ISendByte(PCF8591,0x42); D1=IRcvByte(PCF8591)2; /ADC1 模數(shù)轉(zhuǎn)換2 break; case 2: ISendByte(PCF8591,0x43); D2=IRcvByte(PCF8591)2; /ADC2模數(shù)轉(zhuǎn)換3 break; case 3: ISendByte(PCF8591,0x40); D3=IRcvByte(PCF8591)2; /ADC3 模數(shù)轉(zhuǎn)換4 break; case 4: DACconversion(PCF8591,0x40,

31、 D4/2); /DAC 數(shù)模轉(zhuǎn)換 break; / D4=400; /數(shù)字->模擬輸出 D4=D0; / 把模擬輸入 采樣的信號(hào) 通過(guò)數(shù)模轉(zhuǎn)換輸出 if(+AD_CHANNEL>4) AD_CHANNEL=0; ad=D0*10; xiang=xx(); if(first=0)a=1,b=0,c=0,e=0; if(second=0)b=1,a=0,c=0,e=0; if(third=0)c=1,a=0,b=0,e=0; if(fouth=0)e=1,a=0,b=0,c=0; if(fith=0)a=0,b=0,c=0,e=0; if(a=1) if(xiang=0)if(ad&

32、lt;=510&&ad=4250)n=1;if(ad>=0&ad<=850)n=1;else n=0; if(b=1) if(xiang=0)if(ad=ad0)n=-1;if(ad>=ad0)n=1;elseround(); if(c=1) if(ad=2440&ad<=2640)n=1;if(ad=2720&ad<=2860)n=-1; if(e=1) if(ad=2980&2380)if(ad>=2380ad<=2640)n=1;if(ad=2720ad=2980)n=1;else round();

33、 ad0=ad; /*以下將AD的值送到LED數(shù)碼管顯示*/ LedOut0=Disp_TabD010000/1000; LedOut1=Disp_TabD0%1000/100; LedOut2=Disp_TabD0100/100x80; LedOut3=Disp_TabD010; unsigned int xx() /擺桿象限檢測(cè)unsigned char Q;if(ad>20&ad<1360)Q=1;else if(ad1360&ad2380)Q=2;else if(ad2380&ad<2680)Q=3;else if(ad2680&&am

34、p;ad<2980)Q=4;else if(ad>2980&ad4040)Q=5;else if(ad4040&&ad5100)Q=6;else Q=0;return(Q);void round()/狀態(tài)檢測(cè)及相應(yīng)操作if(adad0xiang=6)n=1;else if(ad>ad0&xiang=5)n=1;else if(adad0&xiang=4)n=-1;else if(ad>ad0&&xiang=3)n=1;else if(ad<ad0&xiang=2)n=1;else if(adad0&a

35、mp;&xiang=1)n=1;else n=0;void T0ZD(void) interrupt 1using 2TH0=(65535-2000)/256;/250usTL0=(655352000)%256;/us50+;ms15+;mai_chong=1; P0 = LedOuti; switch(i) /使用switch 語(yǔ)句控制138譯碼器 case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS13

36、8C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break; if(+i>7) i=0;if(ms15>5)ms15=0;if(n>0) /電機(jī)反轉(zhuǎn)程序fang_xiang=1;mai

37、_chong=0;if(n0) /電機(jī)正轉(zhuǎn)程序 fang_xiang=0; mai_chong=0; if(n=0) /電機(jī)鎖定程序mai_chong=1; 第三部分 /*此部分為I2C總線的驅(qū)動(dòng)程序,用來(lái)讀取adda數(shù)據(jù)*/#includereg52。h>#include <intrins。hinclude I2C.H>define NOP() _nop_() /* 定義空指令 /#define _Nop() _nop_() /定義空指令/ sbit SCL=P21; /I2C 時(shí)鐘 sbit SDA=P20; /I2C 數(shù)據(jù) bit ack; /*應(yīng)答標(biāo)志位*/ /* 起

38、動(dòng)總線函數(shù) 函數(shù)原型: void Start_I2c(); 功能: 啟動(dòng)I2C總線,即發(fā)送I2C起始條件. */void Start_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(); / 起始條件鎖定時(shí)間大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */ _Nop(); _Nop();/* 結(jié)束總線函數(shù) 函數(shù)原型: void Stop_I2c(); 功能: 結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件。 */void Stop_I2c() SDA=0; /*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)/ _Nop(); /*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/ SCL=1; /結(jié)束條件建立時(shí)間大于4s/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /*發(fā)送I2C總線結(jié)束信號(hào)*/ _Nop(); _N

溫馨提示

  • 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)論