久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

基于單片機的數字PID控制直流電機PWM調壓調速器系統(★)

時間:2019-05-12 01:14:22下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于單片機的數字PID控制直流電機PWM調壓調速器系統》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于單片機的數字PID控制直流電機PWM調壓調速器系統》。

第一篇:基于單片機的數字PID控制直流電機PWM調壓調速器系統

題目: 基于單片機的數字PID控制直流電機PWM 調壓調速器系統

目錄

一、PID簡介··································(6)

二、設計原理··································(7)

三、設計方案··································(8)

四、心得體會

·······························(16)

五、參考文獻 ·······························(16)

二、設計原理

基本的設計核心是運用PID調節器,從而實現直流電機的在帶動負載的情況下也能穩定的運行。運用A/D轉換芯片將滑動變阻器的模擬電壓轉換為數字量作為控制直流電機速度的給定值;用壓控振蕩器模擬直流電機的運行(電壓高-轉速高-脈沖多),單片機在單位時間內對脈沖計數作為電機速度的檢測值;應用數字PID模型作單片機控制編程,其中P、I、D參數可按鍵輸入并用LED數碼顯示;單片機PWM調寬輸出作為輸出值,開關驅動、電子濾波控制模擬電機(壓控振蕩器)實現對直流電機的PID調壓調速功能。

基于以上的核心思想,我們把這次設計看成五個環節組成,其具體的原理如下見原理圖2.0

圖2.0 PID調速設計原理圖

如圖可以知道,這是一個閉環系統,我們借助單片機來控制,我們現運用AD芯片,運用單片機來控制AD芯片來轉換模擬電壓到數字電壓,AD給定的電壓越大,則產生的數字量越大,單片機再控制這個數字量來產生一個PWM,PWM占空比越大,就驅動晶體管導通的時間越長,這樣加到壓頻轉換器的電壓也就越大,電壓越大,則壓頻轉換器輸出的計數脈沖再單位時間也就越多,這樣就相當于電機的電壓越大,其轉速也就會越快,我們再用單片機對壓頻轉換器的輸出脈沖計數,PID調節器就把這個計數脈沖和預先設定的 值進行比較,比設定值小,這樣就會得到一個偏差,再把這個偏差加到AD的給定電壓,這樣就相當于加大了PWM的占空比,要是比設定值大,這樣也會得到一個偏差,就把這個變差與給定的電壓向減,這樣就可以減少PWM的占空比,通過改變占空比來改變晶體管的導通時間,就可以改變壓頻轉換器的輸入電壓,也就改變壓頻轉換器的單位計數脈沖,達到調電動機速度的目的。

三、設計方案

3.1 PWM的調制

AD芯片給定一定的電壓,應用單片機來控制來產生一個PWM,給定的電壓不同,就會的得到不同的PWM波形。在產生PWM波形我們采用ADC0808芯片和AT89C51兩個核心器件。

ADC0808芯片是要外加電壓和時鐘,當輸入不同的電壓的時候,就可以把不同的電壓模擬量轉化為數字值,輸入的電壓越大,其轉換的相應的數字也就會越大,ADC0808芯片有8個通道輸入和8個通道輸出。其具體的管腳圖見3.01

圖3.01 ADC0808芯片管腳圖

AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。外形及引腳排列如圖3.02所示

圖3.02 AT89C51芯片管腳圖

3.2基于單片機的數字PID控制直流電機PWM調壓調速器系統 3.21調速原理

當基于以上產生一個PWM后,就可以借助PWM脈沖來控制晶體管的導通和關斷,來給壓頻轉換器來提供一定的電壓,在PROTUES中仿真中,給定一個+12V的電壓,就通過晶體管的導通和關斷來給壓頻轉換器供電,壓頻轉換器就會輸出很多的脈沖,借助單片機P3.5來計數,其計數送給P0來顯示,通過給定不同的ADC的輸入電壓,就可以的得到不同的計數顯示,電壓越大,其計數顯示也就越大,通過改變計數脈沖的周期和硬件壓頻轉換器(LM331)的電阻和電容,就可以得到與輸入電壓接近的數值顯示,可能由于干擾的原因,其顯示值和實際值有一點偏差,這是在沒有什么負載的情況下,或者說是在空載的情況下,這樣就可以得到一個很理想的開環系統,也為閉環PWM調節做好準備。

