SlideShare a Scribd company logo
1 of 73
Download to read offline
專題製作研究報告書
題目: 數位式可調電源供應器之研究
作者:胡鎮洪
摘要
不論是在電學相關的實習課程,或是電路實驗開發的領域,工業自動化、醫療儀器、
電力設備,以及生活中各式各樣的電子產品;想要讓電路穩定而正常的運作,高品質的
電源是不可或缺的重要因素。穩定的電源供給才能使電路發揮高效能。為了精準控制輸
出電壓,本篇論文主要探討以 D/A 轉換方式實現可調式電源的原理與可行性,以數位鍵
盤輸入的方式調節輸出電壓大小,改善一般類比控制式電源供應器以旋鈕控制精確性的
不足,同時考慮 DAC 解析度對於輸出電壓解析度的影響,與負載效應改善之研究;以期
製作出一台數位式可調電源供應器,並增進對於電路相關理論與實作的認知。
關鍵字:可調式電源供應器、D/A 轉換電路、達靈頓電路、負載效應
1
壹● 前言
一、 研究大綱:
數
位
式
可
調
電
源
供
應
器
之
研
究
壹●前言
三、研究方法與流程
一、研究大綱
二、研究動機
四、研究範圍與方向
參●結論
肆●引註資料
貳●正文 一、直流電源
供應器的認識
(一)穩壓電路
(二)限流電路二、DAC 轉換電路
的認識
三、應用電路
(三) D/A 與解碼電路
之整合
(四) 鍵盤掃描控制
(五) DAC 解析度之
探討與改善
(八) 使用器具
(二) 二進位-十進位
解碼顯示電路
(一) 數位-類比轉換
電路
(九) 使用材料
(十) 實驗數據
(十一) 數據分析
(六) 電流檢測電路
(七) 單晶片微電腦
I/O port 之擴充
2
二、研究動機:
在電學相關實習課程中,電源供應器是常用的儀器之一;而正確認識、使用
電源供應器是相當重要的技能。舊式工業電子丙級技能檢定題目為電源供應器,
以類比旋鈕的方式控制輸出電壓大小,其旋鈕為一可變電阻,藉由調整電阻值大
小,控制電源供應器輸出電壓之高低;在學習數位-類比轉換的相關章節時,想
到是否能透過數位的方式,控制電源供應器輸出電壓的大小,參考書上的說明,
實際自製一部直流電源供應器,同時印證理論的可行性,並針對問題進行改善。
三、研究方法與流程:
結合書籍上的原理及說明,並嘗試以數位-類比轉換的概念設計一部直流電
源供應器電路,探討其工作原理,觀察其運作效能,並完成實驗記錄及數據分析。
研究流程如下:
圖 1 專題研究流程圖
DAC0800轉換電路的
分析與實作
達靈頓電流放大電路
與數位-類比轉換電
路的結合
單晶片控制電路調節
輸出電壓
增加解碼電路顯示輸
出電壓值
74922鍵盤掃描調節
輸出電壓
探討並改善負載效應
對於效能的影響
研究多顆DAC0800增加
電壓調節解析度
電流檢測電路設計
以栓鎖緩衝器擴充
單晶片微電腦I/O port
3
四、研究範圍與方向:
(一)何謂直流電源供應器?
(二)數位式直流電源供應器內部電路為何?
(三)如何以數位控制方式利用 D/A 轉換製作一台電源供應器?
貳● 正文
一、直流電源供應器的認識:
直流電源供應器(DC Power Supply)簡稱電源供應器,其功能為將交流市
電轉換為直流電,提供各式電子電路設備正常工作所需的穩定電源。與乾電池比
較,一般電池電力用罄需更換,而電源供應器可長時間供電。直流電源供應器依
供電形式可分為單電源型與雙電源型。單電源型的電源供應器,內部由可調式穩
壓電路和限流電路組成。(電子學實習Ⅰ,P18)
(一)穩壓電路:
穩壓電路主要功能為產生使用者設定之電壓,並提供足量之電流供負
載使用。
(二)限流電路:
限流電路可防止電源供應器輸出過大的電流而導致電源供應器或負載
的損毀。例如在輸出端短路的情況下,若電源供應器沒有限流電路,則可
能導致穩壓元件被燒毀。
二、DAC 轉換電路的認識:
在電子電路設備中的信號處理,使用數位的方式進行處理,較類比的方式容
易,也較不易受到雜訊的干擾,不易失真,且穩定度較佳。但生活中大多物理量
皆為類比形式,因此完成處理的數位信號在輸出前,透過數位轉換類比電路(D/A
轉換器)轉換成類比信號後,再輸出。DAC0800 是可以將八位元二進位的數位信
號轉換成類比電流信號的積體電路,有 16 支接腳,需要有雙電源供應才可正常
工作,且與 TTL、CMOS 等電路相容,不需配合其他介面。根據 DAC0800 的資
料手冊,DAC0800 是低功耗的元件,最大消耗功率為 500mW,於±5V 電源供應
時只消耗 33mW 的功率。
4
圖 2 DAC0800 接腳圖
圖二為 DAC0800 的接腳圖。第 13 與第 3 接腳分別接正負電源(±Vcc),其工
作電壓範圍為±4.5V~±18V。第 5~12 接腳為二進制數位信號輸入端,第 12 接腳
為最低有效位元(LSB),第 5 接腳為最高有效位元(MSB)。其位元數 N 為 8,總
共有2 𝑁
= 28
=256 種不同數值。第 14 接腳外接參考電流𝐼 𝑅𝐸𝐹。
圖 3 DAC0800 內部方塊圖
圖三為 DAC0800 IC 的內部方塊圖,可知其內部電路由運算放大器、電晶體
與電阻等元件所組成。
5
三、應用電路
(一) 數位-類比轉換電路:
圖 4 D/A 轉換器電路圖
圖四為八位元 D/A 轉換器電路圖,其中𝑉+
與𝑉−
分別連接+Vcc=15V 與
-Vcc=-15V 雙電源;R1、R2、R3 與 R4 皆使用碳膜電阻器 4.7 kΩ,0.5W;C1 使用
0.01μF 的陶瓷電容器。DAC0800 的第二、第四接腳輸出信號,連接至運算放大
器 741。運算放大器 741 於常溫下電源電壓最大額定值與 DAC0800 同為±18V,
其最大消耗功率為 310mW。若將 DAC0800 的 VREF(參考電壓端)連接至 Vcc,則
𝐼 𝑅𝐸𝐹(參考電流) =
𝑉𝑟𝑒𝑓
𝑅1
=
15𝑉
4.7𝑘
= 3.19148936 mA,輸出解析度電流為最低位元電
流變化量(𝐼𝐿𝑆𝐵) =
𝐼 𝑅𝐸𝐹
2 𝑁 =
𝐼 𝑅𝐸𝐹
256
=12.46675532μA。滿刻度輸出電流(𝐼 𝐹𝑆) =
𝐼 𝑅𝐸𝐹
2 𝑁 ×
255 = 3.1790226mA。根據 DAC0800 的資料手冊,設計電路時,𝐼 𝑅𝐸𝐹(參考電流)之
最大值為 5mA,以𝑉𝑅𝐸𝐹為+15V 而言,𝑅1電阻器阻值不得小於 3KΩ。若將𝑉𝑅𝐸𝐹提
高為+18V,𝑅1電阻器阻值不得小於 3.6KΩ。
6
表 1 二進制數位輸入與輸出電流對應表
表 1 為數種二進制數值輸入 DAC0800 後,以 VREF=15V,R1=4.7 kΩ 的條件
下,輸出電流的計算值。輸出電流𝐼 𝑜𝑢𝑡 = 𝐼𝐿𝑆𝐵 × 二進制數值(D)。而由於 OPA 輸
入阻抗極大,以 μA741 為例,其輸入阻抗(Input Resistance)典型值為 2MΩ,(電
子學Ⅱ,P117),故𝐼 𝑜𝑢𝑡 ≅ 𝐼 𝑅3
,所以𝐼 𝑜𝑢𝑡愈大,代表𝐼 𝑅3
愈大,在 Vcc 足夠大的情
況下,由歐姆定理𝑉𝑅3
= 𝐼 𝑅3
× 𝑅3可知:當𝐼 𝑅3
愈大,則𝑉𝑅3
愈大,即 Vout 愈大。
𝑉𝑜𝑢𝑡 = 𝐼𝐿𝑆𝐵 × 二進制數值(D) × 𝑅3 。最低位元電壓變化量(𝑉𝐿𝑆𝐵) = 𝐼𝐿𝑆𝐵 × 𝑅3 =
0.0585937485(V)。表 2 為二進制數位輸入與輸出電壓理論值(𝑉𝑜)的對應表。
二進制數位輸入(D) 十進制數值 輸出電流(mA)
0000000000 0 0
0000000001 1 0.012466755
0000000010 2 0.024933511
0000000011 3 0.037400266
0000000100 4 0.049867021
0000000101 5 0.062333777
0000000110 6 0.074800532
0000000111 7 0.087267287
0000001000 8 0.099734043
0000001001 9 0.112200798
0000001010 10 0.124667553
0000001011 11 0.137134309
0000001100 12 0.149601064
0000001101 13 0.162067819
0000001110 14 0.174534574
0000001111 15 0.18700133
0000010000 16 0.199468085
0000010001 17 0.21193484
0000010010 18 0.224401596
0000010011 19 0.236868351
0000010100 20 0.249335106
0000010101 21 0.261801862
0000010110 22 0.274268617
0000010111 23 0.286735372
0000011000 24 0.299202128
0000011001 25 0.311668883
資料來源:本研究者整理
7
表 2 二進制數位輸入與輸出電壓對應表
十進位數值 數位輸入數值 輸出電壓理論值(V)
7 00000111 0.41015625
15 00001111 0.87890625
23 00010111 1.34765625
31 00011111 1.81640625
39 00100111 2.28515625
47 00101111 2.75390625
55 00110111 3.22265625
63 00111111 3.69140625
71 01000111 4.16015625
79 01001111 4.62890625
87 01010111 5.09765625
95 01011111 5.56640625
103 01100111 6.03515625
111 01101111 6.50390625
119 01110111 6.97265625
127 01111111 7.44140625
135 10000111 7.91015625
143 10001111 8.37890625
151 10010111 8.84765625
159 10011111 9.31640625
167 10100111 9.78515625
175 10101111 10.25390625
183 10110111 10.72265625
191 10111111 11.19140625
199 11000111 11.66015625
207 11001111 12.12890625
215 11010111 12.59765625
223 11011111 13.06640625
231 11100111 13.53515625
239 11101111 14.00390625
247 11110111 14.47265625
255 11111111 14.94140625
資料來源:本研究者整理
8
在圖四的 D/A 轉換器電路圖中,開關(S)控制電壓輸出的範圍;將開關接通
(ON)時,電阻𝑅4被短接,為單極性電壓輸出;將開關斷路(OFF)時,為雙極性電
壓輸出。於電源供應器電路中,為單極性電壓輸出的應用,由於 OP Amp 741
的輸出電流最大只有 20mA,所以透過達靈頓電路(Darlington pair)高電流增益的
特性,進行電流放大後,即具有足夠的輸出使負載(𝑅 𝐿)正常工作。圖五即為 D/A
轉換器與達靈頓電路的組合。
圖 5 D/A 轉換與達靈頓電路
所謂達靈頓電路為兩個電晶體直接耦合組成的電路,達靈頓電路具有輸入阻
抗很高、輸出阻抗很低及高電流增益的優點,能夠將 OP Amp 741 輸出的微電流
進行高倍數的放大。組成達靈頓電路的電晶體應採用矽電晶體,鍺電晶體的漏電
電流甚大,且溫度特性不良。(電子學Ⅱ,P9)實際電路中,達靈頓電路可採用兩
個 獨 立 之 電 晶 體 組 成 ; 亦 可 採 用 互 補 達 靈 頓 功 率 電 晶 體 (Darlington
Complementary Silicon Power Transistors),內部電路如圖六所示,其直流之 hFE
為 1000 以上(例說 89S51-C 語言 (第三版),P14-6);hFE =
𝐼 𝐶
𝐼 𝐵
= β,為共射極(CE)
組態電流增益(Ai)。
NPN 型 PNP 型
圖 6 互補達靈頓功率電晶體內部電路
9
NPN 型互補達靈頓功率電晶體有 2N6043、2N6044、2N6045、BD777、BDW42、
TIP120、TIP121、TIP122、TIP140、TIP141、TIP142……等;不同規格之電晶體
耐壓、PD(Ptot,最大集極功率損耗)……等元件特性皆不同,PD 定義為𝐼 𝐶 × 𝑉𝐶𝐸,
可知電晶體工作時的集極電流愈大、集射端電壓愈大,則電晶體集極功率損耗愈
大;根據資料手冊,2N6043、2N6044、2N6045 於室溫環境下可承受 75W 的功
率,隨著溫度上升額定 PD 下降,每上升 1℃,PD 下降 0.6W。BD777 於室溫環境
下可承受 15W 的功率,隨著溫度上升額定 PD 下降,每上升 1℃,PD 下降 0.12W。
BDW42 於室溫環境下可承受 85W 的功率,隨著溫度上升額定 PD 下降,每上升 1
℃,PD 下降 0.68W。下表為部分 NPN 型互補達靈頓功率電晶體規格表。
表 3 NPN 型互補達靈頓功率電晶體規格表
編號
CB 兩端最大
開路電壓(VCBO)
CE 兩端最大
開路電壓(VCEO)
集極最大電流(IC)
最大基極
電流(IB)
最大集極
功率損耗
(PD)
持續值 峰值
伏特(V) 伏特(V) 安培(A) 安培(A)
毫安培
(mA)
瓦(W)
2N6037 40 40 4 8 100 40
2N6038 60 60 4 8 100 40
2N6039 80 80 4 8 100 40
2N6043 60 60 8 16 120 75
2N6044 80 80 8 16 120 75
2N6045 100 100 8 16 120 75
BD777 60 60 4 6 100 15
BDW42 100 100 15 500 85
TIP120 60 60 5 8 100 65
TIP121 80 80 5 8 100 65
TIP122 100 100 5 8 100 65
TIP140 60 60 10 20 500 125
TIP141 80 80 10 20 500 125
TIP142 100 100 10 20 500 125
2N6057 60 60 12 20 200 150
2N6058 80 80 12 20 200 150
2N6059 100 100 12 20 200 150
2N6282 60 60 20 40 500 160
2N6283 80 80 20 40 500 160
2N6284 100 100 20 40 500 160
資料來源:本研究者整理
10
根據資料手冊,常用的 NPN 型互補達靈頓功率電晶體 TIP120 系列的直流電
流增益(DC Current Gain,hFE)在集極電流(𝐼 𝐶)=0.5A,集射電位差(𝑉𝐶𝐸)=3V 的條
件下,最小值為 1000;在集極電流(𝐼 𝐶)=3A,集射電位差(𝑉𝐶𝐸)=3V 的條件下,最
小值亦為 1000;可得知其 hFE 值穩定,受𝐼 𝐶影響小。功率較大的 TIP140 系列,
其直流電流增益(DC Current Gain,hFE)在集極電流(𝐼 𝐶)=5A,集射電位差(𝑉𝐶𝐸)=4V
的條件下,最小值為 1000;在集極電流(𝐼 𝐶)=10A,集射電位差(𝑉𝐶𝐸)=4V 的條件
下,最小值降低為 500;可得知其 hFE 值可能因𝐼 𝐶上升影響而下降。
電流放大除了使用達靈頓電路,亦可採用場效應電晶體(field-effect transistor,
FET);場效應電晶體又稱場效電晶體或場效體,屬於主動元件,具有放大信號的
功能,與雙極性接面電晶體(BJT)不同之處在於:FET 為單載子元件,單個 FET
的輸入阻抗極高,可達108
Ω(即 100MΩ)以上,且負載效應極低。(電子學Ⅱ,P130)。
如圖七為增強型 N 通道 MOSFET。
圖 7 增強型 N 通道 MOSFET
由於 MOSFET 屬於電壓控制電流元件,閘極(G)輸入阻抗大,以低電流控制
高電流電路,其源極電流(IS)=汲極電流(ID),且汲極電流(ID)的近似值為
K × (𝑉𝐺𝑆 − 𝑉𝑡)2
。MOSFET 配合運算放大器組成之 D/A 轉換電路如圖八。
圖 8 MOSFET 與運算放大器組成之 D/A 轉換電路
11
根據增強型 N 通道 MOSFET 的特性,參考資料手冊,不同型號之 MOSFET
的臨界電壓(Vt,Gate Threshold Voltage)不完全相同,以 IRF530、IRF630 而言,其
Vt 約為 2~4V。
控制 DAC0800 的數位輸入端,即可調整負載(𝑅 𝐿)的端電壓。將 DAC0800 的
第 5 至第 12 接腳連接至單晶片微電腦 89S51 的第 1 至第 8 接腳,即可透過單晶
片調整數位信號。89S51 為 8 位元的微處理器,內建 4k bytes 的程式記憶體(read
only memory,ROM)、128 bytes 的隨機存取記憶體(random-access memory, RAM),
具有四組 8 位元輸出入埠,即 PORT0、PORT1、PORT2、PORT3,可位元定址,
PORT0 為第 32 至第 39 接腳,為開洩極式輸出(Open Drain,簡稱 OD),內部無提
升電阻,執行輸出功能時,需外接約 10kΩ 之提升電阻;PORT1 為第 1 至第 8 接
腳,PORT2 為第 21 至第 28 接腳,PORT3 為第 10 至第 17 接腳。PORT1 至 PORT3
內部皆具備約 30kΩ 之提升電阻,執行輸出功能時,不須連接外部提升電阻。(例
說 89S51-C 語言 (第三版),P3-2~P3-4) 單晶片程式如下。
/* DAC 數位轉類比程式*/
//==宣告區=====================================
#include <AT89X51.h> // 加入 AT89X51.h 函式庫
#define DAC_IC P1 // 定義數位類比轉換 IC DAC0800 接至 Port 1
#define seg P2 // 定義七段顯示器解碼接至 Port 2
void delay (unsigned int); // 宣告延遲函數
void debouncer(void); // 宣告軟體防彈跳函數
void agecontrol(void); // 宣告電壓控制副程式
unsigned char a; // 宣告變數 a
//==主程式=====================================
main() // 主程式開始
{ // 進入主程式
a=65535; // 定義 a 初值
while(1) // 無限迴圈
{ // 進入 while 敘述
agecontrol(); // 進入電壓控制副程式
} // 結束 while 敘述
} // 主程式結束
//==電壓控制副程式=====================================
void agecontrol(void) // 電壓控制副程式
{ // 進入電壓控制副程式
DAC_IC=~a; // P1 輸出埠為變數 a 反相
seg=~a; // P2 輸出埠為變數 a 反相
delay(200); // 延遲
if(P3_0==0) // 如果按鈕按下
12
{ // 執行 if 敘述
a++; // 變數 a=a+1
debouncer(); // 執行防彈跳副程式
} // if 敘述結束
if(P3_1==0) // 如果按鈕按下
{ // 執行 if 敘述
a--; // 變數 a=a-1
debouncer(); // 執行防彈跳副程式
} // if 敘述結束
} // 結束電壓控制副程式
//==延遲函數副程式=====================================
/* 延遲函數,延遲約 x 0.5ms,使用 24MHz 振盪器 */
void delay(int x) // 延遲函數開始
{ // 進入延遲函數
int i,j; // 宣告整數變數 i,j
for (i=0;i<x;i++) // 計數 x 次,延遲 x*0.5ms
{ // 進入 for 指令
for (j=0;j<120;j++) // 計數 120 次,延遲 0.5ms
{
}
} // 結束 for 指令
} // 延遲函數結束
//==按鈕防彈跳副程式=====================================
/* 透過軟體進行防彈跳*/
void debouncer(void) // 防彈跳函數開始
{ int i2; // 宣告整數變數 i,j
for (i2=0;i2<2400;i2++); // 連數 2400 次
} // 防彈跳函數結束
此 C 語言程式由宣告變數、主程式、電壓控制副程式、延遲函數副程式與按
鈕防彈跳副程式所組成。在 C 語言程式的設計上,需明確定義各項常數或變數的
數值範圍,使得編譯程式能夠為這些數值保留適當的記憶體位置。接著再透過程
式指令對變數進行運算,編譯結果如附錄一。變數 a 為輸入 DAC0800 的數值,
當按下「電壓上升」或「電壓下降」按鈕時,P3.0 或 P3.1 由高態轉為低態,程
式依據接腳電壓的變化控制變數 a,透過 if 指令:若 P3.0 為低態則 a 增加 1;若
P3.1 為低態則 a 減少 1,可輕易調整輸出電壓高低。如圖 9 單晶片與 D/A 轉換器
電路圖所示。表 4 為單晶片與 D/A 轉換器電路圖零件規格表。圖十為單晶片與
D/A 轉換器電路方塊圖。
13
圖 9 單晶片與 D/A 轉換器電路圖
表 4 單晶片與 D/A 轉換器電路圖零件規格表
編號 名稱 規格 編號 名稱 規格
𝑅1 碳膜電阻器 4.7kΩ,0.5W 𝑅7 碳膜電阻器 1kΩ,0.5W
𝑅2 碳膜電阻器 4.7kΩ,0.5W XTAL1 石英晶體振盪器 24MHz
𝑅3 碳膜電阻器 4.7kΩ,0.5W 𝐶1 陶瓷電容器 0.01μF
𝑅4 碳膜電阻器 4.7kΩ,0.5W 𝐶2 陶瓷電容器 30pF
𝑅5 碳膜電阻器 100kΩ,0.5W 𝐶3 陶瓷電容器 30pF
𝑅6 碳膜電阻器 1kΩ,0.5W 𝐶4 電容器 0.1μF
資料來源:本研究者整理
圖 10 單晶片與 D/A 轉換器電路方塊圖
14
為避免「電壓上升」與「電壓下降」按鈕同時被按下導致輸出不穩定,修正
電路如圖十一,當「電壓上升」與「電壓下降」按鈕同時被按下,P3.0 與 P3.1
皆為高態,輸出電壓不變,蜂鳴器響。
圖 11 按鈕輸入處理暨單晶片與 D/A 轉換電路
(二) 二進位-十進位解碼顯示電路:
以 89S51 單晶片燒錄解碼顯示程式,完成二進位數值轉換至十進位的工作,
於四位元七段顯示器模組顯示電壓值。解碼顯示程式如下。
/* 電壓量測二進位解碼為十進位程式 */
#include <reg51.h> // 加入 reg51.h 函式庫
/*宣告驅動信號陣列*/
char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 0~4
0x92, 0x82, 0xf8, 0x80, 0x90 }; // 5~9
#define DAC P0 // 定義 DAC 連接埠
#define SCANP P1 // 定義掃瞄信號連接埠
#define SEG7P P2 // 定義七節顯示器連接埠
//=========================================
unsigned char disp[4]={0, 0, 0, 0}; // 宣告顯示區陣列
unsigned char _dac; // 宣告變數
15
void dataproc(unsigned int); // 宣告資料處理函數
void display(void); // 宣告顯示函數
void delay1ms(char); // 宣告延遲函數
main() // 主程式開始
{ while(1) // while 無限迴圈開始
{ display(); // 執行顯示函數
_dac=DAC; // 讀取外部記憶體
dataproc(_dac); // 資料處理
} // while 無限迴圈結束
} // 主程式結束
//====資料處理函數====
void dataproc(unsigned int data_in)
{ unsigned int results; // 宣告變數
results= data_in*58-194;// 讀取 DAC0800 轉換結果乘以 58 倍再減去 194
if(data_in*58<194)
{
disp[3]=0xff; // 十位數不顯示
disp[2]=0xc0-0x80; // 個位數=0.
disp[1]=0xc0; // 十分位數=0
disp[0]=0xc0; // 百分位數=0
}
else
{
if( (results/1000)<10) // 第一位數字小於 10
{
disp[3]=(TAB[(results/1000)%10]-0x80); // 取得個位數
disp[2]=TAB[(results/100)%10]; // 取得十分位數
disp[1]=TAB[(results/10)%10]; // 取得百分位數
disp[0]=TAB[(results/1)%10]; // 取得千分位數
}
else if((results/1000)>=10) // 第一位數字大於 10
{
disp[3]=TAB[(results/10000)%10]; // 取得十位數
disp[2]=(TAB[(results/1000)%10]-0x80); // 取得個位數
disp[1]=TAB[(results/100)%10]; // 取得十分位數
disp[0]=TAB[(results/10)%10]; // 取得百分位數
}
}
16
}
//====顯示函數====
void display(void)
{
int z2; // 定義變數 z2
char i,scan; // 宣告變數
char times=20; // 掃瞄 20 次
int z; // 定義變數 z
z=0; // 定義 z 初值為 0
while (--times>=0) // while 迴圈開始
{ scan=1; // 初始掃瞄信號
for(i=0;i<4;i++) // for 敘述開始
{ // 進入 for 迴圈
SEG7P=0xff; // 關閉 7 節顯示器
SCANP=~scan; // 輸出掃瞄信號
SEG7P=disp[i]; // 轉換成驅動信號,並輸出到 P0
delay1ms(1); // 延遲 1ms
scan<<=1; // 下一個掃瞄信號
} // 結束 for 敘述
} // 結束 while 敘述
} // display 函數結束
//====延遲函數====
void delay1ms(char x) // 進入延遲函數
{ int i,j; // 宣告變數
for(i=0;i<x;i++) // 外迴圈
for(j=0;j<70;j++); // 內迴圈
} // 延遲函數結束
以上程式由 C 語言寫成,先宣告各項變數,再透過 while(1)指令組成的無限
迴圈不斷執行顯示資料、讀取數值、資料運算的工作。C 語言屬於高階語言,燒
錄時需要使用編譯軟體將 C 語言編譯成低階語言再燒錄。編譯後的低階語言如附
錄二。
17
二進位-十進位解碼電路由 89S51 單晶片、
電阻、電晶體、七段顯示器模組、石英晶體振
盪器、電容等元件所組成,AT89S51 單晶片第
四十腳接 Vcc,第二十腳接地,PORT1 為七
段顯示器掃描信號的輸出接腳;七段顯示器依
照電路結構區分為共陽與共陰兩種形式,共陽
七段顯示器將單一位數的各個 LED 的陽極
(anode)連接在一起成為 com 接點,如圖 12 七
段顯示器內部結構圖所示;共陰七段顯示器將
單一位數的各個 LED 的陰極(cathode)連接在
一起。此電路中使用四位數共陽七段顯示器,四位數共陽七段顯示器共有四個
com 接點,分別為 com0、com1、com2、com3,而各位數的 a 皆連接至 a 接腳、
各位數的 b 皆連接至 b 接腳、各位數的 c 皆連接至 c 接腳……。七段顯示器上的
四位數並非同時顯示,而是藉由快速掃描的方式,一次顯示一位數,當 P1.0 為
低態時,電晶體𝑇𝑅1工作,產生𝐼 𝐶電流流入 com0 接點;當 P1.1 為低態時,P1.0
恢復高態,電晶體𝑇𝑅2工作,產生𝐼 𝐶電流流入 com1 接點;當 P1.2 為低態時,P1.1
恢復高態,電晶體𝑇𝑅3工作,產生𝐼 𝐶電流流入 com2 接點;當 P1.3 為低態時,P1.2
恢復高態,電晶體𝑇𝑅4工作,產生𝐼 𝐶電流流入 com3 接點;週而復始,在短時間內
完成掃描;因視覺暫留(Persistence of Vision)現象,四位數可同時看見。圖十三為
二進位-十進位解碼電路圖。
圖 13 二進位-十進位解碼電路圖
圖 12 七段顯示器內部結構圖
18
圖十三中𝑇𝑅1至𝑇𝑅4採用 A1015 之 PNP 型電晶體,即可使電路順利運作;單
晶片的時脈由石英晶體振盪器(XTAL)、電容(𝐶1與𝐶2)組成,石英晶體振盪器可採
用 12MHz,電容𝐶1、𝐶2採用 30pF。掃描七段顯示器有許多方式,圖十三採用電
晶體控制 com 接點電位的方式進行掃描;另外還可使用反相達靈頓驅動器(如
ULN2003、ULN2803)代替 PNP 電晶體;圖十四為 ULN2003 IC 的接腳圖,圖十
五為 ULN2803 IC 的接腳圖。
圖 14 ULN2003 IC 接腳圖 圖 15 ULN2803 IC 接腳圖
ULN2003 IC 具有七個開集極式輸出(Open Collector, O.C.)的反相器,驅
動共陽七段顯示器時,需連接提升電阻,才具有高態輸出。若應用 CMOS 的 4049
IC 進行驅動,則不需外接提升電阻。圖十六為使用反相驅動器的解碼電路。
圖 16 二進位-十進位解碼顯示電路圖(使用反相驅動器)
19
(三) D/A 與解碼電路之整合:
充分運用 89S51 單晶片微電腦的各個輸入輸出埠,可將 D/A 轉換電路與解
碼電路連接至單一顆單晶片上,將 P0 第 32 至 39 接腳連接至 DAC 轉換電路;七
段顯示器的電壓顯示由 P1 與 P2 完成,P3 控制輸出電壓高低。輸出的部分,D1
二極體可以消除電感性負載所產生的大感應電勢,避免電源供應器輸出至電感性
較大的負載時,因瞬間逆向感應電壓使電晶體𝑉𝐶𝐸過高而燒毀。電路如圖十七。
(電子電路實作技術,P239)
圖 17 D/A 與解碼電路之整合
(四) 鍵盤掃描控制:
圖十七電路輸出電壓的控制,透過按下「電壓上升」或「電壓下降」按鈕,
分別使輸出電壓上升或下降;我們還可以使用鍵盤直接輸入電壓數值的方式,調
節輸出電壓的高低。圖十八為 4×4 鍵盤實體相片。
20
讀取鍵盤輸入數值有許多方式,可
連接微電腦 I/O port,藉由軟體程式控制
掃描與編碼,亦可利用 MM74C922 IC,
MM74C922 是 4×4 鍵盤掃描編碼器,其
內部電路如圖十九;其工作電壓範圍為 3
~15V,在電源為 5V 時,其輸出信號準
位與 TTL IC 相容。參考 IC 資料手冊,
DIP 包裝最大消耗功率為 700mW。
圖 18 4×4 鍵盤實體相片
4×4 鍵盤有 0~9 與 A~F 共 16 個按鈕,而鍵盤狀態在使用時需注意:不
同型號規格的 4×4 鍵盤,按鍵排列方式可能不相同;而透過 74922 鍵盤掃描
IC 編碼的結果,以圖十八而言,按下按鈕「C」,編碼結果為「0」;按下按
鈕「D」,編碼結果為「1」……。對應編碼結果如表 5。圖二十為 74922 與
鍵盤連接電路圖。
圖 19 MM74C922 內部電路
21
表 5 74922 對應編碼結果
按鍵值 編碼值(十進位) 按鍵值 編碼值(十進位)
C 0 4 8
D 1 5 9
E 2 6 10
F 3 7 11
8 4 0 12
9 5 1 13
A 6 2 14
B 7 3 15
資料來源:本研究者整理
圖 20 74922 與鍵盤連接電路圖
圖二十中 74922 IC 的第 14~17 接腳為編碼結果資料線,A 為最低有效位
元(Least Significant Bit,LSB),D 為最高有效位元(Most Significant Bit,MSB),
第十二接腳為容許資料輸出接腳,簡稱 DA(Data Available)接腳。在鍵盤未按下
任何按鍵時,本接腳為低態,此 IC 的資料輸出接腳 Data A~Data D 不提供有效
資料;當鍵盤有按鈕被按下時,DA 接腳轉為高態,並由資料線輸出按鍵資料。
(例說 89S51-C 語言 (第三版),P5-10~P5-12)
22
將 DA 接腳與資料輸出接腳 Data A~Data D 連接至單晶片微電腦的 port3;
在程式設計時,將 port3 設為讀取鍵盤狀態的輸入埠,電路圖如圖二十一所示;
依據表 5 鍵盤與編碼的對應關係編寫程式,先宣告一組陣列 allkeyindata[4],放
置鍵盤每次輸入的數值,並透過單晶片內建計數器對鍵盤輸入次數計數,若計數
值為四,則表示輸入完成;按鍵值讀取判斷程式流程如下。
鍵
盤
有
按
鈕
被
按
下
 編碼為 12 →將 0 寫入輸入資料陣列 allkeyindata
 編碼為 13 →將 1 寫入輸入資料陣列 allkeyindata
 編碼為 14 →將 2 寫入輸入資料陣列 allkeyindata
 編碼為 15 →將 3 寫入輸入資料陣列 allkeyindata
 編碼為 8 →將 4 寫入輸入資料陣列 allkeyindata
 編碼為 9 →將 5 寫入輸入資料陣列 allkeyindata
 編碼為 10 →將 6 寫入輸入資料陣列 allkeyindata
 編碼為 11 →將 7 寫入輸入資料陣列 allkeyindata
 編碼為 5 →將 8 寫入輸入資料陣列 allkeyindata
 編碼為 6 →將 9 寫入輸入資料陣列 allkeyindata
