- LiFePO4 Speicher Test         

Kommentare

  1. Avatar von witkatz
    Der Roboter wird jetzt mit einem PIC18F4520 mit 32MHz internem Oszillator gesteuert. Für die Ansteuerung der Motortreiber habe ich die PWM Frequenz auf ca. 16kHz parametriert:
    Code:
        // CCP/PWM 
        PR2 = 0x7F; // 15625Hz, PWM Freq = OscFreq / 4 / (PR2+1) / TMR2_Prescale
        CCPR1L = 0; CCP1CONbits.DC1B = 0; // PWM Duty Cycle
        CCPR2L = 0; CCP2CONbits.DC2B = 0;
        TRISCbits.TRISC2 = 0; // set CCP1 pin to Output
        TRISCbits.TRISC6 = 0; // set Reverse_MotorL pin to Output
        TRISCbits.TRISC1 = 0; // set CCP2 pin to Output
        TRISCbits.TRISC5 = 0; // set Reverse_MotorR pin to Output
        T2CONbits.T2CKPS = 0b01; // TMR2 Prescaler 4
        T2CONbits.TMR2ON = 1; // TMR2 on
        CCP1CONbits.CCP1M = 0b1100; // CCP1 PWM Mode
        CCP1CONbits.P1M = 0b00; // CCP1 Enhanced PWM: Single Output
        CCP2CONbits.CCP2M = 0b1100; // CCP2 PWM Mode
    Für sanften Anlauf sorgen 1s Beschleunigungs/Verzögerungsrampen mit 4ms Timervariablen:
    Code:
        softtmr_1 = 250;
        while(softtmr_1){
            MotorL_vor(250-softtmr_1); // 1s beschl Rampe
        }
        softtmr_1 = 250;
        while(softtmr_1){
            MotorL_vor(softtmr_1);  // 1s verz Rampe
        }
    Das aktualisierte Video im ersten Blogbeitrag zeigt den Motortest nach Einschalten und eine Testfahrt mit einem (halbvollen ) Glas Apfelsaft.
    Aktualisiert: 03.04.2015 um 19:23 von witkatz
  2. Avatar von witkatz
    Das Projekt schreitet langsam voran. Die Motortreiberplatine mit Spannungsversorgung und Batterieüberwachung ist soweit auf Rasterloch fertig. Die Motoren können jetzt in beide Richtungen drehen, getestet erstmal nur per manuellem Setzen der Signale. Die µC Platine mit PIC18F4520 ist jetzt im Aufbau.

    Bild hier  
    Aktualisiert: 29.03.2015 um 20:52 von witkatz
  3. Avatar von witkatz
    Ich habe die Angaben über den Compiler-Vergleich korrigiert, nachdem ich gemrkt habe, dass in dem XC8 File als Überbleibsel von einem Test einige Variablen absolut adressiert waren. Das hat das Ergebnis für den XC8 "geschönt", weil der XC8 bei absoluter Adressierung einige Bankumschaltungen weglässt. Das ist sozusagen eine unbeabsichtigte "Optimierung", die ich nicht benutzen möchte, weil ich absolut adressierte Variablen vermeiden möchte. Jetzt sind die C-Files auf dem gleichen Stand, alle Variablen automatisch adressiert und XC8 Free fügt wie gewohnt seine überflüssigen Bankumschaltungen ein, die erst in den kostenpflichtigen STANDARD oder PRO Versionen wegoptimiert werden. Diese zusätzlichen 15 Assemblerbefehle im Compilat, bzw. 5% mehr Maschinencode sind in dem Fall kein Beinbruch
    Aktualisiert: 08.01.2015 um 19:02 von witkatz
  4. Avatar von witkatz
    Ich habe etwas mit dem BoostC Compiler von Sourceboost in der MPLAB Umgebung experimentiert und den Quellcode für dieses Projektchen mal mit BooostC Compiler abgeändert (s. Anhang).

    Interessant war für mich der Vergleich der Optimierungen von XC8 im "free mode" also geringer Optimierungsstufe und BoostC im Optimierungslevel "Normal". Für dieses kleine Beispiel optimiert BoostC etwas besser als der XC8 im Free Mode. In diesem Projektchen erstellt XC8(Free mode) 375 Worte und BoostC 350 Programmworte, wobei die Wertetabelle im ROM schon 128 Worte belegt, die nicht wegoptimiert werden können. Dh. BoostC optimiert das Programmcode etwa 10% besser (nach Abzug der Wertetabelle). Diese Optimierungen wirken sich stark auf die Frequenz der Soft PWM aus, die ich trivial mit einer Schleife gelöst habe. Mit BoostC wird die Schleife in ca. 5,5ms durchlaufen, mit XC8 in ca. 6,3ms. Ich habe eine max. SoftPWM-Frequenz von 100Hz auf 4 Ausgangspins angestrebt und das ist mit beiden Compilern locker erreicht. Insgesamt sind die Unterschiede zwischen XC8 free und BoostC bei solch kleinen Projekten nach meiner Meinung nicht wirklich relevant.
    Aktualisiert: 08.01.2015 um 16:50 von witkatz
  5. Avatar von witkatz
    Die Schaltung ist auch schon fertig und funktioniert.
    Bild hier  

    In ein Schaltnetzteil Pollin 94-350324 eingebaut wird die Fernsehhintergrundbeleuchtung jetzt per TV-Fernbedienung von der Couch aus geschaltet.
  6. Avatar von witkatz
    Jetzt habe ich mal zum Spaß den SIRCS Sniffer mit LCD auf C umgeschrieben, Quellen sind angehängt.
    Prozessor ist der gleiche PIC16F876, Compiler ist der kostenlose XC8 von MICROCHIP im Free Mode.
  7. Avatar von witkatz
    Damit ist dieses Projektchen auch wieder abgeschlossen. Jetzt warte ich darauf dass meine Videorecorder-Fernbedienung wieder mal den spradischen Fehler zeigt, dann kann ich mich mit meinem SIRCS-Sniffer dazwischen hängen.
    Und die Bauteile für mein nächstes, darauf basiertes Projektchen werden auch gerade bei Pollin komissioniert ... mit der gelben Taste der TV-FB soll die Fernseh-Lampe ein/ausgeschaltet werden.
  8. Avatar von witkatz
    Ich habe den ersten Blog-Artikel überarbeitet und den länglichen Quellcode für SIRC-12 gelöscht.

    SIRC-12 reichte nicht aus, weil meine Videorecorder-Fernbedienung SIRC-12 und SIRC-15 mischt und die DVD Fernbedienung gar SIRC-20 sendet. Also habe ich das PIC ASM Projekt erweitert, so dass auch die 3bit und 5bit Extensions bei Bedarf angezeigt werden.
    Bild hier  

    So. Für meine Zwecke reicht es. Ich kann die SIRC Codes detektieren und anzeigen und (vor allem) Fehler erkennen und anzeigen. Mehr wollte ich mit dem Testaufbau zunächst mal nicht erreichen. Auf dem Bild sieht man die Hex-Anzeige eines aufgeschlüsselten SIRC-20 Telegramm der DVD-Fernbedienung mit Play-Command 0x32 + Adresse mit den beiden Extensions für DVD-Player. Das Telegramm wurde 6-mal wiederholt - ein relativ kurzer Tastendruck.
    Aktualisiert: 21.07.2014 um 14:07 von witkatz
  9. Avatar von Searcher
    Zitat Zitat von witkatz
    Damit ist für mich mein erstes Roboter-Projektchen und damit auch dieser projektbegleitende Blog abgeschlossen.
    War und ist interessant und ich bin auf den nächsten gespannt.
    Gruß
    Searcher
  10. Avatar von witkatz
    Die auf Dual-Komparator aufgebaute IR Reflexlichtschranke (Schaltbild) funktioniert ganz gut. Hier ein Action-Video mit Kollisionserkennung. Die niedrigen Hindernisse werden von der Prallplatte mit Reed-Kontakt erkannt. Die höheren Hindernisse erfasst die IR Lichtschranke. Die Lichtschranke ist verdrahtet auf PortC.RC5 und mit ein paar ms in der Software entprellt.


    Damit ist für mich mein erstes Roboter-Projektchen und damit auch dieser projektbegleitende Blog abgeschlossen.
  11. Avatar von witkatz
    Danke Searcher, der Lob tut gut.
    Gut zu wissen, dass hier im Blog überhaupt mal jemand vorbei schaut

    Ich bin jetzt dabei, für den WR1 einen LowCost IR Distanzsensor für kollisionsfreie Hinderniserkennung zu entfrickeln. Die Schaltung habe ich auf dem Steckbrett bereits getestet, sie erkennt zuverlässig meine Hand als Hindernis.
    • Die Versorgungsspannung (2 Alkaline Zellen) schwankt zw. 3,3V und 2,5V bei Belastung.
    • Sendefrequenz (40kHz) und Abtastrate (50%) lassen sich einstellen und bleiben im Spannungsbereich der schwankenden Versorgung stabil. Für die Justierung ist ein DSO mit Frequenz und DutyCycle Anzeige nützlich.
    • Das Senden kann von der MCU freigegeben/gesperrt werden. Für meinen langsamen "Traktor" würden 1ms kurze Pulse mit 5-10Hz für die Hinderniserkennung langen


    21.05.
    Ein einfacherer IR-Distanzsensor mit dem Dual-Komparator-IC MCP6542 auf Steckbrett getestet:
    http://www.roboternetz.de/community/...5&d=1400662478
    Der einfache Komparator-Kippschwinger lässt die IR Sendedioden mit 7kHz pulsen. Die Photodioden werden von der zweiten hälfte des Dual-Komparators ausgewertet. Mit dem Trimmer lässt sich der Arbeitspunkt und die Empfindlichkeit einstellen.
    Aktualisiert: 21.05.2014 um 10:14 von witkatz
  12. Avatar von Searcher
    Hallo witkatz,,
    Klasse! Hab Deinen "Traktor" gerade erst entdeckt und mußte beim Anschauen der Videos einfach nur schmunzeln. So ausgefallene Konzepte gefallen mir einfach nur zu gut!

    Gruß
    Searcher
  13. Avatar von witkatz
    Ich habe dem WR1 eine Motor-Stromüberwachung verpasst. Damit wird jetzt zuverlässig Überlast und Blockade erkannt und der Motor abgeschaltet, bevor die Batterie leergelutscht ist. Über ein RC-Filter wird der Strom am Shunt über AN0 gemessen und überwacht.
    Code:
    ;=== Stromüberwachung ==========================================================
    IsenseMonitor
        btfsc ADCON0,GO             ; if (ADC ready)
        goto IsenseMonitor_e        ; {
        movlw 0x47                  ;   if (ADRESH < 0x46)  // I_Motor < 700mA
        subwf ADRESH, w             ;       // w=ADRESH-0x47
        skpnc                       ;       // C=ADRESH>=47
        goto IsenseMonitor_1        ;   {
        M_MOVLF I_Wacthdg, d'125'   ;       I_Wacthdg=125; // Reset Überstrom 0.5s Überwachungszeit
    IsenseMonitor_1                 ;   }
        bsf ADCON0,GO
    IsenseMonitor_e                 ; }
    Übersteigt der Strom 500ms lang den Grenzwert und die Software-Timer Variable zu Null dekrementiert, schaltet der PIC den Motor aus und der WR1 hupt 4-mal. Die Anzahl der Huptöne dient als Status bzw. Fehlermeldung und macht den Roboter lebendiger.
  14. Avatar von witkatz
    Das Assembler-Experimentieren mit PICs macht super Spaß. Die gefädelten Testplatinen wurden ständig überarbeitet. Im Startbeitrag habe ich die Schaltpläne für 8/14-polige und 18-polige PIcs aktualisiert. Auf den Testplatinen habe ich jetzt pro Port jeweils: 2 Wannenstecker nach RN-Standard, 1 Buchsenleiste nach Sprut-Standard und eine Klemmleiste WAGO 233-510 mit Öffnungshebel‎ verdrahtet. Somit sind die Testplatinen sehr flexibel für den Anschluss diverser digitaler und analoger Ein/Ausgabe Testplatinchen bzw. Anschlusskabelchen zum Steckbrett u.a.
  15. Avatar von witkatz
    Nun ist die Steuerung auch lauffähig. Der WR1 fährt selbstständig, erkennt Hindernisse, wendet und hupt. Was will man mehr vom ersten Roboter? Als Kollisionssensor dient eine Prallplatte auf aufgebogenen Büroklammern federnd montiert und mit Magnetband + Reed-Kontakt. Die Steuerung übernimmt ein PIC16F688, programmiert in Assembler.

    Bild hier  

    Hier ist das Schaltbild der Steuerung.

    Was noch fehlt, ist die Überwachung des Motorstroms, um Festfahren zu erkennen.
    Als nächstes habe ich vor mit IR Optoelektronik zu experimentieren und eine IR Reflexionslichtschranke zu bauen. Die kann ich am WR1 testen damit er die Hindernisse sieht, bevor er drauf fährt
    Aktualisiert: 22.08.2015 um 17:43 von witkatz
  16. Avatar von witkatz
    Der Motor wird mit zwei monostabilen Relais angesteuert.
    Bild hier  


    Hier der erste Fahrtest mit manueller Ansteuerung der Schalttransistoren. Der WR1 erreichte 11cm/s.
    [video gelöscht]
    Aktualisiert: 23.08.2016 um 13:24 von witkatz
  17. Avatar von witkatz
    So, Motor ist angeflanscht und der WR1 fährt gemütlich vor (gerade aus) und zurück (um die Kurve),
    allerdings noch im absoluten "Manuell-Service-Modus", also Kabel händisch kurzgeschlossen.
    WR1 wartet jetzt auf die Elektronik Die leere Platine ist schon drauf, vorne auf Gelenkbolzen montiert zum Ankippen für Batteriewechsel und Löterei

    Bild hier  
  18. Avatar von witkatz
    So! weiter gehts an dem Projekt. Mein erstes dreistufiges Selbstbaugetriebe ist quasi fertig. Jetzt muss ich noch den Motor dranflanschen und schon bewegt sich die Kiste, hoffentlich. Als nächstes ist dann die Elektronik dran.
    Bild hier  
  19. Avatar von witkatz
    Vielen Dank RoboHolIC für den Rat, du hast mich in die richtige Richtung geschubst, denke ich. Ich habe mir vorgenommen, ein Zahnradgetriebe selbst zu basteln und da komme ich wohl um Justierbarkeit nicht herum. Es gibt zum Getriebebau mit "hausmitteln" zum Glück sehr viele Tipps und super unterhaltsame Threads im Forum. Vor lauter Lesestoff komm ich kaum noch zum Basteln...
  20. Avatar von RoboHolIC
    Hi, witzkatz.

    Ich habe hier ja schon einige Minimalismen gesehen, aber deine Idee, das Ausweich-Lenken im Rückwärtsgang automatisch machen zu lassen ist ja cool!

    Beim Genauigkeitsproblem stehst du sicher nicht alleine. Ich schlage vor, z.B. jedes zweite Zahnrad eines Getriebes auf einem beweglichen Blech mit Langlöchern oder Löchern mit reichlich Übermaß zu befestigen; dann kann zu beiden Nachbarn der Abstand angepasst werden. Keine schöne Lösung, ich weiß ...
Seite 2 von 3 ErsteErste 123 LetzteLetzte

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad