前言

Python具備強大的數據計算功能,用來做電路的模擬當然不成問題。近日在網上看到有人用Python做電路數值計算的相關工作,正好符合我最近將Python應用到硬體技術各個領域的主題,就算把文章轉譯過來,讓大家瞭解一下,自己也藉機學習一下。

尊重作者權益,先放上原文鏈接,大家也可以直接去原文鏈接直接看到更多的信息:arachnoid.com/BiQuadDes

今天就抽取這篇文章的一部分,簡要地介紹一下如何使用Python計算RC電路的階躍響應,並展示了當輸入為正弦波時,RC低通濾波電路的輸出。

一、基本的理論

下圖是一個典型的RC電路和它的階躍響應

在這個簡單電路中流動的瞬時電流與電阻兩端的電壓成正比,電容器電壓變化的速率也與電流成正比。在零時,電容兩端的電壓為零,因此電阻的電壓和電路的電流最大。 隨著時間的推移,電容器兩端的電壓增加,導致電阻器的電壓下降。這意味著電路的電流下降,導致電容器的電壓變化率下降。換一句話說,電容器電壓接近電源電壓的速率與電容器和電源之間的剩餘電壓差逐步下降。

在零時刻,輸出電壓等於0:

在以後的任意時刻,1A的電流會導致1F電容以1V/s的速率改變電壓。我們用差分方程形式來表示這一計算:

vi(n)=vi(n?1)+(v?vi(n?1))*tc

其中v是系統輸入電壓,tc為時間常數,它表示了相鄰時刻的電壓變化。輸入電壓與輸出電壓的壓差乘以時間常數tc就是充電量。tc計算式為:

tc = 1.0 / (r * c * sample_rate)

二、階躍響應的計算

RC電路的參數是10K和100uF。我們用4k的採樣率來對模擬信號進行抽樣。初始時刻電路輸出電壓為0,以後的任意時刻用上面的差分方程來計算。差分方程在程序中的具體形式是這樣的:

vi += (v-vi) * tc這一點應該不難理解。

對於一個階躍信號,其Pyhon 源碼如下:

import pylab

sample_rate = 4000.0

ta = []
da = []
db = []

# resistor value, ohms
r = 10e3

# capacitor value, farads
c = 100e-6

# time constant
tc = 1.0 / (r * c * sample_rate)

vi = 0 # integration variable

for n in range(-int(sample_rate),int(sample_rate) * 5):
t = n / sample_rate
ta.append(t)
# generate the test step function
v = (0,1)[t > 0]
da.append(v)
# perform the filtering function
vi += (v-vi) * tc
db.append(vi)

pylab.plot(ta,da)
pylab.plot(ta,db)

pylab.show()

運行結果如下:

階躍響應

三、正弦型號的輸出

當我們給RC電路輸入正弦信號的時候,計算過程和階躍函數其實樣的,只要把階躍函數的輸出電壓替換成正弦信號即可,源碼如下:

import math, pylab

# samples per second
sample_rate = 40000.0

# data lists for plotting
ta = []
da = []
db = []

# resistor value ohms
r = 1e3

# capacitor value farads
c = 0.5e-6

# time constant
tc = 1.0 / (r * c * sample_rate)

# integration variable
vi = 0

# signal frequency
f = 440

for n in range(int(sample_rate / 200)):
# t = time, seconds
t = n / sample_rate
ta.append(t)
# generate the test signal
v = math.sin(2 * math.pi * f * t)
da.append(v)
# perform the filtering function
vi += (v-vi) * tc
db.append(vi)

pylab.plot(ta,da)
pylab.plot(ta,db)

pylab.show()

運行結果如下:

其中黃色線是輸出信號。

後記

使用Pyhon可以完成一些電路計算,當然這需要你對電路的原理和數學形式有很深的瞭解,並且需要你有足夠好的編程能力對這些計算進行實現。當然現在,很多軟體都已經完成各種形式的電路模擬計算,應該有很多以前的代碼可以借鑒。原文的作者用這種方式進行濾波器的設計,有興趣的讀者可以去了解下。

進入我的主頁,你可以看到Pyhon是如何在MCU和FPGA上應用的,甚至你能看到使用Python來進行硬體描述語言的編程。關注我的專欄《電子工程師有多無聊》你可以看到更多Pyhon在硬體領域的應用,希望能給你的工作帶來幫助。


推薦閱讀:
相關文章