當開環系統穩定后,加上一個擾動,或者說是加上負載,這樣就使的壓頻轉換器的電壓減少,在給定一定電壓的時候,當負載分壓的時候,也就相當于直流電機的電壓就會減少,這樣直流電機的轉速就會下降,或者說當有負載的時候,壓頻轉換器的輸入電壓就會減少,這樣輸入的脈沖在單位時間就會減少,這樣PID調節器,通過改變PID的參數,PID控制器由比例單元(P)、積分單元(I)和微分單元(D)組成。其輸入e(t)與輸出u(t)的關系為 u(t)=kp(e((t)+1/TI∫e(t)dt+TD*de(t)/dt)式中積分的上下限分別是0和t 因此它的傳遞函數為:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)其中kp為比例系數; TI為積分時間常數; TD為微分時間常數這樣就會得到一個偏差,通過這個偏差來改變原來的PWM的占空比,使得晶體管的導通時間加長或減少,這樣就改變了直流電機的輸入電壓,也就是該變了在PROTUES壓頻轉換器的輸入電壓,使得輸出的計數脈沖在單位時間發生改變,也就是模擬了直流電機的轉速的改變,我們希望通過PID的調節,使得輸出的計數脈沖的顯示值和預先設定的值接近,由于偏差的存在,使得PID調節器不斷的去修正,使得顯示值近可能的接近我們所預期的設定值。

3.22基于單片機的數字PID控制直流電機PWM調壓調速器系統原理圖

圖3.07 PID調速原理圖 3.23波形仿真

在不同的給定電壓下開換系統會有不同的PWM波形和計數脈沖個數。在不同的波形中從上之下以此為pwm波形,經過驅動后的波形,LM331的輸入電壓,LM331的輸出脈沖。

當給定電壓為較高(E8H)其波形見如下圖3.08、圖3.09 中電壓給定對應的波形

PID波形

圖3.10 低電壓給定對應的波形

;

圖3.11 PID 控制LM331的輸入電壓波形

3.24 PID調速程序 PWM 輸出驅動程序

ADC

EQU

35H

CLK

BIT

P2.4

ST

BIT

P2.5

EOC

BIT

P2.6

OE

BIT

P2.7

PWM

BIT

P3.7

;

PID 調節設置

EK0

EQU

40H

EK1

EQU

41H

EK2

EQU

42H

PP

EQU

43H

II

EQU

44H

DD

EQU

45H

UK0

EQU

70H

UK1

EQU

71H

ORG

00H

SJMP

START

ORG

0BH

LJMP

INT_TO

START:

MOV

TMOD, #62H

MOV

TH0, #00H

MOV

TL0, #00H

MOV

IE, #86H

SETB

TR0

;SETB

TR1

MOV

R0, #00

MOV

R1, #00

MOV

R2, #00

MOV

R3, #00

MOV

R4, #00

MOV

R5, #00

MOV

R6, #00

MOV

R7, #00

;PID 賦值

MOV

PP, #05

MOV

II, #03

MOV

DD, #02

MOV

EK0,#00H

MOV

EK1,#00H

MOV

EK2,#00H

MOV

UK0,#00H

MOV

UK1,#00H WAIT:

CLR

OE

INC

R7

CLR

ST

SETB

ST

CLR

ST

JNB

EOC, $

SETB

OE

MOV

ADC, P1

MOV

R0,ADC

MOV

A,70H

ADDC

A,ADC

MOV

ADC ,A

;CLR

OE

SETB

PWM

SETB TR1

MOV

A, ADC

LCALL

DELAY

CLR

PWM

;等待轉換完成;高電平延時 8

MOV

A, #255

SUBB

A, ADC

LCALL

DELAY

;低電平延時

CJNE

R7, #20, WA2 WA1:

CLR

TR1

MOV

R7, #00

MOV

A, TL1

MOV 50H,A

mov P0,50H

;PID求偏差

MOV A,EK1

MOV EK2,A

MOV A,EK0

MOV EK1,A

MOV A,R0

SUBB A,50H

MOV EK0,A

;PP的計算

MOV

A,EK0

SUBB A,EK1

MOV B,PP

MUL AB

MOV R1,A

MOV R2,B

AJMP X

WAIT1:AJMP WAIT

;II的計算

X: MOV A,EK0

MOV B,II

MUL AB

MOV R3,A

MOV R4,B

;DD的計算

MOV A,EK1

