2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  編號: </p><p>  課 題:舵機角度控制電路設(shè)計</p><p>  學(xué) 院: XXXXXXXXXXXXX院 </p><p>  專 業(yè): 自動化 </p><p>  學(xué)生姓名: XXXXXXXX </p>

2、<p>  學(xué) 號: XXXXXXXXXX </p><p>  指導(dǎo)老師: XXXXXXXXXXXXXXXXXXXXX </p><p>  職 稱: 高級工程師 </p><p>  題目類型: 理論研究 實驗研究 √工程設(shè)計 工程技術(shù)研究 軟件開發(fā)</

3、p><p>  2011 年 09 月 15日</p><p><b>  摘 要</b></p><p>  在相當長的時間里,計算機作為科學(xué)工具,在科學(xué)技術(shù)的神圣殿堂里默默地工作,而工業(yè)現(xiàn)場的測控領(lǐng)域并沒有得到真正的實惠,進入21世紀后,由于電子技術(shù)的迅猛發(fā)展,新型電子產(chǎn)品的更新?lián)Q代速度越來越快,以單片機為核心構(gòu)成的智能化產(chǎn)品具有體積小、

4、功能強、應(yīng)用面廣,使用靈活、價格便宜、工作可靠等優(yōu)點,目前正以前所未有的速度取代著傳統(tǒng)電子線路構(gòu)成的經(jīng)典系統(tǒng)。與單片機相結(jié)合,計算機才真正地走進尋常百姓之家,成為廣大工程技術(shù)人員現(xiàn)代化技術(shù)革新、技術(shù)革命的有利武器。</p><p>  本文針對舵機數(shù)字化控制器的設(shè)計,研究其硬件電路設(shè)計、軟件程序設(shè)計和關(guān)鍵算法。</p><p>  在分析舵機控制的性能要求和相關(guān)控制方法的基礎(chǔ)上,提出了基于

5、上位機和下位機的控制結(jié)構(gòu),通過串口通信傳輸數(shù)據(jù)和指令,從而實現(xiàn)舵機控制。</p><p>  本設(shè)計以STC12C5A08S2單片機為核心,利用模擬舵機的機械部分,其中包括小型直流電機和一個反饋可調(diào)電位器,直流電機用H橋芯片LG9110來驅(qū)動,電位器進行角度測量,通過單片機的內(nèi)部A/D轉(zhuǎn)換來反饋實時角度,上位機通過RS232串口與單片機進行通信,舵機根據(jù)上位機所設(shè)定的角度,利用PWM信號驅(qū)動LG9110控制電動機

6、轉(zhuǎn)動,系統(tǒng)通過上位機來設(shè)置舵機地址、波特率、給定角度。經(jīng)過實際調(diào)試驗證,舵機角度在0度~180度范圍內(nèi)可由上位機設(shè)定,精度為正負1度,符合設(shè)計要求。</p><p>  關(guān)鍵詞:舵機;單片機;角度控制;PWM</p><p><b>  目錄</b></p><p>  引言………………………………………………………………………………..1&l

7、t;/p><p>  1舵機控制系統(tǒng)概述……………………………………………………………….1</p><p>  2 STC12C5A08S2單片機概述……………………………………………………2</p><p>  2.1 STC12C5A08S2簡介…………………………………………………………………….2</p><p>  2.2 STC

8、12C5A08S2系列主要性能……………………………………………………….…3</p><p>  2.3 A/D轉(zhuǎn)換器……………………………………………………………………………………3</p><p>  2.4 脈寬調(diào)制PWM原理………………………………………………………………………....3</p><p>  串口通信…………………………………………

9、…………………………………5</p><p>  3.1 串口通信的作用……………………………………………………………………………...5</p><p>  3.2 RS-232C接口和MAX232芯片簡介………………………………………………………..5</p><p>  3.3 MAX232芯片引腳描述及其應(yīng)用…………………………………………………

10、………...6</p><p>  4 驅(qū)動芯片…………………………………………………………………………...8</p><p>  5 硬件設(shè)計思路……………………………………………………………………...9</p><p>  5.1 系統(tǒng)基本原理…………………………………………………………………………………….9</p><p> 

11、 5.2 系統(tǒng)硬件設(shè)計……………………………………………………………………………………..10</p><p>  6. 系統(tǒng)主程序…………………………………………………………………………..10</p><p>  6.1 主程序設(shè)計要點…………………………………………………………………………………..10</p><p>  6.2 上位機……………………

12、………………………………………………………………………11</p><p>  7.1 硬件調(diào)試……………………………………………………………………………..11</p><p>  7.2 軟件調(diào)試……………………………………………………………………………….12</p><p>  參考文獻…………………………………………………………………………………….12&

13、lt;/p><p>  附錄…………………………………………………………………………………………..13</p><p><b>  引言 </b></p><p>  隨著高新技術(shù)在測控領(lǐng)域中的應(yīng)用,有力地促進了控制的系統(tǒng)化和精確化,然而,</p><p>  經(jīng)典的反饋控制、現(xiàn)代控制和大系統(tǒng)理論在應(yīng)用中遇到不少難題。首先

14、,這些控制系統(tǒng)的設(shè)計和分析都是建立在精確的系統(tǒng)數(shù)學(xué)模型的基礎(chǔ)上的,但是各個領(lǐng)域?qū)ψ詣涌刂葡到y(tǒng)控制精度、響應(yīng)速度、系統(tǒng)穩(wěn)、定性與自適應(yīng)能力的要求越來越高,被控對象或過程的非線性、時變性、多參數(shù)點的強烈耦合、較大的隨機擾動、各種不確定性以及現(xiàn)場測試手段不完善等,使難以按數(shù)學(xué)方法建立被控對象的精確模型;其次,為了提高控制的性能,整個控制系統(tǒng)變得極其復(fù)雜,增加了設(shè)備的投資,降低了系統(tǒng)的可靠性。</p><p>  人工智

