如何為運算放大器和分壓器應用選擇電阻對

電阻通常成對使用。分壓器就是一個常見的例子。另一個例子是運算放大器中的輸入-回授電阻對。選擇這些電阻對本身並不難,因為簡單的除法運算就能得出電阻比。然而,找到最佳電阻比卻頗具挑戰性,因為需要測試的組合實在太多了。

例如,考慮一個增益為 5 的反相運算放大器。我們知道電阻比為 5:1,因為反相運算放大器的增益定義為:

Gain = -\dfrac{R_F}{R_{In}}

直覺上,我們會選擇一個簡單的 5kohm 到 1kohm 的電阻組合。但實際上,我們會遇到麻煩,因為 5kohm 不是標準值。事實上,DigiKey 擁有大量的直插電阻,卻沒有出售 1/4 W、5% 阻值、5kohm 的直插電阻!

這不是標準元件。不妨去看看。你會發現最接近的電阻是 1/2 W 的。

相反,我們必須從標準阻值的元件中選擇適當的電阻,才能達到所需的 5:1 比例。在 5% 容差範圍內,我們可以選擇 7.5kohm 和 1.5kohm 的電阻來找出所需的比例。這是 5% 容差標準值範圍內唯一可行的電阻對。

選擇這些電阻對並非易事,因為我們需要篩選 300 種可能的組合(假設允許 1:1 的比例)。當容差提高到 1% 時,這個過程會變得更加繁瑣,而對於 0.5% 容差的電阻來說,情況則更加糟糕。

本文將介紹一些實用的方法,幫助您選擇合適的電阻對。文章首先介紹了一種適用於 5% 容差值的矩陣方法,然後提供了一個簡易的計算機程序,幫助您從標準阻值的 1% 和 0.5% 元件中選擇合適的電阻對。

標準值

電阻器和其他裝置(例如電容器和電感器)使用對數編號系統進行分檔。各檔的尺寸設計已同時考慮了公差。例如,5% 零件由 E-24 系列檔定義。該系統每十進位有 24 個檔:

E-24 系列: 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1

為了更好地理解,請考慮 3.0ohm 電阻及其相鄰電阻:

  • 2.7ohm 5% 電阻:2.565 < R < 2.835

  • 3.0ohm 5% 電阻:2.850 < R < 3.150

  • 3.3ohm 5% 電阻:3.135 < R < 3.465

如圖所示,這些阻值區間排列在一條數軸上,每個區間以 E-24 為中心,並向外擴展 +/- 5%。選擇這些數值是為了盡量減少區間之間的重疊和間隙。

精度更高的元件有 1%、0.5% 及更高精度的規格。1% 精度的電阻採用 E-96 系列,而 0.5% 精度的電阻則採用 E-192 系列。

E-96 系列: 1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76

E-192 系列: 1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09, 1.10, 1.11, 1.13, 1.14, 1.15, 1.17, 1.18, 1.20, 1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32, 1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45, 1.47, 1.49, 1.50, 1.52, 1.54, 1.56, 1.58, 1.60, 1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76, 1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93, 1.96, 1.98, 2.00, 2.03, 2.05, 2.08, 2.10, 2.13, 2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34, 2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58, 2.61, 2.64, 2.67, 2.71, 2.74, 2.77, 2.80, 2.84, 2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12, 3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44, 3.48, 3.52, 3.57, 3.61, 3.65, 3.70, 3.74, 3.79, 3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17, 4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59, 4.64, 4.70, 4.75, 4.81, 4.87, 4.93, 4.99, 5.05, 5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56, 5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12, 6.19, 6.26, 6.34, 6.42, 6.49, 6.57, 6.65, 6.73, 6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41, 7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16, 8.25, 8.35, 8.45, 8.56, 8.66, 8.76, 8.87, 8.98, 9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88

回到增益為 5 的反相運算放大器,我們仍然處於不切實際的情況,因為任何標準首選零件號碼中都沒有 5kohm 電阻器。

柵格搜尋

我們可以使用如下矩陣所示的圖形方法來選擇電阻對。圖中,每一行每一列都顯示了 E-24 值。每個單元格表示電阻之間的比率。對角線上的儲存格表示 1:1 的比率。大於 1:1 的比率位於圖表的上半部。小於 1:1 的比率在圖表的下半部顯示為灰色。我們應該避免選擇圖表的下半部分,因為它只有兩位有效數字,而上半部分有三個有效數字。例如,考慮 8.2 與 1.1 的儲存格。對應的比率是 7.45。然而,1.1 與 8.2 的單元格的比率是 0.13。這兩個數字互為倒數,但僅比較兩位和三位有效數字並不容易看出這一點。

請注意,這種圖形方法確實需要一些心理操練。就像使用舊的計算尺一樣,我們必須獨立於圖表來追蹤十位。我們還必須自由翻轉比率,使數字大於 1。例如,假設我們想要 3 : 50 的比率。這需要幾個步驟:

  • 記錄十位元並將比例從 3 : 50 更改為 3 : 5。
  • 將比例翻轉為 5 : 3。
  • 搜尋最接近 1.67 的比率
  • 選擇 E-24 值 2 和 1.2 作為最接近的匹配
  • 將數字反變為 1.2 和 2
  • 將 10 的冪修正為 1.2 : 20