RL A

MOV EK1,A

MOV A,EK0

SUBB A,EK1

ADDC A,EK2

MOV B,DD

MUL AB

MOV R5,A

MOV R6,B

;PID總的計算

MOV A,R1

ADDC A,R3

ADDC A,R5

MOV 60H,A

MOV A,R2

ADDC A,R4

ADDC A,R6

MOV 61H,A

MOV A,60H

ADDC A,70H

MOV

70H,A

MOV A,61H

ADDC A,71H

MOV

71H,A

MOV TL0,#00H

MOV

TL1,#00H

;SETB TR1

WA2:

SJMP

WAIT1

INT_TO:

CPL

CLK

RETI

DELAY:

MOV

R6, #1 D1:

DJNZ

R6, D1

DJNZ

ACC, D1

RET

END 10

四、心得體會

我們進行了為期一周的計算機控制技術課程設計。通過這兩周的課程設計,我拓寬了知識面,鍛煉了能力,綜合素質得到了提高。

剛剛拿到課題,我感到有些茫然,對于以前沒有做過的人來說要全部做完的確有一定的難度。由于我對計算機控制不是很熟悉,在設計的過程中走了不少彎路。

通過親身體驗做課程設計,我覺得安排課程設計的基本目的,在于通過理論與實際的結合,進一步提高觀察、分析和解決問題的實際工作能力,以便培養成為能夠主動適應社會主義現代化建設需要的高素質的復合型人才。運用學習成果,把課堂上學到的系統化的理論知識,嘗試性地應用于實際設計工作,并從理論的高度對設計工作的現代化提出一些有針對性的建議和設想。檢驗學習成果,看一看課堂學習與實際工作到底有多大距離,并通過綜合分析,找出學習中存在的不足,以便為完善學習計劃,改變學習內容與方法提供實踐依據。我的收獲有一下幾點:

第一,我對所學專業有了一些了解,增強了自己的興趣和對以后可能從事的職業的熱愛。第二,通過課程設計我明白到了理論到實踐有一段很遠的路程。設計過程中的每一步都是一門學問,我終于知道了每一個實現的過程,每一個認識的過程都存有人類無數的的汗水與對待事物一絲不茍得,縝密的思考以及不懈的努力,只有這樣才會有一個新生事物的誕生。而以上種種的過程必須要你親自去體會去認識去發現,那才是屬于你的“收獲”,只有這時才會對自己的作品無比的驕傲。

第三,通過這次設計加強了我們的設計創新能力。使我們的理論知識與實踐充分地結合。第四,通過兩周的課程設計,我學到了很多書本上學習不到的知識。兩周的時間很短,但是我學到比兩年的還多,在以后的學習生活中,我需要更努力地讀書和實踐。

對我們電氣專業的學生來說,實際能力的培養至關重要,而這種實際能力的培養單靠課堂教學是遠遠不夠的,必須從課堂走向實踐。通過課程設計,讓我們找出自身狀況與實際需要的差距,并在以后的學習期間及時補充相關知識,為求職與正式工作做好充分的知識、能力準備,從而縮短從校園走向社會的心理轉型期。

在設計過程中,體會到了設計一項課題的不易,也體會到了設計成功之后的小小成就感和同學之間相互合作的默契。更重要的是,通過課程設計,我發現了自身存在的更多不足之處和實際應用能力方面的欠缺,這些不足之處在今后的學習之中要有意識的彌補和改變。

最后,感謝在課程設計過程中關心幫助我的老師同學。

五、參考文獻

許翏、王淑英主編.計算機技術.北京:機械工業出版社2005 2 王炳實主編.單片機技術.第3版.北京:機械工業出版社2004 3 易泓可主編,基于數字PID設計.北京:機械工業出版社 2004

第二篇:基于FPGA的直流電機PWM調速系統設計與實現

FPGA課程設計

題目:基于FPGA的直流電機PWM調速系統設計與實現 班級:微電子學1202班 姓名:杜英 學號:1206080201 日期:2016年3月24日

基于FPGA的直流電機PWM調速系統設計與實現

1設計任務與要求

1.1設計任務

完成基于FPGA的直流電機PWM調速系統設計與實現,實現對直流電機的閉環調速,速度值采用LCD或數碼管顯示。

1.2設計要求

