Update ...
da ich mich als nächstes mit den Schleifen-Sensoren und dessen Modul beschäftigen möchte,
brauche ich erstmal einen Schleifen-Strom Generator ...
Die Leiterplatte wird auch gleich später noch die Steuerung der Basis-Station (Garage) übernehmen,
dieses Basis-Modul kann über den gleichen RS-232 Transmitter wie der PC und der Bot mit diesen dann auch kommunizieren.
Aufbau Basis-Modul mit vorerst nur dem Schleifen-Strom Generator:
Der Schleifen-Strom-Kondensator wird über ein MosFet(P-Kanal) geladen, wobei die Ladespannung vom MCU überwacht wird und beim erreichen des Soll-Wert
abgeschaltet wird, dann wird die Strom-Schleife an den geladenen Kondensator geschaltet über ein MosFet(N-Kanal) ...
Die beiden mosfets werden über spezielle Treiber angesteuert, um die Flanken möglichst steil zu bekommen ...
Die Nand-Gatter dienen allein nur der Verriegelung, so das immer nur ein mosfet durchgesteuert werden kann ...
Das dazugehörige Test-Programm, kann über die RS-232 mit folgenden Befehlen gesteuert werden,
LOOP_OFF
LOOP_ON|xxx
(xxx = Sollwert CU Lade-Schluss-Spannung)
HTML-Code:
1
xxx = UC * ------------------
5V/1024 * 3,16
Code:
' Projekt Mäh-Roboter
' R. Greinert
' 08 / 2016
'
' Basis-Modul
'
' - Strom-Schleife ( Test-Programm )
'
' ------------ Bascom - Parameter ------------------------
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 19200
' ------------ DIM ------------------------
Dim T1x As Byte ' Zähler 1/1000
Dim T2x As Byte ' Zähler 1/100
Dim T3x As Byte ' Zähler 1/10
Dim Loop_on As Byte
' ------------ ADC ------------------------
Config Adc = Single , Prescaler = Auto
Dim Adc_w As Word ' analog - wert
Dim Adc_s As Word ' AD sollwert
' ------------ Ports-Config ------------------------------
Config Portb.0 = Output ' Laden
Config Portb.1 = Output ' Entladen
Config Portb.5 = Output ' Herzschlag
Portb.0 = 0
Portb.1 = 0
' ------------ RS232 - Input ------------------------
Config Serialin = Buffered , Size = 40
Dim Na As String * 30 ' RS232 Input-String
Dim Nax As String * 30 ' RS232 Input-UCASE-String
Dim Si As Byte ' RS232 Input Zeichen
' ------ Split -------
Dim Sb As Byte ' Split_Zähler
Dim Sbx(5) As String * 10 ' Split_Array
' ------------ Timer_0 Zeitvorgabe ------------------------------
Config Timer0 = Timer , Prescale = 256
On Ovf0 Timer0_ovf
Enable Timer0
Enable Interrupts
Print "Start_Main"
Do
If Ischarwaiting() <> 0 Then
Si = Inkey()
If Si <> 13 And Si <> 10 And Len(na) < 30 Then
Na = Na + Chr(si)
Else
Nax = Ucase(na)
Sb = Split(nax , Sbx(1) , "|")
If Sbx(1) = "STATUS" Then
Print "ACK|" ; Nax
Elseif Sbx(1) = "LOOP_ON" Then
Print "ACK|" ; Nax
Adc_s = Val(sbx(2) )
Loop_on = 1
Elseif Sbx(1) = "LOOP_OFF" Then
Print "ACK|" ; Nax
Loop_on = 0
Portb.1 = 0
Else
Print "NAK|" ; Nax
End If
Na = ""
End If
End If
Loop
Timer0_ovf:
' ---- Timer_0 ----- Interrupt alle 1 mS ----------------
Timer0 = 194 ' Resrwert = 61
Incr T1x
Adc_w = Getadc(7) ' AD_7 einlesen
If Adc_w > Adc_s Then Portb.0 = 0 ' Sollwert(UC) ereicht = Laden abschalten
If T1x > 9 Then
' -------- Zeitbasis 10 mS ------------------
Incr T2x
T1x = 0
If Loop_on = 1 Then
If T2x = 1 Then
' --- entladen ----
Portb.0 = 0
Portb.1 = 1
Elseif T2x = 4 Then
' --- laden ----
Portb.1 = 0
Portb.0 = 1
End If
End If
If T2x = 8 Then Portb.5 = 0 ' Herzschlag-LED (ein)
If T2x > 9 Then
' -------- Zeitbasis 100 mS ------------------
Incr T3x
T2x = 0
If T3x > 9 Then
T3x = 0
' ------------- Zeitbasis 1 Sec -------------------
' Print "AD=" ; Adc_w
Portb.5 = 1 ' Herzschlag-LED (aus)
End If
End If
End If
Return
Return
Lesezeichen