15、能的出現(xiàn)和發(fā)展,促進了自動控制向更高的層次,即智能控制發(fā)展。基于單片機的智能控制系統(tǒng),使得舵機等伺服系統(tǒng)的模塊化和數(shù)字化更容易實現(xiàn),極大的促進了控制精度、響應(yīng)速度等控制要求的提高。</p><p>  舵機作為一種伺服電機屬于閉環(huán)控制系統(tǒng),和一般的直流電機、交流電機相比具有較高的控制精度,步進電機雖然也具有一定的控制精度但仍然屬于開環(huán)結(jié)構(gòu)。于是舵機在機器人關(guān)節(jié)控制和航模轉(zhuǎn)舵控制等需要精確控制而又沒有很高載荷的系統(tǒng)

16、中就顯得十分經(jīng)濟實用,在航空航天儀器、雷達、導(dǎo)彈、智能自適應(yīng)儀器、各種武器電子和抗惡劣環(huán)境電子等系統(tǒng)中也得到廣泛應(yīng)用。</p><p>  1 舵機控制系統(tǒng)概述</p><p><b>  舵機工作原理</b></p><p>  舵機,又名伺服電機,主要是由外殼馬達、減速齒輪和電位器構(gòu)成。舵機主要適用于那些角度不斷變化并可以保持的控制系統(tǒng),

17、比如人形機器人的手臂和腿,車模和航模的方向控制。</p><p>  舵機工作原理:舵機本質(zhì)上是可定位的馬達,它的內(nèi)部包括了一個小型直流馬達、一組變速齒輪組、一個反饋可調(diào)電位器和一塊電子控制板。它是一個典型閉環(huán)反饋系統(tǒng)[1],減速齒輪組由馬達驅(qū)動,其終端(輸出端)帶動一個線性的比例電位器作位置檢測,該電位器把轉(zhuǎn)角坐標轉(zhuǎn)換為一比例電壓反饋給控制線路板,控制線路板將其與輸入的控制脈沖信號比較,產(chǎn)生調(diào)整脈沖,并驅(qū)動馬達

18、正向或反向地轉(zhuǎn)動,使齒輪組的輸出位置與期望值相符,令調(diào)整脈沖趨于為0,從而達到使舵機精確定位的目的。簡單的說就是發(fā)一個控制信號給舵機,經(jīng)過電路板判斷轉(zhuǎn)動方向,再驅(qū)動馬達開始轉(zhuǎn)動,透過減速齒輪將動力傳至擺臂,同時由電位器檢測送回信號,判斷是否已經(jīng)達到指定位置。</p><p>  數(shù)字舵機(Digital Servo)和模擬舵機(Analog Servo)在基本的機械結(jié)構(gòu)方面是完全一樣的,主要由馬達、減速齒輪、控制

19、電路等組成,而數(shù)字舵機和模擬舵機的最大區(qū)別則體現(xiàn)在控制電路上,數(shù)字舵機的控制電路比模擬舵機的多了微處理器和晶振。</p><p>  相對于模擬舵機,數(shù)字舵機有如下優(yōu)點:首先,驅(qū)動馬達的動力,可以由微處理器的程序調(diào)整,以應(yīng)用于不同的應(yīng)用場合,并優(yōu)化舵機性能。其次,舵機馬達能以更高的頻率響應(yīng)控制信號,而且“死區(qū)”(無響應(yīng)區(qū))變?。环磻?yīng)變得更快;加速和減速時也更迅速、更柔和;運轉(zhuǎn)精度以及舵機鎖位能力也更強。</

20、p><p>  本設(shè)計就是利用模擬舵機的機械部分,運用單片機和電位器的閉環(huán)系統(tǒng)進行角度控制,采用電位器進行角度檢測,由單片機對其進行處理,輸出PWM脈沖信號控制舵機轉(zhuǎn)動到所設(shè)定的角度。即將模擬舵機改裝成數(shù)字舵機,實現(xiàn)了舵機的數(shù)字化控制。</p><p>  2 STC12C5A08S2單片機概述</p><p>  2.1STC12C5A08S2簡介</p>

21、<p>  新一代宏晶芯片具有1個時鐘/機器周期,高速、高可靠,2路PWM,8路10位高速A/D轉(zhuǎn)換,25萬次/秒1T 8051帶總線,無法解密,管腳直接兼容傳統(tǒng)89C52,有全球唯一ID號可省復(fù)位電路,36-44個I/O內(nèi)部R/C時鐘的新一代宏晶芯片加密性強,解密難度高。 </p><p>  2.2STC12C5A08S2系列主要性能</p><p>  ●高速:1個時鐘

22、/機器周期,增強型8051內(nèi)核,速度比普通8051快8~12倍 </p><p>  ●寬電壓:5.5~3.3V,2.2~3.6V(STC12LE5A60S2系列) </p><p>  ●增加第二復(fù)位功能腳(高可靠復(fù)位,可調(diào)整復(fù)位門檻電壓,頻率<12MHz時,無需此功能)●增加外部掉電檢測電路,可在掉電時,及時將數(shù)據(jù)保存進EEPROM,正常工作時無需操作EEP </p>

23、<p>  ●低功耗設(shè)計:空閑模式,HOLTEK芯片解密,(可由任意一個中斷喚醒) </p><p>  ●低功耗設(shè)計:掉電模式(可由外部中斷喚醒),可支持下降沿/上升沿和遠程喚醒 </p><p>  ●工作頻率:0~35MHz,相當于普通8051:0~420MHz </p><p>  ●時鐘:外部晶體或內(nèi)部RC振蕩器可選,在ISP下載編程用戶程序

24、時設(shè)置 </p><p>  ●8/16/20/32/40/48/52/56/60/62K字節(jié)片內(nèi)Flash程序存儲器,擦寫次數(shù)10萬次以上 </p><p>  ●1280字節(jié)片內(nèi)RAM數(shù)據(jù)存儲器 </p><p>  ●芯片內(nèi)EEPROM功能,擦寫次數(shù)10萬次以上 </p><p>  ●ISP / IAP,在系統(tǒng)可編程/在應(yīng)用可編程,無