1.2.1了解PWM控制方法及應用;掌握PWM直流電機調速控制原理;掌握直流電機調速及驅動控制原理;完成基于FPGA的直流電機PWM調速系統設計。采用PWM(脈沖寬度調制)技術,速度值采用LCD或數碼管顯示。

1.2.2通過課程設計的實踐,進一步了解和掌握硬件描述語言(VHDL或Verilog)和TOP-DOWN的設計流程,提高對實際項目的分析和設計能力,體會FPGA項目開發的過程,熟悉實驗報告的編寫規范。

2設計原理分析

2.1直流電機結構如下圖1.1所示

圖2.1 直流電機的構造

將直流電源通過電刷接通線組線圈,使線組線圈導體(電樞導體)有電流通過,在電磁的作用下,線組線圈將會產生磁場,同時產生的磁場與主磁極的磁場產生電磁力,這個電磁力作用于轉子,使轉子以一定的速度開始旋轉,電機就開始工作。

在電機的外部電路加入開關型的霍爾元件,同時在電子轉子的轉盤上加入一個使霍爾元件產生輸出的帶有磁場的磁鋼片。當直流電機旋轉時轉盤與磁鋼片一起旋轉,當磁鋼片轉到霍爾元件上方時,可以使霍爾元件的輸出端高電平變為低電平。當磁鋼片離開霍爾元件上方后,霍爾元件輸出端又恢復高電平。如此,點擊每旋轉一周,會使霍爾元件的輸出端產生一個低脈沖,可以通過檢測單位時間內霍爾元件輸出端低脈沖的個數推算出直流電機的轉速。

本次設計中,調節PWM占空比進而控制直流電機轉速,在本次設計中,為了保護霍爾元件,故設定程序每6秒刷新一次數據,所以在數碼管顯示的數據乘以10就是在該占空比時的直流電機每分鐘轉速。在這次的實驗中數碼管采用的8位共陰極數碼管,通過鎖存器輸入數據使得數碼管的8個段碼數字顯示,再通過選擇輸出數據對所需數碼管進行選擇。

2.2電路原理圖

圖2.2 電路原理圖 3 設計方案

上述原理圖中包含PWM模塊、測速模塊、計數模塊、電機模塊、濾波模塊。電機的外部電路加入開關型的霍爾元件,同時在電子轉子的轉盤上加入一個使霍爾元件產生輸出的帶有磁場的磁鋼片。當直流電機旋轉時轉盤與磁鋼片一起旋轉,當磁鋼片轉到霍爾元件上方時,可以使霍爾元件的輸出端高電平變為低電平。當磁鋼片離開霍爾元件上方后,霍爾元件輸出端又恢復高電平。如此,點擊每旋轉一周,會使霍爾元件的輸出端產生一個低脈沖,可以通過檢測單位時間內霍爾元件輸出端低脈沖的個數推算出直流電機的轉速。本次設計為六秒記一次數,乘十就是每分鐘轉速值。再通過驅動模塊顯示數碼管數據。

4設計步驟

(1)首先確定整體設計方案,確定設計需要使用的軟件;(2)設計電路模塊,編寫各模塊程序代碼并進行仿真編譯;(3)完成整體電路圖設計后,使用QuartusⅡ軟件對整體電路進行仿真調試;

(4)連接硬件,使用示波器觀察產生的波形,對不足之處進行改進調試。

5調試結果說明

連接好試驗箱,把硬件與實驗箱接通,將程序下載到實驗箱中。進行實驗,示波器觀察PWM脈沖波形(占空比),看實驗結果與預期效果是否相同,若相同,則實驗無誤。其波形如下: 占空比為50%時

占空比為90%時

將程序下載到實驗箱中后,其實際操作過程如下: K12為使能鍵,使K12=‘1’;輸入時鐘信號為1MHZ;(1)K4=1時,示波器和LED的顯示如下:

示波器顯示的是霍爾元件單位時間內計數的個數為31.011 顯示器是每六秒電機轉的圈數為186轉

結論:31.011*6=186.066于186近似,所以結論符合要求。(2)K4=1,k3=1時,示波器和LED的顯示如下:

結論:68.6338*6=411.8028于412近似,所以結論符合要求。(3)K4=1,k3=1,K2=1時,示波器和LED的顯示如下:

結論:85.516*6=513.096于513近似,所以結論符合要求。(4)K4=1,k3=1,K2=1,K1=1時,示波器和LED的顯示如下:

結論:90.0339*6=540.2034于541近似,所以結論符合要求。通過以上的比較,發現示波器中的結果與數碼管上數據大概一致,即實驗結果基本達到要求。

6心得體會

本次課程設計,用FPGA控制直流電機,完成直流電機PWM調速系統設計,實現對直流電機的閉環調速,速度值采用LCD或數碼管顯示。是一次很好的學習和實踐的機會。通過課程設計,我明白了電機工作的原理,以及用FPGA控制電機的原理。最重要的是,對如何設計一個系統有了更進一步的了解,積累了很多經驗。

從下載測試的結果來看,設計的要求基本上都實現了。但是仍存在不少問題。每個模塊生成基本電路后,把各個模塊的進行連接,仿真結果是正確的。但是當連接到試驗箱后,電機正常轉動,LED卻無法顯示。檢查電路和程序還有電路圖,并發現什么問題。無意中發現LED偶爾會出現數字,但也只是閃一下。最后才發現是因為電機轉動太快了,LED無法及時顯示或者是一直在閃,人眼無法識別。在程序中加入了濾波模塊,才解決了問題。

在設計的過程中,開始照著EDA課本上的原理設計,后來才發現所設計的電路有很多地方都滿足不了設計要求,使設計一度遭遇了很大困難。通過與同學討論請教,逐步改進了設計,終于使設計的電路和設計要求相吻合。在這中間,通過不斷提出問題,解決問題,我對這次設計的原理有了更深的了解,也給我分析問題,解決問題提供了很多好的方法,好的思路。同時,我也發現了自己存在的很多不足。發現自己在設計一個系統的時候不能夠統籌兼顧,不能夠從總體上把握設計的思路,也不能看清問題的核心與關鍵所在。這些都需要在下面不斷學習實踐,理論畢竟只是理論,要多參加實踐,這樣才能提高自己的能力,積累經驗。

附錄一

PWM模塊程序 Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity PWM is port(clock:in std_logic;

duty_cycle:in std_logic_vector(3 downto 0);

pwm_en:in std_logic;

pwm_out:out std_logic);end entity;architecture art of PWM is

signal pwm_out_io:std_logic;

signal count:std_logic_vector(3 downto 0);begin

pwm_out<=pwm_out_io;

process(clock)

begin

if rising_edge(clock)then

if pwm_en='1' then

count<=count+1;

end if;

end if;

end process;

process(clock)

begin

if rising_edge(clock)then

if pwm_en='1' and count

pwm_out_io<='1';

else

pwm_out_io<='0';

end if;

end if;

end process;end;

測速模塊程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity cesu is port(clk : in

std_logic;

--時鐘輸入1Mhz

ena : out

std_logic;

--允許計數

clr : out

std_logic;

--計數器清零信號產生

load : out

std_logic);--鎖存、顯示輸出允許高有效 end cesu;architecture behav of cesu is

signal clkk :std_logic;

--1HZ時鐘信號

signal count :integer range 0 to 7;--6秒計數

signal clr1 :std_logic;

--清零信號

signal ena1 :std_logic;

--允許計數信號

signal load1 :std_logic;

--允許計數信號

--signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;--計數數據 begin

process(clk)

variable c:std_logic;

variable cnt:integer range 0 to 500000;

begin

if clk'event and clk='1' then

cnt:=cnt+1;

if cnt=500000 then

cnt:=0;c:=not c;

end if;

end if;

clkk<=c;

end process;

process(clkk)

--6秒計數

begin

if clkk'event and clkk='1' then

count<=count+1;

if count<6 then

ena1<='1';load1<='0';clr1<='0';

elsif count=6

then

ena1<='0';load1<='1';clr1<='0';

elsif

count=7 then

ena1<='0';load1<='1';clr1<='1';

end if;

end if;

ena<=ena1;

load<=load1;

clr<=clr1;

end process;end behav;

計數模塊程序 library ieee;use ieee.std_logic_1164.all;

entity cnt10 is

port(clk:in std_logic;

--計數時鐘信號

clr:in std_logic;

--清零信號

ena:in std_logic;

--計數使能信號

cq :out integer range 0 to 15;--4位計數結果輸出

carry_out:out std_logic);

--計數進位

end cnt10;architecture behav of cnt10 is signal cq1:integer range 0 to 15;begin process(clk,ena)begin

if

clr= '1' then cq1<= 0;

----計數器異步清零

