第二版重點修改了有關(guān)知識點的敘述,盡量實用和簡潔,刪除了部分不經(jīng)常用的器件的敘述,增加了部分實用項目的關(guān)鍵技術(shù)例程及解讀,對TI公司具有無線通信功能的51單片機進行了簡單的介紹。書中C51的介紹著重在與標準C語言的不同之處,讀者應(yīng)該在具備一定C語言編程知識的基礎(chǔ)上閱讀本書內(nèi)容。書中大部分章節(jié)附有習(xí)題,以供讀者練習(xí)。本書附件提供教學(xué)用PPT、實驗的源代碼的電子文檔,供讀者參考。
第5章
模/數(shù)和數(shù)/模轉(zhuǎn)換器
A/D轉(zhuǎn)換器簡寫為ADC(Analog to Digital Converter),是一種能把模擬量轉(zhuǎn)換成相應(yīng)的數(shù)字量的電子器件。D/A轉(zhuǎn)換器簡寫為DAC(Digital To Analog Converter),與A/D轉(zhuǎn)換器相反,它能把數(shù)字量轉(zhuǎn)換成相應(yīng)的模擬量。在單片機控制系統(tǒng)中,經(jīng)常需要用到A/D和D/A轉(zhuǎn)換器。它們的功能及其在實時控制系統(tǒng)中的地位如圖51所示。由圖可見,被控實體的過程信號可以是電量(如電流、電壓等),也可以是非電量(如溫度、壓力、傳速等),其數(shù)值是隨時間連續(xù)變化的。各種模擬量都可以通過變送器或傳感器變換成相應(yīng)的數(shù)字量送給單片機。單片機對過程信息進行運算和處理,把過程信息進行當(dāng)?shù)仫@示或打印等,同時將處理后的數(shù)字量送給D/A轉(zhuǎn)換器,轉(zhuǎn)換成相應(yīng)的模擬量去對被控系統(tǒng)進行控制和調(diào)整,使系統(tǒng)處于*佳工作狀態(tài)。
圖51單片機實時控制系統(tǒng)示意圖
上述分析表明: A/D轉(zhuǎn)換器在單片機控制系統(tǒng)中主要用于數(shù)據(jù)采集,向單片機提供被控對象的各種實時參數(shù),以便單片機對被控對象進行監(jiān)視和控制決策; D/A轉(zhuǎn)換器用于模擬控制,通過機械或電氣手段對被控對象進行調(diào)整和控制。因此,A/D、D/A轉(zhuǎn)換器是架設(shè)在單片機和被控實體之間的橋梁,在單片機控制系統(tǒng)占有極其重要的地位。
C8051F020是混合信號型單片機,在片內(nèi)集成了模/數(shù)(A/D)和數(shù)/模(D/A)轉(zhuǎn)換電路。下面分別進行敘述。
5.1模/數(shù)轉(zhuǎn)換器
A/D是將模擬量轉(zhuǎn)換成數(shù)字量的器件。模擬量可以是電壓、電流等電信號,也可以是聲、光、壓力、濕度、溫度等隨時間連續(xù)變化的非電的物理量。非電的模擬量可通過合適的傳感器(如光電傳感器、壓力傳感器、溫度傳感器)轉(zhuǎn)換成電信號。
C8051F020片內(nèi)包含一個9通道的12位的模數(shù)轉(zhuǎn)換器ADC0和8通道8位的模數(shù)轉(zhuǎn)換器ADC1。
5.1.1模數(shù)轉(zhuǎn)換原理和性能指標
1. 轉(zhuǎn)換原理
A/D轉(zhuǎn)換器的種類很多,根據(jù)轉(zhuǎn)換原理可以分計數(shù)式、并行式、雙積分式、逐次逼近式等。計數(shù)式A/D轉(zhuǎn)換器結(jié)構(gòu)簡單,但轉(zhuǎn)換速度也很慢,所以很少采用。并行A/D轉(zhuǎn)換器的轉(zhuǎn)換速度*快,但因結(jié)構(gòu)復(fù)雜而造價較高,只用于那些轉(zhuǎn)換速度極高的場合。雙積分式A/D轉(zhuǎn)換器抗干擾能力強,轉(zhuǎn)換精度也很高,但速度不夠理想,常用于數(shù)字式測量儀表中。計算機中廣泛采用逐次逼近式A/D轉(zhuǎn)換器作為接口電路,它的結(jié)構(gòu)不太復(fù)雜,轉(zhuǎn)換速度也較高。下面僅對逐次逼近式和雙積分式A/D轉(zhuǎn)換器的轉(zhuǎn)換原理作簡單介紹。
圖52逐次逼近式A/D原理框圖
1) 逐次逼近式A/D轉(zhuǎn)換器
逐次逼近式A/D也稱逐次比較法A/D。它由結(jié)果寄存器、D/A、比較器和置位控制邏輯等部件組成,原理框圖如圖52所示。
這種A/D采用對分搜索法逐次比較、逐步逼近的原理來轉(zhuǎn)換,整個轉(zhuǎn)換過程是個“試探”過程。控制邏輯先置1結(jié)果寄存器*高位Dn-1然后經(jīng)D/A轉(zhuǎn)換得到一個占整個量程一半的模擬電壓Vs,比較器將此Vs和模擬輸入電壓Vx比較,若Vx>Vs則保留此位Dn-1(為1),否則清0Dn-1位。然后控制邏輯置1結(jié)果寄存器次高位Dn-2,連同Dn-1一起送D/A轉(zhuǎn)換,得到的Vs再和Vx比較,以決定Dn-2位保留為1還是清0,以此類推。*后,控制邏輯置1結(jié)果寄存器*低位D0,然后將Dn-1、Dn-2、……、D0一起送D/A轉(zhuǎn)換。轉(zhuǎn)換得到的結(jié)果Vs和Vx比較,決定D0位保留為1還是清0。
至此,結(jié)果寄存器的狀態(tài)便是與輸入的模擬量Vx對應(yīng)的數(shù)字量。
2) 雙積分式的A/D轉(zhuǎn)換器
雙積分式也稱二重積分式,其實質(zhì)是測量和比較兩個積分的時間,它的工作原理如圖53所示,一個是對模擬輸入電壓積分的時間T0,此時間往往是固定的; 另一個是以充電后的電壓為初值,對參考電源Vref反向積分,積分電容被放電至零所需的時間Ti(Vref與Vi符號相反)。反向積分的斜率是固定的。模擬輸入電壓Vi與參考電壓Vref之比,等于上述兩個時間之比。由于Vref、T0固定,而放電時間Ti可以測出,因而可計算出模擬輸入電壓的大小。
圖53雙積分式A/D轉(zhuǎn)換器工作原理圖
由于T0、Vref為已知的固定常數(shù),因此反向積分時間Ti與輸入模擬電壓Vi在T0時間內(nèi)的平均值成正比。輸入電壓Vi愈高,VA愈大,Ti就愈長。在Ti開始時刻,控制邏輯同時打開計數(shù)器的控制門開始計數(shù),直到積分器恢復(fù)到零電平時,計數(shù)停止。則計數(shù)器所計出的數(shù)字即正比于輸入電壓Vi在T0時間內(nèi)的平均值,于是完成了一次A/D轉(zhuǎn)換。
由于雙積分型A/D轉(zhuǎn)換是測量輸入電壓Vi在T0時間內(nèi)的平均值,所以對常態(tài)干擾(串模干擾)有很強的抑制作用,尤其對正負波形對稱的干擾信號,抑制效果更好。
雙積分型的A/D轉(zhuǎn)換器具有電路簡單、抗干擾能力強、精度高等優(yōu)點。但轉(zhuǎn)換速度比較慢,常用的A/D轉(zhuǎn)換芯片的轉(zhuǎn)換時間為毫秒級。例如12位的積分型A/D芯片ADCET12BC,其轉(zhuǎn)換時間為1ms。因此適用于模擬信號變化緩慢,采樣速率要求較低,而對精度要求較高,或現(xiàn)場干擾較嚴重的場合。例如常在數(shù)字電壓表中采用該芯片進行A/D采樣。
2. 性能指標
衡量A/D性能的主要參數(shù)是:
1) 分辨率(resolution)
分辨率是指輸出的數(shù)字量變化一個相鄰的值所對應(yīng)的輸入模擬量的變化值; 取決于輸出數(shù)字量的二進制位數(shù)。一個n位的A/D轉(zhuǎn)換器所能分辨的*小輸入模擬增量定義為滿量程值的2-n倍。例如,滿量程為10V的8位A/D芯片的分辨率為10V×2-8=39mV; 而16位的A/D是10V×2-16=153μV。
2) 滿刻度誤差(full scale error)
滿刻度誤差也稱增益誤差,即輸出全1時輸入電壓與理想輸入量之差。
3) 轉(zhuǎn)換速率(conversion rate)
轉(zhuǎn)換速度是指完成一次A/D轉(zhuǎn)換所需時間的倒數(shù),是一個很重要的指標。A/D轉(zhuǎn)換器型號不同,轉(zhuǎn)換速度差別很大。選用A/D轉(zhuǎn)換器型號視應(yīng)用需求而定,在被控系統(tǒng)的時間允許的情況下,應(yīng)盡量選用便宜的逐次比較型A/D轉(zhuǎn)換器。
4) 轉(zhuǎn)換精度(conversion accuracy)
A/D轉(zhuǎn)換器的轉(zhuǎn)換精度由模擬誤差和數(shù)字誤差組成。模擬誤差是比較器、解碼網(wǎng)絡(luò)中的電阻值以及基準電壓波動等引起的誤差,數(shù)字誤差主要包括丟失碼誤差和量化誤差,前者屬于非固定誤差,由器件質(zhì)量決定,后者和A/D輸出數(shù)字量的位數(shù)有關(guān),位數(shù)越多,誤差越小。
5.1.2C8051F020的ADC0功能結(jié)構(gòu)
C8051F020的ADC0子系統(tǒng)就是一個100ksps、12位分辨率的逐次逼近寄存器型ADC。ADC0的*高轉(zhuǎn)換速度為100ksps,其轉(zhuǎn)換時鐘來源于系統(tǒng)時鐘分頻,分頻值保存在寄存器ADC0CF的ADCSC位。C8051F020的ADC0子系統(tǒng)功能框圖如圖54所示,它包括一個9通道的可編程模擬多路選擇器(AMUX0)、一個可編程增益放大器(PGA0)和一個100ksps、12位分辨率的逐次逼近寄存器型ADC,ADC中集成了跟蹤保持電路和可編程窗口檢測器。AMUX0、PGA0、數(shù)據(jù)轉(zhuǎn)換方式及窗口檢測器都可用軟件通過特殊功能寄存器來控制。ADC0所使用的電壓基準將在5.3節(jié)專門介紹。只有當(dāng)ADC0控制寄存器中的AD0EN位被置1時ADC0子系統(tǒng)(ADC0、跟蹤保持器和PGA0)才被允許工作。當(dāng)AD0EN位為0時,AD0C子系統(tǒng)處于低功耗關(guān)斷方式。
圖54ADC0子系統(tǒng)功能框圖
從ADC0的功能框圖可以看出,ADC0的運行主要與圖上標的10個SFR有關(guān)。8個外部輸入的模擬量可以通過配置寄存器AMX0CF設(shè)定為單端輸入或雙端輸入; 8個外部輸入的模擬量和一個內(nèi)部溫度傳感器量通過通道選擇寄存器AMX0SL設(shè)定在某一時刻通過多路選擇器; 從多路選擇器出來的模擬量通過配置寄存器ADC0CF設(shè)定ADC轉(zhuǎn)換速度和對模擬量的放大倍數(shù); 由控制寄存器ADC0CN對ADC進行模擬量轉(zhuǎn)換的啟動、啟動方式、采樣保持、轉(zhuǎn)換結(jié)束、數(shù)字量格式等進行設(shè)定; 12位的轉(zhuǎn)換好的數(shù)字量存放在數(shù)據(jù)字寄存器ADC0H、ADC0L中; ADC0中提供了可編程窗口檢測器,通過上下限寄存器ADC0GTH、ADC0GTL、ADC0LTH、ADC0LTL設(shè)定所需要的比較極限值。
在進行模擬量轉(zhuǎn)換前設(shè)定好以上SFR,CPU就按設(shè)定好的模式在模擬量轉(zhuǎn)換好時用指令讀出數(shù)據(jù)寄存器中的數(shù)字量或在中斷服務(wù)程序中讀取數(shù)字量,然后再進行下一次的轉(zhuǎn)換。ADC0的電氣特性見附錄C。
5.1.3模擬多路選擇器和PGA
模擬多路選擇器AMUX(Analog Multiplexer)中的8個通道用于外部測量,而第九通道在內(nèi)部被接到片內(nèi)溫度傳感器。這9個模擬通道通過通道選擇寄存器AMX0SL和配置寄存器AMX0CF進行選擇和配置,可以將AMUX輸入對編程為工作在差分或單端方式。這就允許用戶對每個通道選擇*佳的測量技術(shù),甚至可以在測量過程中改變方式。在系統(tǒng)復(fù)位后AMUX的默認方式為單端輸入。表51給出了每種配置下各通道的功能。
配置寄存器AMX0CF的格式如下:
其中,各位的含義如下:
位7~4——未使用。讀= 0000b; 寫=忽略。
位3(AIN67IC)——AIN6、AIN7輸入對配置位。
0: AIN6和AIN7為獨立的單端輸入。
1: AIN6和AIN7為(分別為)+、-差分輸入對。
位2(AIN45IC)——AIN4、AIN5輸入對配置位。
0: AIN4和AIN5為獨立的單端輸入。
1: AIN4、AIN5為(分別為)+、-差分輸入對。
位1(AIN23IC)——AIN2、AIN3輸入對配置位。
0: AIN2和AIN3為獨立的單端輸入。
1: AIN2、AIN3為(分別為)+、-差分輸入對。
位0(AIN01IC)——AIN0、AIN1輸入對配置位。
0: AIN0和AIN1為獨立的單端輸入。
1: AIN0、AIN1為(分別為)+、-差分輸入對。
注: 對于被配置成差分輸入的通道,ADC0數(shù)據(jù)字格式為2的補碼。
通道選擇寄存器AMX0SL的格式如下:
其中,各位的含義如下:
位7~4——未使用。讀= 0000b; 寫=忽略。
位3~0(AMX0AD3~0)——AMUX0地址位。
0000~1111,根據(jù)表51選擇ADC輸入的通道。
表51模擬通道配置
AMX0AD30
000000010010001101000101011001111xxx
AMX0CF
位3~0
0000AIN0AIN1AIN2AIN3AIN4AIN5AIN6AIN7溫度傳感器
0001+ (AIN0)
- (AIN1)AIN2AIN3AIN4AIN5AIN6AIN7溫度傳感器
0010AIN0AIN1+ (AIN2)
- (AIN3)AIN4AIN5AIN6AIN7溫度傳感器
0011+ (AIN0)
- (AIN1)+ (AIN2)
- (AIN3)
AIN4AIN5AIN6AIN7溫度傳感器
0100AIN0AIN1AIN2AIN3+ (AIN4)
- (AIN5)AIN6AIN7溫度傳感器
0101+ (AIN0)
- (AIN1)AIN2AIN3+ (AIN4)
- (AIN5)AIN6AIN7溫度傳感器
0110AIN0AIN1+ (AIN2)
- (AIN3)+ (AIN4)
- (AIN5)AIN6AIN7溫度傳感器
0111+ (AIN0)
- (AIN1)+ (AIN2)
- (AIN3)+ (AIN4)
- (AIN5)AIN6AIN7溫度傳感器
1000AIN0AIN1AIN2AIN3AIN4AIN5+ (AIN6)
- (AIN7)溫度傳感器
1001+ (AIN0)
- (AIN1)AIN2AIN3AIN4AIN5+ (AIN6)
- (AIN7)溫度傳感器
1010AIN0AIN1+ (AIN2)
- (AIN3)AIN4AIN5+ (AIN6)
- (AIN7)溫度傳感器
1011+ (AIN0)
- (AIN1)+ (AIN2)
- (AIN3)AIN4AIN5+ (AIN6)
- (AIN7)溫度傳感器
1100AIN0AIN1AIN2AIN3+ (AIN4)
- (AIN5)+ (AIN6)
- (AIN7)溫度傳感器
1101+ (AIN0)
- (AIN1)AIN2AIN3+ (AIN4)
- (AIN5)+ (AIN6)
- (AIN7)溫度傳感器
1110AIN0AIN1+ (AIN2)
- (AIN3)+ (AIN4)
- (AIN5)+ (AIN6)
- (AIN7)溫度傳感器
1111+ (AIN0)
- (AIN1)+ (AIN2)
- (AIN3)+ (AIN4)
- (AIN5)+ (AIN6)
- (AIN7)溫度傳感器
在表51中可看出,從多路選擇器出來的哪一個通道和單端或差分輸入由通道選擇寄存器AMX0SL和配置寄存器AMX0CF進行選擇和配置,表左邊的垂直方向表示配置寄存器AMX0CF低4位值,指出各通道的單端還是差分輸入,表上邊的水平方向表示通道選擇寄存器AMX0SL的低4位,選擇9路輸入的中的某一路。
PGA(Programmable Gain Amplifier)即可編程增益放大器,它對AMUX輸出信號的放大倍數(shù)由ADC0配置寄存器ADC0CF中的AMP0GN2~0確定。PGA增益可以用軟件編程為0.5、1、2、4、8或16,復(fù)位后的默認增益為1。注意,PGA0的增益對溫度傳感器也起作用。
配置寄存器ADC0CF的格式如下:
其中,各位的含義如下:
位7~3 (AD0SC4~0)——ADC0 SAR轉(zhuǎn)換時鐘周期控制位。
SAR轉(zhuǎn)換時鐘來源于系統(tǒng)時鐘,由下面的方程給出
AD0SC=SYSCLKCLKSAR0-1
其中AD0SC表示AD0SC4~0中保持的數(shù)值,CLKSAR0表示所需要的ADC0 SAR時鐘(注: ADC0 SAR時鐘應(yīng)小于或等于2.5MHz)。
位2~0 (AMP0GN2~0)——ADC0內(nèi)部放大器增益(PGA)。
000: 增益= 1
001: 增益= 2
010: 增益= 4
011: 增益= 8
10x: 增益= 16
11x: 增益= 0.5
5.1.4ADC的工作方式
1. 轉(zhuǎn)換過程
ADC0的轉(zhuǎn)換過程由控制寄存器ADC0CN來設(shè)置和控制的。
控制寄存器ADC0CN的格式如下:
其中,各位的含義如下:
位7 (AD0EN)——ADC0使能位。
0: ADC0禁止。ADC0處于低耗停機狀態(tài)。
1: ADC0使能。ADC0處于活動狀態(tài),并準備轉(zhuǎn)換數(shù)據(jù)。
位6 (AD0TM)——ADC跟蹤方式位。
0: 當(dāng)ADC被使能時,除了轉(zhuǎn)換期間之外一直處于跟蹤方式。
1: 由AD0CM1~0定義跟蹤方式。
位5 (AD0INT)——ADC0轉(zhuǎn)換結(jié)束中斷標志。該標志必須用軟件清0。
0: 從*后一次將該位清0后,ADC0還沒有完成一次數(shù)據(jù)轉(zhuǎn)換。
1: ADC完成了一次數(shù)據(jù)轉(zhuǎn)換。
位4 (AD0BUSY)——ADC0忙標志位。
讀:
0: ADC0轉(zhuǎn)換結(jié)束或當(dāng)前沒有正在進行的數(shù)據(jù)轉(zhuǎn)換。AD0INT在AD0BUSY的下降沿被置1。
1: ADC0正在進行轉(zhuǎn)換。
……