技術提示:請注意有效數字。E-24 系列電阻器只有兩位有效數字。圖表中的三位有效數字僅供參考。考慮到每對電阻器的最佳和最差容差,最終得到的電阻值通常只有兩位有效數字。

程式搜尋

圖形方法比手動計算好。然而,它仍然容易出錯,因為在眾多可能性中很容易錯過最佳數值。我們當然可以為 E-96 和 E-192 的值建立類似的表格。但是,表格的規模以及人類能力的限制使得它們不切實際。更好的解決方案是編寫程式。

本說明的末尾包含一個用 C 語言編寫的簡易程式。該程式旨在與 OnlineGDB 等線上編譯器配合使用。

若要執行此程序,請使用浮點數輸入所需的比例,然後按執行鍵。在本例中,我們繼續尋找 3 : 50 的比例。同樣,我們透過手動調整數字並處理小數位,來尋找 5.0 : 3.0 的比例。程式會給出幾個建議:

  • E-24:1.2 : 20
  • E-96:避免
  • E-192:1.2 : 20 或 1.26 : 21.0

結論

我相信這些資訊對您有所幫助,並能節省您未來的時間。誰能想到電阻的選擇竟然如此複雜呢?實際上,我們應該討論一下公差對所選電阻對的影響。不過,我們暫且把這個話題留到以後再談。

請在下方留言,提出您的意見和建議。


#include <stdio.h>
#include <math.h>

int main(){
    
// CAUTION: Use floats such as 5.0/3.0 or else the program defaults to interger math.

    double desired_ratio = 5.0/3.0;  

    double E_24_R_values[] = {1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 
                              2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 
                              4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1};

    double E_96_R_values[] = {1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 
                              1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 
                              1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 
                              1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 
                              2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 
                              2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 
                              3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 
                              3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 
                              4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 
                              5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 
                              6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 
                              8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76};
                              
    double E_192_R_values[] = {1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09,
                               1.10, 1.11, 1.13, 1.14, 1.15, 1.17, 1.18, 1.20, 
                               1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32, 
                               1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45, 
                               1.47, 1.49, 1.50, 1.52, 1.54, 1.56, 1.58, 1.60, 
                               1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76, 
                               1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93, 
                               1.96, 1.98, 2.00, 2.03, 2.05, 2.08, 2.10, 2.13, 
                               2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34, 
                               2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58, 
                               2.61, 2.64, 2.67, 2.71, 2.74, 2.77, 2.80, 2.84, 
                               2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12, 
                               3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44, 
                               3.48, 3.52, 3.57, 3.61, 3.65, 3.70, 3.74, 3.79, 
                               3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17, 
                               4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59, 
                               4.64, 4.70, 4.75, 4.81, 4.87, 4.93, 4.99, 5.05, 
                               5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56, 
                               5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12, 
                               6.19, 6.26, 6.34, 6.42, 6.49, 6.57, 6.65, 6.73, 
                               6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41, 
                               7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16, 
                               8.25, 8.35, 8.45, 8.56, 8.66, 8.76, 8.87, 8.98, 
                               9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88};                          

    int i, j;
    double ratio = 1;
    double best_delta = 1;
    double delta;
   
   printf("Search for the resistor pair closest to %f\n\n", desired_ratio); 

   best_delta = 1;
   printf("For the E-24 series:\n"); 
    
    for (i = 0; i < 24; i++){
        
        for (j = 0; j < 24; j++){
            
            ratio = E_24_R_values[i] / E_24_R_values[j];  
            
            delta = fabs(desired_ratio - ratio);
            
            if (delta <= best_delta){
                best_delta = delta; 
                printf("\tbest_delta = %f for R1 = %f, and R2 = %f\n", ratio, E_24_R_values[i] , E_24_R_values[j] );
            }
        }
    }



   best_delta = 1;
   printf("\nFor the E-96 series:\n"); 
    
    for (i = 0; i < 96; i++){
        
        for (j = 0; j < 96; j++){
            
            ratio = E_96_R_values[i] / E_96_R_values[j];  
            
            delta = fabs(desired_ratio - ratio);
            
            if (delta <= best_delta){
                best_delta = delta; 
                printf("\tbest_delta = %f for R1 = %f, and R2 = %f\n", ratio, E_96_R_values[i] , E_96_R_values[j] );
            }
        }
    }

best_delta = 1;
 printf("\nFor the E-196 series:\n"); 

    for (i = 0; i < 192; i++){
        
        for (j = 0; j < 192; j++){
            
            ratio = E_192_R_values[i] / E_192_R_values[j];  
            
            delta = fabs(desired_ratio - ratio);
            
            if (delta <= best_delta){
                best_delta = delta; 
                printf("\tbest_delta = %f for R1 = %f, and R2 = %f\n", ratio, E_192_R_values[i] , E_192_R_values[j] );
            }
        }
    }

    return 0;
} // end main