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

Quelltext

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

[Einklappen]

Download Projektdatei

Wenn Sie nur an der Exe-Datei interessiert sind, befindet sich diese in dem Unterordner \bin\Debug.