elsif clk'event and clk= '1' then

if ena= '1' then

if cq1=10 then cq1<=1;

else cq1<=cq1+1;

end if;

----等于9,則計數器清零

end if;

end if;end process;process(cq1)

begin

if cq1=10 then carry_out<= '1';

----進位輸出

else carry_out<= '0';

end if;end process;

cq<=cq1;end behav;

驅動模塊程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudong_8 is port(clk:in std_logic;

--動態顯示刷新速度時鐘

QQ1,QQ2,QQ3:in std_logic_vector(3 downto 0);--32位BCD碼輸入,最0~3低位,28~31最高位

qudong1:out std_logic_vector(7 downto 0);--驅動信號輸出,0~7分別為abcdefgp contrl:buffer std_logic_vector(2 downto 0));--數碼管位選輸出,000最低位數碼管有效,111最高位數碼管有效 end qudong_8;architecture behavior of qudong_8 is signal disp:std_logic_vector(3 downto 0);signal temp:std_logic_vector(2 downto 0);begin process(clk)begin

if clk'event and clk='1' then

temp<=temp+1;

end if;

contrl<=temp;end process;

process(contrl)

--位選信號產生進程

begin

case contrl is

--when“000”=>disp<=QQ7;

--when“001”=>disp<=QQ6;

--when“010”=>disp<=QQ5;

--when“011”=>disp<=QQ4;

when“100”=>disp<=QQ3;

when“101”=>disp<=QQ2;

when“110”=>disp<=QQ1;

--when“111”=>disp<=“0000”;

when others=>disp<=“0000”;

end case;end process;process(disp)

--譯碼進程

begin

case disp is

when“0000”=>qudong1<=“00111111”;

when“0001”=>qudong1<=“00000110”;

when“0010”=>qudong1<=“01011011”;

when“0011”=>qudong1<=“01001111”;

when“0100”=>qudong1<=“01100110”;

when“0101”=>qudong1<=“01101101”;

when“0110”=>qudong1<=“01111101”;

when“0111”=>qudong1<=“00000111”;

when“1000”=>qudong1<=“01111111”;

when“1001”=>qudong1<=“01101111”;

when others=>qudong1<=“00000110”;

end case;end process;end behavior;

消抖模塊程序 library ieee;use ieee.std_logic_1164.all;

entity xiaodou is port(clk,input: in std_logic;output: out std_logic);end xiaodou;