25、需編程器/仿真器 </p><p>  ●8通道,10位高速ADC,速度可達25萬次/秒,2路PWM還可當2路D/A使用 </p><p>  ●2通道捕獲/比較單元(PWM/PCA/CCP),---也可用來再實現(xiàn)2個定時器或2個外部中斷(支持上升沿/下降沿中斷) </p><p>  ●4個16位定時器,兼容普通8051的定時器T0/T1,2路PCA實現(xiàn)2個定時器

26、 </p><p>  ●可編程時鐘輸出功能,T0在P3.4輸出時鐘,T1在P3.5輸出時鐘,BRT在P1.0輸出時鐘 </p><p>  ●硬件看門狗(WDT) </p><p>  ●高速SPI串行通信端口 </p><p>  ●全雙工異步串行口(UART),兼容普通8051的串口 </p><p>  ●先進

27、的指令集結(jié)構(gòu),兼容普通8051指令集,有硬件乘法/除法指令 </p><p>  ●通用I/O口(36/40/44個),復(fù)位后為:準雙向口/弱上拉(普通8051傳統(tǒng)I/O口)可設(shè)置成四種模式:準雙向口/弱上拉,推挽/強上拉,僅為輸入/高阻,開漏每個I/O口驅(qū)動能力均可達到20mA,但整個芯片最大不得超過100mA</p><p><b>  2.3A/D轉(zhuǎn)換器</b>

28、</p><p><b>  特點:</b></p><p><b> ?、?10 位 精度</b></p><p> ?、?0.5 LSB 的非線性度</p><p> ?、?± 2 LSB 的絕對精度</p><p>  ⑷ 13 - 260 µs 的

29、轉(zhuǎn)換時間</p><p> ?、?最高分辨率時采樣率高達15 kSPS</p><p> ?、?6 路復(fù)用的單端輸入通道</p><p> ?、?2 路附加復(fù)用的單端輸入通道 (TQFP與 MLF封裝 )</p><p> ?、?可選的左對齊ADC讀數(shù)</p><p> ?、?0 - VCC 的 ADC輸入電壓范圍&l

30、t;/p><p> ?、?可選的2.56V ADC參考電壓 </p><p> ?、?連續(xù)轉(zhuǎn)換或單次轉(zhuǎn)換模式</p><p> ?、?ADC 轉(zhuǎn)換結(jié)束中斷</p><p>  2.4脈寬調(diào)制PWM原理</p><p>  本系統(tǒng)采用內(nèi)部16位定時器T1來產(chǎn)生兩路PWM信號。</p><p>  16

31、位的T/C可以實現(xiàn)精確的程序定時(事件管理)、波形產(chǎn)生和信號測量。其主要特點如下:</p><p> ?、?真正的16位設(shè)計 (即允許 16 位的PWM)</p><p> ?、?2 個獨立的輸出比較單元</p><p>  ⑶ 雙緩沖的輸出比較寄存器</p><p> ?、?一個輸入捕捉單元</p><p> ?、?

32、輸入捕捉噪聲抑制器</p><p> ?、?比較匹配發(fā)生時清除寄存器( 自動重載)</p><p>  ⑺ 無干擾脈沖,相位正確的PWM</p><p>  ⑻ 可變的PWM周期</p><p> ?、?頻率發(fā)生器;外部事件計數(shù)器</p><p> ?、?4 個獨立的中斷源(TOV1、OCF1A、OCF1B 與 ICF

33、1)</p><p>  寄存器:定時器 / 計數(shù)器 TCNT1、輸出比較寄存器 OCR1A/B 與輸入捕捉寄存器 ICR1 均為 16 位寄存器。訪問 16 位寄存器必須通過特殊的步驟,T/C 控制寄存器 TCCR1A/B 為 8 位寄存器,沒有 CPU 訪問的限制。雙緩沖輸出比較寄存器 OCR1A/B 一直與 T/C 的值做比較。波形發(fā)生器用比較結(jié)果產(chǎn)生PWM或在輸出比較引腳OC1A/B輸出可變頻率的信號。比

34、較匹配結(jié)果還可置位比較匹配標志 OCF1A/B,用來產(chǎn)生輸出比較中斷請求。在 PWM 模式下用 OCR1A 作為 TOP 值時, OCR1A 寄存器不能用作 PWM 輸出。但此時 OCR1A 是雙向緩沖的, TOP 值可在運行中得到改變。當需要一個固定的 TOP值時可以使用 ICR1寄存器,從而釋放 OCR1A 來用作PWM輸出。</p><p>  工作模式:工作模式 - T/C 和輸出比較引腳的行為 - 由波

35、形發(fā)生模式 (WGM13:0) 及比較輸出模式(COM1x1:0) 的控制位決定。比較輸出模式對計數(shù)序列沒有影響,而波形產(chǎn)生模式對計數(shù)序列則有影響。 COM1x1:0 控制 PWM 輸出是否為反極性。非 PWM 模式時 COM1x1:0控制輸出是否應(yīng)該在比較匹配發(fā)生時置位、清零,或電平取反。</p><p>  本設(shè)計采用相位修正PWM 模式。</p><p>  相位修正 PWM 模式

36、(WGM13:0 = 1、 2、 3、10 或 11)為用戶提供了一個獲得高精度的、相位準確的 PWM 波形的方法。與相位和頻率修正模式類似,此模式基于雙斜坡操作。計時器重復(fù)地從 BOTTOM 計到 TOP,然后又從 TOP倒退回到 BOTTOM。在一般的比較輸出模式下,當計時器往 TOP 計數(shù)時若 TCNT1 與 OCR1x 匹配,OC1x 將清零為低電平;而在計時器往 BOTTOM 計數(shù)時若 TCNT1 與 OCR1x 匹配, OC

