Netzteil – VB.Net Beispiel
Das Programm simuliert die Restwelligkeit eines 12V-Netzteils mit Vierweggleichrichter und Siebelko. Sowohl der Lastwiderstand als auch die Kapazität des Elkos lassen sich einstellen. Auf dem simulierten Oszilloskopschirm (der Picturebox) kann man den Spannungsverlauf sehen.
Die Berechnungen sind hier verhältnismäßig simpel. Ut ist die gleichgerichtete Eingangswechselspannung, wobei die Sinusfunktion die Wechselspannung am Trafo berechnet und die Absolutwertbestimmung (Abs) den Vierweggleichrichter simuliert.
vt = vt + 360 / 80
If vt >= 361 Then vt = 0
xvt = Math.PI * vt / 180.0
ut = Math.Abs(17 * (Math.Sin(xvt)))
Die Spannung am Landekondensator wird hier in kleinen Zeitschritten berechnet. Der Ladestrom i hängt von der momentanen Spannung uc ab. In einem Zeitraum dt nimmt die Spannung um einen kleinen Betrag ab, der von der Kapazität und vom Entladestrom abhängt. So ergibt sich eine allmählich abfallende Spannung. Nur wenn die Spannung am Ausgang des Vierweggleichrichters höher ist als die aktuelle Spannung uc, wird diese übernommen. Dahinter steckt natürlich eine Idealisierung, weil in der Realität auch der Trafo zusammen mit dem Gleichrichter einen gewissen Innenwiderstand haben und die Spannung etwas langsamer ansteigen würde.
i = uc / R
dt = 250
uc = uc – ((i * dt) / C)
If uc < ut Then uc = ut
Public Class frmNetz
Dim vt, ut
Dim uc, R, C
Dim pixelX, pixelY
Dim P1 As Point
Dim pz As Point
Dim P2 As Point
Dim stiftl As New Pen(Color.LightGreen, 1)
Private Sub pSet(ByVal x As Integer, ByVal y As Integer)
P1.X = x
P1.Y = y
pz.X = 1
pz.Y = 1
Dim vsize As New Size(pz)
Dim rect As New Rectangle(P1, vsize)
PictureBox1.CreateGraphics.DrawRectangle(Pens.LightGreen, rect) ‚, P1) ‚, P1)
End Sub
Private Sub Line(ByVal x As Integer, ByVal y As Integer)
P2.X = x
P2.Y = y
PictureBox1.CreateGraphics.DrawLine(stiftl, P1, P2)
P1.X = x
P1.Y = y
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim xvt, i, dt
If pixelX = 0 Then
For i = 0 To 14
For j = 0 To 11
pSet(5 + (i * 10), (j * 10) + 5)
Next j
Next i
pSet(0, pixelY)
End If
pixelX = pixelX + 1
If pixelX >= 150 Then
PictureBox1.Image = Nothing
pixelX = 0
End If
vt = vt + 360 / 80
If vt >= 361 Then vt = 0
xvt = Math.PI * vt / 180.0
ut = Math.Abs(17 * (Math.Sin(xvt)))
i = uc / R
dt = 250
uc = uc – ((i * dt) / C)
If uc < ut Then uc = ut
pixelY = 115 – uc * 5
Line(pixelX, pixelY)
End Sub
Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll
C = VScrollBar1.Maximum – VScrollBar1.Value + VScrollBar1.Minimum
lbC.Text = „C = “ + Str(C) + „µF“
End Sub
Private Sub frmNetz_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
R = VScrollBar2.Maximum – VScrollBar2.Value + VScrollBar2.Minimum
lbR.Text = „R = “ + Str(R) + „Ohm“
C = VScrollBar1.Maximum – VScrollBar1.Value + VScrollBar1.Minimum
lbC.Text = „C = “ + Str(C) + „µF“
pixelY = 115
End Sub
Private Sub VScrollBar2_Scroll(ByVal sender As System.Object, ByVal e AsSystem.Windows.Forms.ScrollEventArgs) Handles VScrollBar2.Scroll
R = VScrollBar2.Maximum – VScrollBar2.Value + VScrollBar2.Minimum
lbR.Text = „R = “ + Str(R) + „Ohm“
End Sub
End Class