圖 21 鍵盤掃描與單晶片控制電路圖
23
當輸入完成時,將輸入資料陣列 allkeyindata 的每一元素進行加權運算,
allkeyindata[3]為 MSD,allkeyindata[0]為 LSD,結果即為完整的輸入數值
(allkeyinval):
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyin
data[0])/pow(10,dot);
上式中 dot 為小數位數,為了能精確控制輸出電壓大小,在鍵盤規劃上將「A」
按鈕視為小數點按鈕;當使用者按下小數點按鈕時,內建計數器計數值不變,且
小數位數(dot)值等於 4-已輸入位數。在±𝑉𝐶𝐶 = ±18𝑉,且𝐼 𝑅𝐸𝐹 =
3.3𝑚𝐴的狀況下,實際測得滿刻度輸出電壓 VO(max)=16.02V,即 DAC0800 輸入二
進位為 11111111 時輸出電壓為 16.02V,由此可得知輸出電壓數值與二進位數值
的對應關係為:
二進位數值=
255
16.02
× 輸出電壓 ≅ 輸出電壓 ÷ 0.0628235
≅ 輸出電壓 × 10000 ÷ 628。
圖二十二為鍵盤控制數位式可調電源供應器電路工作流程圖。從使用者操作
介面,到硬體的信號處理,最後由 D/A 轉換輸出類比電壓。
圖 22 鍵盤控制數位式可調電源供應器電路工作流程圖
(五) DAC 解析度之探討與改善:
使用鍵盤控制輸出電壓值,最低有效位數為 0.001V,而單顆 DAC0800 僅具
有八位元的解析度,由(一) 數位-類比轉換電路的探討內容可知,最低位元電
壓變化量(𝑉𝐿𝑆𝐵) = 𝐼𝐿𝑆𝐵 × 𝑅3 = 0.0585937485(V),若想要降低最低位元電壓變化
量,可使用多顆 DAC0800 結合提高電壓解析度。以兩組 DAC0800 的數位-類比
轉換器為例,其解析度為 2×256=512 階,電路如圖二十三。兩組八位元數位-類
比轉換電路與類比加法電路,其資料線寬度為log2 512 = 9bit;其中𝐵9為最低有
效位元(Least Significant Bit,LSB),𝐵1為最高有效位元(Most Significant Bit,msb),
二進位輸入真值表分析如表 6。
使用者設定
輸出電壓值
單晶片微電腦讀
取使用者輸入數
值並產生對應的
二進位碼,由P0
輸出至DAC0800
DAC0800接收由
P0送出之二進碼
轉換為類比電壓
輸出。
24
圖 23 九位元數位-類比轉換器電路圖
表 6 二進位輸入真值表
十進位數值 二進位數值
Vout2 數位輸入
等效十進位值
Vout1 數位輸入
等效十進位值
0 000000000 0 0
1 000000001 0 1
2 000000010 0 2
3 000000011 0 3
4 000000100 0 4
5 000000101 0 5
…
…
…
…
250 011111010 0 250
251 011111011 0 251
252 011111100 0 252
253 011111101 0 253
254 011111110 0 254
255 011111111 0 255
256 100000000 0 255
257 100000001 1 255
258 100000010 2 255
259 100000011 3 255
260 100000100 4 255
261 100000101 5 255
262 100000110 6 255
263 100000111 7 255
25
264 100001000 8 255
265 100001001 9 255
…
…
…
…
506 111111010 250 255
507 111111011 251 255
508 111111100 252 255
509 111111101 253 255
510 111111110 254 255
511 111111111 255 255
資料來源:本研究者整理
根據圖二十三,可將𝐵1(最高有效位元)視為資料選擇線;當𝐵1 = 0時,代表
輸出電壓較低(小於等於
1
2
×Vout 最高輸出電壓),這時將𝐵2~𝐵9的二進位資料送入
DAC0800 IC 產生𝑉𝑜𝑢𝑡1電壓,𝑉𝑜𝑢𝑡2則為 0V;當𝐵1 = 1時,代表輸出電壓較高(大
於等於
1
2
×Vout 最高輸出電壓),這時將𝐵2~𝐵9的二進位資料送入 DAC0800 產生
𝑉𝑜𝑢𝑡2電壓,控制𝑉𝑜𝑢𝑡1輸出電壓的 DAC0800 IC 接收到的二進位值為 255,滿刻度
電壓輸出。若九位元輸入信號為 011111111 或 100000000 時,輸出電壓恰為
1
2
×Vout
最高輸出電壓。信號處理流程圖如圖二十四。
圖 24 九位元 D/A 電路信號處理流程圖
𝐵1~𝐵9
輸入信號
𝐵1 = 0
𝑉𝑜𝑢𝑡1 = 𝐼 𝑅𝐸𝐹 ×
𝐷
256
× 𝑅7
𝑉𝑜𝑢𝑡2 = 0
𝐵1 = 1
𝑉𝑜𝑢𝑡1 = 𝐼 𝑅𝐸𝐹 ×
255
256
× 𝑅7
𝑉𝑜𝑢𝑡2 = 𝐼 𝑅𝐸𝐹 ×
𝐷
256
× 𝑅3
26
設定 Vout 滿刻度輸出電壓為 16V,即𝑉𝑜𝑢𝑡(max) = 16V,則
1
2
× 𝑉𝑜𝑢𝑡 = 8V,單
個 DAC 電路的滿刻度輸出電壓即為 8V,8V=𝐼 𝑅𝐸𝐹 ×
255
256
× 𝑅7,𝐼 𝑅𝐸𝐹 × 𝑅7 =
8×256
255
=
2048
255
= 8.031372549(V)。且𝐼 𝑅𝐸𝐹 =
𝑉𝑟𝑒𝑓
𝑅
,即
𝑉𝑟𝑒𝑓
𝑅
× 𝑅7 = 8.031372549,若𝑉𝑟𝑒𝑓為
5V,則
𝑅7
𝑅
=1.6062745098 此 R 可以採用精密可變電阻,以進行微調。最低位元電
壓解析度(𝑉𝐿𝑆𝐵) = 𝐼𝐿𝑆𝐵 × 𝑅7 = 𝐼 𝑅𝐸𝐹 ×
1
256
× 𝑅7 = 0.031372549(V)
= 31.372549(mV),較八位元 DAC 解析度增加 46.457515%,以下為 OPA 類比
加法器電路分析。
圖 25 類比加法器電路圖
圖二十五為類比加法電路,其𝑉𝑜𝑢𝑡 = 𝑉𝑖𝑛 × (1 +
𝑅2
𝑅1
);由節點電壓法,若考慮
運算放大器 741 的輸入電阻𝑅𝑖典型值為 2MΩ,可得知:
𝑉𝑖𝑛 − 𝑉1
𝑅3
+
𝑉𝑖𝑛 − 𝑉2
𝑅4
+
𝑉𝑖𝑛
2MΩ
= 0
2M𝑅4(𝑉𝑖𝑛 − 𝑉1) + 2M𝑅3(𝑉𝑖𝑛 − 𝑉2) + 𝑅3 𝑅4 𝑉𝑖𝑛 = 0
𝑉𝑖𝑛(2M𝑅4 + 2M𝑅3 + 𝑅3 𝑅4) = 2M(𝑅4 𝑉1 + 𝑅3 𝑉2)
𝑉𝑖𝑛 =
2M(𝑅4 𝑉1 + 𝑅3 𝑉2)
(2M𝑅4 + 2M𝑅3 + 𝑅3 𝑅4)
𝑉𝑖𝑛 =
2M(𝑅4 𝑉1 + 𝑅3 𝑉2)
(2M(𝑅4 + 𝑅3) + 𝑅3 𝑅4)
27
若不考慮運算放大器 741 的輸入電阻𝑅𝑖,則:
𝑉𝑖𝑛 − 𝑉1
𝑅3
+
𝑉𝑖𝑛 − 𝑉2
𝑅4
= 0
𝑅4(𝑉𝑖𝑛 − 𝑉1) + 𝑅3(𝑉𝑖𝑛 − 𝑉2) = 0
𝑉𝑖𝑛(𝑅4 + 𝑅3) − 𝑅4 𝑉1 − 𝑅3 𝑉2 = 0
𝑉𝑖𝑛 =
𝑅4 𝑉1 + 𝑅3 𝑉2
(𝑅4 + 𝑅3)
若𝑅3 = 𝑅4,則:
𝑉𝑖𝑛 =
𝑉1 + 𝑉2
2
可見𝑉𝑜𝑢𝑡 = 𝑉𝑖𝑛 × (1 +
𝑅2
𝑅1
)
=
𝑉1+𝑉2
2
× (1 +
𝑅2
𝑅1
)
若𝑅3 = 𝑅4又𝑅1 = 𝑅2,則𝑉𝑜𝑢𝑡 = 𝑉1 + 𝑉2。
表 7 為類比加法器電路零件規格表。
表 7 類比加法器電路零件規格表
編號 名稱 規格
𝑅1 金屬膜精密電阻器 10kΩ,0.5W
𝑅2 金屬膜精密電阻器 10kΩ,0.5W
𝑅3 金屬膜精密電阻器 10kΩ,0.5W
𝑅4 金屬膜精密電阻器 10kΩ,0.5W
資料來源:本研究者整理
若欲進一步改善輸出電壓解析度至 0.001V 以下,同樣在𝑉𝑜𝑢𝑡(max) = 16V 的
條件下,近似分析如下:
令 DAC 位元數為 x,解析度:
16
2 𝑥 < 0.001
x > log2 16020 = 13.9675865
當 DAC 位元數高於 14 時,滿刻度輸出電壓為 16V,最低位元電壓變化量小於
0.001V。
28
(六) 電流檢測電路:
為了得知負載運作的情形與電源供應器實際輸出電流大小,避免因輸出電流
過大,導致元件損毀,在電源供應電路中增加電流檢測電路。電流檢測電路主要
由類比-數位轉換器(Analog-to-digital converter, ADC)所組成。ADC 的功能為將類
比訊號轉換成數位信號。常用的 A/D 轉換器可分為逐次比較型 A/D 轉換器、並
聯比較型 A/D 轉換器、雙重積分型 A/D 轉換器……等。
逐次比較型A/D轉換器又稱計數器斜坡式A/D轉換器,由電壓比較器(voltage
comparator)、及閘(AND Gate)、二進位計數器與數位類比轉換器(D/A 轉換器)……
等組成。首先將類比輸入信號取樣並保持(Sample-and-hold),電路如圖二十六;
再透過電壓比較器,與 D/A 轉換器產生的類比信號進行比較,將比較結果與時脈
輸入及閘(AND Gate)後,以計數器輸出數位信號,細節分析如下。
圖 26 取樣並保持(Sample-and-hold)電路
在圖二十六中,取樣並保持(Sample-and-hold)電路由兩組 OPA 電壓隨耦器
(Voltage follower)、一個類比開關及一顆電容所組成。OP1 的輸出電壓𝑉𝑂 𝑂𝑃1
隨著
其同相輸入端𝑉𝑖+ 𝑂𝑃1
電壓變化,假設 VG1 信號為頻率 1000Hz 的正弦波,其瞬時
方程式為VG1(𝑡) = sin(2 × 𝜋 × 1000 × 𝑡)V,則𝑉𝑂 𝑂𝑃1
電壓方程式亦為sin(2 × 𝜋 ×
1000 × 𝑡);設 OPA 具理想特性,模擬分析結果繪圖如圖二十七。
29
圖 27 取樣並保持(Sample-and-hold)電路分析
當開關(SW1)閉合(ON)時,OP2 的同相輸入端𝑉𝑖+ 𝑂𝑃2
電壓變化與 OP1 的輸出
相同。在前述內容中,𝑉𝑂 𝑂𝑃1
電壓方程式為sin(2 × 𝜋 × 1000 × 𝑡),故𝑉𝑖+ 𝑂𝑃2
之電壓
方程式亦為sin(2 × 𝜋 × 1000 × 𝑡)。模擬分析結果如圖二十八。
30
圖 28 取樣並保持(Sample-and-hold)電路開關閉合模擬
圖二十八中假設開關為閉合(ON)狀態,若開關閉合一段時間𝑡 𝑂𝑁後斷開(OFF),
則因電容𝐶1 具儲能特性,𝑉𝑖+ 𝑂𝑃2
(𝑡 > 𝑡 𝑂𝑁)電壓將維持開關斷開前一刻的電壓
𝑉𝑖+ 𝑂𝑃2
(𝑡 = 𝑡 𝑂𝑁
−),若𝑡 𝑂𝑁 = 125𝜇𝑆,模擬分析結果如圖二十九。
圖 29 取樣並保持(Sample-and-hold)電路開關𝑡 𝑂𝑁 = 125𝜇𝑆模擬
31
信號源 VG1 頻率為 1000Hz,週期(T)為
1
1000
= 0.001𝑆 = 1𝑚𝑆,表 8 為時間
-信號源電壓關係表。
表 8 時間-信號源電壓關係表
時間 t(毫秒) 信號源電壓 VG1(V)
0 0
0.0625 0.382683432
0.125 0.707106781
0.1875 0.923879533
0.25 1
0.3125 0.923879533
0.375 0.707106781
0.4375 0.382683432
0.5 0
0.5625 -0.382683432
0.625 -0.707106781
0.6875 -0.923879533
0.75 -1
0.8125 -0.923879533
0.875 -0.707106781
0.9375 -0.382683432
1 0
資料來源:本研究者整理
開關𝑡 𝑂𝑁 = 125𝜇𝑆,在開關斷開(OFF)後,𝑉𝑖+ 𝑂𝑃2
接近於 0.707106781V,與圖
二十九之分析結果大致相符合。OP2 電路為一電壓隨耦器,以運算放大器輸入阻
抗高的特性,降低電容放電效應,使電壓保持。若 OPA 具理想特性,OP2 的輸
出電壓𝑉𝑂 𝑂𝑃2
= 𝑉𝑖+ 𝑂𝑃2
≈ 0.7071V。逐次比較型 A/D 轉換器運用取樣並保持電路
將輸入信號取樣後,另需一二進位計數器與 D/A 電路,產生比較電壓,進而得到
數位數值。二進位計數器與 D/A 電路圖如圖三十。
32
圖 30 二進位計數器與 D/A 電路圖
圖三十中包含一組八位元二進位計數器及一組八位元 D/A 轉換電路;二進位
計數器由 JK 正反器構成。當計數時脈頻率為 100kHz 時,時脈週期為
1
100𝑘
= 0.01mS = 10μS,模擬分析 CLK、Tri_signal 兩信號波形結果如圖三十一,
橫軸(X)為時間(秒),縱軸(Y)為電壓(伏特 V)。
圖 31 二進位計數器與 D/A 電路模擬
0
1
2
3
4
5
6
0 0.0005 0.001 0.0015 0.002 0.0025 0.003 0.0035 0.004
CLK Tri_signal
33
並聯比較型 A/D 轉換器將基準電壓透過電阻分壓後,再配合比較器與輸入的
類比電壓進行比較,將比較結果輸入解碼電路後輸出,即可得到數位信號。並聯
比較型 A/D 轉換器具有轉換速度快的優點,但需要多個比較器與電阻器,材料費
用較高。表 8 為 A/D 轉換器的優缺點比較表,表 9 為部分 ADC 積體電路的編號
與規格。
表 8 A/D 轉換器的優缺點比較表
A/D 轉換器種類 優點 缺點
逐次比較型 A/D 轉換器 元件較少。 為逐次比較,
故轉換速度較慢。
並聯比較型 A/D 轉換器 多個比較器同時工作,
轉換速度較快。
所需元件數較多,
成本較高。
資料來源:Roger L. Tokheim 著(2009 年 10 月初版二刷)。數位邏輯設計原理與應用。
表 9 類比-數位轉換器規格表
編號 電源 位元數
ADC0804 5V 8 位元
ADC0806 3.8V 8 位元
LC89086M 5V 8 位元
ADC10461
5V 10 位元ADC10462
ADC10464
資料來源:本研究者整理
以 ADC0804 為例,ADC0804 為 CMOS 的類比-數位轉換 IC,只需 5V 單電
源即可正常工作,依據 datasheet 資料,電源最大值為 6.5V。允許 GND-0.05~(V+)
+ 0.05V 類比電壓輸入,若輸入電壓過高則易燒毀;具有三態輸出,與微處理機
相容,不需配合其他介面,即可與 8x51 等微電腦一齊工作。不需要額外的石英
振盪器,只要外接 R、C 即可使 IC 工作,且可由 R、C 控制其振盪頻率。圖二十
六為 ADC0804 內部方塊圖。圖二十七為 ADC0804 接腳圖。
34
圖 26 ADC0804 內部方塊圖
圖 27 ADC0804 接腳圖
35
圖 28 ADC0804 電流檢測電路
將 ADC0804 應用於電源供應器之輸出電流檢測,電路圖如圖二十八所示。
在輸出端串聯一小電阻 0.03Ω,當輸出電流愈大,電阻上的電位差亦愈大。因此,
將電阻端電壓類比信號轉換為數位信號,再經運算,便可得知負載電流。檢測負
載電流能更清楚負載工作情形,若負載異常,出現短路狀況,電源供應器能自動
調節輸出電流,進入限流模式,避免內部穩壓元件過載而燒毀。
36
(七) 單晶片微電腦 I/O port 之擴充:
由圖二十一 鍵盤掃描與單晶片控制電路圖可知,包含鍵盤輸入、DAC 輸
出及七段顯示器掃描已分別連接至單晶片 89S51 的四個埠,若要結合 ADC 電流
檢測,需修改電路設計,採用資料匯流排共用之多工架構。透過晶片致能控制,
避免資料衝突。匯流排電路連接如圖二十九。
圖 29 匯流排電路連接圖
匯流排並聯共用的設計中,常採用三態緩衝器。匯流排傳送時,同一時間僅
有一組信號在兩點之間進行點對點傳送,因為兩條線以上同時接在一起會產生線
接及閘,使得信號無法有效地辨認,因此必須以三態緩衝器來控制那些信號可以
傳送,而哪一些是不可以傳送,這即是為何接上匯流排需要緩衝隔離控制的原因。
(微電腦架構,P68)
37
74574 為常用的三態輸出緩衝栓鎖器。以 STMicroelectronics 公司之 74AC574 為
例,根據資料手冊,其特性如下:
 功能簡述:Octal D-Type Flip-Flop with 3-STATE Outputs
 電源電壓(Supply Voltage)範圍:2~6V
 輸入電壓(Input Voltage)範圍:0~Vcc(V)
 輸出電壓(Output Voltage)範圍:0~Vcc(V)
 直流輸出最大電流(DC Output Current Maximum):±50mA
 當 Vcc=5V±0.5V 時,最高工作頻率:220MHz
※一般的低功率蕭特基(Low Power Schottky)晶片如 74LS574,工作頻率上限約數
十 MHz。
 最大工作電流(由 Vcc 供應,DC VCC or Ground Current):±400mA
 操作溫度(Operating Temperature)範圍:-40~+85℃
 74574 共 20 支接腳,有八個 D 型正反器;當 CK 輸入脈波正緣信號,資料栓鎖,
由𝑂𝐸̅̅̅̅控制輸出狀態。當𝑂𝐸̅̅̅̅為低態時,內部栓鎖資料送出;當𝑂𝐸̅̅̅̅為高態時,輸出
為高阻抗狀態,接腳圖如圖三十,內部邏輯電路如圖三十一。
圖 30 74AC574 接腳圖
38
圖 31 74574 內部邏輯電路
39
圖三十二為 ADC 電流檢測與 74574 資料栓鎖電路圖;將 ADC 電流檢測電路
所輸出之數位資料,透過 74574 栓鎖與三態緩衝控制;74574 之 ck 連接至 ADC
之 CLK,使得數位-類比轉換與栓鎖同步;三態緩衝輸出控制𝑂𝐸̅̅̅̅連接至單晶片微
電腦 89S51 之 P3.2,讀取 ADC 資料時,藉由程式控制 P3.2 為低態,即可透過資
料匯流排讀取。圖中 D6~D13 共八顆 LED 顯示 ADC 數位資料。
圖 32 ADC 電流檢測與 74574 資料栓鎖電路圖
依據 74574 元件特性與匯流排電路設計控制程式,整合七段顯示器的掃描顯
示、DAC 控制、ADC 讀取資料與鍵盤輸入等功能;軟體架構圖如圖三十三,定
義硬體 I/O 如下:
#define DATA_PORT P0 // 定義資料匯流排連接至 P0
#define SCANP P1 // 定義掃瞄信號輸出連接埠為 P1
#define SEG7P P2 // 定義七節顯示器連接埠為 P2
sbit DAC_ck = P3^0; // 宣告 DAC 栓鎖脈波接腳
/*DAC_ck 送出正緣,栓鎖器讀取資料匯流排上資料,送入 DAC 電路*/
sbit key_OE = P3^1; // 宣告鍵盤輸入資料控制接腳
/*74922 編碼後之鍵盤輸入資料由栓鎖器栓鎖,當 key_OE=0 時資料進入資料匯流排*/
sbit ADC_OE = P3^2; // 宣告 ADC 資料控制接腳
/*當 ADC_OE=0(低態致能)時,ADC 電路輸出資料進入資料匯流排*/
sbit key_DA = P3^3; // 宣告鍵盤輸入 Data available 接腳
/*當鍵盤按下時 key_DA 為高態,若無按鍵按下,key_DA 為低態*/
sbit key_ck = P3^4; // 宣告鍵盤輸入資料栓鎖器 ck 接腳
/*當鍵盤按下時 key_DA 為高態,需傳送一脈波訊號至 key_ck,使按鍵資料栓鎖*/
40
圖 33 軟體架構圖
在軟體架構圖中,包含主程式與多種控制副程式,副程式功能敘述如下:
 control_reset:控制接腳狀態重置副程式
此副程式設定栓鎖緩衝器致能與 CK(時脈輸入接腳)之初始狀態。根據電路
設計,栓鎖 DAC 資料之 CK 連接至單晶片微電腦之 P3.0;鍵盤輸入資料栓鎖器
致能接腳𝑂𝐸̅̅̅̅連接至單晶片微電腦之 P3.1;ADC 資料栓鎖器致能接腳𝑂𝐸̅̅̅̅連接至單
晶片微電腦之 P3.2;鍵盤輸入 74922 之 Data available 連接至 P3.3;鍵盤輸入資
料栓鎖器 ck 接腳連接至 P3.4。在此設定 P3.0 與 P3.4 為低態,P3.1 與 P3.2 為高
態。副程式碼如下:
void control_reset(void) // 控制接腳狀態重置副程式
{ // 進入控制接腳狀態重置副程式
//***控制初始設定***
DAC_ck=0; // 設定 DAC_ck 為低態
key_OE=1; // 設定 key_OE 為高態
ADC_OE=1; // 設定 ADC_OE 為高態
key_ck=0; // 設定 key_ck 為低態
} // 結束控制接腳狀態重置副程式
主程式(main)
control_reset
DAC_control
ADC_DATA
key_DATAdisp_dataprog
display
delay1ms
41
 DAC_control:DAC 控制副程式
