Schmitt-Trigger – VB.Net Beispiel

Bei dem Schmitt-Trigger-Programm tritt wieder etwas Besonderes auf. Hier haben wir das erste Mal Select Case statt einer IF-Abfrage benutzt. Das liegt daran, dass die Berechnung der Werte davon abhängen, welcher Zustand vorher gültig war. Visuell wird das in einer Hysteresekurve dargestellt.

Quelltext

Public Class frmST
Dim Re, Ui As Double
Dim fall
Dim uc1, ue, ub2, u1, ua As Double
Dim i1, i2

Private Sub frmST_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
fall = 1
berechnen()
End Sub

Private Sub berechnen()
Re = sR1.Maximum – sR1.Value + sR1.Minimum
Ui = (sUi.Maximum – sUi.Value + sUi.Minimum) / 10

Select Case fall
Case 1
ue = Ui – 0.6
i1 = ue / Re
uc1 = 4.7 – 3800 * i1
If uc1 < (ue + 0.1) Then uc1 = ue + 0.1
ub2 = uc1 / 2
ua = 6
If (ue + 0.6) <= ub2 Then fall = 2

Case 2
i1 = 0
i2 = (6 – 0.1) / (1000 + Re)
ue = Re * i2
ua = 6 – i2 * 1000
ub2 = ue + 0.6
uc1 = ub2 + ((6 – ub2) * 10000) / 14700
If Ui >= (ue + 0.6) Then fall = 1
End Select

lUe.Text = Str(Math.Round(ue, 2)) + “ V “
lUb2.Text = Str(Math.Round(ub2, 2)) + “ V “
lUc1.Text = Str(Math.Round(uc1, 2)) + “ V “
lR1.Text = Str(Math.Round(Re, 2)) + “ Ohm “
lUi.Text = Str(Math.Round(Ui, 2)) + “ V “
lUa.Text = Str(Math.Round(ua, 2)) + “ V “

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
berechnen()
End Sub
End Class 

[Einklappen]

Ergänzende Erlärung

Das Programm unterscheidet streng zwischen zwei Fällen. Im ersten Fall ist der Ausgangstransistor gesperrt, und die Ausgangsspannung hoch. Alle Ströme und Spannungen hängen nur vom linken Transistor ab. Außerdem wird überwacht, ob der Ausgangstransistor eine Basis-Emitterspannung von mindestens 0,6 V erhält, denn dann kippt der Zustand um, sodass Fall 2 gültig wird.

ue = Ui – 0.6
i1 = ue / Re
uc1 = 4.7 – 3800 * i1
If uc1 < (ue + 0.1) Then uc1 = ue + 0.1
ub2 = uc1 / 2
ua = 6
If (ue + 0.6) <= ub2 Then fall = 2

Im zweiten Fall ist es umgekehrt. Nun ist der linke Transistor gesperrt. Alle Ströme und Spannungen hängen von der Einstellung des Emitterwiderstands ab. Auch hier muss wieder überwacht werden, ob die Schaltung in den Fall1 zurückkehren soll, wenn nämlich der linke Transistor eine ausreichend hohe Basisspannung bekommt.

i1 = 0
i2 = (6 – 0.1) / (1000 + Re)
ue = Re * i2
ua = 6 – i2 * 1000
ub2 = ue + 0.6
uc1 = ub2 + ((6 – ub2) * 10000) / 14700
If Ui >= (ue + 0.6) Then fall = 1

Download Projektdatei

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