37、1x 將置位為高電平。工作于反向比較輸出時則正好相反。與單斜坡操作相比,雙斜坡操作可獲得的最大頻率要小。但其對稱特性十分適合于電機控制。相位修正 PWM 模式的 PWM 分辨率固定為 8、9 或 10 位,或由 ICR1 或 OCR1A 定義。最小分辨率為2比特(ICR1或OCR1A設(shè)為 0x0003),最大分辨率為16位(ICR1或OCR1A設(shè)為 MAX)。 PWM 分辨率位數(shù)可用下式計算:工作于相位修正 PWM 模式時,計數(shù)器的數(shù)值

38、一直累加到固定值 0x00FF、 0x01FF、0x03FF (WGM13:0 = 1、 2或3</p><p>  圖2.2相位修正PWM模式時序圖</p><p><b>  3. 串口通信</b></p><p>  3.1串口通信的作用</p><p>  系統(tǒng)需要接收上位機設(shè)置的角度的數(shù)據(jù),并把下位機的數(shù)據(jù)傳到

39、上位機。因此串口模塊的作用就是把單片機需要傳送到上位機的數(shù)據(jù)轉(zhuǎn)換成電腦的RS-232標準串口數(shù)據(jù),以便把數(shù)據(jù)發(fā)送到上位機。</p><p>  3.2 RS-232C接口和MAX232芯片簡介</p><p>  本系統(tǒng)串口通信模塊設(shè)計采用的是MAX232芯片把單片機傳來的數(shù)據(jù)轉(zhuǎn)換成RS-232標準串口數(shù)據(jù)。以下對RS-232C接口和MAX232芯片做簡要的介紹。</p>&

40、lt;p>  RS-232C的全稱是“數(shù)據(jù)終端設(shè)備(DTE) 和數(shù)據(jù)通信設(shè)備(DCE) 之間的串行二進制數(shù)據(jù)交換接口技術(shù)標準”,適合于短距離通信或帶調(diào)制解調(diào)器的通信應(yīng)用場合.PC機上一般都會有RS-232C接口,MAX232芯片是專門為電腦的RS-232標準串口設(shè)計的一款兼容RS232標準的芯片, 其結(jié)構(gòu)圖如圖3.1所示。該器件包含2個驅(qū)動器2個接收器和一個電壓發(fā)生器電路提供TIA/EIA-232-F電平。該器件符合TIA/EIA

41、-232-F標準,每一個接收器將TIA/EIA-232-F電平轉(zhuǎn)換成5-V TTL/CMOS電平。每一個發(fā)送器將TTL/CMOS電平轉(zhuǎn)換成TIA/EIA-232-F電平。</p><p>  3.3 MAX232芯片引腳描述及其應(yīng)用</p><p>  MAX232芯片引腳圖如圖3.1所示:</p><p>  圖3.1 MAX232芯片引腳圖</p>

42、<p>  本系統(tǒng)數(shù)據(jù)的接收和發(fā)送引腳選用的是T21N,R21N,R2OUT,T2OUT四個引腳,其中T21N、R2OUT與標準的RS-232C接口相連。負責數(shù)據(jù)把轉(zhuǎn)化好的數(shù)據(jù)傳送到上位機;T2OUT、R21N與單片機相連,負責接收從單片機送來的數(shù)據(jù)。</p><p>  3.3.1 MAX232應(yīng)用電路介紹</p><p>  MAX232 外圍需要4個電解電容C1 、C2

43、、C3 、C4 ,是內(nèi)部電源轉(zhuǎn)換所需電容。其取值均為1μF/25V。宜選用鉭電容并且應(yīng)盡量靠近芯片。C5為0.1μF的去耦電容。如圖3.2所示。但本設(shè)計均采用104電容。</p><p>  圖3.2 MAX232應(yīng)用接口電路</p><p>  圖3.3串口模塊原理圖</p><p>  3.3.2串口模塊原理圖設(shè)計</p><p>  單

44、片機要通過與MAX232芯片與上位機的串口相連才能與上位機通訊。單片機與上位機連接電路圖如圖3.3所示。</p><p>  本系統(tǒng)是通過單片機的控制通過串口與PC通信來實現(xiàn)的,首先,串口的2,3腳與232芯片的任一路接收端和發(fā)送端相連;然后再通過對應(yīng)路的發(fā)送端和接收端與單片機的對應(yīng)RXD和TXD相連,再串口中斷打開后發(fā)送和接收數(shù)據(jù),實現(xiàn)串口異步通信。在異步傳送方式中,字符是按幀格式進行發(fā)送的。異步通信的幀格式如

45、表3.1所示。</p><p>  表3.1異步通信的幀格式</p><p>  n-1 第N個字符(一串行幀) n+1</p><p>  起始位 數(shù) 據(jù) 位 校驗位 停止位</p><p><b>  4.驅(qū)動芯片</b&g

46、t;</p><p>  電機驅(qū)動芯片LG9110 </p><p>  ⑴ 低靜態(tài)工作電流; </p><p> ?、?寬電源電壓范圍:2.5V-12V; </p><p> ?、?每通道具有800mA 連續(xù)電流輸出能力; </p><p> ?、?較低的飽和壓降; </p><p> ?、?

47、TTL/CMOS輸出電平兼容,可直接連CPU;</p><p>  ⑹ 輸出內(nèi)置鉗位二極管,適用于感性負載; </p><p> ?、?控制和驅(qū)動集成于單片IC之中; </p><p> ?、?具備管腳高壓保護功能; </p><p> ?、?工作溫度:0℃-80℃。 </p><p>  LG9110 是為控制和驅(qū)動

48、電機設(shè)計的兩通道推挽式功率放大專用集成電路器件,</p><p>  將分立電路集成在單片 IC 之中,使外圍器件成本降低,整機可靠性提高。該芯片有</p><p>  兩個 TTL/CMOS 兼容電平的輸入,具有良好的抗干擾性;兩個輸出端能直接驅(qū)動電</p><p>  機的正反向運動,它具有較大的電流驅(qū)動能力,每通道能通過 750~800mA 的持續(xù)</p

49、><p>  電流,峰值電流能力可達1.5~2.0A;同時它具有較低的輸出飽和壓降;內(nèi)置的鉗位</p><p>  二極管能釋放感性負載的反向沖擊電流,使它在驅(qū)動繼電器、直流電機、步進電機或</p><p>  開關(guān)功率管的使用上安全可靠。管腳定義如表4.1所示。</p><p>  表4.1 LG9110管腳定義</p><

50、p>  圖4.1 LG9110管腳波形圖</p><p><b>  圖4.2 應(yīng)用電路</b></p><p><b>  5.硬件設(shè)計思路</b></p><p>  5.1 系統(tǒng)基本原理</p><p>  本文以STC12C5A80S2為核心,利用模擬舵機的機械部分,其中包括小型直流電

51、機和一個反饋可調(diào)電位器,來組成一個閉環(huán)的舵機控制系統(tǒng),直流電機用H橋芯片LG9110來驅(qū)動,電位器進行角度測量,通過單片機的內(nèi)部A/D轉(zhuǎn)換來反饋實時角度,上位機通過RS232串口與單片機進行通信,將所設(shè)定的角度送到單片機,單片機通過編程產(chǎn)生PWM信號,經(jīng)由LG9110驅(qū)動,控制電機的正反轉(zhuǎn)。</p><p>  整體電路原理框圖如圖5.1所示</p><p>  圖5.1整體電路原理框圖&

52、lt;/p><p><b>  控制流程如下:</b></p><p> ?、?上位機設(shè)定-90°到+90°之間的角度,通過串口發(fā)送到單片機;</p><p> ?、?單片機讀取角度v并將其轉(zhuǎn)換成10位二進制數(shù)r;</p><p> ?、?電位器測量當前角度,并將結(jié)果送到單片機的A/D轉(zhuǎn)換通道進行轉(zhuǎn)換,&

53、lt;/p><p>  轉(zhuǎn)換結(jié)果為10為二進制數(shù)y;</p><p>  5.2 系統(tǒng)硬件設(shè)計</p><p>  圖5.1 系統(tǒng)原理圖</p><p><b>  6. 系統(tǒng)主程序</b></p><p>  系統(tǒng)硬件電路設(shè)計方案確定以后,主要功能將依賴于系統(tǒng)軟件編程來實現(xiàn)。控制系統(tǒng)能否正??煽康毓?/p>

54、作,除了硬件設(shè)計合理外,功能完善的軟件設(shè)計是非常關(guān)鍵的。這一部分將詳細闡述本設(shè)計方案所需實現(xiàn)的功能、系統(tǒng)軟件資源分配,上位機的設(shè)計方案及具體實現(xiàn)方法。</p><p>  6.1主程序設(shè)計要點</p><p>  在論述具體的軟件程序設(shè)計之前,先對軟件設(shè)計的原則、方法等軟件設(shè)計要點作簡要的闡述,這是進行軟件程序設(shè)計的依據(jù)和手段。</p><p>  應(yīng)用程序的主要設(shè)

55、計原則是:</p><p>  ⑴ 軟件設(shè)計與硬件電路設(shè)計需綜合考慮。</p><p> ?、?軟件設(shè)計必須保證系統(tǒng)的各個硬件功能模塊能夠協(xié)調(diào)工作,完成指定的系統(tǒng)功能。</p><p> ?、?各項功能程序設(shè)計實現(xiàn)模塊化。</p><p> ?、?合理規(guī)劃程序存儲區(qū)和數(shù)據(jù)存儲區(qū),為功能的擴展預(yù)留空間,方便今后系統(tǒng)的功能完善和軟件升級。<

56、/p><p> ?、?采取軟件抗干擾措施,保證系統(tǒng)更可靠的運行。</p><p><b>  6.2 上位機</b></p><p>  目前,在許多單片機應(yīng)用系統(tǒng)中,上、下位機分工明確,作為下位機核心器件的單片機往往只負責數(shù)據(jù)采集和通信,而上位機通常以基于圖形界面的Windows核心為操作平臺,為便于查詢和保存數(shù)據(jù),還需要數(shù)據(jù)庫的支持,這種應(yīng)用的

57、核心是數(shù)據(jù)通信,它包括單片機和上位機之間、客戶端和服務(wù)器之間以及客戶端和客戶端之間的通信,而單片機和上位機之間數(shù)據(jù)通信則是整個系統(tǒng)的基礎(chǔ)。</p><p>  單片機和PC的通信是通過單片機和PC串口之間的硬件連接實現(xiàn)的。7.系統(tǒng)調(diào)試</p><p><b>  7.1 硬件調(diào)試</b></p><p>  由于本設(shè)計硬件比較簡單,分兩個模塊:

58、單片機模塊和電平轉(zhuǎn)換模塊,所以硬件調(diào)試主要是單片機模塊。</p><p>  在電路制作完成后,不要急于上電測試,而首先必須做好以下調(diào)試前的檢查工作。 </p><p><b>  檢查連線情況:</b></p><p> ?、?經(jīng)常碰到的有錯接(即連線的一端正確,而另一端誤接)、少接(指安裝時漏接的線)及多接(指在電路上完全是多余的連線),等

59、連線錯誤。檢查連線可以直接對照電路原理圖進行,但若電路中布線較多,則可以以元器件(如運放、三極管)為中心,依次檢察查其引腳的有關(guān)連線,這樣不僅可以查出錯接或少接的線,而且也較易發(fā)現(xiàn)多余的線。 </p><p>  ⑵ 為確保連線的可靠,在查線的同時,還可以用萬用表電阻檔對接線作連通檢查,而且最好在器件外引線處測量,這樣有可能查出某些“虛焊”的隱患。 </p><p> ?、?檢查元器件焊接

60、情況:元器件的檢查,重點要查有極性的元件有否接錯,以及外引線間有否短路,同時還須檢查元器件焊接處是否可靠。這里需要指出,在焊接前,必須對元器件進行檢測,確保元器件能正常工作,以免給調(diào)試帶來不必要的麻煩。 </p><p> ?、?檢查電源輸入端與公共接地端間有否短路在通電前,還需用萬用表檢查電源輸入端與地之間是否存短路,若有則須進一步檢查其原因。 </p><p> ?、?在完成了以上各項

61、檢查并確認無誤后,才可通電調(diào)試,但此時應(yīng)注意電源的正、負極性不能接反。</p><p>  考慮到本設(shè)計只是一次學(xué)習過程,對性能要求不是很高,所以采用下載線的5V VCC供電這樣的方法,電路也盡可能的精簡。</p><p>  在檢查驅(qū)動電路時,在未加單片機使能控制的情況下,通電待系統(tǒng)工作后,用萬用表測量LG9110的1腳和4腳是否有輸出。若輸出電壓大小不符合要求,則說明驅(qū)動芯片有問題。&

62、lt;/p><p>  若確定驅(qū)動電路無誤,則對單片機使能,下載調(diào)試好的程序到單片機,使系統(tǒng)運行。用萬用表檢查單片機的各個引腳,尤其是PB1、PB2的PWM輸出引腳的電壓大小是否接近理論值,若不是或者沒有輸出,則直接給定該端口賦固定的位變量值,觀察輸出情況,符合要求,則說明是軟件問題。具體調(diào)試見軟件調(diào)試。</p><p>  單片機輸出符合要求后,連接上舵機,觀察舵機是否在指定位置停住轉(zhuǎn)動,若

63、在指定位置左右來回轉(zhuǎn)動,說明PD參數(shù)沒調(diào)好;若舵機一直轉(zhuǎn)到盡頭停不下來則說明舵機反饋端斷開,或者單片機讀不到正確的A/D轉(zhuǎn)換值。</p><p>  綜合調(diào)試過程中的各種問題后,在老師的指導(dǎo)下,最終得出期望的結(jié)果,調(diào)試成功。</p><p><b>  7.2 軟件調(diào)試</b></p><p>  把調(diào)試好的程序下載到單片機中,接上電源,檢驗程

64、序是否如自己所設(shè)計的那樣可以實現(xiàn)所要求的功能。如果電路板上的結(jié)果和設(shè)想的不同,由于在硬件檢查部分已經(jīng)確定了硬件沒問題。則應(yīng)該是軟件部分即程序方面的問題。需要檢查程序。首先檢外接收中斷部分,接收到的數(shù)據(jù)是否能夠正確讀取,并轉(zhuǎn)換成設(shè)定的角度值。接收部分沒問題再檢查T1定時器的設(shè)置,選用的頻率、工作模式,PB1、PB2端口是否設(shè)置為輸出。因為前面已經(jīng)確定硬件沒有問題了,所以,在軟件調(diào)試的時候可以結(jié)合硬件來在線調(diào)試,這樣很直觀,而且發(fā)現(xiàn)問題也很

65、容易,觀察舵機是否還在所指定角度來回轉(zhuǎn)動,耐心的調(diào)試,直到舵機準確的達到指定的角度并停止轉(zhuǎn)動。</p><p>  調(diào)試是整個設(shè)計的關(guān)鍵部分,調(diào)試的成功與否關(guān)系到系統(tǒng)運行的成功與否,所以在調(diào)試時要格外的細心和有耐心,在自己的努力和老師的指導(dǎo)下最終調(diào)試成功。</p><p><b>  參考文獻:</b></p><p>  [1] 童詩白,華

66、成英.模擬電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社, 2000.</p><p>  [2] 先鋒工作室.單片機程序設(shè)計實例[M]. 北京:清華大學(xué)出版社,2003. </p><p>  [3] 馬忠梅等.單片機的C語言應(yīng)用程序設(shè)計[M].北京:北京航空航天大學(xué)出版社,2003.</p><p>  [4] 潘新民,王燕芳.微型計算機控制技術(shù)[M].北京:電

67、子工業(yè)出版社,2007.</p><p>  [5] 金春林,邱慧芳,張皆喜.AVR系列單片機C語言編程與應(yīng)用實例[M].北京清華大學(xué)出版社,2003.</p><p>  [6] 李江全,朱東芹.Visual Basic數(shù)據(jù)采集與串口通信測控應(yīng)用實戰(zhàn)[M].北京:人民郵電出版社,2010.</p><p>  #include<stc12c5a.h>

68、; //頭文件</p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p>  unchar sig=0, count,s1num, miao,shi,fen;</p><p>  float flag=0,init=0,miao1=0,

69、shi1=0,fen1=0, AD=0; </p><p>  sbit rs=P3^2; //定義1602液晶RS端</p><p>  sbit rw=P2^6;</p><p>  sbit lcden=P3^3;//定義1602液晶LCDEN端</p><p>  sbit s1=P2^3; //定義按鍵--功能鍵</p&

70、gt;<p>  sbit s2=P2^2;//定義按鍵--增加鍵</p><p>  sbit s3=P2^1;//定義按鍵--減小鍵</p><p>  sbit s4=P2^0; //確定鍵</p><p>  uchar code table[]="true angle:";//定義初始上電時液晶默認顯示狀態(tài)<

71、/p><p>  uchar code table1[]=" angle:";</p><p>  void delay(uint z) //延時函數(shù)</p><p>  {uint x,y;</p><p>  for(x=z;x>0;x--)</p><p>  for(y=120

72、;y>0;y--);</p><p><b>  }</b></p><p>  void PWM_init (void)</p><p>  {CMOD=0x80; //設(shè)置PCA定時器</p><p>  CCON=0x00;</p><p><b>  CL=0x00; &

73、lt;/b></p><p><b>  CH=0x00;</b></p><p>  CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)</p><p>  CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同</p><p>  CCAP0H=0x00; /

