




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 單片機應用實習報告數控方波發生器的設計 院系名稱: 電氣與信息工程學院 專業班級:學生姓名: 指導教師: 職 稱: 黑 龍 江 工 程 學 院二一三年七月實習名稱單片機應用實習實習時間2013年 6 月 24 日至 2013年 7 月 12日 共 3 周實習單位或實習地點實驗樓507、730實習單位評語:(分散實習填)簽字: 公章: 年 月 日指導教師評語: 成 績指導教師簽字:年 月 日實習任務書學生姓名劉善文院系電氣與信息工程學院專業班級電子信息工程11-3班指導教師姓名劉海成鄒海英職稱講師講師是否外聘是 否是 否題目名稱數控方波發生器的設計設計的內容、意義及技術指標要求1、 設計的意義
2、數控方波發生器在各理工科實驗中具有廣泛的應用,同時在生活中的數字設備、家用電器、電子玩具等許多領域也有需求。方波信號是一種應用極為廣泛的信號,它在科學研究、工程教育及生產實踐中的使用非常普遍。它通常作為為標準信號,應用于電子電路的性能試驗或參數測量。另外,在許多測試儀中也需要用標準的方波信號檢測一些物理量。所以研究多諧振蕩方波發生器具有非常重要的現實意義。 2、 技術內容 核心技術為PWM技術,利用改變TOP值和OCR值來改變方波的頻率和占空比,利用按鍵給輸入,液晶顯示來實現人機互動。3、 設計指標要求方波頻率范圍11KHz。發揮:占空比可調,頻率可調。摘 要本次設計方案主要采用數字
3、電子技術中的PWM技術,PWM是一種穩定、精確的方波發生技術,單片機通過按鍵給出TOP值和OCR值,通過單片機的ALE給外接的計數器74HC590方波頻率,再通過改變TOP值和OCR值與計數器值經過比較器74HC85進行比較,把比較之后的值送給D觸發器74HC74來實現頻率的可調及占空比的可調,從而達到設計的要求。關鍵詞:PWM;74HC590;TOP;比較值;74HC8521 / 25文檔可自由編輯打印第1章 總體設計方案1.1 總體設計方案 數控方波的設計其實就是PWM波發生器的設計。方案一:直接使用單片機的T2定時器自帶的方波輸出功能,根據公式,通過編程實現利用按鍵來改變RCAP2的值,
4、從而改變方波的頻率。方案二:利用PWM技術,由單片機內部根據相應程序實現的計算功能給出TOP值和OCR值來實現頻率可調及占空比可調,計算依據公式、,本方案精確度較高,能達到實習要求。 方案一雖然能達到實習要求中對于頻率的要求,且編程簡單,但是卻不能調節占空比,無法達到對于占空比的要求。方案二雖然比較復雜,但能完全達到實習要求,這里我們選取方案二??偡桨缚驁D如圖1.1所示 圖1.1總方案框圖1.2 軟硬件功能分析 1.硬件完成功能 硬件部分需要搭建一個PWM電路,主要元器件為計數器、比較器、鎖存器,同時需要兩個74HC595來擴充單片機的I/O口。計數器選取為74HC590,比較器選取四位比較器
5、74HC85四位比較器,利用D觸發器來實現最后的方波輸出。按鍵實現TOP值和OCR值的輸入,液晶實現顯示頻率功能。工作時由計數器給出固定的頻率輸出,同時單片機將TOP值和比較值的送給比較器,比較器器將結果送給D觸發器,由D觸發器實現最后的波形輸出。 2軟件完成功能賦予按鍵0到9的數值和TOP、OCR、CLEAR,液晶顯示和初始化,當有按鍵輸入時單片機內部經過相應的計算按順序賦予74HC595相應的TOP值和OCR值來控制頻率和占空比,輸出想要的方波。3.軟硬件共同完成功能及配合方法系統啟動,軟件實現液晶的初始化和按鍵的賦值,單片機從ALE口輸出工作時鐘給計數器,計數器開始工作,將工作數值賦予比
6、較器,此時由按鍵輸入TOP值和OCR值,通過編好程序計算得到需要的頻率和占空比,將TOP值和比較值通過相應的程序按順序給74HC595,74HC595通過硬件電路將得到的數值賦予比較器,比較器將數據處理之后將值送給D觸發器,由D觸發器輸出最后的波形,同時液晶顯示相應的數值。第2章 硬件電路設計2.1 單片機最小系統電路設計 本最小系統包含供電電路、復位電路、工作時鐘電路、所有I/O口的上拉電阻。其中,供電電路電壓為5V,采用直流電源,復位電路按鍵為SW-PB,工作時鐘電路采用12M晶振,I/O口上拉電阻采用4.7K組排。如圖2.1所示。 圖2.1(a)單片機最小系統電路圖圖2.1(b)單片機最
7、小系統實物圖2.2 PWM電路設計 PWM該部分主要包含計數器模塊、比較器模塊、非門模塊和觸發器模塊。中間的四塊芯片即為比較器模塊,因為沒有8輸入的比較器所以用4給4輸入的比較器74HC85,計數器用的74HC590,最下方兩塊芯片為74HC595,用于擴展單片機的I/O口并將數據送入位于中間的比較器模塊,右上角為非門模塊。左上角為D觸發器模塊,D觸發器用的74HC74。 具體連接方法參見圖2.3(b)的電路原理圖。圖2.2(a)PWM方案框圖 圖2.2(b) PWM部分電路設計圖2.2(c)PWM部分電路實物圖2.3 人機接口電路設計 顯示模塊采用直接用單片機接口接外界液晶,用電位器調節液晶
8、的亮度。因為考慮到系統簡單,及程序的簡單化,我們使用單片機接口驅動,靈活方便,減少了成本和硬件電路的復雜程度,易于修改和調試。如圖2.3.1所示。 圖2.3.1液晶電路圖 由于需要的數值較多,按鍵需要的多,為了節省I/O口,因此采取反轉法讀取44的矩陣鍵盤,如圖2.3.2矩陣鍵盤 圖2.3.2按鍵電路圖 圖2.3.3液晶及按鍵部分實物圖圖2.3.4 1K頻率調節占空比圖2.35 1K頻率調節占空比圖2.3.6 1K頻率調節占空比第3章 系統軟件設計3.1 軟件總體設計思路 軟件主要需要實現按鍵讀取,內部算法計算、液晶輸出、74HC595的賦值程序。對于按鍵部分,由于需要的數值較多,因此采取反轉
9、法讀取44的矩陣鍵盤,算法方面只要實現公式中的算法,能夠計算出所需的TOP值和比較值即可,液晶輸出參照1602液晶程序進行編程,74HC595的擴引腳功能只需一個相應的子程序即可。系統開始運行之后,當單片機內部程序檢測到按鍵的中斷子程序之后就會進行鍵值讀取,通過按鍵給出TOP值和OCR值,再通過子程序賦值給74HC595,之后由硬件完成其余功能,液晶程序顯示數據。3.2 主程序流程設計 編程語言為基于51單片機的C語言,主要采取條件語句和循環語句。圖3.1主程序流程圖3.3 按鍵程序設計 按鍵部分程序為反轉法掃描程序。圖3.2按鍵部分程序流程圖3.4 液晶顯示程序設計 液晶部分編程基于1602
10、液晶程序。 圖3.3液晶程序流程圖3.5 中斷服務子程序設計 中斷子程序為讀取按鍵改變方波頻率和占空比輸出的程序圖3.4中斷子程序流程圖總結一結論 單片機通過按鍵給出TOP值和OCR值,單片機的ALE給外接的計數器74HC590方波頻率,進行計數,再通過改變TOP值和OCR值來改變頻率和占空比,將TOP值和OCR值與計數器值經過比較器74HC85進行比較,把比較之后的值送給D觸發器74HC74輸出方波。通過數控方波發生器的設計,我們了解了方波的發生原理,得到了預期的結果。二心得體會 在本次實習中,我和我的隊友認識到了在學習中知識積累的不夠,不夠扎實,對數電和C語言編程的知識有許多的不足,在實習
11、過程中,通過我和隊友的團結合作,相互學習,相互幫助,在老師的指導下完成了課題的設計。在實習我們學習到了很多東西,在數電和C語言的學習有了很大的進步。只有理論知識學習的好,才能為實際工程中做下鋪墊,在實踐中我們才能遇到實際中遇到的許多問題,說明了我們在學習的過程中不僅要掌握好理論知識,更要有實踐,只有實踐和理論的結合才能更好的掌握我們所學習的知識。這個過程中,我們要有團隊意識,只有一個團隊團結合作,相互之間配合,才能更好的完成我們的任務,只有我們不斷學習,不斷的改善,不斷的磨合,才能更好的配合,團隊在我們實踐和生活中是非常重要的。過這次的經歷我們明白了,學習要有耐心,細心,不急躁,要把理論和實踐
12、相結合,而且遇到問題首先要自己嘗試去解決,要學會利用網絡,要具備一定的搜集資料的能力,并且要培養團隊合作的能力,也讓我們體會到了自己設計并制作的快樂,獲益匪淺!參考文獻1劉海成.單片機及應用系統設計原理與實踐M.北京:北京航空航天大學出版社,2009:88-204. 2劉海成.單片機及應用原理教程M.北京:中國電力出版社,2012:69-137. 3秦進平.數字電子與EDA技術M.北京:科學出版社,2011:83-106. 4譚浩強、張基溫.C語言程序設計教程M.北京:高等教育出版社,2006:60-105. 5劉鯤、孫春亮.單片機C語言入門M.北京:人民郵電出版社,2010:96-168.
13、6邱關源.電路M.北京:高等教育出版社,2011:82-156. 7康華光.電子技術基礎M.北京:高等教育出版社,2006:101-211. 附 錄附錄1 總原理圖圖附1附錄2 源程序#include "reg52.h"#define uchar unsigned char#define uint unsigned int/=按鍵定義(據實際情況定)=#define num0 13#define num1 8#define num2 9#define num3 10#define num4 4#define num5 5#define num6 6#define num7
14、0#define num8 1#define num9 2#define TOP 3#define OCR 7#define CLR 12/=long p,q;/用于運算的兩個變量uchar d10; /顯示緩存/=引腳定義=sbit LCM_RS=P35; /定義引腳sbit LCM_RW=P36; sbit LCM_E =P37; sbit MOSI1=P22;sbit CLK1=P20;sbit STCP1=P21;sbit MOSI2=P25;sbit CLK2=P23;sbit STCP2=P24;#define LCM_Data P0 #define Busy 0x80 /用于檢測
15、LCM狀態字中的Busy標識 /-void Delay_ms(unsigned char t) /t ms延時unsigned int i; for(;t>0;t-) for(i=0;i<124;i+);/-unsigned char ReadDataLCM(void) /讀數據unsigned char temp; LCM_RS = 1; LCM_RW = 1; LCM_E = 1; temp=LCM_Data; LCM_E = 0; return(temp); /-void ReadStatusLCM(void) /讀狀態LCM_Data = 0xFF; /輸入口 LCM_RS
16、 = 0; LCM_RW = 1; LCM_E = 1; while (LCM_Data & Busy); /檢測忙信號 LCM_E = 0; return ; /-void WriteDataLCM(unsigned char WDLCM) /寫數據ReadStatusLCM(); /檢測忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0; LCM_E = 1; /若晶振速度太高可以在這后加小的延時 LCM_E = 0; /-void WriteCommandLCM(unsigned char WCLCM, unsigned char BuysC)
17、/寫指令 /BuysC為0時忽略忙檢測 if (BuysC) ReadStatusLCM(); /根據需要檢測忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 1; LCM_E = 0; /-void LCMInit(void) /LCM初始化 WriteCommandLCM(0x38,0); /三次顯示模式設置,不檢測忙信號 Delay_ms (5); WriteCommandLCM(0x38,0); Delay_ms (1); WriteCommandLCM(0x38,1); /8位總線,兩行顯示,開始要求每次檢測忙信號 WriteCo
18、mmandLCM(0x08,1); /關閉顯示 WriteCommandLCM(0x01,1); /顯示清屏 WriteCommandLCM(0x06,1); /顯示光標移動設置 WriteCommandLCM(0x0C,1); /顯示開及光標設置 /-按指定位置顯示一個字符-void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /當要顯示第二行時地址碼+0x40; X |= 0x80; WriteC
19、ommandLCM(X, 1); /發送地址碼 WriteDataLCM(DData); /-按指定位置顯示一串字符-void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData, unsigned char num) unsigned char i; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /當要顯示第二行時地址碼+0x40; X |= 0x80; WriteCommandLCM(X, 1); /發送地址碼 X&=0x0f;
20、for(i=0;i<num;i+) /發送num個字符 WriteDataLCM(DDatai); /寫并顯示單個字符 if (+X)> 0xF)break; /每行最多16個字符,已經到最后一個字符 /-void display(uchar h) /h=0,display 0 row;else display 1 row uchar dis_sign=1; /運算結果高位0不顯示標志 ? if(d9=0)DisplayOneChar(6,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(6,h,d9+'0'
21、); if(d8=0) && dis_sign)DisplayOneChar(7,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(7,h,d8+'0'); if(d7=0) && dis_sign)DisplayOneChar(8,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(8,h,d7+'0'); if(d6=0) && dis_sign)DisplayOneChar(9,h,' &
22、#39;);/是0不顯示 else dis_sign=0; DisplayOneChar(9,h,d6+'0'); if(d5=0) && dis_sign)DisplayOneChar(10,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(10,h,d5+'0'); if(d4=0) && dis_sign)DisplayOneChar(11,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(11,h,d4+
23、39;0'); if(d3=0) && dis_sign)DisplayOneChar(12,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(12,h,d3+'0'); if(d2=0) && dis_sign)DisplayOneChar(13,h,' ');/是0不顯示 else dis_sign=0; DisplayOneChar(13,h,d2+'0'); if(d1=0) && dis_sign)DisplayOneCha
24、r(14,h,' ');/是0不顯示else dis_sign=0; DisplayOneChar(14,h,d1+'0');DisplayOneChar(15,h,d0+'0');/-uchar Read_key(void) /讀按鍵(反轉法),無按鍵返回0xffuchar i,m,n,k; P1=0xf0; /行輸入全為0,列給1作為輸入口 n=P1&0xf0; /讀列信息 if(n=0xf0)return 0xff; else Delay_ms(10); /延時去抖動 n=P1&0xf0; if(n=0xf0)return
25、0xff; else P1=0x0f; /列輸入全為0, 行給1作為輸入口m=P1&0x0f; /讀行信息for(i=0;i<4;i+) /按鍵編碼,確定行號 if(m&(1<<i)=0) k=4*i; break; for(i=0;i<4;i+) /按鍵編碼,確定列號 if(n&(0x10<<i)=0)return k+i; /=int main(void) uchar i,k,n; uchar t; /t為每個運算輸入剛輸入第一個BCD位標志 uchar sign; /用作輸入數據指示:0輸入p,1輸入q uchar s; /1次
26、計算結束標志 long r; /結果 uchar negedge; Delay_ms(20); /啟動等待,等LCM講入工作狀態 LCMInit(); /LCM初始化 while(1) sign=0; /開始輸入第一個運算數據p t=0; /剛輸入第一個BCD位標志 s=1; /1次計算正在進行 negedge=0; / WriteCommandLCM(0x01, 1);/初始高位全滅,最低位顯示0 DisplayOneChar(15,1,'0'); for(i=0;i<10;i+)di=0; while(s) /一次運算的循環體 k=Read_key(); /讀取按鍵到
27、變量k if(k!=0xff) /有按鍵按下 switch(k) case TOP: WriteCommandLCM(0x01, 1);/全滅 display(0);/p顯示到上1行 if(negedge)DisplayOneChar(0,0,'-'); else DisplayOneChar(0,0,' '); for(i=0;i<10;i+)di=0; DisplayOneChar(0,0,'T'); DisplayOneChar(1,0,'O'); DisplayOneChar(2,0,'P'); CL
28、K1=0; CLK1=1;break; case OCR: WriteCommandLCM(0x01, 1);/全滅 display(0);/p顯示到上1行 if(negedge)DisplayOneChar(0,0,'-'); else DisplayOneChar(0,0,' '); for(i=0;i<10;i+)di=0; DisplayOneChar(0,0,'O'); DisplayOneChar(1,0,'C'); DisplayOneChar(2,0,'R'); CLK2=0; CLK2=1;
29、 break; WriteCommandLCM(0x01, 1);/初始高位全滅,最低位顯示0 display(0); /顯示結果 if(negedge)DisplayOneChar(0,0,'-'); else DisplayOneChar(0,0,' '); p=r; /開始新的計算,結果作為第一個數 t=0; sign=0; break; case CLR: s=0; /破壞循環條件,結束本次計算 break; default: /0-9 switch(k) case num0:n=0;break; case num1:n=1;break; case num2:n=2;break; case num3:n=3;break; case num4:n=4;break; case num5:n=5;break; case num6:n=6;break; case num7:n=7;break; case num8:n=8;break; case num9:n=9;break; default:break; if(t=0) /給出輸入的數據 d0=n; t=1; /開始輸入非個位數據 DisplayOneChar(15, 1, '0'+d0) ; if(sign) q=n; /正在輸入第二個數的個位 if(p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦物基絕熱材料的研發考核試卷
- 環境設計畢設答辯
- 呼吸機轉運病人操作規范與流程
- 喉軟化病人麻醉管理
- 人體的營養和呼吸
- 睡眠呼吸暫停低通氣綜合癥
- 新青年麻醉學科核心課程體系建設
- 手衛生依從性監測數據解讀
- 自然語言及語音處理項目式教程 習題庫 02-多選題
- 供應鏈金融創新應用2025:中小微企業融資新策略解析
- 淺析韋伯《邀舞》
- 房地產中介創業計劃書
- PICC堵管原因分析腫一10.11
- 《城市地理學》課件
- 化工與安全工程
- 腦梗塞介入取栓護理查房課件
- 2024屆上海市普陀區上海師大附中化學高二下期末綜合測試試題含解析
- 循環經濟產業鏈拓展項目商業計劃書
- GB/T 43295-2023教育與學習服務遠程學習服務要求
- 校園網絡文化建設課件
- 天然氣密度計算
評論
0/150
提交評論