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,16Code:' 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







Zitieren

Lesezeichen