74、/ PWM0初始時為0</p><p>  CCAPM1=0x42; //PWM1設(shè)置PCA工作方式為PWM方式(使用時刪除//)</p><p>  CCAP1L=0x00; //設(shè)置PWM1初始值與CCAP0H相同</p><p>  CCAP1H=0x00; // PWM1初始時為0</p><p>  CR=1; //啟動PCA定時器

75、</p><p><b>  }</b></p><p>  void PWM0_set (unsigned char a,unsigned char b)</p><p>  {CCAP0L= a; //設(shè)置值直接寫入CCAP0L</p><p>  CCAP0H= a; //設(shè)置值直接寫入CCAP0H</p&

76、gt;<p>  CCAP1L= b; //設(shè)置值直接寫入CCAP0L</p><p>  CCAP1H= b; //設(shè)置值直接寫入CCAP0H</p><p><b>  }</b></p><p>  void ad_init() //AD初始化函數(shù)</p><p>  {ADC_CONTR|=0x8

77、0;//開A/D電源</p><p>  delay(100); //必要的延時</p><p>  P1ASF=0x01;//P1.0作為模擬量輸入口</p><p>  delay(100); //必要的延時</p><p>  ADC_CONTR=0xc0;//開A/D電源</p><p> 

78、 delay(100); </p><p><b>  }</b></p><p>  void con_init(void) </p><p>  { SCON = 0x5a; PCON=0X80; //8 bit data ,no parity bit</p><p>  TMOD

79、 = 0x20; //T1 as 8-bit auto reload</p><p>  TH1 = TL1 = -13; //Set Uart baudrate</p><p>  TR1 = 1; </p><p><b>  }</b>&l

80、t;/p><p>  void SendData(char dat)</p><p>  { TI = 0; //Clear TI flag</p><p>  SBUF = dat; </p><p>  while (!TI);

81、 //Wait for the previous data is sen</p><p><b>  }</b></p><p>  RecData(void)</p><p>  { int dat;</p><p>  while (!RI); //Wai

82、t for the previous data is sen</p><p>  RI = 0; //Clear TI flag</p><p>  dat =SBUF ; </p><p>  return dat; //Send current d

83、ata</p><p><b>  }</b></p><p>  void write_com(uchar com)//液晶寫命令函數(shù)</p><p><b>  {rw=0;</b></p><p><b>  rs=0;</b></p><p>

84、<b>  lcden=0;</b></p><p><b>  P0=com;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(5);

85、</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void write_date(uchar date)//液晶寫數(shù)據(jù)函數(shù)</p><p><b>  {rw=0;</b></p&g

86、t;<p><b>  rs=1;</b></p><p><b>  lcden=0;</b></p><p><b>  P0=date;</b></p><p><b>  delay(5);</b></p><p><b>

87、  lcden=1;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void write_sfm(uchar add,uchar d

88、ate)//寫時分秒函數(shù)</p><p>  {uchar ge;</p><p><b>  ge=date;</b></p><p>  write_com(0x80+0x40+add);//設(shè)置顯示位置</p><p>  write_date(0x30+ge); //送去液晶顯示個位</p>&l

89、t;p><b>  }</b></p><p>  void lcdinit()//初始化函數(shù)</p><p>  {uchar num;</p><p><b>  lcden=0;</b></p><p><b>  rw=0 ;</b></p>&l

