計指南)
1. 方案來源為什么工業(yè)現(xiàn)場總繞不開4-20mA做工業(yè)電子、儀器儀表或者現(xiàn)場設(shè)備改造的工程師對4-20mA電流環(huán)應(yīng)該都不陌生。溫度變送器、壓力變送器、液位計、閥門定位器甚至不少PLC的模擬量輸入模塊底層信號標(biāo)準都是4-20mA。搞了這么多年嵌入式我越來越覺得這個模擬信號標(biāo)準真的很難被替代原因不復(fù)雜電流信號抗干擾能力強線損不會直接導(dǎo)致測量誤差而且4mA的零點還能給兩線制儀表提供靜態(tài)工作電流斷線了馬上就能發(fā)現(xiàn)故障診斷也方便。但問題來了——單片機和DSP并不直接輸出4-20mA。MCU出來的是數(shù)字量要么走DAC轉(zhuǎn)成電壓再經(jīng)過V/I轉(zhuǎn)換電路變成電流要么干脆用PWM加濾波把占空比變成直流電壓再做電壓轉(zhuǎn)電流。DAC方案看著正規(guī)但有個很現(xiàn)實的問題工業(yè)級、帶隔離的模擬輸出通道成本實在壓不下來。隔離DAC、隔離電源模塊、精密基準源一套下來少說幾十塊對于量產(chǎn)型產(chǎn)品來說這顆成本壓力很具體。于是不少人開始琢磨能不能用便宜的PWM加光耦來實現(xiàn)一個便宜但精度夠用的隔離型4-20mA輸出我把這套方案完整做了一遍從原理驗證到樣板調(diào)試前后差不多花了兩周時間。這篇文章把整個設(shè)計思路、關(guān)鍵參數(shù)計算、以及調(diào)試中踩過的坑一次性講清楚能給準備用低成本方案做模擬量輸出的朋友省不少彎路。2. 低成本隔離4-20mA輸出的整體設(shè)計拆解2.1 為什么用PWM而不是DAC先聊清楚選型邏輯。DAC當(dāng)然精度高、紋波小、響應(yīng)快數(shù)據(jù)手冊翻出來性能指標(biāo)都很漂亮但放到實際量產(chǎn)環(huán)境里問題就出來了。首先是成本哪怕是幾塊錢的國產(chǎn)DAC加上外圍的基準、運放、隔離器件整體成本就上去了。其次是隔離結(jié)構(gòu)如果需要隔離你得先選隔離式DAC或者用數(shù)字隔離器把SPI/IIC信號隔離再驅(qū)動非隔離的DAC兩級結(jié)構(gòu)一出來BOM就復(fù)雜了。PWM方案的本質(zhì)是用MCU自帶的PWM外設(shè)生成占空比可調(diào)的方波再用低通濾波器把方波的平均值提取出來等效成一個直流電壓。MCU的PWM外設(shè)成本為零濾波器只需要電阻和電容整個模擬前端就是運放加晶體管成本非??煽?。而且PWM的分辨率并不低一個16位定時器跑在72MHz輸出頻率20kHz左右的PWM理論上能實現(xiàn)約11位的有效分辨率配合校準之后達到0.1%的精度是可行的。有人說PWM響應(yīng)慢低通濾波器需要時間穩(wěn)定這確實是個約束。但工業(yè)過程控制本身就是慢變量溫度、壓力、液位這些物理量變化以秒甚至分鐘為單位幾百毫秒的穩(wěn)定時間完全可以接受。用PWM做4-20mA輸出本質(zhì)上是在成本和響應(yīng)速度之間做了一個合理取舍。2.2 光耦在系統(tǒng)里扮演的角色光耦在這個方案里的作用不是簡單地用數(shù)字脈沖去跨隔離帶而是要把整個模擬通路都隔離掉。輸入端的PWM信號經(jīng)過光耦傳輸?shù)礁綦x側(cè)后再經(jīng)過濾波變成直流電壓最后轉(zhuǎn)換電流。這樣的好處是隔離兩側(cè)的電源和地完全獨立現(xiàn)場側(cè)的干擾不會通過信號通路串進控制側(cè)的系統(tǒng)地。這里要特別提醒一點光耦本身有傳輸延遲不同批次、不同溫度下延遲不一致PWM的上升沿和下降沿經(jīng)過光耦后會發(fā)生不同程度的偏移等效出來就是占空比失真。所以光耦不能隨便選普通的低速光耦像TLP521上升沿下降沿都有好幾微秒20kHz PWM一個周期才50微秒失真占比太高不太適合。最好選高速數(shù)字光耦比如6N137或者國產(chǎn)的億光、冠西這類響應(yīng)時間在百納秒級別的器件。2.3 整體架構(gòu)與信號流向整套系統(tǒng)的信號流向是這樣的MCU輸出PWM經(jīng)過光耦隔離傳到隔離側(cè)光耦輸出的是同頻率、近似同占空比的方波再用二階低通濾波器把方波變成平滑的直流電壓最后用一個壓控恒流源電路把電壓線性映射成4-20mA電流驅(qū)動外部負載。這個架構(gòu)的優(yōu)點很明顯隔離側(cè)不需要MCU、不需要DAC、不需要復(fù)雜的數(shù)字邏輯就是一個純模擬電路可靠性反而更高。現(xiàn)場側(cè)只要提供一個隔離電源比如B0505S這類模塊就能獨立完成信號調(diào)理和電流輸出。我實際搭出來的電路在24V供電情況下帶載能力能做到750歐姆足夠覆蓋大多數(shù)PLC模擬量輸入模塊的輸入阻抗。3. 關(guān)鍵細節(jié)解析與核心參數(shù)計算3.1 光耦選型與驅(qū)動電路設(shè)計光耦選型是整個方案里最容易埋雷的地方。如果只用TLP521做20kHz PWM傳輸你會發(fā)現(xiàn)輸出波形已經(jīng)完全變了樣上升沿變得平緩占空比失真明顯濾波后的電壓跟理論值偏差可能達到1%-2%。這個誤差靠軟件校準可以修一部分但溫漂沒法修因為光耦的傳輸延遲隨溫度變化很大。我的建議是光耦選高速型響應(yīng)時間tPLH/tPHL都在1微秒以內(nèi)輸出端加上拉電阻阻值根據(jù)光耦的CTR和工作電流確定輸入端串聯(lián)限流電阻保證IF在5-10mA范圍以6N137為例輸入端串一個330歐姆電阻接到MCU引腳MCU高電平3.3V時IF大約5mA左右輸出端上拉電阻取4.7k到5V輸出波形就是標(biāo)準方波。這里有個細節(jié)6N137是集電極開路輸出必須加上拉電阻否則輸出根本拉不高。如果是5V供電的MCU限流電阻可以取220歐姆IF大約10mA。驅(qū)動能力上單片機的GPIO推挽輸出完全能驅(qū)動光耦不需要額外的三極管緩沖。3.2 二階低通濾波器設(shè)計與截止頻率計算PWM信號經(jīng)過光耦后還是方波必須濾波才能變成直流。濾波器的階數(shù)、截止頻率直接影響最終的紋波水平和建立時間。我用的是RC二階低通濾波器兩個電阻兩個電容。以20kHz PWM、占空比50%輸出為例來算方波經(jīng)過一階RC濾波后紋波幅值大約為Vpp的1/πfRC要在滿載20mA檔位上做到紋波小于4微安需要把紋波電壓壓到微伏級別一階濾波很難達到二階濾波器的衰減斜率是-40dB/decade高頻紋波壓制效果要好得多。截止頻率f1/(2π√(R1R2C1C2))我實際取R1R210kΩC1C2100nF算下來截止頻率約159Hz。對于20kHz PWM二次諧波在40kHz衰減量40kHz/159Hz的兩倍對數(shù)比大約衰減50dB輸出電壓紋波被壓到0.3%以內(nèi)。如果要求高可以把電容加大到220nF紋波更低不過建立時間會變長。實測下來在滿載變化時輸出穩(wěn)定到0.1%精度大約需要100毫秒左右工業(yè)場景完全能接受。有個經(jīng)驗值可以參考PWM頻率選20kHz以上截止頻率選在PWM頻率的1/100到1/50之間這樣紋波和響應(yīng)時間都能兼顧。3.3 V/I轉(zhuǎn)換電路與電阻取值邏輯濾波得到的直流電壓最終要變成4-20mA的電流。這個環(huán)節(jié)我推薦用經(jīng)典運放加晶體管的壓控恒流源結(jié)構(gòu)相比專門的集成V/I轉(zhuǎn)換芯片比如AD694、XTR117成本低很多性能也夠用。核心原理是用運放強制讓采樣電阻兩端的電壓等于輸入電壓。采樣電阻R_sense串聯(lián)在輸出回路里流過它的電流就是輸出電流運放通過調(diào)整晶體管的基極電流讓R_sense上的壓降和輸入電壓相等。輸入電壓0.4V對應(yīng)4mA輸入電壓2V對應(yīng)20mA。這個電路有幾個關(guān)鍵參數(shù)要算清楚采樣電阻R_sense決定轉(zhuǎn)換增益IV_in/R_senseR_sense取100Ω那么0.4V對應(yīng)4mA、2V對應(yīng)20mA運放的供電電壓Vs至少要比最大輸出電壓高2-3V因為晶體管有飽和壓降、采樣電阻有壓降晶體管的耗散功率24V供電、20mA輸出時如果負載150Ω晶體管上的壓降約21V耗散功率0.42W需要選TO-252封裝的小功率三極管電阻精度直接影響電流精度R_sense建議用0.1%精度、25ppm溫漂的精密電阻不要用普通5%的貼片電阻。我用的是1206封裝的精密電阻實測溫漂控制在0.05%以內(nèi)。4. 完整電路原理與實現(xiàn)過程4.1 電路各環(huán)節(jié)的信號變換計算整條信號鏈路可以用一張表理清楚環(huán)節(jié)輸入輸出關(guān)鍵關(guān)系MCU PWM占空比D方波幅值3.3V/5V平均值V_H*D光耦隔離方波方波幅值5V延遲引入微小占空比誤差二階低通濾波方波直流電壓V_fV_f ≈ 5V × DV/I轉(zhuǎn)換V_f電流I_outI_out V_f / R_sense舉個例子要輸出12mA輸出電流對應(yīng)的輸入電壓就是1.2V對應(yīng)PWM占空比就是1.2/524%。整個鏈路的傳遞函數(shù)是線性的校準起來非常方便。實際做的時候我遇到過一個問題光耦輸出上拉到5V但MCU的PWM高電平是3.3V濾波后的電壓最大值就不是5V而是3.3V。這也行只是把映射關(guān)系整體平移了但要注意留給PWM滿占空比到滿量程之間的余量。我后來把光耦輸出上拉電源改成5V用5V作為濾波基準這樣PWM從0到100%對應(yīng)0到5V映射關(guān)系更清晰。4.2 基于STM32的PWM配置要點以STM32F103為例PWM配置的關(guān)鍵參數(shù)是定時器時鐘、預(yù)分頻、自動重載值。我配置的PWM頻率20kHz定時器時鐘72MHz預(yù)分頻PSC2自動重載值A(chǔ)RR1200這樣實際PWM頻率72MHz/(3×1201)≈19.98kHz接近20kHz。占空比寄存器CCR的調(diào)節(jié)范圍是0到1200對應(yīng)0到100%占空比。如果要輸出4-20mA對應(yīng)的占空比區(qū)間先算濾波電壓4mA對應(yīng)0.4V20mA對應(yīng)2V在5V基準下占空比范圍就是8%到40%對應(yīng)CCR范圍是96到480。MCU端設(shè)置PWM模式為PWM1極性選擇高電平有效GPIO配置為復(fù)用推挽輸出。光耦輸入端并聯(lián)了一個100Ω的電阻這個電阻的作用是加快光耦輸入端的關(guān)斷速度讓下降沿更陡峭改善占空比失真。4.3 PCB布局與布線注意事項PCB布局決定模擬性能。我畫板子的時候踩過一個坑濾波電阻電容離光耦輸出太遠中間隔了一條數(shù)字信號線導(dǎo)致輸出紋波里多了不少尖峰脈沖。后來重新布局嚴格按照信號流向排列器件濾波電容靠近光耦輸出引腳模擬地單點接地效果立刻改善。幾個實用的布局原則光耦放在隔離帶正中間兩側(cè)分別對應(yīng)數(shù)字區(qū)和模擬區(qū)濾波電阻電容貼近光耦輸出端走線短而粗采樣電阻和運放的反饋網(wǎng)絡(luò)遠離開關(guān)電源和電感模擬地單點連接不要在濾波器和V/I轉(zhuǎn)換之間形成地環(huán)路輸出級晶體管和采樣電阻附近開通風(fēng)窗輔助散熱5. 常見問題與排查技巧實錄5.1 輸出電流非線性與校準方法最常見的問題就是輸出電流和理論值對不上而且不是成比例地偏是中間段偏、兩端準的S形曲線。這種非線性通常來自光耦傳輸延遲引起的占空比失真。PWM占空比小時光耦延遲占的比例大占空比大時占空比失真方向相反導(dǎo)致中間段偏。排查思路是先分段測量分別設(shè)置占空比10%、30%、50%、70%、90%用萬用表精確測量輸出電流和PWM占空比的實際關(guān)系。描點畫出來后會看到一條輕微彎曲的曲線。這時候用兩點校準只能修增益和零點中間段的誤差修不掉。解決辦法是分段線性校準把整個量程分成4段或8段每段單獨算增益和偏移在MCU里用查表加插值的方式修正。實測8段校準后非線性誤差可以壓縮到0.1%以內(nèi)。5.2 輸出紋波超標(biāo)與濾波參數(shù)優(yōu)化用示波器測輸出電流時如果看到明顯的周期性紋波峰值達到幾十微安甚至更大問題基本出在濾波環(huán)節(jié)。先排查LC濾波器的截止頻率是否合理PWM頻率是否太低。如果用的是20kHz PWM截止頻率卻設(shè)到了1kHz那紋波衰減遠遠不夠。解決辦法是降低截止頻率比如從1kHz降到200Hz或者在末端再加一級RC濾波。不過要注意截止頻率降太多輸出建立時間會變長。實測如果只靠濾波器把紋波壓到極低動態(tài)響應(yīng)會比較慢建議紋波目標(biāo)設(shè)成滿量程的0.1%也就是20微安以內(nèi)這樣響應(yīng)和紋波能同時滿足。另外光耦輸出端的電源如果紋波大也會耦合到濾波后的直流電壓里建議光耦輸出上拉電源用LDO單獨穩(wěn)壓。5.3 帶載能力不足與電源裕量調(diào)整輸出電流帶不動大負載表現(xiàn)為接到PLC模塊后電流上不去或者輸出端電壓被拉低通常有兩個原因。一是電源電壓不夠24V供電串接一個750Ω的PLC輸入電阻后負載壓降就有15V加上采樣電阻壓降2V和晶體管的壓降運放供電余量不足。解決方法是提高供電電壓到28V-30V或者降低采樣電阻值以減小壓降。采樣電阻100Ω時滿載壓降2V如果改成50Ω壓降就變成1V對低壓供電場景很有幫助。另一個原因是運放輸出范圍不夠無法驅(qū)動晶體管進入線性放大區(qū)可以選擇軌到軌輸出運放比如LM358在單電源下輸出到不了軌選TLV2372或者MCP6002這類運放就很穩(wěn)。5.4 溫度漂移與精度保持策略4-20mA輸出對溫漂比較敏感。光耦的CTR隨溫度變化晶體管的Vbe隨溫度變化采樣電阻的阻值也隨溫度變化三級疊加很容易出現(xiàn)溫度每升10度輸出電流偏個幾十微安的情況。我的做法是拆開來看光耦CTR變化影響的是前級電壓可以通過校準來修正晶體管的Vbe漂移在運放反饋環(huán)路里會被自動抑制因為運放在閉環(huán)控制V(R_sense)晶體管的Vbe在環(huán)路之外不影響輸出電流真正需要關(guān)注的是采樣電阻的溫度系數(shù)。所以采樣電阻一定選低溫漂的至少25ppm最好選10ppm的金屬膜或精密合金電阻。如果要做寬溫度范圍的產(chǎn)品建議在軟件里加一個溫度補償表用板載NTC或DS18B20測量環(huán)境溫度查表修正PWM占空比。6. 方案優(yōu)勢與適用場景邊界6.1 成本與性能的平衡點分析這套方案的硬件成本我很認真算過高速光耦6N137大約1塊多運放用LM358五毛錢左右精密采樣電阻一兩塊普通電阻電容加起來不到一塊穩(wěn)壓芯片和隔離電源模塊三四塊散件加起來不超過10塊錢算上PCB和焊接整個隔離模擬輸出通道的物料成本控制在15元以內(nèi)完全沒問題。而用隔離DAC加精密運放的方案光隔離DAC就要30塊錢以上加上隔離電源模塊總成本翻倍。當(dāng)然成本換來的代價是精度和響應(yīng)速度的折中。DAC方案能做到16位分辨率、微秒級響應(yīng)PWM方案的有效分辨率在12位左右響應(yīng)在百毫秒級。對溫度、壓力、液位這類慢變量PWM方案的性能完全夠用但如果是伺服控制、變頻器這類需要快速響應(yīng)的場景還是老老實實選DAC。6.2 適合應(yīng)用的工控場景這套方案的典型適用場景我在實際項目里驗證過幾類傳感器變送器把溫度、濕度、壓力傳感器的數(shù)字信號轉(zhuǎn)成標(biāo)準的4-20mA電流環(huán)信號傳給PLC工業(yè)設(shè)備改造老設(shè)備只有數(shù)字IO需要模擬量輸出時用PWM加光耦的方案擴展模擬通道教學(xué)實驗平臺低成本實現(xiàn)隔離模擬量輸出讓學(xué)生理解PWM、濾波、V/I轉(zhuǎn)換的完整鏈路遠程數(shù)據(jù)采集在數(shù)據(jù)采集終端里輸出隔離的4-20mA信號驅(qū)動指示儀表或執(zhí)行機構(gòu)需要提醒的是如果要求本安防爆認證或者精度達到0.05%以上這套低成本方案不太合適需要走正規(guī)的隔離放大器和精密DAC路線。6.3 后續(xù)可以做的功能擴展方向這套方案還可以沿著幾個方向擴展。一是把輸出從單路擴展到多路利用MCU多路PWM加多路光耦同時輸出多路4-20mA信號適合多通道變送器。二是增加HART協(xié)議調(diào)制解調(diào)功能HART就是在4-20mA電流上疊加FSK數(shù)字信號頻率1.2kHz和2.2kHz現(xiàn)有的模擬鏈路只要在輸入端疊加正弦信號輸出端加一個解調(diào)電路就能實現(xiàn)。三是增加自診斷功能利用MCU的ADC監(jiān)控輸出電流把采樣電阻的電壓實時回讀判斷輸出是否超出量程或斷線。最后分享點個人實操體會這套方案我前后做了三輪迭代第一版直接用普通光耦TLP521結(jié)果精度慘不忍睹第二版換高速光耦改了濾波結(jié)構(gòu)精度上去不少但溫漂還是不對第三版把采樣電阻換成精密型、供電加了穩(wěn)壓才算真正達到工業(yè)應(yīng)用的門檻。整個過程最深的體會是這種看似簡單的模擬電路每個環(huán)節(jié)都藏著物理極限不能只靠計算得實際搭電路測數(shù)據(jù)才行。尤其是占空比失真這個問題理論算出來覺得沒事實測下來才發(fā)現(xiàn)是主要誤差來源。大家做的時候別怕踩坑多拿示波器看波形多記錄數(shù)據(jù)方案最終一定可以收斂。