該設計是電子設計大賽的題目—自動增益控制放大器
里面有單片機源碼,電路原理圖,資料分析和proteus與Multisim仿真 大賽報告(論文)等資料
本次設計的自動增益控制放大器由DAC內部的電阻網絡來實現自動增益,只要改變DAC內部的電阻網絡結構,再通過電阻網絡與輸入輸出的電壓關系即可實現自動增益。由于DAC輸出的是電流,我們再通過一個流壓轉換器把電流轉化為電壓,然后通過一個反相比例電路來輸出電壓。因為輸入DAC內部的是數字量,我們先通過一個ADC來實現模數轉換。輸出的電壓接到ADC輸出口,把模擬量轉化為數字量后,我們可以通過液晶顯示屏來實現輸入輸出的電壓以及增益。對于發揮部分2,由于輸入的是交流信號,為了方便編程,我們先把交流信號變為直流信號,從而在本質上與發揮1一致以達到效果。這就是基本的設計思路。 目錄 一.系統方案論證: 二.系統總體框圖: 三.理論分析與計算: 四.電路與程序設計: 五.測試方案與測試結果:
一.系統方案論證: 下面分別就此系統的各個部分分別進行論證: 方案一:數碼管顯示器應用比較靈活,原理簡單,但是用它來顯示系統比較復雜的電路困難,只能顯示數字內容,速度慢,易受干擾。 方案二:液晶顯示器可顯示的內容豐富,不局限于數字,屏幕調節方便,低耗能,散熱小,但價格較高 綜合兩個方案,選擇方案二。 方案一:ADC0809是CMOS單片型逐次逼近式A/D轉換器,ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。轉換時間為100μs(時鐘為640KHz時),130μs(時鐘為500KHz時)。可以和單片機直接接口,但成本較高。 方案二:ADC0832是8引腳雙列直插式封裝芯片 雙通道A/D轉換,5V電源供電時輸入電壓在0~5V之間,工作頻率為250KHZ,轉換時間為32μS, 一般功耗僅為15mW,成本較低。 綜合兩個方案,選擇方案二。 方案一:用繼電器構成電阻網絡,由單片機控制以改變信號增益手動調節增益,可實現增益控制,但硬件規模較大,控制繁瑣且人機界面欠佳,另外,利用電阻網絡實現增益調節需使用不同阻值的高精度電阻,這種電阻價格昂貴且不易購買。 方案二:使用模擬開關CD4052,它是一個雙路四選一模擬開關,開關的工作狀態由控制信號A、B來決定。當BA=00時,X0導通;當BA=01時,X1導通;當BA=10時,X2導通電壓放,當BA=11時,X3導通電壓放。這樣,通過改變模擬開關的導通通道就可以改變反饋電阻,電壓增益也隨之改變。但其導通電阻較大,而且各通道信號會互相干擾,容易影響系統性能。另外,編程較困難,且實現的增益不是特別準確。 方案三:借用DAC內部的電阻網絡;單片機通過控制DAC內部的電阻網絡結構來控制其電阻值,從而實現輸入電壓,輸出電壓和DAC內部電阻網絡結構關系。我們選用DAC0832,它由倒T型R-2R電阻網絡、模擬開關、運算放大器和參考電壓VREF四大部分組成。硬件電路如下圖所示。 利用虛短、虛斷的知識可推導出可控增益的計算公式: ,code是單片機傳給DAC的碼,此處100k是加在Rfb之后的反饋電阻,滿足輸入阻抗不小于100K的要求。通過改變code碼,即可改變輸出與輸入之間的關系。但此方案的缺點是輸出電壓是反相的,所以應在此電路后面加一個反相比例放大電路。 二.系統總體框圖:三.理論分析與計算:(1)任務的實現: 題目要求我們設計一個帶有自動增益控制功能的放大器。輸入阻抗不小于100k。輸出阻抗不大于1k。 由于放大器的帶寬不小于100KHz。放大器的增益最大需要10倍。所以我們選擇運放的增益帶寬積必須要大于1M。本次設計我們選的是OP37,其增益帶寬積為63M,輸出阻抗小于1k,已經遠遠滿足要求。 在Rfb之后加100k的反饋電阻,滿足輸入阻抗不 小于100K的要求,因為Rfb=15k。 (2)基礎部分計算: ,因為Rfb=R=15k,所以此式可簡化為: .下圖是基礎部分計算圖: 輸出電壓穩定在1V±0.2V之間,我們讓Vout=1,Vin可由ADC0832轉化成數字量讀出,便可計算出code碼。對于發揮部分二,我們先把交流變為直流,其后的思路與上述一樣。 四.電路與程序設計:基礎要求部分: 發揮部分交流變直流: (2)程序設計思路: ①輸入信號到adc0832的CH0通道,送adc0832 19個脈沖信號來實現通道的選擇和信號的讀取。 ②對液晶屏進行初始化、讀命令、讀數據操作。將adc0832接收的數字信號轉化為模擬量,aa=(aa*5000/255);用液晶屏顯示數值。 ③輸入信號經輸入電阻100k歐姆到達dac0832的參考電壓端,利用虛短虛斷的知識得到公式,推算出增益所對應的code碼,實現基礎部分。 ④令上述公式中輸出電壓為1v,根據輸入電壓的大小可以自動改變增益,實現發揮部分。因dac0832內部電阻有誤差,經試驗測得,最后推出理論算式:CODE=(uchar)(10.6*255*aa/73000;); ⑤輸出信號到adc0832的CH1通道,送adc0832 19個脈沖信號來實現通道的選擇和信號的讀取。 ⑥對液晶屏進行初始化、讀命令、讀數據操作。將adc0832接收的數字信號轉化為模擬量,aa=(aa*5000/255);用液晶屏顯示數值。 五.測試方案與測試結果:(1)測試使用的儀器 直流穩壓電源 數字萬用表 計算器 示波器 函數信號發生器 (2)測試方案: 用穩壓電源提供5V,±12V電壓,然后用萬用表分別測量輸入與輸出端口看是否與顯示屏所顯示的一致,然后用計算器計算看看增益是否一致。對于發揮部分,用函數信號發生器作為信號源,用示波器檢測交流是否變為直流。 (3)測試結果 (4)測試結果分析: 經過一系列的調試,基礎要求部分的結果基本符合要求,實現了四個檔位之間的轉換,且輸出與輸入之間的比值與相對應的增益相差結果接近為0;發揮部分(1)也實現了電壓穩定在1v±0.2v之間。發揮部分(2)由交流信號變為直流,其實現的結果也大體符合要求。
單片機源程序如下:
- #include<reg51.h>
- #include <intrins.h>
- //#define dates P0 //P0 LCD1602專用IO口
- #define uint unsigned int
- #define uchar unsigned char
- sbit lcdcos=P2^6;
- sbit lcdrw=P2^5;
- sbit lcden=P2^7;
- sbit adcs=P3^3; //芯片選通信號,低有效
- sbit adclk=P3^2; //芯片時鐘信號
- sbit addo=P3^7; //通道0
- sbit addi=P3^6; //通道1
- sbit A=P3^4; //模擬通道選擇IO口AB
- sbit C=P3^5; //模擬通道選擇IO口AB
- sbit LNH=P3^1; //AB選擇使能口
- uchar date;
- int a,b,c;
- //uchar i,j,z,dat1,dat2; // dat1,dat2分別為adc轉化后的8位數,即LCD先轉化后顯示的數
- void delay(uint z) //延時程序z ms
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void delay1() //延時兩個空指令
- {
- _nop_();
- _nop_();
- }
- void chosecom0(uint com) //讀數據操作
- {
- lcdcos=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void choseshu1(uint shu) //讀數據操作
- {
- lcdcos=1;
- P0=shu;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void init() //初始化lcd,規定運行方式,
- {
- lcden=0;
- chosecom0(0x38);
- chosecom0(0x0c);
- chosecom0(0x06);
- chosecom0(0x01);
-
- }
- void main()
- {
- init();
- chosecom0(0x80); //將要顯示的字符顯示在此地址處
- choseshu1('w');
- choseshu1('a');
- choseshu1('r');
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
全部資料51hei下載地址(單片機源碼+仿真+word格式的設計報告):
自動增益控制放大器.rar
(19.29 MB, 下載次數: 266)
2018-4-18 17:04 上傳
點擊文件名下載附件
|