90、t;p>  fen=0; //初始化種變量值</p><p><b>  miao=0;</b></p><p><b>  shi=0;</b></p><p><b>  count=0;</b></p><p><b>  s1num=0;</b&g

91、t;</p><p>  write_com(0x38);//初始化1602液晶</p><p>  write_com(0x0c);</p><p>  write_com(0x06);</p><p>  write_com(0x01);</p><p>  write_com(0x80);//設(shè)置顯示初始坐標&l

92、t;/p><p>  for(num=0;num<11;num++)//顯示年月日星期</p><p>  {write_date(table[num]);</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p> 

93、 write_com(0xc0);//設(shè)置顯示初始坐標</p><p>  for(num=0;num<11;num++)//顯示年月日星期</p><p>  {write_date(table1[num]);</p><p><b>  delay(5);</b></p><p><b>  }&l

94、t;/b></p><p>  write_sfm(14,miao);//分別送去液晶顯示</p><p>  write_sfm(13,fen);</p><p>  write_sfm(12,shi);</p><p><b>  }</b></p><p>  void keyscan

95、()//按鍵掃描函數(shù)</p><p>  {if(s1==0)</p><p>  {delay(5);</p><p>  if(s1==0)//確認功能鍵被按下</p><p>  {s1num++;//功能鍵按下次數(shù)記錄</p><p>  while(!s1);//釋放確認</p><