architecture behav of xiaodou is signal cp:std_logic;signal count:integer range 0 to 3;begin process(clk)begin if(clk'event and clk='1')then--檢測上升沿 if(input='1')then--如果有輸入信號

if(count=3)then count<=count;--當計數達到3時,保持計數值不變 else count<=count+1;--當其小于3時,進行加1處理 end if;if(count=2)then cp<='1';--如果計數達到2,cp置1 else cp<='0';--其余情況全部為0 end if;else count<=0;--如果計數出現非法狀況,進行清零復位 end if;end if;output<=cp;--信號輸出 end process;end behav;

第三篇:基于單片機控制的交通燈設計系統

基于單片機控制的交通燈設計系統

班級:

姓名:

學號:

第一章 概述 1.設計內容

本系統需要采用AT89C51單片機AT89C5中心器件來設計交通燈控制器,實現以下功能: 1.1初始東西綠燈亮,南北紅燈亮,東西方向通車。1.2黃燈閃爍后,東西路口紅燈亮同時南北路口綠燈亮,南北方向開始通車。1.3延時27s,南北方向綠燈滅,黃燈閃爍3次,然后又切換成東西方向通車,如此重復。

設計交通燈控制系統硬件電路與軟件控制程序,對硬件電路與軟件程序分別進行調試,并進行軟硬件聯調,要求獲得調試成功的仿真圖。2.設計目的

2.1 了解交通燈管理的基本工作原理。2.2 熟悉AT89C51工作原理和應用編程。

2.3 熟悉AT89C51行接口的各種工作方式和應用。

2.4 熟悉AT89C51數器/定時器的工作方式和應用編程外部中斷的方法。2.5 掌握多位LED顯示問題的解決。3.設計原理

AT89C51片機具有控制二連體共陰極數碼管和發光二極管的輸出顯示以及檢測按鍵輸入的功能。利用AT89C51片機模仿制作室外十字路口多功能交通燈,實現室內控制與室外顯示的功能。合理控制交通繁忙,交通特殊情況和恢復交通正常的三種情況。

本設計用4個共陽極LED數碼管的分別表示東、西、南、北四個方向路口,以數碼管的上、中、下3個橫段分別代表紅、黃、綠3盞燈,用P0、P1口分別輸出控制模擬交通燈的狀態顯示的數碼管和倒計時顯示數碼管的狀態碼,P3^

1、P3^

2、P3^4-P3^7控制數碼管的位選,P2^0-P2^4接收中斷信號并反饋給INT0接口進行中斷處理。

第二章 硬件設計

1.設計框圖 如圖2-1所示 此處要有文字說明

圖2-1設計框圖

2.元器件選擇及其功能介紹

AT89C51是一種帶4K字節LASH存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。AT89C51片引腳圖如下圖2-2所示。

圖2-2 AT89C51片引腳圖

主要特性:

·與MCS-51 兼容

·4K字節可編程閃爍存儲器 ·壽命:1000寫/擦循環 ·數據保留時間:10年 ·全靜態工作:0Hz-24MHz ·三級程序存儲器鎖定 ·128×8位內部RAM ·32可編程I/O線

·兩個16位定時器/計數器,5個中斷源 ·可編程串行通道

·低功耗的閑置和掉電模式 ·片內振蕩器和時鐘電路 3.設計原理圖

硬件電路圖通過Proteus 仿真之后如圖2-3所示,其中: 按鈕K0連接P2^0端口實現紅燈全亮,處理交通意外 按鈕K1連接P2^1端口實現南北方向亮燈時間+1s 按鈕K2連接P2^2端口實現南北方向亮燈時間-1s 按鈕K3連接P2^3端口實現東西方向亮燈時間+1s 按鈕K4連接P2^4端口實現東西方向亮燈時間-1s

圖2-3整體連接電路原理圖

第三章 軟件設計

1.各個程序段介紹 1.1數碼管顯示

void Display(uchar j)//j控制顯示table中連續位的起始點 { char h,l;if(j<11)//根據狀態判定時間

{

h=Time_EW/10;//EW通行時間十位

l=Time_EW%10;//EW通行時間個位

} else if(j<23){

h=Time_SN/10;//SN通行時間十位

l=Time_SN%10;//SN通行時間個位

} for(i=0;i<4;)//按位顯示通行狀況及時間

{

P0=table1[j];//通行狀況顯示

P3=tab[i];//位選顯示

i++;

j++;

if(i%2)//兩位計時顯示

{

P1=table[l];

Delay(400);

}

else

{

P1=table[h];

Delay(400);

} } Delay(5);} 1.2 INT0外部中斷服務程序

void EXINT0(void)interrupt 0//INT0外部中斷 { EX0=0;//關中斷

if(Busy_Button==0){

P0=0xFE;//意外按鈕按下全顯示紅燈

for(;Busy_Button!=1;)//意外按鈕彈起時恢復之前狀態

Display(24);} /*四個時間控制按鈕分別控制SN、EW方向初始通行時間加減,最長不超過s,最少不低于s*/ if(SN_Add==0)//SN+1 {

SN1+=1;

if(SN1>99)

SN1=99;} if(SN_Red==0)//SN-1 {

SN1-=1;

if(SN1<20)

SN1=20;} if(EW_Add==0)//EW+1 {

EW1+=1;

if(EW1>99)

EW1=99;} if(EW_Red==0)//EW-1 {

EW1-=1;

if(EW1<20)

EW1=20;} EX0=1;//開中斷 } 1.3延時子程序

void Delay(uchar a)//循環a次 { uchar x;x=a;while(x--){;} } 2.程序

#define uchar unsigned char #include uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};uchar code table1[28]={0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF,0xF E, 0xFE,0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF, 0xFE,0xFE,0xFE,0xFE};uchar code tab[4]={0x1E,0x2D,0x4E,0x8D};uchar EW=30,SN=30,EW1=30,SN1=30;uchar count;uchar i,j;sbit Busy_Button=P2^0;sbit SN_Add=P2^1;sbit SN_Red=P2^2;sbit EW_Add=P2^3;sbit EW_Red=P2^4;char Time_EW;char Time_SN;void Delay(uchar a){

