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:

Klicke auf die Grafik für eine größere Ansicht

Name:	Basis_Modul_003.jpg
Hits:	30
Größe:	32,3 KB
ID:	31903

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