96、;p>  if(s1num==1)//第一次被按下時</p><p>  {write_com(0x80+0x40+14);//光標定位到秒位置</p><p>  write_com(0x0f); //光標開始閃爍</p><p><b>  }</b></p><p>  if(s1num==2)//第二次按

97、下光標閃爍定位到分鐘位置</p><p>  {write_com(0x80+0x40+13);</p><p><b>  }</b></p><p>  if(s1num==3)//第三次按下光標閃爍定位到小時位置</p><p>  {write_com(0x80+0x40+12);</p>&l

98、t;p><b>  }</b></p><p>  if(s1num==4)//第四次按下</p><p>  {s1num=0;//記錄按鍵數(shù)清零</p><p>  write_com(0x0c);//取消光標閃爍</p><p><b>  }</b></p><

99、;p><b>  }</b></p><p><b>  }</b></p><p>  if(s1num!=0)//只有功能鍵被按下后,增加和減小鍵才有效</p><p>  {if(s2==0)</p><p>  {delay(5);</p><p>  if

100、(s2==0)//增加鍵確認被按下</p><p>  {while(!s2);//按鍵釋放</p><p>  if(s1num==1)//若功能鍵第一次按下</p><p>  {miao++; //則調(diào)整秒加1</p><p>  if(miao==10)//若滿60后將清零</p><p><b>