uchar x;x=a;while(x--){;} } void Display(uchar j){ char h,l;if(j<11){

h=Time_EW/10;

l=Time_EW%10;} else if(j<23){

h=Time_SN/10;

l=Time_SN%10;} for(i=0;i<4;){

P0=table1[j];

P3=tab[i];

i++;

j++;

if(i%2)

{

P1=table[l];

Delay(400);

}

else

{

P1=table[h];

Delay(400);

} } Delay(5);} void EXINT0(void)interrupt 0 { EX0=0;if(Busy_Button==0){

P0=0xFE;

for(;Busy_Button!=1;)Display(24);} if(SN_Add==0){

SN1+=1;

if(SN1>99)

SN1=99;} if(SN_Red==0){

SN1-=1;

if(SN1<20)

SN1=20;} if(EW_Add==0){

EW1+=1;

if(EW1>99)

EW1=99;} if(EW_Red==0){

EW1-=1;

if(EW1<20)

EW1=20;} EX0=1;

} void timer0(void)interrupt 1 using 1 { TH0=0x3C;TL0=0xB0;count++;if(count==20){

Time_EW--;

Time_SN--;

count=0;} } 第四章 仿真結果及其總結

1.仿真結果圖

1.1正常狀態的仿真結果如圖4-1所示

圖4-1正常狀態

1.2黃燈狀態的仿真結果如圖4-2所示

圖4-2黃燈狀態

1.3緊急狀態的仿真結果如圖4-3所示

圖4-3 緊急狀態

1.4延長通行時間的仿真結果如圖4-4所示

圖4-4延長通行時間

2.總結

通過這次交通燈的課程設計,使我得到了一次用專業知識、專業技能分析和解決現實問題的能力。使我在單片機的基本原理、單片機應用學習過程中,以及在常用編程設計思路技巧的掌握方面都能向前邁了一大步,為日后成為一名合格的應用型人才打下良好的基礎。綜合課程設計讓我把以前學習到的知識得到鞏固和進一步的提高認識,對已有知識有了更深層次的理解和認識。在此,由于自身能力有限,在課程設計中碰到了很多的問題,我通過查閱相關書籍、資料以及和周圍同學交流得到解決。

通過這次交通燈的課程設計,使我了解了寫畢業設計的流程和方法。為自己以后的畢業論文的設計做一次練習,具有積極的意義。還有交通燈是我們生活中非常常見的一種東西,對于我們學以致用的這種能力得到了很好鍛煉,能夠為我們以后的工作于學習打下基礎。

由于本人的水平有限,設計中難免會有一些不合理的部分,系統的穩定性還有待提高,望批評更正。

下載基于單片機的數字PID控制直流電機PWM調壓調速器系統(★)word格式文檔
下載基于單片機的數字PID控制直流電機PWM調壓調速器系統(★).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    主站蜘蛛池模板: 99热在线观看| 人妻熟女一二三区夜夜爱| 亚洲一区二区三区av天堂| 人妻大战黑人白浆狂泄| 成人免费的视频| 亚洲精品无播放器在线播放| 99re视频热这里只有精品7| 国产亚州精品女人久久久久久| 日韩视频在线观看| 久久精品九九亚洲精品天堂| 国产女厕所盗摄老师厕所嘘嘘| 国产香蕉国产精品偷在线| 97精品伊人久久大香线蕉| 久久精品国产一区二区三区肥胖| 免费观看啪啪黄的网站| 人妻无码aⅴ不卡中文字幕| 免费看无码自慰一区二区| 夜夜爽妓女8888视频免费观看| 国产又爽又黄无码无遮挡在线观看| 欧美综合区自拍亚洲综合绿色| 曰韩精品无码一区二区视频| 久久精品国产成人| 国产av日韩a∨亚洲av电影| 国产一区二区三区久久精品| 国产精品成人无码a片在线看| 久久久噜噜噜久噜久久| 久久久久亚洲精品无码系列| 13小箩利洗澡无码视频网站| 免费全部高h视频无码软件| 久久国产色av免费看| 亚洲国产精品自在拍在线播放蜜臀| 免费国产拍久久受拍久久| 日韩在线永久免费播放| 国产精品中文原创av巨作首播| 漂亮人妻被中出中文字幕久久| 国产精品区一区二区三在线播放| 男女高潮又爽又黄又无遮挡| 欧洲美熟女乱又伦免费视频| 一本一道色欲综合网| 麻豆一区二区三区蜜桃免费| 无码精品人妻一区二区三区漫画|