DAC_control 副程式呼叫時傳入一變數,代表控制 DAC 輸出的二進位數值。
副程式宣告如下:
void DAC_control(int); // 宣告 DAC 控制副程式
由於電路上共用資料匯流排的設計,為防止資料衝突,微電腦送出 DAC 資
料前,須避免其他栓鎖器輸出資料至資料匯流排。因此先呼叫 control_reset 副程
式,將 ADC 與鍵盤輸出栓鎖器控制接腳(𝑂𝐸̅̅̅̅)設定為高態,關閉輸出後,微電腦
送出 DAC 資料,產生脈波正緣至 DAC 資料栓鎖器之 CK。DAC_control 副程式
流程圖如圖三十四。信號時序圖如圖三十五。
圖 34 DAC_control 副程式流程圖
圖 35 單晶片微電腦與 DAC 電路信號時序圖
關閉其他栓鎖器
輸出資料至
資料匯流排
微電腦將DAC資料
送入資料匯流排
產生脈波正緣至
DAC資料栓鎖器
42
由時序圖可知,當 DAC_ck 出現脈波正緣信號,DAC 數位資料將改變。
DAC_control 副程式碼如下:
void DAC_control(int dac_data) // DAC 控制副程式
{ // 進入 DAC 控制副程式
control_reset(); // 先呼叫控制接腳狀態重置副程式
DATA_PORT=dac_data; // 將資料放入資料匯流排
DAC_ck=1; // 送出正緣脈波,改變栓鎖資料
control_reset(); // 先呼叫控制接腳狀態重置副程式
} // 結束 DAC 控制副程式
 ADC_DATA:ADC 資料讀取副程式
欲讀取 ADC 電路產生之數位資料,可直接呼叫 ADC_DATA 副程式,其傳
回值即為 ADC 數位資料。先呼叫 control_reset 副程式,將 ADC_OE、key_OE 設
定為高態,DAC_ck 設定為低態後,再致能 ADC_OE,由資料匯流排讀取。副程
式碼如下:
int ADC_DATA(void) // ADC 資料讀取副程式
{ // 進入 ADC 資料讀取副程式
int ADC_data=0; // 宣告讀取進來的 ADC 資料暫存變數
control_reset(); // 先呼叫控制接腳狀態重置副程式
ADC_OE=0; // 準備讀取 ADC 資料
ADC_data=DATA_PORT; // 由 DATA_PORT(P0)讀取 ADC 資料
control_reset(); // 呼叫控制接腳狀態重置副程式
return ADC_data; // 回傳結果
} // 結束 ADC 資料讀取副程式
 key_DATA:鍵盤輸入副程式
當鍵盤按下時,MM74C922 的 DA 接腳輸出高態,接著按鍵資料由資料輸出
接腳 Data A~Data D 送出。直接呼叫 key_DATA 副程式,副程式內傳回之變數
keyin 即為透過資料匯流排所讀入的按鍵資料。副程式碼如下。
int key_DATA(void) // 鍵盤輸入副程式
{ // 進入鍵盤輸入副程式
int keyin=0;
// 宣告 keyin 區域變數,當鍵盤有輸入時,將輸入值填入 keyin
control_reset(); // 先呼叫控制接腳狀態重置副程式
key_ck=1; // 產生脈波正緣信號,將按鍵資料栓鎖
key_ck=0; // 將 key_ck 回復低態
key_OE=0; // 將鍵盤輸入資料傳入資料匯流排
do // do-while 迴圈
43
{ // 進入 do-while 敘述
keyin=DATA_PORT; // 將資料讀入
} // 結束 do-while 敘述
while(keyin>=16); // 當輸入讀取錯誤,則再次讀取
control_reset(); // 呼叫控制接腳狀態重置副程式
debouncer(); // 呼叫防彈跳副程式
return keyin; // 傳回結果
} // 結束鍵盤輸入副程式
 disp_dataprog:七段顯示資料處理副程式
呼叫七段顯示資料處理副程式時,直接將顯示數值傳入副程式,經運算處理
後,將每一位顯示數值結果放入陣列 disp。使用方式與結果列表如下:
表 10 disp_dataprog 副程式執行分析
呼叫方式
執行結果
disp[3] disp[2] disp[1] disp[0]
disp_dataprog(2000) 2 0 0 0
disp_dataprog(300.2) 3 0 0. 2
disp_dataprog(45.21) 4 5. 2 1
disp_dataprog(6.853) 6. 8 5 3
資料來源:本研究者整理
void disp_dataprog(float disp_data) // 七段顯示資料處理副程式
{ // 進入資料處理函數
if(((int)disp_data/1000)%10!=0) // 若千位數不為 0(即數值為 X---)
{ // 進入 if 敘述
int value=disp_data; // 宣告 value=disp_data
disp[3]=TAB[(value/1000)%10]; // 取得千位數
disp[2]=TAB[(value/100)%10]; // 取得百位數
disp[1]=TAB[(value/10)%10]; // 取得十位數
disp[0]=TAB[(value/1)%10]; // 取得個位數
} // 結束 if 敘述
else // 判斷若千位數為 0
{ // 則進入 else if 敘述
if(((int)disp_data/100)%10!=0)
// 判斷若百位數不為 0(即數值為 0X--.-)
{ // 進入 if 敘述
int value=disp_data*10;
44
// 宣告 value 為 disp_data 的 10 倍
disp[3]=TAB[(value/1000)%10]; // 取得百位數
disp[2]=TAB[(value/100)%10]; // 取得十位數
disp[1]=(TAB[(value/10)%10]-0x80); // 取得個位數和小數點
disp[0]=TAB[(value/1)%10]; // 取得十分位數
//顯示出 XXX.X
} // 結束 if 敘述
else // 若百位數為 0
{ // 進入 else 敘述
if(((int)disp_data/10)%10!=0)
// 若十位數值不為 0(即數值為 00X-.--)
{ // 進入 if 敘述
int value=disp_data*100;
// 宣告 value 為 disp_data 的 100 倍
disp[3]=TAB[(value/1000)%10]; // 取得十位數
disp[2]=(TAB[(value/100)%10]-0x80);
// 取得個位數和小數點
disp[1]=TAB[(value/10)%10]; // 取得十分位數
disp[0]=TAB[(value/1)%10]; // 取得百分位數
//顯示出 XX.XX
} // 結束 if 敘述
else // 若十位數為 0
{ // 進入 else 敘述
int value=disp_data*1000;
// 宣告 value 為 disp_data 的 1000 倍
disp[3]=(TAB[(value/1000)%10]-0x80);
// 取得個位數和小數點
disp[2]=TAB[(value/100)%10]; // 取得十分位數
disp[1]=TAB[(value/10)%10]; // 取得百分位數
disp[0]=TAB[(value/1)%10]; // 取得千分位數
//顯示出 X.XXX
} // 結束 else 敘述
} // 結束 else 敘述
} // 結束 else 敘述
} // 結束資料處理函數
 結合上述各副程式,編寫完整控制程式如下:
/* DAC 電源供應器控制程式 */
45
#include <AT89X51.h> // 加入 AT89X51.h 函式庫
#include <math.h> // 加入 math.h 函式庫
//====硬體 I/O 定義區===============================================
#define DATA_PORT P0 // 定義資料匯流排連接至 P0
#define SCANP P1 // 定義掃瞄信號輸出連接埠
#define SEG7P P2 // 定義七節顯示器連接埠
sbit DAC_ck = P3^0; // 宣告 DAC 栓鎖脈波接腳
/*DAC_ck 送出正緣,栓鎖器讀取資料匯流排上資料,送入 DAC 電路*/
sbit key_OE = P3^1; // 宣告鍵盤輸入資料控制接腳
/*74922 編碼後之鍵盤輸入資料由栓鎖器栓鎖,當 key_OE=0(低態致能)時資料進入資料匯流排*/
sbit ADC_OE = P3^2; // 宣告 ADC 資料控制接腳
/*當 ADC_OE=0(低態致能)時,ADC 電路輸出資料進入資料匯流排*/
sbit key_DA= P3^3; // 宣告鍵盤輸入 Data available 接腳
/*當鍵盤按下時 key_DA 為高態,若無按鍵按下,key_DA 為低態*/
sbit key_ck = P3^4; // 宣告鍵盤輸入栓鎖器 ck
/*當鍵盤按下時 key_DA 為高態,需傳送一脈波訊號至 key_ck,使按鍵資料栓鎖*/
sfr AUXR = 0x8e; // 宣告輔助暫存器
/*AUXR 暫存器是 89S51 新增的暫存器,其位址在 8EH。這個暫存器的功能為控
制 ALE、RESET 腳位的狀態和 WDT 暫存器的特殊啟動模式。*/
//====宣告區======================================================
//***副程式宣告***
void control_reset(void); // 宣告控制接腳狀態重置副程式
void DAC_control(int); // 宣告 DAC 控制副程式
/*欲控制 DAC 八位元資料時,直接將資料傳入 DAC_control 副程式即可*/
int ADC_DATA(void); // 宣告 ADC 資料讀取副程式
/*欲讀取 ADC 資料直接呼叫 ADC_DATA,傳回值即為 ADC 資料*/
int key_DATA(void); // 宣告鍵盤輸入副程式
/*當鍵盤按下時 key_DA 為高態,可直接呼叫 key_DATA,傳回值即為鍵盤輸入值*/
void keyinprog(int); // 宣告鍵盤輸入資料處理副程式
/*將接收到的按鍵值 key_DATA()直接傳入 keyinprog()副程式,寫入 allkeyindata 資料陣列*/
void voltcontrol(float); // 宣告電壓控制副程式
/*將 allkeyindata 資料陣列加權運算後的 allkeyinval 傳入,輸出電壓大小即為 allkeyinval*/
void disp_dataprog(float); // 宣告七段顯示資料處理副程式
/*直接將顯示資料傳入 disp_dataprog 即可*/
void display(void); // 宣告七段顯示器控制副程式
/*七段顯示器控制副程式用以掃描顯示數值*/
void debouncer(void); // 宣告輸入防彈跳副程式
46
void delay1ms(char); // 宣告延遲副程式
//***全域變數宣告***
/*宣告七段顯示器驅動字型信號陣列*/
char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 0~4
0x92, 0x82, 0xf8, 0x80, 0x90 }; // 5~9
int flag=0; // 宣告旗標變數
/*若鍵盤按下時,key_DA=1,flag 設為 1,若 key_DA 由高態轉低態,flag 依然為 1,
此時處理輸入數值*/
float voltmax=16.02; // 宣告輸出電壓最大值變數(為浮點數)
float allkeyinval=0;
// 宣告輸入四位數值(含小數點),其初值為 0
unsigned int DACnum;
// 宣告 DACnum 變數,為 DAC(輸出至 DAC0800)設定值
int dot=0; // 宣告小數位數
/*當按下小數點按鈕時,dot=numofbits*/
long press_time=0; // 宣告按鈕按下時間變數
/*當按下電壓微調按鈕時,press_time 變數不斷累加,以動態調整速率*/
int key_press_times=4; // 宣告輸入位數變數
/*配合小數點按鈕,每按下一次按鍵,key_press_times 遞減 1,直到 numofbits=1 時
代表輸入完成*/
int allkeyindata[4]={0, 0, 0, 0}; // 宣告四位數輸入數值陣列
unsigned char disp[4]={0, 0, 0, 0}; // 宣告七段顯示區陣列
/*disp[0]為 LSD,disp[3]為 MSD*/
//====主程式======================================================
main() // 主程式
{ // 進入主程式
//***暫存器初始設定***
AUXR=0x01; // 關閉外部記憶體 ALE 訊號
//***程式開始***
control_reset(); // 呼叫控制接腳狀態重置副程式
DACnum=0; // 將 DACnum 變數初值設定為 0
DAC_control(DACnum); // 設定初始輸出電壓
disp_dataprog(DACnum); // 給定顯示數值
control_reset(); // 呼叫控制接腳狀態重置副程式
display(); // 呼叫顯示副程式
while(1) // 無窮迴圈
{ // 進入 while 敘述
while(key_DA==1) // 當有按鈕被按下
47
{ // 執行 while 敘述
delay1ms(50); // 呼叫延遲副程式
if(flag==0 && key_DA==1)
// 再次檢查(避免雜訊),有輸入的狀況下,若 flag=0
{ // 進入 if 敘述
keyinprog(key_DATA());
// 呼叫 keyinprog 副程式處理鍵盤輸入資料
flag=1; // 有輸入,將 flag 旗標設為 1
} // 結束 if 敘述
} // 結束 while 敘述
if(flag==1) // 若有鍵盤按下後放開
{ // 進入 if 敘述
flag=0; // 有輸入,將 flag 旗標歸 0
} // 結束 if 敘述
display(); // 呼叫顯示副程式
} // 結束 while 敘述
} // 主程式結束
//====控制接腳狀態重置副程式========================================
void control_reset(void) // 控制接腳狀態重置副程式
{ // 進入控制接腳狀態重置副程式
//***控制初始設定***
DAC_ck=0; // 設定 DAC_ck 為低態
key_OE=1; // 設定 key_OE 為高態
ADC_OE=1; // 設定 ADC_OE 為高態
key_ck=0; // 設定 key_ck 為低態
} // 結束控制接腳狀態重置副程式
//====DAC 控制副程式===============================================
void DAC_control(int dac_data) // DAC 控制副程式
{ // 進入 DAC 控制副程式
control_reset(); // 先呼叫控制接腳狀態重置副程式
DATA_PORT=dac_data; // 將資料放入資料匯流排
DAC_ck=1; // 送出正緣脈波,改變栓鎖資料
control_reset(); // 先呼叫控制接腳狀態重置副程式
} // 結束 DAC 控制副程式
//====ADC 資料讀取副程式===========================================
int ADC_DATA(void) // ADC 資料讀取副程式
{ // 進入 ADC 資料讀取副程式
int ADC_data=0;
48
// 宣告讀取進來的 ADC 資料暫存變數
control_reset(); // 先呼叫控制接腳狀態重置副程式
ADC_OE=0; // 準備讀取 ADC 資料
ADC_data=DATA_PORT;
// 由 DATA_PORT(P0)讀取 ADC 資料
control_reset(); // 呼叫控制接腳狀態重置副程式
return ADC_data; // 回傳結果
} // 結束 ADC 資料讀取副程式
//====鍵盤輸入副程式===============================================
int key_DATA(void) // 鍵盤輸入副程式
{ // 進入鍵盤輸入副程式
int keyin=0;
// 宣告 keyin 區域變數,當鍵盤有輸入時,將輸入值填入 keyin
control_reset(); // 先呼叫控制接腳狀態重置副程式
key_ck=1;
// 產生脈波正緣信號,將按鍵資料栓鎖
key_ck=0; // 將 key_ck 回復低態
key_OE=0; // 將鍵盤輸入資料傳入資料匯流排
do // do-while 迴圈
{ // 進入 do-while 敘述
keyin=DATA_PORT; // 將資料讀入
} // 結束 do-while 敘述
while(keyin>=16); // 當輸入讀取錯誤,則再次讀取
control_reset(); // 呼叫控制接腳狀態重置副程式
debouncer(); // 呼叫防彈跳副程式
return keyin; // 傳回結果
} // 結束鍵盤輸入副程式
//====鍵盤輸入資料處理副程式========================================
void keyinprog(int keyindata) // 鍵盤輸入資料處理副程式
{ // 進入鍵盤輸入資料處理副程式
switch(keyindata) // 依鍵盤輸入的值進行處理
{ // 進入 switch 敘述
case(12): // 若按下數字 0
{ // 進入 case12 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
49
allkeyindata[0]=0; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case12 敘述
break; // 跳離 switch-case 敘述
case(13): // 若按下數字 1
{ // 進入 case13 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=1; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case13 敘述
break; // 跳離 switch-case 敘述
case(14): // 若按下數字 2
{ // 進入 case14 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=2; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case14 敘述
break; // 跳離 switch-case 敘述
case(15): // 若按下數字 3
{ // 進入 case15 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
50
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=3; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case15 敘述
break; // 跳離 switch-case 敘述
case(8): // 若按下數字 4
{ // 進入 case8 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=4; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case8 敘述
break; // 跳離 switch-case 敘述
case(9): // 若按下數字 5
{ // 進入 case9 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=5; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case9 敘述
break; // 跳離 switch-case 敘述
case(10): // 若按下數字 6
{ // 進入 case10 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
51
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=6; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case10 敘述
break; // 跳離 switch-case 敘述
case(11): // 若按下數字 7
{ // 進入 case11 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=7; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case11 敘述
break; // 跳離 switch-case 敘述
case(4): // 若按下數字 8
{ // 進入 case4 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=8; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case4 敘述
break; // 跳離 switch-case 敘述
case(5): // 若按下數字 9
{ // 進入 case5 敘述
key_press_times=key_press_times-1; // 遞減 key_press_times
52
allkeyindata[3]=allkeyindata[2]; // 資料轉移
allkeyindata[2]=allkeyindata[1]; // 資料轉移
allkeyindata[1]=allkeyindata[0]; // 資料轉移
allkeyindata[0]=9; // 寫入最低位元資料
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case5 敘述
break; // 跳離 switch-case 敘述
case(6): // 若按下小數點(A 按鈕)
{ // 進入 case6 敘述
dot=key_press_times; // 計算小數點位置
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
disp_dataprog(allkeyinval); // 給定顯示數值
} // 結束 case6 敘述
break; // 跳離 switch-case 敘述
case(0): // 若按下完成(C 按鈕)
{ // 進入 case0 敘述
} // 結束 case0 敘述
} // 結束 switch 敘述
if(key_press_times==0) // 已輸入四個數字
{ // 進入 if 敘述
allkeyindata[3]=0; // 輸入資料歸 0
allkeyindata[2]=0; // 輸入資料歸 0
allkeyindata[1]=0; // 輸入資料歸 0
allkeyindata[0]=0; // 輸入資料歸 0
dot=0; // 小數位數歸 0
key_press_times=4; // 按鈕按下次數回歸 4
delay1ms(10); // 呼叫延遲副程式
voltcontrol(allkeyinval);
// 呼叫電壓控制副程式,調整輸出電壓
} // 結束 if 敘述
} // 結束鍵盤輸入資料處理副程式
//====電壓控制副程式===============================================
void voltcontrol(float DAC_num) // 電壓控制副程式
53
{ // 進入電壓控制副程式
if(DAC_num<=voltmax) // 若設定輸出電壓小於等於 voltmax
{ // 進入 if 敘述
DACnum=allkeyinval*10000/628; // 設定輸出電壓二進位數值
DAC_control(DACnum); // 設定輸出電壓
disp_dataprog(DAC_num); // 給定顯示數值
} // 結束 if 敘述
else
// 若設定輸出電壓大於 16.02V,設定電壓過高
{ // 進入 else 敘述
allkeyindata[3]=0; // 輸入資料歸 0
allkeyindata[2]=0; // 輸入資料歸 0
allkeyindata[1]=0; // 輸入資料歸 0
allkeyindata[0]=0; // 輸入資料歸 0
dot=0; // 小數位數歸 0
key_press_times=4; // 按鈕按下次數回歸 4
allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat
a[0])/pow(10,dot);
/*執行加權運算並考慮小數*/
voltcontrol(allkeyinval); // 呼叫電壓控制副程式
} // 結束 else 敘述
} // 結束電壓控制副程式
//====七段顯示資料處理副程式========================================
void disp_dataprog(float disp_data) // 七段顯示資料處理副程式
{ // 進入資料處理函數
if(((int)disp_data/1000)%10!=0) // 若千位數不為 0(即數值為 X---)
{ // 進入 if 敘述
int value=disp_data; // 宣告 value=disp_data
disp[3]=TAB[(value/1000)%10]; // 取得千位數
disp[2]=TAB[(value/100)%10]; // 取得百位數
disp[1]=TAB[(value/10)%10]; // 取得十位數
disp[0]=TAB[(value/1)%10]; // 取得個位數
} // 結束 if 敘述
else // 判斷若千位數為 0
{ // 則進入 else if 敘述
if(((int)disp_data/100)%10!=0)
// 判斷若百位數不為 0(即數值為 0X--.-)
{ // 進入 if 敘述
54
int value=disp_data*10; // 宣告 value 為 disp_data 的 10 倍
disp[3]=TAB[(value/1000)%10]; // 取得百位數
disp[2]=TAB[(value/100)%10]; // 取得十位數
disp[1]=(TAB[(value/10)%10]-0x80); // 取得個位數和小數點
disp[0]=TAB[(value/1)%10]; // 取得十分位數
//顯示出 XXX.X
} // 結束 if 敘述
else // 若百位數為 0
{ // 進入 else 敘述
if(((int)disp_data/10)%10!=0)
// 若十位數值不為 0(即數值為 00X-.--)
{ // 進入 if 敘述
int value=disp_data*100; // 宣告 value 為 disp_data 的 100 倍
disp[3]=TAB[(value/1000)%10]; // 取得十位數
disp[2]=(TAB[(value/100)%10]-0x80); // 取得個位數和小數點
disp[1]=TAB[(value/10)%10]; // 取得十分位數
disp[0]=TAB[(value/1)%10]; // 取得百分位數
//顯示出 XX.XX
} // 結束 if 敘述
else // 若十位數為 0
{ // 進入 else 敘述
int value=disp_data*1000; // 宣告 value 為 disp_data 的 1000 倍
disp[3]=(TAB[(value/1000)%10]-0x80);// 取得個位數和小數點
disp[2]=TAB[(value/100)%10]; // 取得十分位數
disp[1]=TAB[(value/10)%10]; // 取得百分位數
disp[0]=TAB[(value/1)%10]; // 取得千分位數
//顯示出 X.XXX
} // 結束 else 敘述
} // 結束 else 敘述
} // 結束 else 敘述
} // 結束資料處理函數
//====七段顯示器控制副程式==========================================
void display(void) // 七段顯示器控制副程式
{ // 七段顯示器控制副程式開始
char i,scan; // 宣告變數
char times=20; // 掃瞄 20 次
while (--times>=0) // while 迴圈開始
{ scan=1; // 初始掃瞄信號
55
for(i=0;i<4;i++) // for 敘述
{ // for 迴圈開始
SEG7P=0xff; // 關閉 7 節顯示器
SCANP=~scan; // 輸出掃瞄信號
SEG7P=disp[i]; // 轉換成驅動信號,並輸出到 P0
delay1ms(1); // 延遲 3ms
scan<<=1; // 下一個掃瞄信號
} // 結束 for 敘述
} // 結束 while 敘述
} // 七段顯示器控制副程式結束
//====防彈跳副程式=================================================
void debouncer(void) // 進入防彈跳副程式
{ int i2; // 宣告整數變數 i,j
for (i2=0;i2<2400;i2++); // 連數 2400 次
} // 防彈跳函數結束
//====延遲函數====================================================
void delay1ms(char x) // 延遲函數
{ int i,j; // 宣告變數
for(i=0;i<x;i++) // 外迴圈
for(j=0;j<70;j++); // 內迴圈
} // 延遲函數結束
完整功能說明如下:
 開機時,七段顯示器顯示”0000”,輸出電壓為 0V
 開始設定輸出電壓:※一次輸入四位數字
 若欲設定輸出電壓為 5V,依序按下”5”、”.”、”0” 、”0” 、”0”,輸入完
成時七段顯示器上顯示”5.000”,輸出電壓為 5V±50mV。
 若欲設定輸出電壓為 3.3V,依序按下”3”、”.”、”3” 、”0” 、”0”,輸入
完成時七段顯示器上顯示”3.300”,輸出電壓為 3.3V±50mV。
 若欲設定輸出電壓為 1.23V,依序按下”1”、”.”、”2” 、”3” 、”0”,輸
入完成時七段顯示器上顯示”1.230”,輸出電壓約為 1.23V
 若欲設定輸出電壓為 3.456V,依序按下”3”、”.”、”4” 、”5” 、”6”,輸
入完成時七段顯示器上顯示”3.456”,輸出電壓約為 3.456V
56
(八) 使用器具:
表 11 使用器具表
品名 單位 數量 備註
萬用板 塊 1
又稱
電木 PC 板
電木萬用版
或使用感光電路板
尖嘴鉗 只 1 5”
斜口鉗 只 1 5”
三用電表 組 1 RH830L
電烙鐵 組 1 20W 或 30W 皆可
吸錫器 組 1
IC 線上燒錄板 組 1
資料來源:本研究者整理
(九) 使用材料:
表 12 使用材料表
品名 單位 數量 備註
IC
DAC0800 只 1
DAC08
、DAC0801
、DAC0802 亦可
89S51 單晶片 只 2 89C51、89S52 亦可
74922 只 1
MM54C922、MM74C922
皆可
OP Amp 741 只 2
μA741CP、CA741
、SN52741、LM741、
ST741、SN72741 皆可
IC 腳座
40P 只 2
提供 89S51
單晶片使用
18P 只 1
提供 74922
IC 使用
16P 只 1
提供 DAC0800
IC 使用
14P 只 1
提供 7404
IC 使用
8P 只 2 提供 741IC 使用
七段顯示器腳座 只 1
57
資料來源:本研究者整理
四位數七段顯示器 只 1 共陽
二極體 只 1 1N4001~1N4007 皆可
電阻器
100Ω,0.5W 只 8 棕黑棕金
1kΩ,0.5W 只 6 棕黑紅金
4.7kΩ,0.5W 只 4 黃紫紅金
100kΩ,0.5W 只 2 棕黑黃金
排阻 10kΩ 只 1
電晶體
2SA1015 只 4 PNP 型高頻用
TIP140 只 1
NPN 型
互補達靈頓功率電晶體
陶瓷電容器
30pF 只 4
0.01μF 只 1
0.1μF 只 2
石英晶體振盪器
12MHz 只 1
33 MHz 只 1
按鈕開關 只 4
指撥開關 只 1
導線 條 若干
銲錫 條 若干
58
(十) 實驗數據:
1、 達靈頓功率電晶體輸出測試:
(1) 無載電壓測試:
透過實驗測試圖二十一 電源供應器電路的運作效能,並記錄實驗數據;此實
驗數據以 0.5V 為間隔,藉由鍵盤控制使輸出的類比電壓逐漸增加。在無負載
(𝑅 𝐿 = ∞Ω)狀況下,設定 DAC0800 參考電流(IREF)為 3.3mA,且±𝑉𝑐𝑐 = ±18𝑉時測
得之數據如表 13 所示。
表 13 電源供應器實驗數據表(無負載)
輸入
電壓值(V)
二進位數值
輸出電壓
理論值(V)
實測
輸出值(V)
誤差(V) 誤差百分比(%)
0.5 00000111 0.428385417 0.44 0.06 13.63636364
1 00001111 0.91796875 0.942 0.058 6.157112527
1.5 00010111 1.407552083 1.443 0.057 3.95010395
2 00011111 1.897135417 1.944 0.056 2.880658436
2.5 00100111 2.38671875 2.46 0.04 1.62601626
3 00101111 2.876302083 2.96 0.04 1.351351351
3.5 00110111 3.365885417 3.46 0.04 1.156069364
4 00111111 3.85546875 3.96 0.04 1.01010101
4.5 01000111 4.345052083 4.48 0.02 0.446428571
5 01001111 4.834635417 4.98 0.02 0.401606426
5.5 01010111 5.32421875 5.48 0.02 0.364963504
6 01011111 5.813802083 5.98 0.02 0.334448161
6.5 01100111 6.303385417 6.49 0.01 0.154083205
7 01101111 6.79296875 6.99 0.01 0.143061516
7.5 01110111 7.282552083 7.49 0.01 0.133511348
8 01111111 7.772135417 7.99 0.01 0.125156446
8.5 10000111 8.26171875 8.51 -0.01 -0.117508813
9 10001111 8.751302083 9.01 -0.01 -0.110987791
9.5 10010111 9.240885417 9.51 -0.01 -0.105152471
10 10011111 9.73046875 10.01 -0.01 -0.0999001
10.5 10100111 10.22005208 10.52 -0.02 -0.190114068
11 10101111 10.70963542 11.02 -0.02 -0.181488203
11.5 10110111 11.19921875 11.52 -0.02 -0.173611111
12 10111111 11.68880208 12.02 -0.02 -0.166389351
12.5 11000111 12.17838542 12.54 -0.04 -0.318979266
13 11001111 12.66796875 13.04 -0.04 -0.306748466
59
13.5 11010110 13.09635417 13.47 0.03 0.222717149
14 11011110 13.5859375 13.97 0.03 0.214745884
14.5 11100110 14.07552083 14.48 0.02 0.138121547
15 11101110 14.56510417 14.98 0.02 0.133511348
15.5 11110110 15.0546875 15.48 0.02 0.129198966
16 11111110 15.54427083 15.97 0.03 0.187852223
資料來源:本研究者整理
(2) 輕載電壓測試:
採用 1kΩ 電阻作為電源供應器輸出負載,測得實驗數據如表 14。
表 14 電源供應器實驗數據表(輕載)
輸入
電壓值(V)
二進位數值
輸出電壓
理論值(V)
實測
輸出值(V)
誤差(V) 誤差百分比(%)
0.5 00000111 0.428385417 0.44 0.06 13.63636364
1 00001111 0.91796875 0.941 0.059 6.269925611
1.5 00010111 1.407552083 0.793 0.707 89.15510719
2 00011111 1.897135417 0.84 1.16 138.0952381
2.5 00100111 2.38671875 0.83 1.67 201.2048193
3 00101111 2.876302083 0.83 2.17 261.4457831
3.5 00110111 3.365885417 0.77 2.73 354.5454545
4 00111111 3.85546875 0.78 3.22 412.8205128
4.5 01000111 4.345052083 1.16 3.34 287.9310345
5 01001111 4.834635417 1.42 3.58 252.1126761
5.5 01010111 5.32421875 1.52 3.98 261.8421053
6 01011111 5.813802083 2.09 3.91 187.0813397
6.5 01100111 6.303385417 2.48 4.02 162.0967742
7 01101111 6.79296875 2.99 4.01 134.1137124
7.5 01110111 7.282552083 3.6 3.9 108.3333333
8 01111111 7.772135417 3.85 4.15 107.7922078
8.5 10000111 8.26171875 4.46 4.04 90.58295964
9 10001111 8.751302083 5.02 3.98 79.28286853
9.5 10010111 9.240885417 5.55 3.95 71.17117117
10 10011111 9.73046875 6.06 3.94 65.01650165
10.5 10100111 10.22005208 6.54 3.96 60.55045872
11 10101111 10.70963542 7.09 3.91 55.14809591
11.5 10110111 11.19921875 7.66 3.84 50.1305483
60
12 10111111 11.68880208 8.21 3.79 46.16321559
12.5 11000111 12.17838542 8.77 3.73 42.5313569
13 11001111 12.66796875 9.3 3.7 39.78494624
13.5 11010110 13.09635417 9.75 3.75 38.46153846
14 11011110 13.5859375 10.26 3.74 36.45224172
14.5 11100110 14.07552083 10.78 3.72 34.50834879
15 11101110 14.56510417 11.31 3.69 32.62599469
15.5 11110110 15.0546875 11.9 3.6 30.25210084
16 11111110 15.54427083 13.63 2.37 17.38811445
資料來源:本研究者整理
2、 增強型 N 通道 MOSFET 測試:
(1) 輕載測試:
將電路中的達靈頓功率電晶體改用 IRF540、IRF740 與、IRF530 等增強
型 N 通道 MOSFET 後,於輕載(負載為 1kΩ)狀況下進行測量,輸入電源
±𝑉𝑐𝑐同樣為 ± 18,實驗數據如表 15。
表 15 電源供應器實驗數據表(輕載)
輸出電壓
設定值(v)
IRF540
輸出電壓(V)
IRF740
輸出電壓(V)
IRF530
輸出電壓(V)
0.000 0.0056 0.0054 0.0057
0.500 0.44 0.442 0.442
1.000 0.95 0.944 0.943
1.500 1.45 1.446 1.444
2.000 1.95 1.947 1.946
2.500 2.46 2.46 2.46
3.000 2.95 2.96 2.96
3.500 2.09 3.46 3.46
4.000 2.62 3.96 3.96
4.500 3.95 4.48 4.48
5.000 4.28 4.98 4.98
5.500 5.48 5.48 5.48
6.000 5.98 5.97 5.98
6.500 6.49 6.48 6.49
7.000 6.99 6.98 6.99
7.500 7.49 7.48 7.49
8.000 8.00 7.98 7.99
61
8.500 8.51 8.50 8.51
9.000 9.01 9.00 9.01
9.500 9.51 9.51 9.51
10.00 10.01 10.01 10.01
10.50 10.52 10.52 10.52
11.00 11.02 11.02 11.02
11.50 11.53 11.52 11.52
12.00 12.02 12.02 12.02
12.50 12.54 12.54 12.53
13.00 13.04 13.04 13.03
13.50 13.48 13.48 13.47
14.00 13.89 13.97 13.97
14.50 13.83 14.48 14.36
15.00 13.83 14.96 14.36
15.50 13.83 14.99 14.36
16.00 13.82 14.99 14.36
資料來源:本研究者整理
(2) 重載測試:
採用 IRF740 作為電流放大元件,表 16 為負載電阻 4Ω 狀況下測得之實
驗數據。
表 16 電源供應器實驗數據表(重載)
輸出電壓
設定值(v)
負載 4Ω
輸出電壓
(V)
負載 4Ω 輸出電流(A)
總輸出功率(W)
電晶體功率(W)
理論值 實測值 理論值 實測值
0.000 0 0 0 0 0 0
0.500 0.44 0.125 0.1 0.044 2.1875 1.756
1.000 0.94 0.25 0.22 0.2068 4.25 3.7532
1.500 1.43 0.375 0.34 0.4862 6.1875 5.6338
2.000 1.94 0.5 0.45 0.873 8 7.227
2.500 2.44 0.625 0.57 1.3908 9.6875 8.8692
3.000 2.94 0.75 0.69 2.0286 11.25 10.3914
3.500 3.45 0.875 0.8 2.76 12.6875 11.64
4.000 3.95 1 0.92 3.634 14 12.926
4.500 4.47 1.125 1.04 4.6488 15.1875 14.0712
5.000 4.98 1.25 1.16 5.7768 16.25 15.1032
5.500 5.48 1.375 1.27 6.9596 17.1875 15.9004
62
6.000 5.99 1.5 1.39 8.3261 18 16.6939
6.500 6.51 1.625 1.51 9.8301 18.6875 17.3499
7.000 7.01 1.75 1.63 11.4263 19.25 17.9137
7.500 7.52 1.875 1.75 13.16 19.6875 18.34
8.000 8.03 2 1.87 15.0161 20 18.6439
8.500 8.56 2.125 1.99 17.0344 20.1875 18.7856
9.000 9.08 2.25 2.11 19.1588 20.25 18.8212
資料來源:本研究者整理
(3) 動態負載測試:
電源供應器輸出電壓固定下,當負載為可變大小之電阻,電流亦隨著
改變。以電晶體電路進行動態負載測試,電路圖如下:
(4)
(十一) 數據分析:
以表 13 之無載實驗數據,繪製顯示電壓與輸出電壓關係如圖三十六。
圖 36 顯示電壓值與輸出電壓關係(無載)
由上圖可知:採用 DAC0800 作為數位式電源供應器的數位-類比轉換元件,
並透過達靈頓電路降低輸出阻抗,在無載狀況下可獲得線性的電壓輸出。根據
表 13 計算平均誤差百分比為 1.145876952%。由表 14 的實驗數據進行輕載(以
1kΩ 電阻作為負載)狀況下的分析:圖三十七為顯示電壓值與輸出電壓關係。
0
2
4
6
8
10
12
14
16
18
0 2 4 6 8 10 12 14 16 18
顯示電壓值與輸出電壓關係
實測輸出值輸出電壓(V)
顯示
電壓值(V)
63
圖 37 顯示電壓值與輸出電壓關係(輕載)
由上圖可看出使用達靈頓功率電晶體仍具有明顯的負載效應,以負載 1kΩ
的情況下,輸出電壓平均下降 3.1848V;觀察曲線可得知:顯示電壓值從 1V 至
5V 輸出電壓下降情形逐漸明顯,而調整顯示電壓值大於 5V 時,輸出電壓大約
小於顯示電壓值 3~4V。
為降低負載效應,將電路中的達靈頓功率電晶體改用增強型 N 通道
MOSFET,本論文採用 IRF540、IRF740、IRF530 三種 MOSFET 進行實驗;於
輕載(負載為 1kΩ)下實驗結果記錄如表 15;根據表 15,IRF540 輸出電壓誤差百
分比為-6.890060792%,IRF740 輸出電壓誤差百分比為-1.339047107%,IRF530
輸出電壓誤差百分比為-1.771258789%,圖三十八為實驗結果輸出電壓曲線圖;
圖三十九為使用 IRF740 輕載狀況下輸出電壓的誤差曲線。
0
2
4
6
8
10
12
14
16
18
0 2 4 6 8 10 12 14 16 18
無載實測輸出值
負載為1kΩ實測輸出值
顯示電壓值與輸出電壓關係
顯示
電壓值(V)
輸出電壓(V)
64
圖 38 增強型 N 通道 MOSFET 電源供應器電壓輸出曲線
圖 39 IRF740 輸出電壓誤差曲線
由圖三十八可知,IRF540於3V至5.5V區間電壓出現較大誤差;而以IRF740
與 IRF530 比較,採用 IRF740 具有最佳效果的電壓輸出,最高輸出電壓可達 15V,
約較 IRF530 高 0.64V,輕載實驗照片如圖四十。
0
2
4
6
8
10
12
14
16
IRF540 輸出電壓(V)
IRF740 輸出電壓(V)
IRF530 輸出電壓(V)
-14
-12
-10
-8
-6
-4
-2
0
2
0 2 4 6 8 10 12 14 16
電壓誤差百分比電壓誤差百分比
輸出電壓(V)
輸出電壓(V)
電壓誤差百分比(%)
顯示
電壓值(V)
增強型 N 通道 MOSFET 電源供應器電壓輸出曲線
65
圖 40 輕載實驗照片
在重載測試中,採用場效應電晶體 IRF740 配合散熱片,測試其輸出高電流
時的效能;實驗數據表如表 16,重載輸出曲線圖如圖四十一。
圖 41 重載輸出曲線圖
0
2
4
6
8
10
12
0 5 10 15 20 25
負載1kΩ輸出電壓(V)
負載4Ω輸出電壓(V)
重載輸出曲線圖
顯示電壓值(V)
輸出電壓(V)
66
由圖四十一可知:IRF740 在負載為 4Ω 水泥電阻狀況下,在 0~9V 範圍中
仍能維持線性的電壓輸出,電壓誤差百分比平均值為 1.805737154%,比較同範
圍下負載為 1kΩ 電阻,電壓誤差百分比平均值為 1.762272737%;誤差僅增大
0.043464417%,負載效應極低。
參● 結論與展望
一、藉由實驗證實以 DAC0800 製作電源供應器的可行性。
二、採用增強型 N 通道 MOSFET 進行電流放大與輸出較達靈頓電路佳,具有
較低的負載效應。
三、在未來的發展與研究方向如下:
(一) 增加可調限流功能,於負載過載或短路時限制輸出電流。
(二) 能夠提高輸出電壓解析度,以更精確控制輸出電壓。
(三) 能夠與電腦連線,執行可程式控制電壓輸出。
任何電子電路的工作基礎皆來自電源;若沒有了電源,再完整、功能再
強大的電路亦無法運作。雖然可調式電源供應器在生活中沒有直接的運用,
但卻是實驗室中重要的利器之一。電源供應器的效能在電路開發實驗階段扮
演重要角色。所謂電源供應器的效能可分為電能供應能力、偵測能力、控制
能力與傳輸介面……等項目。本研究所製作之電源供應器電能供應方面輸出
電流可達 1A 以上,控制能力方面以八位元解析度調整輸出電壓 0~16V,未
來將以增加輸出電壓、電流與功率的偵測紀錄、可經由 USB 介面與電腦進行
資料傳輸……為研究方向,讓電源供應器有更豐富的功能。
67
肆● 引註資料
一、 江賢龍、周玉崑 著。基礎電子實習(2008 年 6 月初版)。台北:台科
大圖書股份有限公司。ISBN:986-129-331-0
二、 蔡朝洋、蔡承佑 著。電子學實習Ⅰ。台北:全華圖書股份有限公司。
ISBN:978-957-21-7955-0
三、 蔡朝洋、蔡承佑 著。電子學實習Ⅱ(2012 年 1 月初版一刷)。台北:
全華圖書股份有限公司。ISBN:978-957-21-8290-1
四、 蔡朝洋、蔡承佑 著。電子學Ⅱ(2012 年 1 月初版一刷)。台北:全華
圖書股份有限公司。ISBN:978-957-21-8351-9
五、 宋由禮、陳柏宏 著。電子學Ⅱ(2009 年 11 月初版六刷)。台北:旗立
資訊股份有限公司。ISBN:978-986-6208-69-0
六、 蔡朝洋 著(2006 年 6 月初版五刷)。電子電路實習。台北:全華科技
股份有限公司。ISBN:978-957-21-3441-2
七、 蔡朝洋 著(2010 年 12 月五版一刷)。電子電路實作技術。台北:全華
科技股份有限公司。ISBN:978-957-21-7869-0
八、 張志安、李志文、陳世昌 編著(2002 年 5 月初版,2005 年 6 月第三
版)。 電子電路實習。台北:台科大圖書股份有限公司。ISBN:
986797459-X
九、 張義和、王敏男、許宏昌、余春長 編著(2009 年 6 月三版)。例說
89S51-C語言 (第三版)。台北:新文京開發出版股份有限公司。ISBN:
978-986-236-086-6
十、 李華敏 編著(2011 年 3 月初版)。數位邏輯。台北:旗立資訊股份有
限公司。ISBN:978-986-6208-27-0
十一、 Roger L. Tokheim 著,陳進益、羅國維 譯(2009 年 10 月初版二刷)。
數位邏輯設計-原理與應用第六版。台北:美商麥格羅‧希爾國際
股份有限公司 台灣分公司。ISBN:978-986-157-096-9
十二、 蔡栢樟 編著(2002 年 8 月初版再刷)。微電腦架構。台北:全華科技
圖書股份有限公司。ISBN:957-21-3578-3
十三、 AT89S51 datasheet:
http://www.datasheetcatalog.org/datasheet/atmel/doc2487.pdf
十四、 DAC0800 datasheet:
http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS005
686.PDF
十五、 七段顯示器接腳圖:
http://content.saihs.edu.tw/contentbook/shu_web/chapter_htm/chapter5/5
b/img/7segment-int.jpg
68
十六、 2SA1015 datasheet:
http://www.datasheetcatalog.org/datasheets/166/157040_DS.pdf
十七、 4049、4050 IC datasheet:
http://www.datasheetcatalog.org/datasheets2/65/65034_1.pdf
十八、 TIP120 datasheet:
http://www.datasheetcatalog.org/datasheet/stmicroelectronics/4128.pdf
十九、 TIP140 datasheet:
http://www.datasheetcatalog.org/datasheet/stmicroelectronics/4132.pdf
二十、 N 通道 MOSFET 電路符號:
http://www.globalspec.com/RefArticleImages/E2C6C843904D2CDC53
00B2691FDEF68F_9_09_01.gif
二十一、MM74C922 datasheet:
http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS00
6037.PDF
二十二、74AC574 datasheet:
http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics
/mXvuruu.pdf
69
伍● 附錄
一、單晶片控制程式編譯結果:
0000 : 02 01 39 E4 75 0B FF 75 0A FF F5 09 F5 08 E5 0D
0010 : 45 0C 70 0C 20 B3 09 12 01 1D 75 0C 00 75 0D 01
0020 : E5 0D 64 01 45 0C 70 0B 20 B3 08 12 01 1D E4 F5
0030 : 0C F5 0D AF 0B AE 0A AD 09 AC 08 12 01 2C 8F 90
0040 : 8F 80 7F C8 7E 00 12 00 F7 20 B0 4D 12 01 1D E4
0050 : FA F9 F8 E5 0B 24 01 F5 0B EA 35 0A F5 0A E9 35
0060 : 09 F5 09 E8 35 08 F5 08 E5 0D 64 01 45 0C 70 29
0070 : F5 0E F5 0F C3 E5 0F 94 F4 E5 0E 64 80 94 81 50
0080 : 18 12 00 F1 C2 B2 12 00 F3 05 0F E5 0F 85 0E 0E
0090 : 70 02 05 0E 14 F5 0F 80 DB 30 B1 03 02 00 0E 12
00A0 : 01 1D E5 0B 24 FF F5 0B E5 0A 34 FF F5 0A E5 09
00B0 : 34 FF F5 09 E5 08 34 FF F5 08 E5 0D 64 01 45 0C
00C0 : 60 03 02 00 0E F5 0E F5 0F C3 E5 0F 94 F4 E5 0E
00D0 : 64 80 94 81 40 03 02 00 0E 12 00 F1 C2 B2 12 00
00E0 : F3 05 0F E5 0F 85 0E 0E 70 02 05 0E 14 F5 0F 80
00F0 : D8 D2 B2 7F 01 7E 00 E4 FD FC C3 ED 9F EE 64 80
0100 : F8 EC 64 80 98 50 15 E4 FB FA 0B BB 00 01 0A EB
0110 : 64 78 4A 70 F5 0D BD 00 01 0C 80 DE 22 E4 FF FE
0120 : 0F BF 00 01 0E BE 09 F8 BF 60 F5 22 CF F4 CF CE
0130 : F4 CE CD F4 CD CC F4 CC 22 78 7F E4 F6 D8 FD 75
0140 : 81 0F 02 00 03 FF FF FF FF FF FF FF FF FF FF FF
0150 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
二、單晶片解碼程式編譯結果:
0000 : 02 01 3E 8F 82 8E 83 7C 00 7D 3A 12 01 CA EF 24
0010 : 3E FD EE 34 FF AB 05 FA C3 EF 94 C2 EE 94 00 50
0020 : 0D 75 13 FF 75 12 40 75 11 C0 75 10 C0 22 7C 03
0030 : 7D E8 AF 03 AE 02 12 01 DC C3 EF 94 0A EE 94 00
0040 : 50 62 7C 00 7D 0A 12 01 DC 74 AE 2D F5 82 74 02
0050 : 3C F5 83 E4 93 24 80 F5 13 7C 00 7D 64 AF 03 AE
0060 : 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D F5 82
0070 : 74 02 3C F5 83 E4 93 F5 12 7C 00 7D 0A AF 03 AE
0080 : 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D F5 82
0090 : 74 02 3C F5 83 E4 93 F5 11 7C 00 7D 0A AF 03 AE
70
00A0 : 02 02 01 2C 7C 03 7D E8 AF 03 AE 02 12 01 DC C3
00B0 : EF 94 0A EE 94 00 50 03 02 01 3D 7C 27 7D 10 AF
00C0 : 03 AE 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D
00D0 : F5 82 74 02 3C F5 83 E4 93 F5 13 7C 03 7D E8 AF
00E0 : 03 AE 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D
00F0 : F5 82 74 02 3C F5 83 E4 93 24 80 F5 12 7C 00 7D
0100 : 64 AF 03 AE 02 12 01 DC 7C 00 7D 0A 12 01 DC 74
0110 : AE 2D F5 82 74 02 3C F5 83 E4 93 F5 11 AE 02 AF
0120 : 03 7C 00 7D 0A 12 01 DC 7C 00 7D 0A 12 01 DC 74
0130 : AE 2D F5 82 74 02 3C F5 83 E4 93 F5 10 22 78 7F
0140 : E4 F6 D8 FD 75 81 13 02 01 85 02 02 9F E4 93 A3
0150 : F8 E4 93 A3 40 03 F6 80 01 F2 08 DF F4 80 29 E4
0160 : 93 A3 F8 54 07 24 0C C8 C3 33 C4 54 0F 44 20 C8
0170 : 83 40 04 F4 56 80 01 46 F6 DF E4 80 0B 01 02 04
0180 : 08 10 20 40 80 90 02 B8 E4 7E 01 93 60 BC A3 FF
0190 : 54 3F 30 E5 09 54 1F FE E4 93 A3 60 01 0E CF 54
01A0 : C0 25 E0 60 A8 40 B8 E4 93 A3 FA E4 93 A3 F8 E4
01B0 : 93 A3 C8 C5 82 C8 CA C5 83 CA F0 A3 C8 C5 82 C8
01C0 : CA C5 83 CA DF E9 DE E7 80 BE EF 8D F0 A4 A8 F0
01D0 : CF 8C F0 A4 28 CE 8D F0 A4 2E FE 22 BC 00 0B BE
01E0 : 00 29 EF 8D F0 84 FF AD F0 22 E4 CC F8 75 F0 08
01F0 : EF 2F FF EE 33 FE EC 33 FC EE 9D EC 98 40 05 FC
0200 : EE 9D FE 0F D5 F0 E9 E4 CE FD 22 ED F8 F5 F0 EE
0210 : 84 20 D2 1C FE AD F0 75 F0 08 EF 2F FF ED 33 FD
0220 : 40 07 98 50 06 D5 F0 F2 22 C3 98 FD 0F D5 F0 EA
0230 : 22 75 0C 14 E4 F5 0D F5 0E 15 0C C3 E5 0C 64 80
0240 : 94 80 40 2E 75 0B 01 E4 F5 0A C3 E5 0A 64 80 94
0250 : 84 50 E6 75 A0 FF E5 0B F4 F5 90 74 10 25 0A F8
0260 : E6 F5 A0 7F 01 12 02 73 E5 0B 25 E0 F5 0B 05 0A
0270 : 80 D8 22 E4 FD FC EF FB 33 95 E0 FA C3 ED 9B EA
0280 : 64 80 F8 EC 64 80 98 50 15 E4 FB FA 0B BB 00 01
0290 : 0A EB 64 46 4A 70 F5 0D BD 00 01 0C 80 D8 22 12
02A0 : 02 31 85 80 0F AF 0F 7E 00 12 00 03 80 F1 C0 F9
02B0 : A4 B0 99 92 82 F8 80 90 04 10 00 00 00 00 00 FF
02C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
三、電源供應器雙單晶片控制電路圖:
71

More Related Content

What's hot

Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013
Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013
Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013Simen Li
 
Deep Sleep Mode on Microchip PIC18F and PIC24F MCUs
Deep Sleep Mode on Microchip PIC18F and PIC24F MCUsDeep Sleep Mode on Microchip PIC18F and PIC24F MCUs
Deep Sleep Mode on Microchip PIC18F and PIC24F MCUsPremier Farnell
 
Igbt gate driver power supply flyback converter
Igbt gate driver power supply flyback converterIgbt gate driver power supply flyback converter
Igbt gate driver power supply flyback converterKunwar Aditya
 
Amplificador darlington de até 500 watts
Amplificador darlington de até 500 wattsAmplificador darlington de até 500 watts
Amplificador darlington de até 500 wattsGrilo Deus
 
電路學 - [第一章] 電路元件與基本定律
電路學 - [第一章] 電路元件與基本定律電路學 - [第一章] 電路元件與基本定律
電路學 - [第一章] 電路元件與基本定律Simen Li
 
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)Simen Li
 
IC Design of Power Management Circuits (I)
IC Design of Power Management Circuits (I)IC Design of Power Management Circuits (I)
IC Design of Power Management Circuits (I)Claudia Sin
 
2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學
2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學
2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學ssuser29f076
 
Generator protection gers
Generator protection gersGenerator protection gers
Generator protection gersHabudin Hassan
 
Effect of change in burden and power factor on CTs
Effect of change in burden and power factor on  CTsEffect of change in burden and power factor on  CTs
Effect of change in burden and power factor on CTsManish Sadhu
 
射頻電子 - [實驗第二章] I/O電路設計
射頻電子 - [實驗第二章] I/O電路設計射頻電子 - [實驗第二章] I/O電路設計
射頻電子 - [實驗第二章] I/O電路設計Simen Li
 
Bandgap Reference circuit Baased on FinFET Device
Bandgap Reference circuit Baased on FinFET DeviceBandgap Reference circuit Baased on FinFET Device
Bandgap Reference circuit Baased on FinFET DeviceYalagoud Patil
 
Rectificadores_controlados (1).pdf
Rectificadores_controlados (1).pdfRectificadores_controlados (1).pdf
Rectificadores_controlados (1).pdfCesar Gil Arrieta
 
monostable Multivibrators electronic topic
monostable Multivibrators electronic topicmonostable Multivibrators electronic topic
monostable Multivibrators electronic topicUCP
 
Solutions manual for microelectronic circuits analysis and design 3rd edition...
Solutions manual for microelectronic circuits analysis and design 3rd edition...Solutions manual for microelectronic circuits analysis and design 3rd edition...
Solutions manual for microelectronic circuits analysis and design 3rd edition...Gallian394
 
Auto synch considerations methods
Auto synch considerations methodsAuto synch considerations methods
Auto synch considerations methodsmichaeljmack
 
Fabrication of Floating Gate MOS (FLOTOX)
Fabrication of Floating Gate MOS (FLOTOX)Fabrication of Floating Gate MOS (FLOTOX)
Fabrication of Floating Gate MOS (FLOTOX)Sudhanshu Janwadkar
 

What's hot (20)

STAN Tool overview
STAN Tool overviewSTAN Tool overview
STAN Tool overview
 
電路學Chapter5
電路學Chapter5電路學Chapter5
電路學Chapter5
 
Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013
Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013
Voltage Controlled Oscillator Design - Short Course at NKFUST, 2013
 
Deep Sleep Mode on Microchip PIC18F and PIC24F MCUs
Deep Sleep Mode on Microchip PIC18F and PIC24F MCUsDeep Sleep Mode on Microchip PIC18F and PIC24F MCUs
Deep Sleep Mode on Microchip PIC18F and PIC24F MCUs
 
Igbt gate driver power supply flyback converter
Igbt gate driver power supply flyback converterIgbt gate driver power supply flyback converter
Igbt gate driver power supply flyback converter
 
Amplificador darlington de até 500 watts
Amplificador darlington de até 500 wattsAmplificador darlington de até 500 watts
Amplificador darlington de até 500 watts
 
電路學 - [第一章] 電路元件與基本定律
電路學 - [第一章] 電路元件與基本定律電路學 - [第一章] 電路元件與基本定律
電路學 - [第一章] 電路元件與基本定律
 
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
 
IC Design of Power Management Circuits (I)
IC Design of Power Management Circuits (I)IC Design of Power Management Circuits (I)
IC Design of Power Management Circuits (I)
 
2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學
2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學
2024 SIMPLIS 系列課程 _ SIMPLIS電路模擬軟體的基礎操作教學
 
Generator protection gers
Generator protection gersGenerator protection gers
Generator protection gers
 
Effect of change in burden and power factor on CTs
Effect of change in burden and power factor on  CTsEffect of change in burden and power factor on  CTs
Effect of change in burden and power factor on CTs
 
射頻電子 - [實驗第二章] I/O電路設計
射頻電子 - [實驗第二章] I/O電路設計射頻電子 - [實驗第二章] I/O電路設計
射頻電子 - [實驗第二章] I/O電路設計
 
Bandgap Reference circuit Baased on FinFET Device
Bandgap Reference circuit Baased on FinFET DeviceBandgap Reference circuit Baased on FinFET Device
Bandgap Reference circuit Baased on FinFET Device
 
Rectificadores_controlados (1).pdf
Rectificadores_controlados (1).pdfRectificadores_controlados (1).pdf
Rectificadores_controlados (1).pdf
 
monostable Multivibrators electronic topic
monostable Multivibrators electronic topicmonostable Multivibrators electronic topic
monostable Multivibrators electronic topic
 
Solutions manual for microelectronic circuits analysis and design 3rd edition...
Solutions manual for microelectronic circuits analysis and design 3rd edition...Solutions manual for microelectronic circuits analysis and design 3rd edition...
Solutions manual for microelectronic circuits analysis and design 3rd edition...
 
Auto synch considerations methods
Auto synch considerations methodsAuto synch considerations methods
Auto synch considerations methods
 
Fabrication of Floating Gate MOS (FLOTOX)
Fabrication of Floating Gate MOS (FLOTOX)Fabrication of Floating Gate MOS (FLOTOX)
Fabrication of Floating Gate MOS (FLOTOX)
 
R elays ansi
R elays ansiR elays ansi
R elays ansi
 

Similar to 可調式電源供應器之研究

產品簡介 創盟電子 2015_v1.0c
產品簡介 創盟電子 2015_v1.0c產品簡介 創盟電子 2015_v1.0c
產品簡介 創盟電子 2015_v1.0cLee Leo
 
Greatwall DC-DC converter(power supply) for digital taxi led display
Greatwall DC-DC  converter(power supply) for digital taxi led displayGreatwall DC-DC  converter(power supply) for digital taxi led display
Greatwall DC-DC converter(power supply) for digital taxi led displayMax Dan
 
Power electronics final report
Power electronics final reportPower electronics final report
Power electronics final reporteeslide
 
USB Wall charger
 USB Wall charger USB Wall charger
USB Wall chargerLibby luo
 
穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例
穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例
穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例Chen-Hung Hu
 
LED Display screen power supply catalog-changzhou chenglian power supply
LED Display screen power supply catalog-changzhou chenglian power supplyLED Display screen power supply catalog-changzhou chenglian power supply
LED Display screen power supply catalog-changzhou chenglian power supplyJessica Yuan
 
自動功因改善裝置之研究
自動功因改善裝置之研究自動功因改善裝置之研究
自動功因改善裝置之研究Chen-Hung Hu
 
Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...
Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...
Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...AUTHELECTRONIC
 
交流电源的高压直流直供可行性分析
交流电源的高压直流直供可行性分析交流电源的高压直流直供可行性分析
交流电源的高压直流直供可行性分析ensoli
 

Similar to 可調式電源供應器之研究 (20)

產品簡介 創盟電子 2015_v1.0c
產品簡介 創盟電子 2015_v1.0c產品簡介 創盟電子 2015_v1.0c
產品簡介 創盟電子 2015_v1.0c
 
Greatwall DC-DC converter(power supply) for digital taxi led display
Greatwall DC-DC  converter(power supply) for digital taxi led displayGreatwall DC-DC  converter(power supply) for digital taxi led display
Greatwall DC-DC converter(power supply) for digital taxi led display
 
Power electronics final report
Power electronics final reportPower electronics final report
Power electronics final report
 
USB Wall charger
 USB Wall charger USB Wall charger
USB Wall charger
 
Dvp 06 xa
Dvp 06 xaDvp 06 xa
Dvp 06 xa
 
Sr868a cn-20100110
Sr868a cn-20100110Sr868a cn-20100110
Sr868a cn-20100110
 
Sf 02S201test
Sf 02S201testSf 02S201test
Sf 02S201test
 
Sf 02S201test
Sf 02S201testSf 02S201test
Sf 02S201test
 
Sf 02S201test
Sf 02S201testSf 02S201test
Sf 02S201test
 
穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例
穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例
穩壓元件及其相關迴路之研究 --以可調式輸出電源供應器為例
 
S3c2410a 16adc
S3c2410a 16adcS3c2410a 16adc
S3c2410a 16adc
 
電路學第八章 交流穩態分析二
電路學第八章 交流穩態分析二電路學第八章 交流穩態分析二
電路學第八章 交流穩態分析二
 
LED Display screen power supply catalog-changzhou chenglian power supply
LED Display screen power supply catalog-changzhou chenglian power supplyLED Display screen power supply catalog-changzhou chenglian power supply
LED Display screen power supply catalog-changzhou chenglian power supply
 
自動功因改善裝置之研究
自動功因改善裝置之研究自動功因改善裝置之研究
自動功因改善裝置之研究
 
PLC: honeywell gr-4c dc24v Relay
 PLC: honeywell gr-4c dc24v Relay  PLC: honeywell gr-4c dc24v Relay
PLC: honeywell gr-4c dc24v Relay
 
Gkdq5
Gkdq5Gkdq5
Gkdq5
 
Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...
Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...
Original NPN Transistor 3DD304X D304X 304 12A 400V TO-220 New SINO-MICROELECT...
 
PA linearity
PA linearityPA linearity
PA linearity
 
Power on-sequence
Power on-sequencePower on-sequence
Power on-sequence
 
交流电源的高压直流直供可行性分析
交流电源的高压直流直供可行性分析交流电源的高压直流直供可行性分析
交流电源的高压直流直供可行性分析
 

More from Chen-Hung Hu

ParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfChen-Hung Hu
 
淺談電腦檔案系統概念
淺談電腦檔案系統概念淺談電腦檔案系統概念
淺談電腦檔案系統概念Chen-Hung Hu
 
【智慧核心-CPU】第三節:負數、小數的修正機制
【智慧核心-CPU】第三節:負數、小數的修正機制【智慧核心-CPU】第三節:負數、小數的修正機制
【智慧核心-CPU】第三節:負數、小數的修正機制Chen-Hung Hu
 
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼【智慧核心-CPU】第二節:正整數進位制的轉換-編碼
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼Chen-Hung Hu
 
漫談七段顯示器
漫談七段顯示器漫談七段顯示器
漫談七段顯示器Chen-Hung Hu
 
BJT Transistor分壓偏壓電路分析
BJT Transistor分壓偏壓電路分析BJT Transistor分壓偏壓電路分析
BJT Transistor分壓偏壓電路分析Chen-Hung Hu
 
淺談類比-數位轉換器
淺談類比-數位轉換器淺談類比-數位轉換器
淺談類比-數位轉換器Chen-Hung Hu
 
感光元件及其相關迴路之研究 --以光敏電阻為例
感光元件及其相關迴路之研究 --以光敏電阻為例感光元件及其相關迴路之研究 --以光敏電阻為例
感光元件及其相關迴路之研究 --以光敏電阻為例Chen-Hung Hu
 
Adc0804及其相關迴路之研究
Adc0804及其相關迴路之研究Adc0804及其相關迴路之研究
Adc0804及其相關迴路之研究Chen-Hung Hu
 
HC 05藍芽模組連線
HC 05藍芽模組連線HC 05藍芽模組連線
HC 05藍芽模組連線Chen-Hung Hu
 

More from Chen-Hung Hu (10)

ParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdf
 
淺談電腦檔案系統概念
淺談電腦檔案系統概念淺談電腦檔案系統概念
淺談電腦檔案系統概念
 
【智慧核心-CPU】第三節:負數、小數的修正機制
【智慧核心-CPU】第三節:負數、小數的修正機制【智慧核心-CPU】第三節:負數、小數的修正機制
【智慧核心-CPU】第三節:負數、小數的修正機制
 
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼【智慧核心-CPU】第二節:正整數進位制的轉換-編碼
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼
 
漫談七段顯示器
漫談七段顯示器漫談七段顯示器
漫談七段顯示器
 
BJT Transistor分壓偏壓電路分析
BJT Transistor分壓偏壓電路分析BJT Transistor分壓偏壓電路分析
BJT Transistor分壓偏壓電路分析
 
淺談類比-數位轉換器
淺談類比-數位轉換器淺談類比-數位轉換器
淺談類比-數位轉換器
 
感光元件及其相關迴路之研究 --以光敏電阻為例
感光元件及其相關迴路之研究 --以光敏電阻為例感光元件及其相關迴路之研究 --以光敏電阻為例
感光元件及其相關迴路之研究 --以光敏電阻為例
 
Adc0804及其相關迴路之研究
Adc0804及其相關迴路之研究Adc0804及其相關迴路之研究
Adc0804及其相關迴路之研究
 
HC 05藍芽模組連線
HC 05藍芽模組連線HC 05藍芽模組連線
HC 05藍芽模組連線
 

可調式電源供應器之研究

  • 2. 摘要 不論是在電學相關的實習課程,或是電路實驗開發的領域,工業自動化、醫療儀器、 電力設備,以及生活中各式各樣的電子產品;想要讓電路穩定而正常的運作,高品質的 電源是不可或缺的重要因素。穩定的電源供給才能使電路發揮高效能。為了精準控制輸 出電壓,本篇論文主要探討以 D/A 轉換方式實現可調式電源的原理與可行性,以數位鍵 盤輸入的方式調節輸出電壓大小,改善一般類比控制式電源供應器以旋鈕控制精確性的 不足,同時考慮 DAC 解析度對於輸出電壓解析度的影響,與負載效應改善之研究;以期 製作出一台數位式可調電源供應器,並增進對於電路相關理論與實作的認知。 關鍵字:可調式電源供應器、D/A 轉換電路、達靈頓電路、負載效應
  • 3. 1 壹● 前言 一、 研究大綱: 數 位 式 可 調 電 源 供 應 器 之 研 究 壹●前言 三、研究方法與流程 一、研究大綱 二、研究動機 四、研究範圍與方向 參●結論 肆●引註資料 貳●正文 一、直流電源 供應器的認識 (一)穩壓電路 (二)限流電路二、DAC 轉換電路 的認識 三、應用電路 (三) D/A 與解碼電路 之整合 (四) 鍵盤掃描控制 (五) DAC 解析度之 探討與改善 (八) 使用器具 (二) 二進位-十進位 解碼顯示電路 (一) 數位-類比轉換 電路 (九) 使用材料 (十) 實驗數據 (十一) 數據分析 (六) 電流檢測電路 (七) 單晶片微電腦 I/O port 之擴充
  • 4. 2 二、研究動機: 在電學相關實習課程中,電源供應器是常用的儀器之一;而正確認識、使用 電源供應器是相當重要的技能。舊式工業電子丙級技能檢定題目為電源供應器, 以類比旋鈕的方式控制輸出電壓大小,其旋鈕為一可變電阻,藉由調整電阻值大 小,控制電源供應器輸出電壓之高低;在學習數位-類比轉換的相關章節時,想 到是否能透過數位的方式,控制電源供應器輸出電壓的大小,參考書上的說明, 實際自製一部直流電源供應器,同時印證理論的可行性,並針對問題進行改善。 三、研究方法與流程: 結合書籍上的原理及說明,並嘗試以數位-類比轉換的概念設計一部直流電 源供應器電路,探討其工作原理,觀察其運作效能,並完成實驗記錄及數據分析。 研究流程如下: 圖 1 專題研究流程圖 DAC0800轉換電路的 分析與實作 達靈頓電流放大電路 與數位-類比轉換電 路的結合 單晶片控制電路調節 輸出電壓 增加解碼電路顯示輸 出電壓值 74922鍵盤掃描調節 輸出電壓 探討並改善負載效應 對於效能的影響 研究多顆DAC0800增加 電壓調節解析度 電流檢測電路設計 以栓鎖緩衝器擴充 單晶片微電腦I/O port
  • 5. 3 四、研究範圍與方向: (一)何謂直流電源供應器? (二)數位式直流電源供應器內部電路為何? (三)如何以數位控制方式利用 D/A 轉換製作一台電源供應器? 貳● 正文 一、直流電源供應器的認識: 直流電源供應器(DC Power Supply)簡稱電源供應器,其功能為將交流市 電轉換為直流電,提供各式電子電路設備正常工作所需的穩定電源。與乾電池比 較,一般電池電力用罄需更換,而電源供應器可長時間供電。直流電源供應器依 供電形式可分為單電源型與雙電源型。單電源型的電源供應器,內部由可調式穩 壓電路和限流電路組成。(電子學實習Ⅰ,P18) (一)穩壓電路: 穩壓電路主要功能為產生使用者設定之電壓,並提供足量之電流供負 載使用。 (二)限流電路: 限流電路可防止電源供應器輸出過大的電流而導致電源供應器或負載 的損毀。例如在輸出端短路的情況下,若電源供應器沒有限流電路,則可 能導致穩壓元件被燒毀。 二、DAC 轉換電路的認識: 在電子電路設備中的信號處理,使用數位的方式進行處理,較類比的方式容 易,也較不易受到雜訊的干擾,不易失真,且穩定度較佳。但生活中大多物理量 皆為類比形式,因此完成處理的數位信號在輸出前,透過數位轉換類比電路(D/A 轉換器)轉換成類比信號後,再輸出。DAC0800 是可以將八位元二進位的數位信 號轉換成類比電流信號的積體電路,有 16 支接腳,需要有雙電源供應才可正常 工作,且與 TTL、CMOS 等電路相容,不需配合其他介面。根據 DAC0800 的資 料手冊,DAC0800 是低功耗的元件,最大消耗功率為 500mW,於±5V 電源供應 時只消耗 33mW 的功率。
  • 6. 4 圖 2 DAC0800 接腳圖 圖二為 DAC0800 的接腳圖。第 13 與第 3 接腳分別接正負電源(±Vcc),其工 作電壓範圍為±4.5V~±18V。第 5~12 接腳為二進制數位信號輸入端,第 12 接腳 為最低有效位元(LSB),第 5 接腳為最高有效位元(MSB)。其位元數 N 為 8,總 共有2 𝑁 = 28 =256 種不同數值。第 14 接腳外接參考電流𝐼 𝑅𝐸𝐹。 圖 3 DAC0800 內部方塊圖 圖三為 DAC0800 IC 的內部方塊圖,可知其內部電路由運算放大器、電晶體 與電阻等元件所組成。
  • 7. 5 三、應用電路 (一) 數位-類比轉換電路: 圖 4 D/A 轉換器電路圖 圖四為八位元 D/A 轉換器電路圖,其中𝑉+ 與𝑉− 分別連接+Vcc=15V 與 -Vcc=-15V 雙電源;R1、R2、R3 與 R4 皆使用碳膜電阻器 4.7 kΩ,0.5W;C1 使用 0.01μF 的陶瓷電容器。DAC0800 的第二、第四接腳輸出信號,連接至運算放大 器 741。運算放大器 741 於常溫下電源電壓最大額定值與 DAC0800 同為±18V, 其最大消耗功率為 310mW。若將 DAC0800 的 VREF(參考電壓端)連接至 Vcc,則 𝐼 𝑅𝐸𝐹(參考電流) = 𝑉𝑟𝑒𝑓 𝑅1 = 15𝑉 4.7𝑘 = 3.19148936 mA,輸出解析度電流為最低位元電 流變化量(𝐼𝐿𝑆𝐵) = 𝐼 𝑅𝐸𝐹 2 𝑁 = 𝐼 𝑅𝐸𝐹 256 =12.46675532μA。滿刻度輸出電流(𝐼 𝐹𝑆) = 𝐼 𝑅𝐸𝐹 2 𝑁 × 255 = 3.1790226mA。根據 DAC0800 的資料手冊,設計電路時,𝐼 𝑅𝐸𝐹(參考電流)之 最大值為 5mA,以𝑉𝑅𝐸𝐹為+15V 而言,𝑅1電阻器阻值不得小於 3KΩ。若將𝑉𝑅𝐸𝐹提 高為+18V,𝑅1電阻器阻值不得小於 3.6KΩ。
  • 8. 6 表 1 二進制數位輸入與輸出電流對應表 表 1 為數種二進制數值輸入 DAC0800 後,以 VREF=15V,R1=4.7 kΩ 的條件 下,輸出電流的計算值。輸出電流𝐼 𝑜𝑢𝑡 = 𝐼𝐿𝑆𝐵 × 二進制數值(D)。而由於 OPA 輸 入阻抗極大,以 μA741 為例,其輸入阻抗(Input Resistance)典型值為 2MΩ,(電 子學Ⅱ,P117),故𝐼 𝑜𝑢𝑡 ≅ 𝐼 𝑅3 ,所以𝐼 𝑜𝑢𝑡愈大,代表𝐼 𝑅3 愈大,在 Vcc 足夠大的情 況下,由歐姆定理𝑉𝑅3 = 𝐼 𝑅3 × 𝑅3可知:當𝐼 𝑅3 愈大,則𝑉𝑅3 愈大,即 Vout 愈大。 𝑉𝑜𝑢𝑡 = 𝐼𝐿𝑆𝐵 × 二進制數值(D) × 𝑅3 。最低位元電壓變化量(𝑉𝐿𝑆𝐵) = 𝐼𝐿𝑆𝐵 × 𝑅3 = 0.0585937485(V)。表 2 為二進制數位輸入與輸出電壓理論值(𝑉𝑜)的對應表。 二進制數位輸入(D) 十進制數值 輸出電流(mA) 0000000000 0 0 0000000001 1 0.012466755 0000000010 2 0.024933511 0000000011 3 0.037400266 0000000100 4 0.049867021 0000000101 5 0.062333777 0000000110 6 0.074800532 0000000111 7 0.087267287 0000001000 8 0.099734043 0000001001 9 0.112200798 0000001010 10 0.124667553 0000001011 11 0.137134309 0000001100 12 0.149601064 0000001101 13 0.162067819 0000001110 14 0.174534574 0000001111 15 0.18700133 0000010000 16 0.199468085 0000010001 17 0.21193484 0000010010 18 0.224401596 0000010011 19 0.236868351 0000010100 20 0.249335106 0000010101 21 0.261801862 0000010110 22 0.274268617 0000010111 23 0.286735372 0000011000 24 0.299202128 0000011001 25 0.311668883 資料來源:本研究者整理
  • 9. 7 表 2 二進制數位輸入與輸出電壓對應表 十進位數值 數位輸入數值 輸出電壓理論值(V) 7 00000111 0.41015625 15 00001111 0.87890625 23 00010111 1.34765625 31 00011111 1.81640625 39 00100111 2.28515625 47 00101111 2.75390625 55 00110111 3.22265625 63 00111111 3.69140625 71 01000111 4.16015625 79 01001111 4.62890625 87 01010111 5.09765625 95 01011111 5.56640625 103 01100111 6.03515625 111 01101111 6.50390625 119 01110111 6.97265625 127 01111111 7.44140625 135 10000111 7.91015625 143 10001111 8.37890625 151 10010111 8.84765625 159 10011111 9.31640625 167 10100111 9.78515625 175 10101111 10.25390625 183 10110111 10.72265625 191 10111111 11.19140625 199 11000111 11.66015625 207 11001111 12.12890625 215 11010111 12.59765625 223 11011111 13.06640625 231 11100111 13.53515625 239 11101111 14.00390625 247 11110111 14.47265625 255 11111111 14.94140625 資料來源:本研究者整理
  • 10. 8 在圖四的 D/A 轉換器電路圖中,開關(S)控制電壓輸出的範圍;將開關接通 (ON)時,電阻𝑅4被短接,為單極性電壓輸出;將開關斷路(OFF)時,為雙極性電 壓輸出。於電源供應器電路中,為單極性電壓輸出的應用,由於 OP Amp 741 的輸出電流最大只有 20mA,所以透過達靈頓電路(Darlington pair)高電流增益的 特性,進行電流放大後,即具有足夠的輸出使負載(𝑅 𝐿)正常工作。圖五即為 D/A 轉換器與達靈頓電路的組合。 圖 5 D/A 轉換與達靈頓電路 所謂達靈頓電路為兩個電晶體直接耦合組成的電路,達靈頓電路具有輸入阻 抗很高、輸出阻抗很低及高電流增益的優點,能夠將 OP Amp 741 輸出的微電流 進行高倍數的放大。組成達靈頓電路的電晶體應採用矽電晶體,鍺電晶體的漏電 電流甚大,且溫度特性不良。(電子學Ⅱ,P9)實際電路中,達靈頓電路可採用兩 個 獨 立 之 電 晶 體 組 成 ; 亦 可 採 用 互 補 達 靈 頓 功 率 電 晶 體 (Darlington Complementary Silicon Power Transistors),內部電路如圖六所示,其直流之 hFE 為 1000 以上(例說 89S51-C 語言 (第三版),P14-6);hFE = 𝐼 𝐶 𝐼 𝐵 = β,為共射極(CE) 組態電流增益(Ai)。 NPN 型 PNP 型 圖 6 互補達靈頓功率電晶體內部電路
  • 11. 9 NPN 型互補達靈頓功率電晶體有 2N6043、2N6044、2N6045、BD777、BDW42、 TIP120、TIP121、TIP122、TIP140、TIP141、TIP142……等;不同規格之電晶體 耐壓、PD(Ptot,最大集極功率損耗)……等元件特性皆不同,PD 定義為𝐼 𝐶 × 𝑉𝐶𝐸, 可知電晶體工作時的集極電流愈大、集射端電壓愈大,則電晶體集極功率損耗愈 大;根據資料手冊,2N6043、2N6044、2N6045 於室溫環境下可承受 75W 的功 率,隨著溫度上升額定 PD 下降,每上升 1℃,PD 下降 0.6W。BD777 於室溫環境 下可承受 15W 的功率,隨著溫度上升額定 PD 下降,每上升 1℃,PD 下降 0.12W。 BDW42 於室溫環境下可承受 85W 的功率,隨著溫度上升額定 PD 下降,每上升 1 ℃,PD 下降 0.68W。下表為部分 NPN 型互補達靈頓功率電晶體規格表。 表 3 NPN 型互補達靈頓功率電晶體規格表 編號 CB 兩端最大 開路電壓(VCBO) CE 兩端最大 開路電壓(VCEO) 集極最大電流(IC) 最大基極 電流(IB) 最大集極 功率損耗 (PD) 持續值 峰值 伏特(V) 伏特(V) 安培(A) 安培(A) 毫安培 (mA) 瓦(W) 2N6037 40 40 4 8 100 40 2N6038 60 60 4 8 100 40 2N6039 80 80 4 8 100 40 2N6043 60 60 8 16 120 75 2N6044 80 80 8 16 120 75 2N6045 100 100 8 16 120 75 BD777 60 60 4 6 100 15 BDW42 100 100 15 500 85 TIP120 60 60 5 8 100 65 TIP121 80 80 5 8 100 65 TIP122 100 100 5 8 100 65 TIP140 60 60 10 20 500 125 TIP141 80 80 10 20 500 125 TIP142 100 100 10 20 500 125 2N6057 60 60 12 20 200 150 2N6058 80 80 12 20 200 150 2N6059 100 100 12 20 200 150 2N6282 60 60 20 40 500 160 2N6283 80 80 20 40 500 160 2N6284 100 100 20 40 500 160 資料來源:本研究者整理
  • 12. 10 根據資料手冊,常用的 NPN 型互補達靈頓功率電晶體 TIP120 系列的直流電 流增益(DC Current Gain,hFE)在集極電流(𝐼 𝐶)=0.5A,集射電位差(𝑉𝐶𝐸)=3V 的條 件下,最小值為 1000;在集極電流(𝐼 𝐶)=3A,集射電位差(𝑉𝐶𝐸)=3V 的條件下,最 小值亦為 1000;可得知其 hFE 值穩定,受𝐼 𝐶影響小。功率較大的 TIP140 系列, 其直流電流增益(DC Current Gain,hFE)在集極電流(𝐼 𝐶)=5A,集射電位差(𝑉𝐶𝐸)=4V 的條件下,最小值為 1000;在集極電流(𝐼 𝐶)=10A,集射電位差(𝑉𝐶𝐸)=4V 的條件 下,最小值降低為 500;可得知其 hFE 值可能因𝐼 𝐶上升影響而下降。 電流放大除了使用達靈頓電路,亦可採用場效應電晶體(field-effect transistor, FET);場效應電晶體又稱場效電晶體或場效體,屬於主動元件,具有放大信號的 功能,與雙極性接面電晶體(BJT)不同之處在於:FET 為單載子元件,單個 FET 的輸入阻抗極高,可達108 Ω(即 100MΩ)以上,且負載效應極低。(電子學Ⅱ,P130)。 如圖七為增強型 N 通道 MOSFET。 圖 7 增強型 N 通道 MOSFET 由於 MOSFET 屬於電壓控制電流元件,閘極(G)輸入阻抗大,以低電流控制 高電流電路,其源極電流(IS)=汲極電流(ID),且汲極電流(ID)的近似值為 K × (𝑉𝐺𝑆 − 𝑉𝑡)2 。MOSFET 配合運算放大器組成之 D/A 轉換電路如圖八。 圖 8 MOSFET 與運算放大器組成之 D/A 轉換電路
  • 13. 11 根據增強型 N 通道 MOSFET 的特性,參考資料手冊,不同型號之 MOSFET 的臨界電壓(Vt,Gate Threshold Voltage)不完全相同,以 IRF530、IRF630 而言,其 Vt 約為 2~4V。 控制 DAC0800 的數位輸入端,即可調整負載(𝑅 𝐿)的端電壓。將 DAC0800 的 第 5 至第 12 接腳連接至單晶片微電腦 89S51 的第 1 至第 8 接腳,即可透過單晶 片調整數位信號。89S51 為 8 位元的微處理器,內建 4k bytes 的程式記憶體(read only memory,ROM)、128 bytes 的隨機存取記憶體(random-access memory, RAM), 具有四組 8 位元輸出入埠,即 PORT0、PORT1、PORT2、PORT3,可位元定址, PORT0 為第 32 至第 39 接腳,為開洩極式輸出(Open Drain,簡稱 OD),內部無提 升電阻,執行輸出功能時,需外接約 10kΩ 之提升電阻;PORT1 為第 1 至第 8 接 腳,PORT2 為第 21 至第 28 接腳,PORT3 為第 10 至第 17 接腳。PORT1 至 PORT3 內部皆具備約 30kΩ 之提升電阻,執行輸出功能時,不須連接外部提升電阻。(例 說 89S51-C 語言 (第三版),P3-2~P3-4) 單晶片程式如下。 /* DAC 數位轉類比程式*/ //==宣告區===================================== #include <AT89X51.h> // 加入 AT89X51.h 函式庫 #define DAC_IC P1 // 定義數位類比轉換 IC DAC0800 接至 Port 1 #define seg P2 // 定義七段顯示器解碼接至 Port 2 void delay (unsigned int); // 宣告延遲函數 void debouncer(void); // 宣告軟體防彈跳函數 void agecontrol(void); // 宣告電壓控制副程式 unsigned char a; // 宣告變數 a //==主程式===================================== main() // 主程式開始 { // 進入主程式 a=65535; // 定義 a 初值 while(1) // 無限迴圈 { // 進入 while 敘述 agecontrol(); // 進入電壓控制副程式 } // 結束 while 敘述 } // 主程式結束 //==電壓控制副程式===================================== void agecontrol(void) // 電壓控制副程式 { // 進入電壓控制副程式 DAC_IC=~a; // P1 輸出埠為變數 a 反相 seg=~a; // P2 輸出埠為變數 a 反相 delay(200); // 延遲 if(P3_0==0) // 如果按鈕按下
  • 14. 12 { // 執行 if 敘述 a++; // 變數 a=a+1 debouncer(); // 執行防彈跳副程式 } // if 敘述結束 if(P3_1==0) // 如果按鈕按下 { // 執行 if 敘述 a--; // 變數 a=a-1 debouncer(); // 執行防彈跳副程式 } // if 敘述結束 } // 結束電壓控制副程式 //==延遲函數副程式===================================== /* 延遲函數,延遲約 x 0.5ms,使用 24MHz 振盪器 */ void delay(int x) // 延遲函數開始 { // 進入延遲函數 int i,j; // 宣告整數變數 i,j for (i=0;i<x;i++) // 計數 x 次,延遲 x*0.5ms { // 進入 for 指令 for (j=0;j<120;j++) // 計數 120 次,延遲 0.5ms { } } // 結束 for 指令 } // 延遲函數結束 //==按鈕防彈跳副程式===================================== /* 透過軟體進行防彈跳*/ void debouncer(void) // 防彈跳函數開始 { int i2; // 宣告整數變數 i,j for (i2=0;i2<2400;i2++); // 連數 2400 次 } // 防彈跳函數結束 此 C 語言程式由宣告變數、主程式、電壓控制副程式、延遲函數副程式與按 鈕防彈跳副程式所組成。在 C 語言程式的設計上,需明確定義各項常數或變數的 數值範圍,使得編譯程式能夠為這些數值保留適當的記憶體位置。接著再透過程 式指令對變數進行運算,編譯結果如附錄一。變數 a 為輸入 DAC0800 的數值, 當按下「電壓上升」或「電壓下降」按鈕時,P3.0 或 P3.1 由高態轉為低態,程 式依據接腳電壓的變化控制變數 a,透過 if 指令:若 P3.0 為低態則 a 增加 1;若 P3.1 為低態則 a 減少 1,可輕易調整輸出電壓高低。如圖 9 單晶片與 D/A 轉換器 電路圖所示。表 4 為單晶片與 D/A 轉換器電路圖零件規格表。圖十為單晶片與 D/A 轉換器電路方塊圖。
  • 15. 13 圖 9 單晶片與 D/A 轉換器電路圖 表 4 單晶片與 D/A 轉換器電路圖零件規格表 編號 名稱 規格 編號 名稱 規格 𝑅1 碳膜電阻器 4.7kΩ,0.5W 𝑅7 碳膜電阻器 1kΩ,0.5W 𝑅2 碳膜電阻器 4.7kΩ,0.5W XTAL1 石英晶體振盪器 24MHz 𝑅3 碳膜電阻器 4.7kΩ,0.5W 𝐶1 陶瓷電容器 0.01μF 𝑅4 碳膜電阻器 4.7kΩ,0.5W 𝐶2 陶瓷電容器 30pF 𝑅5 碳膜電阻器 100kΩ,0.5W 𝐶3 陶瓷電容器 30pF 𝑅6 碳膜電阻器 1kΩ,0.5W 𝐶4 電容器 0.1μF 資料來源:本研究者整理 圖 10 單晶片與 D/A 轉換器電路方塊圖
  • 16. 14 為避免「電壓上升」與「電壓下降」按鈕同時被按下導致輸出不穩定,修正 電路如圖十一,當「電壓上升」與「電壓下降」按鈕同時被按下,P3.0 與 P3.1 皆為高態,輸出電壓不變,蜂鳴器響。 圖 11 按鈕輸入處理暨單晶片與 D/A 轉換電路 (二) 二進位-十進位解碼顯示電路: 以 89S51 單晶片燒錄解碼顯示程式,完成二進位數值轉換至十進位的工作, 於四位元七段顯示器模組顯示電壓值。解碼顯示程式如下。 /* 電壓量測二進位解碼為十進位程式 */ #include <reg51.h> // 加入 reg51.h 函式庫 /*宣告驅動信號陣列*/ char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 0~4 0x92, 0x82, 0xf8, 0x80, 0x90 }; // 5~9 #define DAC P0 // 定義 DAC 連接埠 #define SCANP P1 // 定義掃瞄信號連接埠 #define SEG7P P2 // 定義七節顯示器連接埠 //========================================= unsigned char disp[4]={0, 0, 0, 0}; // 宣告顯示區陣列 unsigned char _dac; // 宣告變數
  • 17. 15 void dataproc(unsigned int); // 宣告資料處理函數 void display(void); // 宣告顯示函數 void delay1ms(char); // 宣告延遲函數 main() // 主程式開始 { while(1) // while 無限迴圈開始 { display(); // 執行顯示函數 _dac=DAC; // 讀取外部記憶體 dataproc(_dac); // 資料處理 } // while 無限迴圈結束 } // 主程式結束 //====資料處理函數==== void dataproc(unsigned int data_in) { unsigned int results; // 宣告變數 results= data_in*58-194;// 讀取 DAC0800 轉換結果乘以 58 倍再減去 194 if(data_in*58<194) { disp[3]=0xff; // 十位數不顯示 disp[2]=0xc0-0x80; // 個位數=0. disp[1]=0xc0; // 十分位數=0 disp[0]=0xc0; // 百分位數=0 } else { if( (results/1000)<10) // 第一位數字小於 10 { disp[3]=(TAB[(results/1000)%10]-0x80); // 取得個位數 disp[2]=TAB[(results/100)%10]; // 取得十分位數 disp[1]=TAB[(results/10)%10]; // 取得百分位數 disp[0]=TAB[(results/1)%10]; // 取得千分位數 } else if((results/1000)>=10) // 第一位數字大於 10 { disp[3]=TAB[(results/10000)%10]; // 取得十位數 disp[2]=(TAB[(results/1000)%10]-0x80); // 取得個位數 disp[1]=TAB[(results/100)%10]; // 取得十分位數 disp[0]=TAB[(results/10)%10]; // 取得百分位數 } }
  • 18. 16 } //====顯示函數==== void display(void) { int z2; // 定義變數 z2 char i,scan; // 宣告變數 char times=20; // 掃瞄 20 次 int z; // 定義變數 z z=0; // 定義 z 初值為 0 while (--times>=0) // while 迴圈開始 { scan=1; // 初始掃瞄信號 for(i=0;i<4;i++) // for 敘述開始 { // 進入 for 迴圈 SEG7P=0xff; // 關閉 7 節顯示器 SCANP=~scan; // 輸出掃瞄信號 SEG7P=disp[i]; // 轉換成驅動信號,並輸出到 P0 delay1ms(1); // 延遲 1ms scan<<=1; // 下一個掃瞄信號 } // 結束 for 敘述 } // 結束 while 敘述 } // display 函數結束 //====延遲函數==== void delay1ms(char x) // 進入延遲函數 { int i,j; // 宣告變數 for(i=0;i<x;i++) // 外迴圈 for(j=0;j<70;j++); // 內迴圈 } // 延遲函數結束 以上程式由 C 語言寫成,先宣告各項變數,再透過 while(1)指令組成的無限 迴圈不斷執行顯示資料、讀取數值、資料運算的工作。C 語言屬於高階語言,燒 錄時需要使用編譯軟體將 C 語言編譯成低階語言再燒錄。編譯後的低階語言如附 錄二。
  • 19. 17 二進位-十進位解碼電路由 89S51 單晶片、 電阻、電晶體、七段顯示器模組、石英晶體振 盪器、電容等元件所組成,AT89S51 單晶片第 四十腳接 Vcc,第二十腳接地,PORT1 為七 段顯示器掃描信號的輸出接腳;七段顯示器依 照電路結構區分為共陽與共陰兩種形式,共陽 七段顯示器將單一位數的各個 LED 的陽極 (anode)連接在一起成為 com 接點,如圖 12 七 段顯示器內部結構圖所示;共陰七段顯示器將 單一位數的各個 LED 的陰極(cathode)連接在 一起。此電路中使用四位數共陽七段顯示器,四位數共陽七段顯示器共有四個 com 接點,分別為 com0、com1、com2、com3,而各位數的 a 皆連接至 a 接腳、 各位數的 b 皆連接至 b 接腳、各位數的 c 皆連接至 c 接腳……。七段顯示器上的 四位數並非同時顯示,而是藉由快速掃描的方式,一次顯示一位數,當 P1.0 為 低態時,電晶體𝑇𝑅1工作,產生𝐼 𝐶電流流入 com0 接點;當 P1.1 為低態時,P1.0 恢復高態,電晶體𝑇𝑅2工作,產生𝐼 𝐶電流流入 com1 接點;當 P1.2 為低態時,P1.1 恢復高態,電晶體𝑇𝑅3工作,產生𝐼 𝐶電流流入 com2 接點;當 P1.3 為低態時,P1.2 恢復高態,電晶體𝑇𝑅4工作,產生𝐼 𝐶電流流入 com3 接點;週而復始,在短時間內 完成掃描;因視覺暫留(Persistence of Vision)現象,四位數可同時看見。圖十三為 二進位-十進位解碼電路圖。 圖 13 二進位-十進位解碼電路圖 圖 12 七段顯示器內部結構圖
  • 20. 18 圖十三中𝑇𝑅1至𝑇𝑅4採用 A1015 之 PNP 型電晶體,即可使電路順利運作;單 晶片的時脈由石英晶體振盪器(XTAL)、電容(𝐶1與𝐶2)組成,石英晶體振盪器可採 用 12MHz,電容𝐶1、𝐶2採用 30pF。掃描七段顯示器有許多方式,圖十三採用電 晶體控制 com 接點電位的方式進行掃描;另外還可使用反相達靈頓驅動器(如 ULN2003、ULN2803)代替 PNP 電晶體;圖十四為 ULN2003 IC 的接腳圖,圖十 五為 ULN2803 IC 的接腳圖。 圖 14 ULN2003 IC 接腳圖 圖 15 ULN2803 IC 接腳圖 ULN2003 IC 具有七個開集極式輸出(Open Collector, O.C.)的反相器,驅 動共陽七段顯示器時,需連接提升電阻,才具有高態輸出。若應用 CMOS 的 4049 IC 進行驅動,則不需外接提升電阻。圖十六為使用反相驅動器的解碼電路。 圖 16 二進位-十進位解碼顯示電路圖(使用反相驅動器)
  • 21. 19 (三) D/A 與解碼電路之整合: 充分運用 89S51 單晶片微電腦的各個輸入輸出埠,可將 D/A 轉換電路與解 碼電路連接至單一顆單晶片上,將 P0 第 32 至 39 接腳連接至 DAC 轉換電路;七 段顯示器的電壓顯示由 P1 與 P2 完成,P3 控制輸出電壓高低。輸出的部分,D1 二極體可以消除電感性負載所產生的大感應電勢,避免電源供應器輸出至電感性 較大的負載時,因瞬間逆向感應電壓使電晶體𝑉𝐶𝐸過高而燒毀。電路如圖十七。 (電子電路實作技術,P239) 圖 17 D/A 與解碼電路之整合 (四) 鍵盤掃描控制: 圖十七電路輸出電壓的控制,透過按下「電壓上升」或「電壓下降」按鈕, 分別使輸出電壓上升或下降;我們還可以使用鍵盤直接輸入電壓數值的方式,調 節輸出電壓的高低。圖十八為 4×4 鍵盤實體相片。
  • 22. 20 讀取鍵盤輸入數值有許多方式,可 連接微電腦 I/O port,藉由軟體程式控制 掃描與編碼,亦可利用 MM74C922 IC, MM74C922 是 4×4 鍵盤掃描編碼器,其 內部電路如圖十九;其工作電壓範圍為 3 ~15V,在電源為 5V 時,其輸出信號準 位與 TTL IC 相容。參考 IC 資料手冊, DIP 包裝最大消耗功率為 700mW。 圖 18 4×4 鍵盤實體相片 4×4 鍵盤有 0~9 與 A~F 共 16 個按鈕,而鍵盤狀態在使用時需注意:不 同型號規格的 4×4 鍵盤,按鍵排列方式可能不相同;而透過 74922 鍵盤掃描 IC 編碼的結果,以圖十八而言,按下按鈕「C」,編碼結果為「0」;按下按 鈕「D」,編碼結果為「1」……。對應編碼結果如表 5。圖二十為 74922 與 鍵盤連接電路圖。 圖 19 MM74C922 內部電路
  • 23. 21 表 5 74922 對應編碼結果 按鍵值 編碼值(十進位) 按鍵值 編碼值(十進位) C 0 4 8 D 1 5 9 E 2 6 10 F 3 7 11 8 4 0 12 9 5 1 13 A 6 2 14 B 7 3 15 資料來源:本研究者整理 圖 20 74922 與鍵盤連接電路圖 圖二十中 74922 IC 的第 14~17 接腳為編碼結果資料線,A 為最低有效位 元(Least Significant Bit,LSB),D 為最高有效位元(Most Significant Bit,MSB), 第十二接腳為容許資料輸出接腳,簡稱 DA(Data Available)接腳。在鍵盤未按下 任何按鍵時,本接腳為低態,此 IC 的資料輸出接腳 Data A~Data D 不提供有效 資料;當鍵盤有按鈕被按下時,DA 接腳轉為高態,並由資料線輸出按鍵資料。 (例說 89S51-C 語言 (第三版),P5-10~P5-12)
  • 24. 22 將 DA 接腳與資料輸出接腳 Data A~Data D 連接至單晶片微電腦的 port3; 在程式設計時,將 port3 設為讀取鍵盤狀態的輸入埠,電路圖如圖二十一所示; 依據表 5 鍵盤與編碼的對應關係編寫程式,先宣告一組陣列 allkeyindata[4],放 置鍵盤每次輸入的數值,並透過單晶片內建計數器對鍵盤輸入次數計數,若計數 值為四,則表示輸入完成;按鍵值讀取判斷程式流程如下。 鍵 盤 有 按 鈕 被 按 下  編碼為 12 →將 0 寫入輸入資料陣列 allkeyindata  編碼為 13 →將 1 寫入輸入資料陣列 allkeyindata  編碼為 14 →將 2 寫入輸入資料陣列 allkeyindata  編碼為 15 →將 3 寫入輸入資料陣列 allkeyindata  編碼為 8 →將 4 寫入輸入資料陣列 allkeyindata  編碼為 9 →將 5 寫入輸入資料陣列 allkeyindata  編碼為 10 →將 6 寫入輸入資料陣列 allkeyindata  編碼為 11 →將 7 寫入輸入資料陣列 allkeyindata  編碼為 5 →將 8 寫入輸入資料陣列 allkeyindata  編碼為 6 →將 9 寫入輸入資料陣列 allkeyindata 圖 21 鍵盤掃描與單晶片控制電路圖
  • 25. 23 當輸入完成時,將輸入資料陣列 allkeyindata 的每一元素進行加權運算, allkeyindata[3]為 MSD,allkeyindata[0]為 LSD,結果即為完整的輸入數值 (allkeyinval): allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyin data[0])/pow(10,dot); 上式中 dot 為小數位數,為了能精確控制輸出電壓大小,在鍵盤規劃上將「A」 按鈕視為小數點按鈕;當使用者按下小數點按鈕時,內建計數器計數值不變,且 小數位數(dot)值等於 4-已輸入位數。在±𝑉𝐶𝐶 = ±18𝑉,且𝐼 𝑅𝐸𝐹 = 3.3𝑚𝐴的狀況下,實際測得滿刻度輸出電壓 VO(max)=16.02V,即 DAC0800 輸入二 進位為 11111111 時輸出電壓為 16.02V,由此可得知輸出電壓數值與二進位數值 的對應關係為: 二進位數值= 255 16.02 × 輸出電壓 ≅ 輸出電壓 ÷ 0.0628235 ≅ 輸出電壓 × 10000 ÷ 628。 圖二十二為鍵盤控制數位式可調電源供應器電路工作流程圖。從使用者操作 介面,到硬體的信號處理,最後由 D/A 轉換輸出類比電壓。 圖 22 鍵盤控制數位式可調電源供應器電路工作流程圖 (五) DAC 解析度之探討與改善: 使用鍵盤控制輸出電壓值,最低有效位數為 0.001V,而單顆 DAC0800 僅具 有八位元的解析度,由(一) 數位-類比轉換電路的探討內容可知,最低位元電 壓變化量(𝑉𝐿𝑆𝐵) = 𝐼𝐿𝑆𝐵 × 𝑅3 = 0.0585937485(V),若想要降低最低位元電壓變化 量,可使用多顆 DAC0800 結合提高電壓解析度。以兩組 DAC0800 的數位-類比 轉換器為例,其解析度為 2×256=512 階,電路如圖二十三。兩組八位元數位-類 比轉換電路與類比加法電路,其資料線寬度為log2 512 = 9bit;其中𝐵9為最低有 效位元(Least Significant Bit,LSB),𝐵1為最高有效位元(Most Significant Bit,msb), 二進位輸入真值表分析如表 6。 使用者設定 輸出電壓值 單晶片微電腦讀 取使用者輸入數 值並產生對應的 二進位碼,由P0 輸出至DAC0800 DAC0800接收由 P0送出之二進碼 轉換為類比電壓 輸出。
  • 26. 24 圖 23 九位元數位-類比轉換器電路圖 表 6 二進位輸入真值表 十進位數值 二進位數值 Vout2 數位輸入 等效十進位值 Vout1 數位輸入 等效十進位值 0 000000000 0 0 1 000000001 0 1 2 000000010 0 2 3 000000011 0 3 4 000000100 0 4 5 000000101 0 5 … … … … 250 011111010 0 250 251 011111011 0 251 252 011111100 0 252 253 011111101 0 253 254 011111110 0 254 255 011111111 0 255 256 100000000 0 255 257 100000001 1 255 258 100000010 2 255 259 100000011 3 255 260 100000100 4 255 261 100000101 5 255 262 100000110 6 255 263 100000111 7 255
  • 27. 25 264 100001000 8 255 265 100001001 9 255 … … … … 506 111111010 250 255 507 111111011 251 255 508 111111100 252 255 509 111111101 253 255 510 111111110 254 255 511 111111111 255 255 資料來源:本研究者整理 根據圖二十三,可將𝐵1(最高有效位元)視為資料選擇線;當𝐵1 = 0時,代表 輸出電壓較低(小於等於 1 2 ×Vout 最高輸出電壓),這時將𝐵2~𝐵9的二進位資料送入 DAC0800 IC 產生𝑉𝑜𝑢𝑡1電壓,𝑉𝑜𝑢𝑡2則為 0V;當𝐵1 = 1時,代表輸出電壓較高(大 於等於 1 2 ×Vout 最高輸出電壓),這時將𝐵2~𝐵9的二進位資料送入 DAC0800 產生 𝑉𝑜𝑢𝑡2電壓,控制𝑉𝑜𝑢𝑡1輸出電壓的 DAC0800 IC 接收到的二進位值為 255,滿刻度 電壓輸出。若九位元輸入信號為 011111111 或 100000000 時,輸出電壓恰為 1 2 ×Vout 最高輸出電壓。信號處理流程圖如圖二十四。 圖 24 九位元 D/A 電路信號處理流程圖 𝐵1~𝐵9 輸入信號 𝐵1 = 0 𝑉𝑜𝑢𝑡1 = 𝐼 𝑅𝐸𝐹 × 𝐷 256 × 𝑅7 𝑉𝑜𝑢𝑡2 = 0 𝐵1 = 1 𝑉𝑜𝑢𝑡1 = 𝐼 𝑅𝐸𝐹 × 255 256 × 𝑅7 𝑉𝑜𝑢𝑡2 = 𝐼 𝑅𝐸𝐹 × 𝐷 256 × 𝑅3
  • 28. 26 設定 Vout 滿刻度輸出電壓為 16V,即𝑉𝑜𝑢𝑡(max) = 16V,則 1 2 × 𝑉𝑜𝑢𝑡 = 8V,單 個 DAC 電路的滿刻度輸出電壓即為 8V,8V=𝐼 𝑅𝐸𝐹 × 255 256 × 𝑅7,𝐼 𝑅𝐸𝐹 × 𝑅7 = 8×256 255 = 2048 255 = 8.031372549(V)。且𝐼 𝑅𝐸𝐹 = 𝑉𝑟𝑒𝑓 𝑅 ,即 𝑉𝑟𝑒𝑓 𝑅 × 𝑅7 = 8.031372549,若𝑉𝑟𝑒𝑓為 5V,則 𝑅7 𝑅 =1.6062745098 此 R 可以採用精密可變電阻,以進行微調。最低位元電 壓解析度(𝑉𝐿𝑆𝐵) = 𝐼𝐿𝑆𝐵 × 𝑅7 = 𝐼 𝑅𝐸𝐹 × 1 256 × 𝑅7 = 0.031372549(V) = 31.372549(mV),較八位元 DAC 解析度增加 46.457515%,以下為 OPA 類比 加法器電路分析。 圖 25 類比加法器電路圖 圖二十五為類比加法電路,其𝑉𝑜𝑢𝑡 = 𝑉𝑖𝑛 × (1 + 𝑅2 𝑅1 );由節點電壓法,若考慮 運算放大器 741 的輸入電阻𝑅𝑖典型值為 2MΩ,可得知: 𝑉𝑖𝑛 − 𝑉1 𝑅3 + 𝑉𝑖𝑛 − 𝑉2 𝑅4 + 𝑉𝑖𝑛 2MΩ = 0 2M𝑅4(𝑉𝑖𝑛 − 𝑉1) + 2M𝑅3(𝑉𝑖𝑛 − 𝑉2) + 𝑅3 𝑅4 𝑉𝑖𝑛 = 0 𝑉𝑖𝑛(2M𝑅4 + 2M𝑅3 + 𝑅3 𝑅4) = 2M(𝑅4 𝑉1 + 𝑅3 𝑉2) 𝑉𝑖𝑛 = 2M(𝑅4 𝑉1 + 𝑅3 𝑉2) (2M𝑅4 + 2M𝑅3 + 𝑅3 𝑅4) 𝑉𝑖𝑛 = 2M(𝑅4 𝑉1 + 𝑅3 𝑉2) (2M(𝑅4 + 𝑅3) + 𝑅3 𝑅4)
  • 29. 27 若不考慮運算放大器 741 的輸入電阻𝑅𝑖,則: 𝑉𝑖𝑛 − 𝑉1 𝑅3 + 𝑉𝑖𝑛 − 𝑉2 𝑅4 = 0 𝑅4(𝑉𝑖𝑛 − 𝑉1) + 𝑅3(𝑉𝑖𝑛 − 𝑉2) = 0 𝑉𝑖𝑛(𝑅4 + 𝑅3) − 𝑅4 𝑉1 − 𝑅3 𝑉2 = 0 𝑉𝑖𝑛 = 𝑅4 𝑉1 + 𝑅3 𝑉2 (𝑅4 + 𝑅3) 若𝑅3 = 𝑅4,則: 𝑉𝑖𝑛 = 𝑉1 + 𝑉2 2 可見𝑉𝑜𝑢𝑡 = 𝑉𝑖𝑛 × (1 + 𝑅2 𝑅1 ) = 𝑉1+𝑉2 2 × (1 + 𝑅2 𝑅1 ) 若𝑅3 = 𝑅4又𝑅1 = 𝑅2,則𝑉𝑜𝑢𝑡 = 𝑉1 + 𝑉2。 表 7 為類比加法器電路零件規格表。 表 7 類比加法器電路零件規格表 編號 名稱 規格 𝑅1 金屬膜精密電阻器 10kΩ,0.5W 𝑅2 金屬膜精密電阻器 10kΩ,0.5W 𝑅3 金屬膜精密電阻器 10kΩ,0.5W 𝑅4 金屬膜精密電阻器 10kΩ,0.5W 資料來源:本研究者整理 若欲進一步改善輸出電壓解析度至 0.001V 以下,同樣在𝑉𝑜𝑢𝑡(max) = 16V 的 條件下,近似分析如下: 令 DAC 位元數為 x,解析度: 16 2 𝑥 < 0.001 x > log2 16020 = 13.9675865 當 DAC 位元數高於 14 時,滿刻度輸出電壓為 16V,最低位元電壓變化量小於 0.001V。
  • 30. 28 (六) 電流檢測電路: 為了得知負載運作的情形與電源供應器實際輸出電流大小,避免因輸出電流 過大,導致元件損毀,在電源供應電路中增加電流檢測電路。電流檢測電路主要 由類比-數位轉換器(Analog-to-digital converter, ADC)所組成。ADC 的功能為將類 比訊號轉換成數位信號。常用的 A/D 轉換器可分為逐次比較型 A/D 轉換器、並 聯比較型 A/D 轉換器、雙重積分型 A/D 轉換器……等。 逐次比較型A/D轉換器又稱計數器斜坡式A/D轉換器,由電壓比較器(voltage comparator)、及閘(AND Gate)、二進位計數器與數位類比轉換器(D/A 轉換器)…… 等組成。首先將類比輸入信號取樣並保持(Sample-and-hold),電路如圖二十六; 再透過電壓比較器,與 D/A 轉換器產生的類比信號進行比較,將比較結果與時脈 輸入及閘(AND Gate)後,以計數器輸出數位信號,細節分析如下。 圖 26 取樣並保持(Sample-and-hold)電路 在圖二十六中,取樣並保持(Sample-and-hold)電路由兩組 OPA 電壓隨耦器 (Voltage follower)、一個類比開關及一顆電容所組成。OP1 的輸出電壓𝑉𝑂 𝑂𝑃1 隨著 其同相輸入端𝑉𝑖+ 𝑂𝑃1 電壓變化,假設 VG1 信號為頻率 1000Hz 的正弦波,其瞬時 方程式為VG1(𝑡) = sin(2 × 𝜋 × 1000 × 𝑡)V,則𝑉𝑂 𝑂𝑃1 電壓方程式亦為sin(2 × 𝜋 × 1000 × 𝑡);設 OPA 具理想特性,模擬分析結果繪圖如圖二十七。
  • 31. 29 圖 27 取樣並保持(Sample-and-hold)電路分析 當開關(SW1)閉合(ON)時,OP2 的同相輸入端𝑉𝑖+ 𝑂𝑃2 電壓變化與 OP1 的輸出 相同。在前述內容中,𝑉𝑂 𝑂𝑃1 電壓方程式為sin(2 × 𝜋 × 1000 × 𝑡),故𝑉𝑖+ 𝑂𝑃2 之電壓 方程式亦為sin(2 × 𝜋 × 1000 × 𝑡)。模擬分析結果如圖二十八。
  • 32. 30 圖 28 取樣並保持(Sample-and-hold)電路開關閉合模擬 圖二十八中假設開關為閉合(ON)狀態,若開關閉合一段時間𝑡 𝑂𝑁後斷開(OFF), 則因電容𝐶1 具儲能特性,𝑉𝑖+ 𝑂𝑃2 (𝑡 > 𝑡 𝑂𝑁)電壓將維持開關斷開前一刻的電壓 𝑉𝑖+ 𝑂𝑃2 (𝑡 = 𝑡 𝑂𝑁 −),若𝑡 𝑂𝑁 = 125𝜇𝑆,模擬分析結果如圖二十九。 圖 29 取樣並保持(Sample-and-hold)電路開關𝑡 𝑂𝑁 = 125𝜇𝑆模擬
  • 33. 31 信號源 VG1 頻率為 1000Hz,週期(T)為 1 1000 = 0.001𝑆 = 1𝑚𝑆,表 8 為時間 -信號源電壓關係表。 表 8 時間-信號源電壓關係表 時間 t(毫秒) 信號源電壓 VG1(V) 0 0 0.0625 0.382683432 0.125 0.707106781 0.1875 0.923879533 0.25 1 0.3125 0.923879533 0.375 0.707106781 0.4375 0.382683432 0.5 0 0.5625 -0.382683432 0.625 -0.707106781 0.6875 -0.923879533 0.75 -1 0.8125 -0.923879533 0.875 -0.707106781 0.9375 -0.382683432 1 0 資料來源:本研究者整理 開關𝑡 𝑂𝑁 = 125𝜇𝑆,在開關斷開(OFF)後,𝑉𝑖+ 𝑂𝑃2 接近於 0.707106781V,與圖 二十九之分析結果大致相符合。OP2 電路為一電壓隨耦器,以運算放大器輸入阻 抗高的特性,降低電容放電效應,使電壓保持。若 OPA 具理想特性,OP2 的輸 出電壓𝑉𝑂 𝑂𝑃2 = 𝑉𝑖+ 𝑂𝑃2 ≈ 0.7071V。逐次比較型 A/D 轉換器運用取樣並保持電路 將輸入信號取樣後,另需一二進位計數器與 D/A 電路,產生比較電壓,進而得到 數位數值。二進位計數器與 D/A 電路圖如圖三十。
  • 34. 32 圖 30 二進位計數器與 D/A 電路圖 圖三十中包含一組八位元二進位計數器及一組八位元 D/A 轉換電路;二進位 計數器由 JK 正反器構成。當計數時脈頻率為 100kHz 時,時脈週期為 1 100𝑘 = 0.01mS = 10μS,模擬分析 CLK、Tri_signal 兩信號波形結果如圖三十一, 橫軸(X)為時間(秒),縱軸(Y)為電壓(伏特 V)。 圖 31 二進位計數器與 D/A 電路模擬 0 1 2 3 4 5 6 0 0.0005 0.001 0.0015 0.002 0.0025 0.003 0.0035 0.004 CLK Tri_signal
  • 35. 33 並聯比較型 A/D 轉換器將基準電壓透過電阻分壓後,再配合比較器與輸入的 類比電壓進行比較,將比較結果輸入解碼電路後輸出,即可得到數位信號。並聯 比較型 A/D 轉換器具有轉換速度快的優點,但需要多個比較器與電阻器,材料費 用較高。表 8 為 A/D 轉換器的優缺點比較表,表 9 為部分 ADC 積體電路的編號 與規格。 表 8 A/D 轉換器的優缺點比較表 A/D 轉換器種類 優點 缺點 逐次比較型 A/D 轉換器 元件較少。 為逐次比較, 故轉換速度較慢。 並聯比較型 A/D 轉換器 多個比較器同時工作, 轉換速度較快。 所需元件數較多, 成本較高。 資料來源:Roger L. Tokheim 著(2009 年 10 月初版二刷)。數位邏輯設計原理與應用。 表 9 類比-數位轉換器規格表 編號 電源 位元數 ADC0804 5V 8 位元 ADC0806 3.8V 8 位元 LC89086M 5V 8 位元 ADC10461 5V 10 位元ADC10462 ADC10464 資料來源:本研究者整理 以 ADC0804 為例,ADC0804 為 CMOS 的類比-數位轉換 IC,只需 5V 單電 源即可正常工作,依據 datasheet 資料,電源最大值為 6.5V。允許 GND-0.05~(V+) + 0.05V 類比電壓輸入,若輸入電壓過高則易燒毀;具有三態輸出,與微處理機 相容,不需配合其他介面,即可與 8x51 等微電腦一齊工作。不需要額外的石英 振盪器,只要外接 R、C 即可使 IC 工作,且可由 R、C 控制其振盪頻率。圖二十 六為 ADC0804 內部方塊圖。圖二十七為 ADC0804 接腳圖。
  • 36. 34 圖 26 ADC0804 內部方塊圖 圖 27 ADC0804 接腳圖
  • 37. 35 圖 28 ADC0804 電流檢測電路 將 ADC0804 應用於電源供應器之輸出電流檢測,電路圖如圖二十八所示。 在輸出端串聯一小電阻 0.03Ω,當輸出電流愈大,電阻上的電位差亦愈大。因此, 將電阻端電壓類比信號轉換為數位信號,再經運算,便可得知負載電流。檢測負 載電流能更清楚負載工作情形,若負載異常,出現短路狀況,電源供應器能自動 調節輸出電流,進入限流模式,避免內部穩壓元件過載而燒毀。
  • 38. 36 (七) 單晶片微電腦 I/O port 之擴充: 由圖二十一 鍵盤掃描與單晶片控制電路圖可知,包含鍵盤輸入、DAC 輸 出及七段顯示器掃描已分別連接至單晶片 89S51 的四個埠,若要結合 ADC 電流 檢測,需修改電路設計,採用資料匯流排共用之多工架構。透過晶片致能控制, 避免資料衝突。匯流排電路連接如圖二十九。 圖 29 匯流排電路連接圖 匯流排並聯共用的設計中,常採用三態緩衝器。匯流排傳送時,同一時間僅 有一組信號在兩點之間進行點對點傳送,因為兩條線以上同時接在一起會產生線 接及閘,使得信號無法有效地辨認,因此必須以三態緩衝器來控制那些信號可以 傳送,而哪一些是不可以傳送,這即是為何接上匯流排需要緩衝隔離控制的原因。 (微電腦架構,P68)
  • 39. 37 74574 為常用的三態輸出緩衝栓鎖器。以 STMicroelectronics 公司之 74AC574 為 例,根據資料手冊,其特性如下:  功能簡述:Octal D-Type Flip-Flop with 3-STATE Outputs  電源電壓(Supply Voltage)範圍:2~6V  輸入電壓(Input Voltage)範圍:0~Vcc(V)  輸出電壓(Output Voltage)範圍:0~Vcc(V)  直流輸出最大電流(DC Output Current Maximum):±50mA  當 Vcc=5V±0.5V 時,最高工作頻率:220MHz ※一般的低功率蕭特基(Low Power Schottky)晶片如 74LS574,工作頻率上限約數 十 MHz。  最大工作電流(由 Vcc 供應,DC VCC or Ground Current):±400mA  操作溫度(Operating Temperature)範圍:-40~+85℃  74574 共 20 支接腳,有八個 D 型正反器;當 CK 輸入脈波正緣信號,資料栓鎖, 由𝑂𝐸̅̅̅̅控制輸出狀態。當𝑂𝐸̅̅̅̅為低態時,內部栓鎖資料送出;當𝑂𝐸̅̅̅̅為高態時,輸出 為高阻抗狀態,接腳圖如圖三十,內部邏輯電路如圖三十一。 圖 30 74AC574 接腳圖
  • 40. 38 圖 31 74574 內部邏輯電路
  • 41. 39 圖三十二為 ADC 電流檢測與 74574 資料栓鎖電路圖;將 ADC 電流檢測電路 所輸出之數位資料,透過 74574 栓鎖與三態緩衝控制;74574 之 ck 連接至 ADC 之 CLK,使得數位-類比轉換與栓鎖同步;三態緩衝輸出控制𝑂𝐸̅̅̅̅連接至單晶片微 電腦 89S51 之 P3.2,讀取 ADC 資料時,藉由程式控制 P3.2 為低態,即可透過資 料匯流排讀取。圖中 D6~D13 共八顆 LED 顯示 ADC 數位資料。 圖 32 ADC 電流檢測與 74574 資料栓鎖電路圖 依據 74574 元件特性與匯流排電路設計控制程式,整合七段顯示器的掃描顯 示、DAC 控制、ADC 讀取資料與鍵盤輸入等功能;軟體架構圖如圖三十三,定 義硬體 I/O 如下: #define DATA_PORT P0 // 定義資料匯流排連接至 P0 #define SCANP P1 // 定義掃瞄信號輸出連接埠為 P1 #define SEG7P P2 // 定義七節顯示器連接埠為 P2 sbit DAC_ck = P3^0; // 宣告 DAC 栓鎖脈波接腳 /*DAC_ck 送出正緣,栓鎖器讀取資料匯流排上資料,送入 DAC 電路*/ sbit key_OE = P3^1; // 宣告鍵盤輸入資料控制接腳 /*74922 編碼後之鍵盤輸入資料由栓鎖器栓鎖,當 key_OE=0 時資料進入資料匯流排*/ sbit ADC_OE = P3^2; // 宣告 ADC 資料控制接腳 /*當 ADC_OE=0(低態致能)時,ADC 電路輸出資料進入資料匯流排*/ sbit key_DA = P3^3; // 宣告鍵盤輸入 Data available 接腳 /*當鍵盤按下時 key_DA 為高態,若無按鍵按下,key_DA 為低態*/ sbit key_ck = P3^4; // 宣告鍵盤輸入資料栓鎖器 ck 接腳 /*當鍵盤按下時 key_DA 為高態,需傳送一脈波訊號至 key_ck,使按鍵資料栓鎖*/
  • 42. 40 圖 33 軟體架構圖 在軟體架構圖中,包含主程式與多種控制副程式,副程式功能敘述如下:  control_reset:控制接腳狀態重置副程式 此副程式設定栓鎖緩衝器致能與 CK(時脈輸入接腳)之初始狀態。根據電路 設計,栓鎖 DAC 資料之 CK 連接至單晶片微電腦之 P3.0;鍵盤輸入資料栓鎖器 致能接腳𝑂𝐸̅̅̅̅連接至單晶片微電腦之 P3.1;ADC 資料栓鎖器致能接腳𝑂𝐸̅̅̅̅連接至單 晶片微電腦之 P3.2;鍵盤輸入 74922 之 Data available 連接至 P3.3;鍵盤輸入資 料栓鎖器 ck 接腳連接至 P3.4。在此設定 P3.0 與 P3.4 為低態,P3.1 與 P3.2 為高 態。副程式碼如下: void control_reset(void) // 控制接腳狀態重置副程式 { // 進入控制接腳狀態重置副程式 //***控制初始設定*** DAC_ck=0; // 設定 DAC_ck 為低態 key_OE=1; // 設定 key_OE 為高態 ADC_OE=1; // 設定 ADC_OE 為高態 key_ck=0; // 設定 key_ck 為低態 } // 結束控制接腳狀態重置副程式 主程式(main) control_reset DAC_control ADC_DATA key_DATAdisp_dataprog display delay1ms
  • 43. 41  DAC_control:DAC 控制副程式 DAC_control 副程式呼叫時傳入一變數,代表控制 DAC 輸出的二進位數值。 副程式宣告如下: void DAC_control(int); // 宣告 DAC 控制副程式 由於電路上共用資料匯流排的設計,為防止資料衝突,微電腦送出 DAC 資 料前,須避免其他栓鎖器輸出資料至資料匯流排。因此先呼叫 control_reset 副程 式,將 ADC 與鍵盤輸出栓鎖器控制接腳(𝑂𝐸̅̅̅̅)設定為高態,關閉輸出後,微電腦 送出 DAC 資料,產生脈波正緣至 DAC 資料栓鎖器之 CK。DAC_control 副程式 流程圖如圖三十四。信號時序圖如圖三十五。 圖 34 DAC_control 副程式流程圖 圖 35 單晶片微電腦與 DAC 電路信號時序圖 關閉其他栓鎖器 輸出資料至 資料匯流排 微電腦將DAC資料 送入資料匯流排 產生脈波正緣至 DAC資料栓鎖器
  • 44. 42 由時序圖可知,當 DAC_ck 出現脈波正緣信號,DAC 數位資料將改變。 DAC_control 副程式碼如下: void DAC_control(int dac_data) // DAC 控制副程式 { // 進入 DAC 控制副程式 control_reset(); // 先呼叫控制接腳狀態重置副程式 DATA_PORT=dac_data; // 將資料放入資料匯流排 DAC_ck=1; // 送出正緣脈波,改變栓鎖資料 control_reset(); // 先呼叫控制接腳狀態重置副程式 } // 結束 DAC 控制副程式  ADC_DATA:ADC 資料讀取副程式 欲讀取 ADC 電路產生之數位資料,可直接呼叫 ADC_DATA 副程式,其傳 回值即為 ADC 數位資料。先呼叫 control_reset 副程式,將 ADC_OE、key_OE 設 定為高態,DAC_ck 設定為低態後,再致能 ADC_OE,由資料匯流排讀取。副程 式碼如下: int ADC_DATA(void) // ADC 資料讀取副程式 { // 進入 ADC 資料讀取副程式 int ADC_data=0; // 宣告讀取進來的 ADC 資料暫存變數 control_reset(); // 先呼叫控制接腳狀態重置副程式 ADC_OE=0; // 準備讀取 ADC 資料 ADC_data=DATA_PORT; // 由 DATA_PORT(P0)讀取 ADC 資料 control_reset(); // 呼叫控制接腳狀態重置副程式 return ADC_data; // 回傳結果 } // 結束 ADC 資料讀取副程式  key_DATA:鍵盤輸入副程式 當鍵盤按下時,MM74C922 的 DA 接腳輸出高態,接著按鍵資料由資料輸出 接腳 Data A~Data D 送出。直接呼叫 key_DATA 副程式,副程式內傳回之變數 keyin 即為透過資料匯流排所讀入的按鍵資料。副程式碼如下。 int key_DATA(void) // 鍵盤輸入副程式 { // 進入鍵盤輸入副程式 int keyin=0; // 宣告 keyin 區域變數,當鍵盤有輸入時,將輸入值填入 keyin control_reset(); // 先呼叫控制接腳狀態重置副程式 key_ck=1; // 產生脈波正緣信號,將按鍵資料栓鎖 key_ck=0; // 將 key_ck 回復低態 key_OE=0; // 將鍵盤輸入資料傳入資料匯流排 do // do-while 迴圈
  • 45. 43 { // 進入 do-while 敘述 keyin=DATA_PORT; // 將資料讀入 } // 結束 do-while 敘述 while(keyin>=16); // 當輸入讀取錯誤,則再次讀取 control_reset(); // 呼叫控制接腳狀態重置副程式 debouncer(); // 呼叫防彈跳副程式 return keyin; // 傳回結果 } // 結束鍵盤輸入副程式  disp_dataprog:七段顯示資料處理副程式 呼叫七段顯示資料處理副程式時,直接將顯示數值傳入副程式,經運算處理 後,將每一位顯示數值結果放入陣列 disp。使用方式與結果列表如下: 表 10 disp_dataprog 副程式執行分析 呼叫方式 執行結果 disp[3] disp[2] disp[1] disp[0] disp_dataprog(2000) 2 0 0 0 disp_dataprog(300.2) 3 0 0. 2 disp_dataprog(45.21) 4 5. 2 1 disp_dataprog(6.853) 6. 8 5 3 資料來源:本研究者整理 void disp_dataprog(float disp_data) // 七段顯示資料處理副程式 { // 進入資料處理函數 if(((int)disp_data/1000)%10!=0) // 若千位數不為 0(即數值為 X---) { // 進入 if 敘述 int value=disp_data; // 宣告 value=disp_data disp[3]=TAB[(value/1000)%10]; // 取得千位數 disp[2]=TAB[(value/100)%10]; // 取得百位數 disp[1]=TAB[(value/10)%10]; // 取得十位數 disp[0]=TAB[(value/1)%10]; // 取得個位數 } // 結束 if 敘述 else // 判斷若千位數為 0 { // 則進入 else if 敘述 if(((int)disp_data/100)%10!=0) // 判斷若百位數不為 0(即數值為 0X--.-) { // 進入 if 敘述 int value=disp_data*10;
  • 46. 44 // 宣告 value 為 disp_data 的 10 倍 disp[3]=TAB[(value/1000)%10]; // 取得百位數 disp[2]=TAB[(value/100)%10]; // 取得十位數 disp[1]=(TAB[(value/10)%10]-0x80); // 取得個位數和小數點 disp[0]=TAB[(value/1)%10]; // 取得十分位數 //顯示出 XXX.X } // 結束 if 敘述 else // 若百位數為 0 { // 進入 else 敘述 if(((int)disp_data/10)%10!=0) // 若十位數值不為 0(即數值為 00X-.--) { // 進入 if 敘述 int value=disp_data*100; // 宣告 value 為 disp_data 的 100 倍 disp[3]=TAB[(value/1000)%10]; // 取得十位數 disp[2]=(TAB[(value/100)%10]-0x80); // 取得個位數和小數點 disp[1]=TAB[(value/10)%10]; // 取得十分位數 disp[0]=TAB[(value/1)%10]; // 取得百分位數 //顯示出 XX.XX } // 結束 if 敘述 else // 若十位數為 0 { // 進入 else 敘述 int value=disp_data*1000; // 宣告 value 為 disp_data 的 1000 倍 disp[3]=(TAB[(value/1000)%10]-0x80); // 取得個位數和小數點 disp[2]=TAB[(value/100)%10]; // 取得十分位數 disp[1]=TAB[(value/10)%10]; // 取得百分位數 disp[0]=TAB[(value/1)%10]; // 取得千分位數 //顯示出 X.XXX } // 結束 else 敘述 } // 結束 else 敘述 } // 結束 else 敘述 } // 結束資料處理函數  結合上述各副程式,編寫完整控制程式如下: /* DAC 電源供應器控制程式 */
  • 47. 45 #include <AT89X51.h> // 加入 AT89X51.h 函式庫 #include <math.h> // 加入 math.h 函式庫 //====硬體 I/O 定義區=============================================== #define DATA_PORT P0 // 定義資料匯流排連接至 P0 #define SCANP P1 // 定義掃瞄信號輸出連接埠 #define SEG7P P2 // 定義七節顯示器連接埠 sbit DAC_ck = P3^0; // 宣告 DAC 栓鎖脈波接腳 /*DAC_ck 送出正緣,栓鎖器讀取資料匯流排上資料,送入 DAC 電路*/ sbit key_OE = P3^1; // 宣告鍵盤輸入資料控制接腳 /*74922 編碼後之鍵盤輸入資料由栓鎖器栓鎖,當 key_OE=0(低態致能)時資料進入資料匯流排*/ sbit ADC_OE = P3^2; // 宣告 ADC 資料控制接腳 /*當 ADC_OE=0(低態致能)時,ADC 電路輸出資料進入資料匯流排*/ sbit key_DA= P3^3; // 宣告鍵盤輸入 Data available 接腳 /*當鍵盤按下時 key_DA 為高態,若無按鍵按下,key_DA 為低態*/ sbit key_ck = P3^4; // 宣告鍵盤輸入栓鎖器 ck /*當鍵盤按下時 key_DA 為高態,需傳送一脈波訊號至 key_ck,使按鍵資料栓鎖*/ sfr AUXR = 0x8e; // 宣告輔助暫存器 /*AUXR 暫存器是 89S51 新增的暫存器,其位址在 8EH。這個暫存器的功能為控 制 ALE、RESET 腳位的狀態和 WDT 暫存器的特殊啟動模式。*/ //====宣告區====================================================== //***副程式宣告*** void control_reset(void); // 宣告控制接腳狀態重置副程式 void DAC_control(int); // 宣告 DAC 控制副程式 /*欲控制 DAC 八位元資料時,直接將資料傳入 DAC_control 副程式即可*/ int ADC_DATA(void); // 宣告 ADC 資料讀取副程式 /*欲讀取 ADC 資料直接呼叫 ADC_DATA,傳回值即為 ADC 資料*/ int key_DATA(void); // 宣告鍵盤輸入副程式 /*當鍵盤按下時 key_DA 為高態,可直接呼叫 key_DATA,傳回值即為鍵盤輸入值*/ void keyinprog(int); // 宣告鍵盤輸入資料處理副程式 /*將接收到的按鍵值 key_DATA()直接傳入 keyinprog()副程式,寫入 allkeyindata 資料陣列*/ void voltcontrol(float); // 宣告電壓控制副程式 /*將 allkeyindata 資料陣列加權運算後的 allkeyinval 傳入,輸出電壓大小即為 allkeyinval*/ void disp_dataprog(float); // 宣告七段顯示資料處理副程式 /*直接將顯示資料傳入 disp_dataprog 即可*/ void display(void); // 宣告七段顯示器控制副程式 /*七段顯示器控制副程式用以掃描顯示數值*/ void debouncer(void); // 宣告輸入防彈跳副程式
  • 48. 46 void delay1ms(char); // 宣告延遲副程式 //***全域變數宣告*** /*宣告七段顯示器驅動字型信號陣列*/ char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 0~4 0x92, 0x82, 0xf8, 0x80, 0x90 }; // 5~9 int flag=0; // 宣告旗標變數 /*若鍵盤按下時,key_DA=1,flag 設為 1,若 key_DA 由高態轉低態,flag 依然為 1, 此時處理輸入數值*/ float voltmax=16.02; // 宣告輸出電壓最大值變數(為浮點數) float allkeyinval=0; // 宣告輸入四位數值(含小數點),其初值為 0 unsigned int DACnum; // 宣告 DACnum 變數,為 DAC(輸出至 DAC0800)設定值 int dot=0; // 宣告小數位數 /*當按下小數點按鈕時,dot=numofbits*/ long press_time=0; // 宣告按鈕按下時間變數 /*當按下電壓微調按鈕時,press_time 變數不斷累加,以動態調整速率*/ int key_press_times=4; // 宣告輸入位數變數 /*配合小數點按鈕,每按下一次按鍵,key_press_times 遞減 1,直到 numofbits=1 時 代表輸入完成*/ int allkeyindata[4]={0, 0, 0, 0}; // 宣告四位數輸入數值陣列 unsigned char disp[4]={0, 0, 0, 0}; // 宣告七段顯示區陣列 /*disp[0]為 LSD,disp[3]為 MSD*/ //====主程式====================================================== main() // 主程式 { // 進入主程式 //***暫存器初始設定*** AUXR=0x01; // 關閉外部記憶體 ALE 訊號 //***程式開始*** control_reset(); // 呼叫控制接腳狀態重置副程式 DACnum=0; // 將 DACnum 變數初值設定為 0 DAC_control(DACnum); // 設定初始輸出電壓 disp_dataprog(DACnum); // 給定顯示數值 control_reset(); // 呼叫控制接腳狀態重置副程式 display(); // 呼叫顯示副程式 while(1) // 無窮迴圈 { // 進入 while 敘述 while(key_DA==1) // 當有按鈕被按下
  • 49. 47 { // 執行 while 敘述 delay1ms(50); // 呼叫延遲副程式 if(flag==0 && key_DA==1) // 再次檢查(避免雜訊),有輸入的狀況下,若 flag=0 { // 進入 if 敘述 keyinprog(key_DATA()); // 呼叫 keyinprog 副程式處理鍵盤輸入資料 flag=1; // 有輸入,將 flag 旗標設為 1 } // 結束 if 敘述 } // 結束 while 敘述 if(flag==1) // 若有鍵盤按下後放開 { // 進入 if 敘述 flag=0; // 有輸入,將 flag 旗標歸 0 } // 結束 if 敘述 display(); // 呼叫顯示副程式 } // 結束 while 敘述 } // 主程式結束 //====控制接腳狀態重置副程式======================================== void control_reset(void) // 控制接腳狀態重置副程式 { // 進入控制接腳狀態重置副程式 //***控制初始設定*** DAC_ck=0; // 設定 DAC_ck 為低態 key_OE=1; // 設定 key_OE 為高態 ADC_OE=1; // 設定 ADC_OE 為高態 key_ck=0; // 設定 key_ck 為低態 } // 結束控制接腳狀態重置副程式 //====DAC 控制副程式=============================================== void DAC_control(int dac_data) // DAC 控制副程式 { // 進入 DAC 控制副程式 control_reset(); // 先呼叫控制接腳狀態重置副程式 DATA_PORT=dac_data; // 將資料放入資料匯流排 DAC_ck=1; // 送出正緣脈波,改變栓鎖資料 control_reset(); // 先呼叫控制接腳狀態重置副程式 } // 結束 DAC 控制副程式 //====ADC 資料讀取副程式=========================================== int ADC_DATA(void) // ADC 資料讀取副程式 { // 進入 ADC 資料讀取副程式 int ADC_data=0;
  • 50. 48 // 宣告讀取進來的 ADC 資料暫存變數 control_reset(); // 先呼叫控制接腳狀態重置副程式 ADC_OE=0; // 準備讀取 ADC 資料 ADC_data=DATA_PORT; // 由 DATA_PORT(P0)讀取 ADC 資料 control_reset(); // 呼叫控制接腳狀態重置副程式 return ADC_data; // 回傳結果 } // 結束 ADC 資料讀取副程式 //====鍵盤輸入副程式=============================================== int key_DATA(void) // 鍵盤輸入副程式 { // 進入鍵盤輸入副程式 int keyin=0; // 宣告 keyin 區域變數,當鍵盤有輸入時,將輸入值填入 keyin control_reset(); // 先呼叫控制接腳狀態重置副程式 key_ck=1; // 產生脈波正緣信號,將按鍵資料栓鎖 key_ck=0; // 將 key_ck 回復低態 key_OE=0; // 將鍵盤輸入資料傳入資料匯流排 do // do-while 迴圈 { // 進入 do-while 敘述 keyin=DATA_PORT; // 將資料讀入 } // 結束 do-while 敘述 while(keyin>=16); // 當輸入讀取錯誤,則再次讀取 control_reset(); // 呼叫控制接腳狀態重置副程式 debouncer(); // 呼叫防彈跳副程式 return keyin; // 傳回結果 } // 結束鍵盤輸入副程式 //====鍵盤輸入資料處理副程式======================================== void keyinprog(int keyindata) // 鍵盤輸入資料處理副程式 { // 進入鍵盤輸入資料處理副程式 switch(keyindata) // 依鍵盤輸入的值進行處理 { // 進入 switch 敘述 case(12): // 若按下數字 0 { // 進入 case12 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移
  • 51. 49 allkeyindata[0]=0; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case12 敘述 break; // 跳離 switch-case 敘述 case(13): // 若按下數字 1 { // 進入 case13 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=1; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case13 敘述 break; // 跳離 switch-case 敘述 case(14): // 若按下數字 2 { // 進入 case14 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=2; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case14 敘述 break; // 跳離 switch-case 敘述 case(15): // 若按下數字 3 { // 進入 case15 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移
  • 52. 50 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=3; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case15 敘述 break; // 跳離 switch-case 敘述 case(8): // 若按下數字 4 { // 進入 case8 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=4; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case8 敘述 break; // 跳離 switch-case 敘述 case(9): // 若按下數字 5 { // 進入 case9 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=5; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case9 敘述 break; // 跳離 switch-case 敘述 case(10): // 若按下數字 6 { // 進入 case10 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移
  • 53. 51 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=6; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case10 敘述 break; // 跳離 switch-case 敘述 case(11): // 若按下數字 7 { // 進入 case11 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=7; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case11 敘述 break; // 跳離 switch-case 敘述 case(4): // 若按下數字 8 { // 進入 case4 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=8; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case4 敘述 break; // 跳離 switch-case 敘述 case(5): // 若按下數字 9 { // 進入 case5 敘述 key_press_times=key_press_times-1; // 遞減 key_press_times
  • 54. 52 allkeyindata[3]=allkeyindata[2]; // 資料轉移 allkeyindata[2]=allkeyindata[1]; // 資料轉移 allkeyindata[1]=allkeyindata[0]; // 資料轉移 allkeyindata[0]=9; // 寫入最低位元資料 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case5 敘述 break; // 跳離 switch-case 敘述 case(6): // 若按下小數點(A 按鈕) { // 進入 case6 敘述 dot=key_press_times; // 計算小數點位置 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ disp_dataprog(allkeyinval); // 給定顯示數值 } // 結束 case6 敘述 break; // 跳離 switch-case 敘述 case(0): // 若按下完成(C 按鈕) { // 進入 case0 敘述 } // 結束 case0 敘述 } // 結束 switch 敘述 if(key_press_times==0) // 已輸入四個數字 { // 進入 if 敘述 allkeyindata[3]=0; // 輸入資料歸 0 allkeyindata[2]=0; // 輸入資料歸 0 allkeyindata[1]=0; // 輸入資料歸 0 allkeyindata[0]=0; // 輸入資料歸 0 dot=0; // 小數位數歸 0 key_press_times=4; // 按鈕按下次數回歸 4 delay1ms(10); // 呼叫延遲副程式 voltcontrol(allkeyinval); // 呼叫電壓控制副程式,調整輸出電壓 } // 結束 if 敘述 } // 結束鍵盤輸入資料處理副程式 //====電壓控制副程式=============================================== void voltcontrol(float DAC_num) // 電壓控制副程式
  • 55. 53 { // 進入電壓控制副程式 if(DAC_num<=voltmax) // 若設定輸出電壓小於等於 voltmax { // 進入 if 敘述 DACnum=allkeyinval*10000/628; // 設定輸出電壓二進位數值 DAC_control(DACnum); // 設定輸出電壓 disp_dataprog(DAC_num); // 給定顯示數值 } // 結束 if 敘述 else // 若設定輸出電壓大於 16.02V,設定電壓過高 { // 進入 else 敘述 allkeyindata[3]=0; // 輸入資料歸 0 allkeyindata[2]=0; // 輸入資料歸 0 allkeyindata[1]=0; // 輸入資料歸 0 allkeyindata[0]=0; // 輸入資料歸 0 dot=0; // 小數位數歸 0 key_press_times=4; // 按鈕按下次數回歸 4 allkeyinval=(allkeyindata[3]*1000+allkeyindata[2]*100+allkeyindata[1]*10+allkeyindat a[0])/pow(10,dot); /*執行加權運算並考慮小數*/ voltcontrol(allkeyinval); // 呼叫電壓控制副程式 } // 結束 else 敘述 } // 結束電壓控制副程式 //====七段顯示資料處理副程式======================================== void disp_dataprog(float disp_data) // 七段顯示資料處理副程式 { // 進入資料處理函數 if(((int)disp_data/1000)%10!=0) // 若千位數不為 0(即數值為 X---) { // 進入 if 敘述 int value=disp_data; // 宣告 value=disp_data disp[3]=TAB[(value/1000)%10]; // 取得千位數 disp[2]=TAB[(value/100)%10]; // 取得百位數 disp[1]=TAB[(value/10)%10]; // 取得十位數 disp[0]=TAB[(value/1)%10]; // 取得個位數 } // 結束 if 敘述 else // 判斷若千位數為 0 { // 則進入 else if 敘述 if(((int)disp_data/100)%10!=0) // 判斷若百位數不為 0(即數值為 0X--.-) { // 進入 if 敘述
  • 56. 54 int value=disp_data*10; // 宣告 value 為 disp_data 的 10 倍 disp[3]=TAB[(value/1000)%10]; // 取得百位數 disp[2]=TAB[(value/100)%10]; // 取得十位數 disp[1]=(TAB[(value/10)%10]-0x80); // 取得個位數和小數點 disp[0]=TAB[(value/1)%10]; // 取得十分位數 //顯示出 XXX.X } // 結束 if 敘述 else // 若百位數為 0 { // 進入 else 敘述 if(((int)disp_data/10)%10!=0) // 若十位數值不為 0(即數值為 00X-.--) { // 進入 if 敘述 int value=disp_data*100; // 宣告 value 為 disp_data 的 100 倍 disp[3]=TAB[(value/1000)%10]; // 取得十位數 disp[2]=(TAB[(value/100)%10]-0x80); // 取得個位數和小數點 disp[1]=TAB[(value/10)%10]; // 取得十分位數 disp[0]=TAB[(value/1)%10]; // 取得百分位數 //顯示出 XX.XX } // 結束 if 敘述 else // 若十位數為 0 { // 進入 else 敘述 int value=disp_data*1000; // 宣告 value 為 disp_data 的 1000 倍 disp[3]=(TAB[(value/1000)%10]-0x80);// 取得個位數和小數點 disp[2]=TAB[(value/100)%10]; // 取得十分位數 disp[1]=TAB[(value/10)%10]; // 取得百分位數 disp[0]=TAB[(value/1)%10]; // 取得千分位數 //顯示出 X.XXX } // 結束 else 敘述 } // 結束 else 敘述 } // 結束 else 敘述 } // 結束資料處理函數 //====七段顯示器控制副程式========================================== void display(void) // 七段顯示器控制副程式 { // 七段顯示器控制副程式開始 char i,scan; // 宣告變數 char times=20; // 掃瞄 20 次 while (--times>=0) // while 迴圈開始 { scan=1; // 初始掃瞄信號
  • 57. 55 for(i=0;i<4;i++) // for 敘述 { // for 迴圈開始 SEG7P=0xff; // 關閉 7 節顯示器 SCANP=~scan; // 輸出掃瞄信號 SEG7P=disp[i]; // 轉換成驅動信號,並輸出到 P0 delay1ms(1); // 延遲 3ms scan<<=1; // 下一個掃瞄信號 } // 結束 for 敘述 } // 結束 while 敘述 } // 七段顯示器控制副程式結束 //====防彈跳副程式================================================= void debouncer(void) // 進入防彈跳副程式 { int i2; // 宣告整數變數 i,j for (i2=0;i2<2400;i2++); // 連數 2400 次 } // 防彈跳函數結束 //====延遲函數==================================================== void delay1ms(char x) // 延遲函數 { int i,j; // 宣告變數 for(i=0;i<x;i++) // 外迴圈 for(j=0;j<70;j++); // 內迴圈 } // 延遲函數結束 完整功能說明如下:  開機時,七段顯示器顯示”0000”,輸出電壓為 0V  開始設定輸出電壓:※一次輸入四位數字  若欲設定輸出電壓為 5V,依序按下”5”、”.”、”0” 、”0” 、”0”,輸入完 成時七段顯示器上顯示”5.000”,輸出電壓為 5V±50mV。  若欲設定輸出電壓為 3.3V,依序按下”3”、”.”、”3” 、”0” 、”0”,輸入 完成時七段顯示器上顯示”3.300”,輸出電壓為 3.3V±50mV。  若欲設定輸出電壓為 1.23V,依序按下”1”、”.”、”2” 、”3” 、”0”,輸 入完成時七段顯示器上顯示”1.230”,輸出電壓約為 1.23V  若欲設定輸出電壓為 3.456V,依序按下”3”、”.”、”4” 、”5” 、”6”,輸 入完成時七段顯示器上顯示”3.456”,輸出電壓約為 3.456V
  • 58. 56 (八) 使用器具: 表 11 使用器具表 品名 單位 數量 備註 萬用板 塊 1 又稱 電木 PC 板 電木萬用版 或使用感光電路板 尖嘴鉗 只 1 5” 斜口鉗 只 1 5” 三用電表 組 1 RH830L 電烙鐵 組 1 20W 或 30W 皆可 吸錫器 組 1 IC 線上燒錄板 組 1 資料來源:本研究者整理 (九) 使用材料: 表 12 使用材料表 品名 單位 數量 備註 IC DAC0800 只 1 DAC08 、DAC0801 、DAC0802 亦可 89S51 單晶片 只 2 89C51、89S52 亦可 74922 只 1 MM54C922、MM74C922 皆可 OP Amp 741 只 2 μA741CP、CA741 、SN52741、LM741、 ST741、SN72741 皆可 IC 腳座 40P 只 2 提供 89S51 單晶片使用 18P 只 1 提供 74922 IC 使用 16P 只 1 提供 DAC0800 IC 使用 14P 只 1 提供 7404 IC 使用 8P 只 2 提供 741IC 使用 七段顯示器腳座 只 1
  • 59. 57 資料來源:本研究者整理 四位數七段顯示器 只 1 共陽 二極體 只 1 1N4001~1N4007 皆可 電阻器 100Ω,0.5W 只 8 棕黑棕金 1kΩ,0.5W 只 6 棕黑紅金 4.7kΩ,0.5W 只 4 黃紫紅金 100kΩ,0.5W 只 2 棕黑黃金 排阻 10kΩ 只 1 電晶體 2SA1015 只 4 PNP 型高頻用 TIP140 只 1 NPN 型 互補達靈頓功率電晶體 陶瓷電容器 30pF 只 4 0.01μF 只 1 0.1μF 只 2 石英晶體振盪器 12MHz 只 1 33 MHz 只 1 按鈕開關 只 4 指撥開關 只 1 導線 條 若干 銲錫 條 若干
  • 60. 58 (十) 實驗數據: 1、 達靈頓功率電晶體輸出測試: (1) 無載電壓測試: 透過實驗測試圖二十一 電源供應器電路的運作效能,並記錄實驗數據;此實 驗數據以 0.5V 為間隔,藉由鍵盤控制使輸出的類比電壓逐漸增加。在無負載 (𝑅 𝐿 = ∞Ω)狀況下,設定 DAC0800 參考電流(IREF)為 3.3mA,且±𝑉𝑐𝑐 = ±18𝑉時測 得之數據如表 13 所示。 表 13 電源供應器實驗數據表(無負載) 輸入 電壓值(V) 二進位數值 輸出電壓 理論值(V) 實測 輸出值(V) 誤差(V) 誤差百分比(%) 0.5 00000111 0.428385417 0.44 0.06 13.63636364 1 00001111 0.91796875 0.942 0.058 6.157112527 1.5 00010111 1.407552083 1.443 0.057 3.95010395 2 00011111 1.897135417 1.944 0.056 2.880658436 2.5 00100111 2.38671875 2.46 0.04 1.62601626 3 00101111 2.876302083 2.96 0.04 1.351351351 3.5 00110111 3.365885417 3.46 0.04 1.156069364 4 00111111 3.85546875 3.96 0.04 1.01010101 4.5 01000111 4.345052083 4.48 0.02 0.446428571 5 01001111 4.834635417 4.98 0.02 0.401606426 5.5 01010111 5.32421875 5.48 0.02 0.364963504 6 01011111 5.813802083 5.98 0.02 0.334448161 6.5 01100111 6.303385417 6.49 0.01 0.154083205 7 01101111 6.79296875 6.99 0.01 0.143061516 7.5 01110111 7.282552083 7.49 0.01 0.133511348 8 01111111 7.772135417 7.99 0.01 0.125156446 8.5 10000111 8.26171875 8.51 -0.01 -0.117508813 9 10001111 8.751302083 9.01 -0.01 -0.110987791 9.5 10010111 9.240885417 9.51 -0.01 -0.105152471 10 10011111 9.73046875 10.01 -0.01 -0.0999001 10.5 10100111 10.22005208 10.52 -0.02 -0.190114068 11 10101111 10.70963542 11.02 -0.02 -0.181488203 11.5 10110111 11.19921875 11.52 -0.02 -0.173611111 12 10111111 11.68880208 12.02 -0.02 -0.166389351 12.5 11000111 12.17838542 12.54 -0.04 -0.318979266 13 11001111 12.66796875 13.04 -0.04 -0.306748466
  • 61. 59 13.5 11010110 13.09635417 13.47 0.03 0.222717149 14 11011110 13.5859375 13.97 0.03 0.214745884 14.5 11100110 14.07552083 14.48 0.02 0.138121547 15 11101110 14.56510417 14.98 0.02 0.133511348 15.5 11110110 15.0546875 15.48 0.02 0.129198966 16 11111110 15.54427083 15.97 0.03 0.187852223 資料來源:本研究者整理 (2) 輕載電壓測試: 採用 1kΩ 電阻作為電源供應器輸出負載,測得實驗數據如表 14。 表 14 電源供應器實驗數據表(輕載) 輸入 電壓值(V) 二進位數值 輸出電壓 理論值(V) 實測 輸出值(V) 誤差(V) 誤差百分比(%) 0.5 00000111 0.428385417 0.44 0.06 13.63636364 1 00001111 0.91796875 0.941 0.059 6.269925611 1.5 00010111 1.407552083 0.793 0.707 89.15510719 2 00011111 1.897135417 0.84 1.16 138.0952381 2.5 00100111 2.38671875 0.83 1.67 201.2048193 3 00101111 2.876302083 0.83 2.17 261.4457831 3.5 00110111 3.365885417 0.77 2.73 354.5454545 4 00111111 3.85546875 0.78 3.22 412.8205128 4.5 01000111 4.345052083 1.16 3.34 287.9310345 5 01001111 4.834635417 1.42 3.58 252.1126761 5.5 01010111 5.32421875 1.52 3.98 261.8421053 6 01011111 5.813802083 2.09 3.91 187.0813397 6.5 01100111 6.303385417 2.48 4.02 162.0967742 7 01101111 6.79296875 2.99 4.01 134.1137124 7.5 01110111 7.282552083 3.6 3.9 108.3333333 8 01111111 7.772135417 3.85 4.15 107.7922078 8.5 10000111 8.26171875 4.46 4.04 90.58295964 9 10001111 8.751302083 5.02 3.98 79.28286853 9.5 10010111 9.240885417 5.55 3.95 71.17117117 10 10011111 9.73046875 6.06 3.94 65.01650165 10.5 10100111 10.22005208 6.54 3.96 60.55045872 11 10101111 10.70963542 7.09 3.91 55.14809591 11.5 10110111 11.19921875 7.66 3.84 50.1305483
  • 62. 60 12 10111111 11.68880208 8.21 3.79 46.16321559 12.5 11000111 12.17838542 8.77 3.73 42.5313569 13 11001111 12.66796875 9.3 3.7 39.78494624 13.5 11010110 13.09635417 9.75 3.75 38.46153846 14 11011110 13.5859375 10.26 3.74 36.45224172 14.5 11100110 14.07552083 10.78 3.72 34.50834879 15 11101110 14.56510417 11.31 3.69 32.62599469 15.5 11110110 15.0546875 11.9 3.6 30.25210084 16 11111110 15.54427083 13.63 2.37 17.38811445 資料來源:本研究者整理 2、 增強型 N 通道 MOSFET 測試: (1) 輕載測試: 將電路中的達靈頓功率電晶體改用 IRF540、IRF740 與、IRF530 等增強 型 N 通道 MOSFET 後,於輕載(負載為 1kΩ)狀況下進行測量,輸入電源 ±𝑉𝑐𝑐同樣為 ± 18,實驗數據如表 15。 表 15 電源供應器實驗數據表(輕載) 輸出電壓 設定值(v) IRF540 輸出電壓(V) IRF740 輸出電壓(V) IRF530 輸出電壓(V) 0.000 0.0056 0.0054 0.0057 0.500 0.44 0.442 0.442 1.000 0.95 0.944 0.943 1.500 1.45 1.446 1.444 2.000 1.95 1.947 1.946 2.500 2.46 2.46 2.46 3.000 2.95 2.96 2.96 3.500 2.09 3.46 3.46 4.000 2.62 3.96 3.96 4.500 3.95 4.48 4.48 5.000 4.28 4.98 4.98 5.500 5.48 5.48 5.48 6.000 5.98 5.97 5.98 6.500 6.49 6.48 6.49 7.000 6.99 6.98 6.99 7.500 7.49 7.48 7.49 8.000 8.00 7.98 7.99
  • 63. 61 8.500 8.51 8.50 8.51 9.000 9.01 9.00 9.01 9.500 9.51 9.51 9.51 10.00 10.01 10.01 10.01 10.50 10.52 10.52 10.52 11.00 11.02 11.02 11.02 11.50 11.53 11.52 11.52 12.00 12.02 12.02 12.02 12.50 12.54 12.54 12.53 13.00 13.04 13.04 13.03 13.50 13.48 13.48 13.47 14.00 13.89 13.97 13.97 14.50 13.83 14.48 14.36 15.00 13.83 14.96 14.36 15.50 13.83 14.99 14.36 16.00 13.82 14.99 14.36 資料來源:本研究者整理 (2) 重載測試: 採用 IRF740 作為電流放大元件,表 16 為負載電阻 4Ω 狀況下測得之實 驗數據。 表 16 電源供應器實驗數據表(重載) 輸出電壓 設定值(v) 負載 4Ω 輸出電壓 (V) 負載 4Ω 輸出電流(A) 總輸出功率(W) 電晶體功率(W) 理論值 實測值 理論值 實測值 0.000 0 0 0 0 0 0 0.500 0.44 0.125 0.1 0.044 2.1875 1.756 1.000 0.94 0.25 0.22 0.2068 4.25 3.7532 1.500 1.43 0.375 0.34 0.4862 6.1875 5.6338 2.000 1.94 0.5 0.45 0.873 8 7.227 2.500 2.44 0.625 0.57 1.3908 9.6875 8.8692 3.000 2.94 0.75 0.69 2.0286 11.25 10.3914 3.500 3.45 0.875 0.8 2.76 12.6875 11.64 4.000 3.95 1 0.92 3.634 14 12.926 4.500 4.47 1.125 1.04 4.6488 15.1875 14.0712 5.000 4.98 1.25 1.16 5.7768 16.25 15.1032 5.500 5.48 1.375 1.27 6.9596 17.1875 15.9004
  • 64. 62 6.000 5.99 1.5 1.39 8.3261 18 16.6939 6.500 6.51 1.625 1.51 9.8301 18.6875 17.3499 7.000 7.01 1.75 1.63 11.4263 19.25 17.9137 7.500 7.52 1.875 1.75 13.16 19.6875 18.34 8.000 8.03 2 1.87 15.0161 20 18.6439 8.500 8.56 2.125 1.99 17.0344 20.1875 18.7856 9.000 9.08 2.25 2.11 19.1588 20.25 18.8212 資料來源:本研究者整理 (3) 動態負載測試: 電源供應器輸出電壓固定下,當負載為可變大小之電阻,電流亦隨著 改變。以電晶體電路進行動態負載測試,電路圖如下: (4) (十一) 數據分析: 以表 13 之無載實驗數據,繪製顯示電壓與輸出電壓關係如圖三十六。 圖 36 顯示電壓值與輸出電壓關係(無載) 由上圖可知:採用 DAC0800 作為數位式電源供應器的數位-類比轉換元件, 並透過達靈頓電路降低輸出阻抗,在無載狀況下可獲得線性的電壓輸出。根據 表 13 計算平均誤差百分比為 1.145876952%。由表 14 的實驗數據進行輕載(以 1kΩ 電阻作為負載)狀況下的分析:圖三十七為顯示電壓值與輸出電壓關係。 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18 顯示電壓值與輸出電壓關係 實測輸出值輸出電壓(V) 顯示 電壓值(V)
  • 65. 63 圖 37 顯示電壓值與輸出電壓關係(輕載) 由上圖可看出使用達靈頓功率電晶體仍具有明顯的負載效應,以負載 1kΩ 的情況下,輸出電壓平均下降 3.1848V;觀察曲線可得知:顯示電壓值從 1V 至 5V 輸出電壓下降情形逐漸明顯,而調整顯示電壓值大於 5V 時,輸出電壓大約 小於顯示電壓值 3~4V。 為降低負載效應,將電路中的達靈頓功率電晶體改用增強型 N 通道 MOSFET,本論文採用 IRF540、IRF740、IRF530 三種 MOSFET 進行實驗;於 輕載(負載為 1kΩ)下實驗結果記錄如表 15;根據表 15,IRF540 輸出電壓誤差百 分比為-6.890060792%,IRF740 輸出電壓誤差百分比為-1.339047107%,IRF530 輸出電壓誤差百分比為-1.771258789%,圖三十八為實驗結果輸出電壓曲線圖; 圖三十九為使用 IRF740 輕載狀況下輸出電壓的誤差曲線。 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18 無載實測輸出值 負載為1kΩ實測輸出值 顯示電壓值與輸出電壓關係 顯示 電壓值(V) 輸出電壓(V)
  • 66. 64 圖 38 增強型 N 通道 MOSFET 電源供應器電壓輸出曲線 圖 39 IRF740 輸出電壓誤差曲線 由圖三十八可知,IRF540於3V至5.5V區間電壓出現較大誤差;而以IRF740 與 IRF530 比較,採用 IRF740 具有最佳效果的電壓輸出,最高輸出電壓可達 15V, 約較 IRF530 高 0.64V,輕載實驗照片如圖四十。 0 2 4 6 8 10 12 14 16 IRF540 輸出電壓(V) IRF740 輸出電壓(V) IRF530 輸出電壓(V) -14 -12 -10 -8 -6 -4 -2 0 2 0 2 4 6 8 10 12 14 16 電壓誤差百分比電壓誤差百分比 輸出電壓(V) 輸出電壓(V) 電壓誤差百分比(%) 顯示 電壓值(V) 增強型 N 通道 MOSFET 電源供應器電壓輸出曲線
  • 67. 65 圖 40 輕載實驗照片 在重載測試中,採用場效應電晶體 IRF740 配合散熱片,測試其輸出高電流 時的效能;實驗數據表如表 16,重載輸出曲線圖如圖四十一。 圖 41 重載輸出曲線圖 0 2 4 6 8 10 12 0 5 10 15 20 25 負載1kΩ輸出電壓(V) 負載4Ω輸出電壓(V) 重載輸出曲線圖 顯示電壓值(V) 輸出電壓(V)
  • 68. 66 由圖四十一可知:IRF740 在負載為 4Ω 水泥電阻狀況下,在 0~9V 範圍中 仍能維持線性的電壓輸出,電壓誤差百分比平均值為 1.805737154%,比較同範 圍下負載為 1kΩ 電阻,電壓誤差百分比平均值為 1.762272737%;誤差僅增大 0.043464417%,負載效應極低。 參● 結論與展望 一、藉由實驗證實以 DAC0800 製作電源供應器的可行性。 二、採用增強型 N 通道 MOSFET 進行電流放大與輸出較達靈頓電路佳,具有 較低的負載效應。 三、在未來的發展與研究方向如下: (一) 增加可調限流功能,於負載過載或短路時限制輸出電流。 (二) 能夠提高輸出電壓解析度,以更精確控制輸出電壓。 (三) 能夠與電腦連線,執行可程式控制電壓輸出。 任何電子電路的工作基礎皆來自電源;若沒有了電源,再完整、功能再 強大的電路亦無法運作。雖然可調式電源供應器在生活中沒有直接的運用, 但卻是實驗室中重要的利器之一。電源供應器的效能在電路開發實驗階段扮 演重要角色。所謂電源供應器的效能可分為電能供應能力、偵測能力、控制 能力與傳輸介面……等項目。本研究所製作之電源供應器電能供應方面輸出 電流可達 1A 以上,控制能力方面以八位元解析度調整輸出電壓 0~16V,未 來將以增加輸出電壓、電流與功率的偵測紀錄、可經由 USB 介面與電腦進行 資料傳輸……為研究方向,讓電源供應器有更豐富的功能。
  • 69. 67 肆● 引註資料 一、 江賢龍、周玉崑 著。基礎電子實習(2008 年 6 月初版)。台北:台科 大圖書股份有限公司。ISBN:986-129-331-0 二、 蔡朝洋、蔡承佑 著。電子學實習Ⅰ。台北:全華圖書股份有限公司。 ISBN:978-957-21-7955-0 三、 蔡朝洋、蔡承佑 著。電子學實習Ⅱ(2012 年 1 月初版一刷)。台北: 全華圖書股份有限公司。ISBN:978-957-21-8290-1 四、 蔡朝洋、蔡承佑 著。電子學Ⅱ(2012 年 1 月初版一刷)。台北:全華 圖書股份有限公司。ISBN:978-957-21-8351-9 五、 宋由禮、陳柏宏 著。電子學Ⅱ(2009 年 11 月初版六刷)。台北:旗立 資訊股份有限公司。ISBN:978-986-6208-69-0 六、 蔡朝洋 著(2006 年 6 月初版五刷)。電子電路實習。台北:全華科技 股份有限公司。ISBN:978-957-21-3441-2 七、 蔡朝洋 著(2010 年 12 月五版一刷)。電子電路實作技術。台北:全華 科技股份有限公司。ISBN:978-957-21-7869-0 八、 張志安、李志文、陳世昌 編著(2002 年 5 月初版,2005 年 6 月第三 版)。 電子電路實習。台北:台科大圖書股份有限公司。ISBN: 986797459-X 九、 張義和、王敏男、許宏昌、余春長 編著(2009 年 6 月三版)。例說 89S51-C語言 (第三版)。台北:新文京開發出版股份有限公司。ISBN: 978-986-236-086-6 十、 李華敏 編著(2011 年 3 月初版)。數位邏輯。台北:旗立資訊股份有 限公司。ISBN:978-986-6208-27-0 十一、 Roger L. Tokheim 著,陳進益、羅國維 譯(2009 年 10 月初版二刷)。 數位邏輯設計-原理與應用第六版。台北:美商麥格羅‧希爾國際 股份有限公司 台灣分公司。ISBN:978-986-157-096-9 十二、 蔡栢樟 編著(2002 年 8 月初版再刷)。微電腦架構。台北:全華科技 圖書股份有限公司。ISBN:957-21-3578-3 十三、 AT89S51 datasheet: http://www.datasheetcatalog.org/datasheet/atmel/doc2487.pdf 十四、 DAC0800 datasheet: http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS005 686.PDF 十五、 七段顯示器接腳圖: http://content.saihs.edu.tw/contentbook/shu_web/chapter_htm/chapter5/5 b/img/7segment-int.jpg
  • 70. 68 十六、 2SA1015 datasheet: http://www.datasheetcatalog.org/datasheets/166/157040_DS.pdf 十七、 4049、4050 IC datasheet: http://www.datasheetcatalog.org/datasheets2/65/65034_1.pdf 十八、 TIP120 datasheet: http://www.datasheetcatalog.org/datasheet/stmicroelectronics/4128.pdf 十九、 TIP140 datasheet: http://www.datasheetcatalog.org/datasheet/stmicroelectronics/4132.pdf 二十、 N 通道 MOSFET 電路符號: http://www.globalspec.com/RefArticleImages/E2C6C843904D2CDC53 00B2691FDEF68F_9_09_01.gif 二十一、MM74C922 datasheet: http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS00 6037.PDF 二十二、74AC574 datasheet: http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics /mXvuruu.pdf
  • 71. 69 伍● 附錄 一、單晶片控制程式編譯結果: 0000 : 02 01 39 E4 75 0B FF 75 0A FF F5 09 F5 08 E5 0D 0010 : 45 0C 70 0C 20 B3 09 12 01 1D 75 0C 00 75 0D 01 0020 : E5 0D 64 01 45 0C 70 0B 20 B3 08 12 01 1D E4 F5 0030 : 0C F5 0D AF 0B AE 0A AD 09 AC 08 12 01 2C 8F 90 0040 : 8F 80 7F C8 7E 00 12 00 F7 20 B0 4D 12 01 1D E4 0050 : FA F9 F8 E5 0B 24 01 F5 0B EA 35 0A F5 0A E9 35 0060 : 09 F5 09 E8 35 08 F5 08 E5 0D 64 01 45 0C 70 29 0070 : F5 0E F5 0F C3 E5 0F 94 F4 E5 0E 64 80 94 81 50 0080 : 18 12 00 F1 C2 B2 12 00 F3 05 0F E5 0F 85 0E 0E 0090 : 70 02 05 0E 14 F5 0F 80 DB 30 B1 03 02 00 0E 12 00A0 : 01 1D E5 0B 24 FF F5 0B E5 0A 34 FF F5 0A E5 09 00B0 : 34 FF F5 09 E5 08 34 FF F5 08 E5 0D 64 01 45 0C 00C0 : 60 03 02 00 0E F5 0E F5 0F C3 E5 0F 94 F4 E5 0E 00D0 : 64 80 94 81 40 03 02 00 0E 12 00 F1 C2 B2 12 00 00E0 : F3 05 0F E5 0F 85 0E 0E 70 02 05 0E 14 F5 0F 80 00F0 : D8 D2 B2 7F 01 7E 00 E4 FD FC C3 ED 9F EE 64 80 0100 : F8 EC 64 80 98 50 15 E4 FB FA 0B BB 00 01 0A EB 0110 : 64 78 4A 70 F5 0D BD 00 01 0C 80 DE 22 E4 FF FE 0120 : 0F BF 00 01 0E BE 09 F8 BF 60 F5 22 CF F4 CF CE 0130 : F4 CE CD F4 CD CC F4 CC 22 78 7F E4 F6 D8 FD 75 0140 : 81 0F 02 00 03 FF FF FF FF FF FF FF FF FF FF FF 0150 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 二、單晶片解碼程式編譯結果: 0000 : 02 01 3E 8F 82 8E 83 7C 00 7D 3A 12 01 CA EF 24 0010 : 3E FD EE 34 FF AB 05 FA C3 EF 94 C2 EE 94 00 50 0020 : 0D 75 13 FF 75 12 40 75 11 C0 75 10 C0 22 7C 03 0030 : 7D E8 AF 03 AE 02 12 01 DC C3 EF 94 0A EE 94 00 0040 : 50 62 7C 00 7D 0A 12 01 DC 74 AE 2D F5 82 74 02 0050 : 3C F5 83 E4 93 24 80 F5 13 7C 00 7D 64 AF 03 AE 0060 : 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D F5 82 0070 : 74 02 3C F5 83 E4 93 F5 12 7C 00 7D 0A AF 03 AE 0080 : 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D F5 82 0090 : 74 02 3C F5 83 E4 93 F5 11 7C 00 7D 0A AF 03 AE
  • 72. 70 00A0 : 02 02 01 2C 7C 03 7D E8 AF 03 AE 02 12 01 DC C3 00B0 : EF 94 0A EE 94 00 50 03 02 01 3D 7C 27 7D 10 AF 00C0 : 03 AE 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D 00D0 : F5 82 74 02 3C F5 83 E4 93 F5 13 7C 03 7D E8 AF 00E0 : 03 AE 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 AE 2D 00F0 : F5 82 74 02 3C F5 83 E4 93 24 80 F5 12 7C 00 7D 0100 : 64 AF 03 AE 02 12 01 DC 7C 00 7D 0A 12 01 DC 74 0110 : AE 2D F5 82 74 02 3C F5 83 E4 93 F5 11 AE 02 AF 0120 : 03 7C 00 7D 0A 12 01 DC 7C 00 7D 0A 12 01 DC 74 0130 : AE 2D F5 82 74 02 3C F5 83 E4 93 F5 10 22 78 7F 0140 : E4 F6 D8 FD 75 81 13 02 01 85 02 02 9F E4 93 A3 0150 : F8 E4 93 A3 40 03 F6 80 01 F2 08 DF F4 80 29 E4 0160 : 93 A3 F8 54 07 24 0C C8 C3 33 C4 54 0F 44 20 C8 0170 : 83 40 04 F4 56 80 01 46 F6 DF E4 80 0B 01 02 04 0180 : 08 10 20 40 80 90 02 B8 E4 7E 01 93 60 BC A3 FF 0190 : 54 3F 30 E5 09 54 1F FE E4 93 A3 60 01 0E CF 54 01A0 : C0 25 E0 60 A8 40 B8 E4 93 A3 FA E4 93 A3 F8 E4 01B0 : 93 A3 C8 C5 82 C8 CA C5 83 CA F0 A3 C8 C5 82 C8 01C0 : CA C5 83 CA DF E9 DE E7 80 BE EF 8D F0 A4 A8 F0 01D0 : CF 8C F0 A4 28 CE 8D F0 A4 2E FE 22 BC 00 0B BE 01E0 : 00 29 EF 8D F0 84 FF AD F0 22 E4 CC F8 75 F0 08 01F0 : EF 2F FF EE 33 FE EC 33 FC EE 9D EC 98 40 05 FC 0200 : EE 9D FE 0F D5 F0 E9 E4 CE FD 22 ED F8 F5 F0 EE 0210 : 84 20 D2 1C FE AD F0 75 F0 08 EF 2F FF ED 33 FD 0220 : 40 07 98 50 06 D5 F0 F2 22 C3 98 FD 0F D5 F0 EA 0230 : 22 75 0C 14 E4 F5 0D F5 0E 15 0C C3 E5 0C 64 80 0240 : 94 80 40 2E 75 0B 01 E4 F5 0A C3 E5 0A 64 80 94 0250 : 84 50 E6 75 A0 FF E5 0B F4 F5 90 74 10 25 0A F8 0260 : E6 F5 A0 7F 01 12 02 73 E5 0B 25 E0 F5 0B 05 0A 0270 : 80 D8 22 E4 FD FC EF FB 33 95 E0 FA C3 ED 9B EA 0280 : 64 80 F8 EC 64 80 98 50 15 E4 FB FA 0B BB 00 01 0290 : 0A EB 64 46 4A 70 F5 0D BD 00 01 0C 80 D8 22 12 02A0 : 02 31 85 80 0F AF 0F 7E 00 12 00 03 80 F1 C0 F9 02B0 : A4 B0 99 92 82 F8 80 90 04 10 00 00 00 00 00 FF 02C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 三、電源供應器雙單晶片控制電路圖:
  • 73. 71