101、;  miao=0;</b></p><p>  write_sfm(14,miao);//每調(diào)節(jié)一次送液晶顯示一下</p><p>  write_com(0x80+0x40+14);//顯示位置重新回到調(diào)節(jié)處</p><p><b>  }</b></p><p>  if(s1num==2)//若功能鍵

102、第二次按下</p><p>  {fen++;//則調(diào)整分鐘加1</p><p>  if(fen==10)//若滿60后將清零</p><p><b>  fen=0;</b></p><p>  write_sfm(13,fen);//每調(diào)節(jié)一次送液晶顯示一下</p><p>  write

103、_com(0x80+0x40+13);//顯示位置重新回到調(diào)節(jié)處</p><p><b>  }</b></p><p>  if(s1num==3)//若功能鍵第三次按下</p><p>  {shi++;//則調(diào)整小時加1</p><p>  if(shi==2)//若滿24后將清零</p><

104、p><b>  shi=0;</b></p><p>  write_sfm(12,shi);;//每調(diào)節(jié)一次送液晶顯示一下</p><p>  write_com(0x80+0x40+12);//顯示位置重新回到調(diào)節(jié)處</p><p><b>  }</b></p><p><b>

105、;  }</b></p><p><b>  }</b></p><p><b>  if(s3==0)</b></p><p>  {delay(5);</p><p>  if(s3==0)//確認減小鍵被按下</p><p>  {while(!s3);

106、//按鍵釋放</p><p>  if(s1num==1)//若功能鍵第一次按下</p><p>  {miao--;//則調(diào)整秒減1</p><p>  if(miao==-1)//若減到負數(shù)則將其重新設(shè)置為59</p><p><b>  miao=9;</b></p><p>  writ

107、e_sfm(14,miao);//每調(diào)節(jié)一次送液晶顯示一下</p><p>  write_com(0x80+0x40+14);//顯示位置重新回到調(diào)節(jié)處</p><p><b>  }</b></p><p>  if(s1num==2)//若功能鍵第二次按下</p><p>  {fen--;//則調(diào)整分鐘減1&l

108、t;/p><p>  if(fen==-1)//若減到負數(shù)則將其重新設(shè)置為59</p><p><b>  fen=9;</b></p><p>  write_sfm(13,fen);//每調(diào)節(jié)一次送液晶顯示一下</p><p>  write_com(0x80+0x40+13);//顯示位置重新回到調(diào)節(jié)處</p&g

109、t;<p><b>  }</b></p><p>  if(s1num==3)//若功能鍵第二次按下</p><p>  {shi--;//則調(diào)整小時減1</p><p>  if(shi==-1)//若減到負數(shù)則將其重新設(shè)置為23</p><p><b>  shi=1;</b>

110、</p><p>  write_sfm(12,shi);//每調(diào)節(jié)一次送液晶顯示一下</p><p>  write_com(0x80+0x40+12);//顯示位置重新回到調(diào)節(jié)處</p><p><b>  }</b></p><p><b>  }</b></p><p&

111、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void write_sfm1(uchar add1,uchar date1)</p><p>  {uchar ge1;</p&g

112、t;<p>  ge1=date1;</p><p>  write_com(0x80+add1);</p><p>  write_date(0x30+ge1);</p><p><b>  }</b></p><p>  void sfm1(float x)</p><p>&l

113、t;b>  {int n;</b></p><p><b>  n=x;</b></p><p>  shi1=n/100;</p><p>  fen1=n/10%10;</p><p>  miao1=n%10;</p><p>  write_sfm1(12,shi1);

114、//分別送去液晶顯示</p><p>  write_sfm1(13,fen1);</p><p>  write_sfm1(14,miao1);</p><p><b>  }</b></p><p>  void main()//主函數(shù)</p><p><b>  {</b&

115、gt;</p><p>  int temp=0;</p><p>  lcdinit();//首先初始化各數(shù)據(jù)</p><p>  PWM_init(); //PWM初始化</p><p>  ad_init();</p><p>  con_init() ;</p><p>  while

116、(1)//進入主程序大循環(huán)</p><p>  { keyscan();//不停的檢測按鍵是否被按?</p><p>  ADC_CONTR|=0x08;//開A/D電源</p><p><b>  sig=0;</b></p><p>  while(sig==0)</p><p><

117、b>  {</b></p><p>  sig=ADC_CONTR&0x10;</p><p><b>  } </b></p><p>  ADC_CONTR&=0xE7;//ADC_FLAG清零</p><p>  AD=ADC_RES*4+ADC_RESL; //10位

118、AD的結(jié)果</p><p>  AD=AD*180/1024;</p><p>  if(RI==1){ delay(100); init = RecData(); temp=1; }//1024*180</p><p><b>  sfm1(AD);</b></p><p>  flag=init-AD;

119、</p><p>  if(flag<-40) PWM0_set (0x00,0xff);</p><p>  if(flag<-10&&flag>=-40) PWM0_set (0x00,0xaf);</p><p>  if(flag<-3&&flag>=-10) PWM0_se

120、t (0x00,0x9f);</p><p>  if(flag>40) PWM0_set (0xff,0x00);</p><p>  if(flag>10&&flag<=40) PWM0_set (0xaf,0x00);</p><p>  if(flag>3&&flag<=10)

121、 PWM0_set (0x9f,0x00);</p><p>  if(flag>=-3&&flag<=3) {PWM0_set (0x00,0x00);if(temp)SendData( AD);temp=0;}</p><p>  if(s4==0) </p><p><b>  {</b></p>

122、<p><b>  delay(5);</b></p><p>  if(s4==0) </p><p><b>  {</b></p><p>  init=shi*100+fen*10+ miao;</p><p><b>  }</b></p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論