Sonntag, 25. November 2012

"Bastelparadies"

Hi zusammen :-)

Nachdem hier längere Zeit Flaute war, wieder mal ein kleiner Eintrag. Ich bin ja im Mai umgezogen und habe endlich ein eigenes Büro/Bastelzimmer. Nach anfänglichem Provisorium ist es jetzt soweit fertig und richtig gemütlich geworden. Es erfolgen ein paar Fotos zur "Dokumentation" ;-). Ich freue mich schon auf viele Stunden ausgelassenen "Makens" und "Hackens" und auf hoffentlich viele daraus resultierende interessante Posts.

Das ist der Blick auf die Arbeitsplätze: Links Büro/Computer, rechts Bastetlisch mit Zusatzregal für das wichtigste Equipment (Oszi Hameg 1505 analog, Computeroszi 32 MS/s, 4-Kanal Labornetzteil, Heißluft-Rework-Lötstation, Lötstation). Darüber hinaus gibts bis unter die Decke jede Menge Stauraum für mein ganzes Bastelzeug.

Das ist die Area zum Relaxen und Chillen, Kaffe-Trinken oder einen 18-jährigen Single Malt genießen. Gleichzeitig auch unsere Gästecouch, auf der es sich ganz bequem schläft. Wer also, Lust hat, zum Basteln übers Wochenende zu kommen - nur zu ;-).

Hier nochmal eine Großaufnahme des Bastelbereiches. Das Netzteil hat so große Filtercaps und einen riesigen Ringkerntrafo drinnen, dass es beim Einschalten in 50% der Fälle den FI-Schalter raushaut. Daher der Einschaltstrombegrenzer in der Steckdosenleiste ganz links - funktioniert super (NTC in Serie zum Verbraucher und Relais parallel zum Primärkreis). Auch eines meiner fast fertigen Projekte ist zu sehen :-) - Blogpost dazu ist noch im Entwurfstadium. Vielleicht schaff ichs demnächst.
So Leute, das wars auch schon wieder. Ich weiß - ein kurzes Intermezzo, aber immerhin. Es würde mich freuen, wenn hier bald wieder mehr Leben herrscht. Ach ja, einen coolen Namen fürunser Blog brauchen wir auch noch.

PS: Ach ja, ich hab vergessen zu erwähnen, dass ich als Bastelplatzbeleuchtung eine 2700 Lumen Röhre montiert habe. Wenn man die anschaltet sticht es in den Augen, aber dann gehts ;-).

Samstag, 14. Juli 2012

Die etwas andere Himbeere: Raspberrypi

Und so melde ich mich aus einer langen Blog-Abstinenz wieder zurück: mit einer Himbeere der anderen Art, "Raspberrypi". Seit einigen Monaten ist der Hype um diese Frucht ungebrochen und nach langer Wartezeit konnte ich einen von Farnell element 14 bekommen. Kurz gesagt ist der Pi eine Linuxbox in Kreditkartenformat - ein vollwertiger Computer mit hohem Bastelpotential. Der Preis ist unschlagbar: 40€ für Bestellung aus UK inklusive allem.

Der Pi ist eigentlich als Billigcomputer gedacht, um Kindern den Einstieg in die Programmierung, auch in ärmeren Ländern, einfach und kostengünstig zu ermöglichen. Die Erfinder und Gründer der Raspberrypi-Foundation hatten dabei aber die Maker-Community unterschätzt. Da der Pi GPIO Pins und die einschlägigen Schnittstellen (UART, I2C, SPI) zusätzlich zu HDMI und USB direkt herausführt kann das 32bit leistungsstarke Board auch für aufwendigere Embedded-Projekte super eingesetzt werden. Die Rechenleistung, vor allem der GPU, ist sehr viel leistungsstärker als die eines 8 Bit Micros.

Aber zunächst mal die Fotos:



 

Kurzer Überblick über die technischen Daten (in diesem Post geht es um Modell B):



Model AModel B
SoCBroadcom BCM2835 (CPU, GPU, DSP, and SDRAM)
CPU:700 MHz ARM1176JZF-S core (ARM11 family)
GPU:Broadcom VideoCore IV, OpenGL ES 2.0, 1080p30 h.264/MPEG-4 AVC high-profile decoder
Memory (SDRAM):128 Megabytes (shared with GPU)256 Megabytes (shared with GPU)
USB 2.0 ports:12 (via integrated USB hub)
Video outputs:Composite RCA, HDMI
Audio outputs:3.5 mm jack, HDMI
Onboard storage:SD, MMC, SDIO card slot
Onboard network:None10/100 Ethernet (RJ45)
Low-level peripherals:8 × GPIO, UART, I²C bus, SPI bus with two chip selects, +3.3 V, +5 V, Ground
Power ratings:500 mA (2.5 W)700 mA (3.5 W)
Power source:5 volt via MicroUSB or GPIO header
Size:85.60 × 53.98 mm (3.370 × 2.125 in)
Operating Systems:Debian GNU/Linux, Fedora, Arch Linux


Zusätzlich führt das Broadcom SOC auch Anschlüsse für ein TFT-Panel und einen CMOS-Kamerachip heraus (die zwei Flexprint-Buchsen). Sowohl ein passendes TFT als auch ein leistungsfähiges Kameramodul wird es als Zubehör zu kaufen geben. Es gibt auch bereits ein Erweiterungsport mit einem AVR drauf, um zusätzlich HW-Schnittstellen und ADCs und DACs bereitzustellen (Gert-Board).

Hier ein kleines Video, in dem ihr den Raspberry in Aktion sehen könnt:



Aktuell habe ich Debian Squeeze laufen (mit Sofware floating-point support - trotzdem erstaunlich flott und usable; komplexere Webseiten sind etwas lahm). Es ist eine "Raspian"-Distribution mit HW-Floating-Point-Unterstützung des SoC in Vorbereitung, die um einiges performanter laufen soll. Auch Übertaktung bis auf ca. 900 MHz wurde bereits erfolgreich durchgeführt.

Ok, das war's fürs Erste :-). Bin gespannt auf eure Kommentare - und ich kann nur sagen: Diese Himbeere rockt und hat eine  fruchtige Zukunft vor sich!

Dienstag, 12. Juni 2012

Neues von der Akku-Front

Genug mit der Ecken-Messerei, vorerst zumindest.

Zwei bei Ebay geschossene Laptop-Akkus habe ich an der Werkbank seziert, die Elektronik entsorgt und mit den Zellen hübsche 7.2V Päckchen gemacht.


Und dann war da noch das Scheduler-Problem. Aus meinem Terence-Projekt hab ich den Code wieder aufgewärmt. Die Idee funktioniert folgendermaßen:
  • Einen Timer konfigurieren, der stur nach oben zählt. Über den Prescaler des Timers lässt sich das Verhältnis von CPU-Frequenz zu Zähl-Frequenz einstellen.
  • Jedes mal wenn der Timer überläuft, wird ein Interrupt ausgelöst und die dazugehörige ISR (Interrupt-Service-Routine) aufgerufen.
  • In dieser ISR wird die aktuelle ADC-Messung ausgelesen, in einen Struct geschrieben, danach ein neuer ADC-Kanal eingestellt und eine neue ADC Konversion getriggert.
  • Der Timer wurde so eingestellt, er mit einer Frequenz von 1024 Hz aufgerufen wird, also im Abstand von ca. 1ms. Die Schaltung hat vier Kanäle, damit liegt alle 4ms eine vollständige Messung, d.h. ein vollständig befüllter Struct vor.
  • Vom Main wird der Struct ausgelesen, etwa alle 40ms. Um Race-Conditions zu vermeiden, also eine Veränderung der Werte während des Lesens, habe ich einen Lock-Mechanismus eingebaut.
Nebenbei stellte ich fest, dass die Arduino-Funktion  analogRead() richtig zeitintensiv ist. Hat man also zeitkritische Anwendungen empfiehlt sich die beschriebene Konstruktion mit ISR-getriggerter ADC-Messung zu verwenden.

So, die bereits beschriebene Schaltung an das Arduino-Board geflanscht, Display dazu und Akku angeschlossen. Nebenbei bin ich noch auf einen fundamentalen Fehler in der Schaltung gestoßen - die Masse der meisten Schaltungsteile ist fälschlicherweise auf GND gelegt. GND ist hinter dem Shunt definiert, was bedeuten würde, dass sich das Niveau bei Stromfluss zum Akku-GND verschiebt, und somit die Spannungs-Messungen falsch wären. Da musste nochmal das Löteisen ran. Korrigierten Schaltplan poste ich nach.

Eine Frage war immer noch offen: Wie verhält sich die Akku-Spannung, während eines Lade-Bursts? D.h. wie schnell fällt die Akku-Spannung wieder ab, wenn der Lade-Strom nicht mehr fließt. Das unten stehende Diagramm zeigt das Ergebnis:
Auf Y1 die Spannungen. Ist der Strom negativ, fließt er in den Akku, die gemessenen Spannungen werden der Lade-Spannung (rot) zugeordnet. Positiver, bzw. null Strom entspricht der Akku-Spannung (grün). Y2 - wer kommt von selber drauf? Strom (blau).
An der X-Achse die Werte des Zyklus-Zählers - ein Zyklus entspricht ca. 1ms.

Fast eine Sekunde braucht der Akku, bis die Spannung wieder auf den tatsächlichen Wert abgefallen ist. Will man also während des Ladens die Akku-Spannung messen, muss die Ladung für eine Sekunde ausgesetzt sein. Relevant wir dies unter Umständen, wenn balanciert werden soll.

Ein weiteres Problem, wird noch deutlich: Das Laden / Entladen wird über zwei MosFet-Transistoren gesteuert, über welche abhängig vom Strom Spannung abfällt. Am Akku liegt deshalb eine Spannung an, welche mal höher, mal niedriger ist. Wie soll nun von einem Ladegerät die obere Spannung genau eingestellt werden?

Dazu wären ein paar Messungen fällig. Im Datenblatt ist der Widerstand der verwendeten IRF9Z24N mit 0.175 Ohm angegeben. Damit würde bei einem Ladeschlussstrom von 150mA etwa 0.05V abfallen. Aber ist das wirklich so?

Mal sehen. Hab natürlich ein Back-Up Konzept im Ärmel: Ein Netzteil bauen, Mikrocontroller-gesteuert und über Serial oder SPI mit dem Akku-Controller kommunizieren. Teile dazu hätte ich alle da. Aber ich komme ein wenig vom Thema ab. Wollte ja eigentlich einen Roboter bauen (nachdem ich das Navi ja nicht mehr brauche...).


Mittwoch, 16. Mai 2012

...und sie leben!

 Als ich Sonntag Morgen am Wohnzimmer vorbei in die Küche schlurfte, merkte ich (so halb) dass irgend etwas anders war. Hatte sich da auf dem Tisch etwas verändert? War die Unordnung von mir hinterlassen worden? War es gestern so spät? Die Synapsen etwas mit Koffein geschmiert, verflog langsam das Dunkel in dem diese Gedanken verschwanden. Die Scan-Maschine geisterte durch meinen Kopf - sie war anders.
Beim näheren Hinschauen sah ich es: Da war ein GP2D02 Sensor auf dem URM37! Wo kam der her?


Nein, ich glaube nicht mehr an das Christkind. Doch in letzter Zeit fiel mir immer öfter auf, dass Programme plötzlich funktionierten, oder Kabel richtig gesteckt waren, obwohl ich am Vortag noch Fehler drin hatte.
Was geht hier vor? Passiert Euch das auch öfter? Habt Ihr auch manchmal den Eindruck Euer Rechner hat einen besonders guten oder besonders schlechten Tag? Dinge verändern sich, ohne Euer Zutun? Programme verschwinden oder tauchen auf? Ich glaube, das ist kein Eindruck, ich glaube sie machen das selbst.Und die Scan-Maschine hat sich einen neuen Sensor aufgepflanzt. Sie verändert sich, entwickelt sich weiter... sie - lebt?

HA! Gebt es zu - beinahe hättet Ihr es geglaubt, stimmts? Bei den Fummeleien mit dem URM37 ist mir eingefallen, dass ich noch ein paar von den GP2D02 rumliegen hatte. Dieser Sensor ist ein Distanzsensor der nach dem Triangualtionsprinzip arbeitet. Eine Sendediode, eine Empfangsdiode. Je stärker die Empfangsdiode leitet, desto näher ist das Objekt. Die messbare Distanz liegt zwischen 5 und 70 cm (laut Datenblatt 80cm). Der große Nachteil jedoch ist, dass der Output des Sensors nicht linear ist, d.h. die Auflösung in Größerer Distanz ist sehr niedrig und steigt mit sinkendem Abstand (siehe Graphik - Abstand auf X, Sensor-Out auf Y1).



Im Netz hab ich genügend Stoff gefunden, wie man sich am Besten einen Look-Up Table baut, um mit möglichst wenig CPU-Power die Umrechnung von Ausgabewert zu Distanz zu bekommen. Im wesentlichen funktioniert das so, dass man für bestimmte Abstände den rohen Sensor-Output aufzeichnet (blaue Linie) dann eine Funktion plottet (gelb) und die Parameter dieser Funktion so trimmt, dass der Fehler (least Squares - grüne Kurve) möglichst klein wird. Den Optimierungs-Bereich habe ich auf 10 - 70 cm eingestellt. Messungen in größeren Distanzen sind extrem ungenau und streuen stark.
Ich hab dann ein kleines Python-Script geschrieben, dass mit den gefundenen Funktionsparametern ein Header-File schreibt, das einen Look-Up Table enthält.
Damit ist eine Funktion realisierbar, welche die gemessene Distanz in [mm] ausgibt, nachdem man den Sensorwert rein steckt. Wenn jemand an Einzelheiten Interesse hat, stelle ich gerne alle Files zur Verfügung (weiß jemand, ob ich das Zeug an diesen Blog tackern kann?).

Danach bin ich wieder Ecken scannen gegangen, genauer gesagt - eine Ecke:




Die Ecken aus Sicht des URM37 sehen etwas schöner aus, dafür verrundet er die Geraden der Wand ein wenig stärker.
In Sachen GP2D02 zeigt die Ecke zwar eine deutliche Charakteristik, aber ein Sensormodell zu realisieren stelle ich mir extrem Schwierig vor - zumal auf einem Micro. Vielleicht könnte man den Sensor dazu gebrauchen, den Boden vor einem Roboter zu scannen und Stufen, etc. zu detektieren. Um ernsthaft an dieser Stelle weiter zu machen wären mehr Tests nötig. Unterschiedliche Oberflächen, Formen, Abstände, usw.

Doch hier mach ich die Biege und tüftel an den Akkus weiter. Ich brauche ein ordentliches Scheduling. Meiner Meinung nach liegt hier eine Schwäche im Arduino Konzept, da es keine direkte Unterstützung für Interrupt-Services gibt.

Übrigens - was mir gerade auffällt: der Look-Up Table sieht anders aus als gestern und der LCD-Text hat auch ein anders Layout...

Freitag, 4. Mai 2012

Brauch mal ne Pause...

Das kann nicht gut sein, wenn man schon von Akkus träumt, wenn man in der Mittagspause Schaltpläne auf Servietten malt und bei schönstem Sonnenschein in der Werkstatt rumhängt.

Also dacht ich mir: Mach mal zwischendurch was anderes. Hab ich auch getan und den URM37 Ultraschall-Sensor aus der Kiste geholt, von dem ich zwei zum Abschied von meinen Arbeitskollegen bekommen habe (neben einen Haufen anderer Sachen - danke nochmal!)
Auf der Suche nach Beispielen stellte ich fest, dass die Seite von yerobot.com nicht erreichbar war, die Software von Miles Burton kleinere Bugs hatte und in der Doku ein Fehler in einer Formal war. Also alles ganz normal und kaum eine Stunde später spuckte das Teil die ersten Messungen aus. Die ersten Tests verliefen ganz gut und ich fragte mich, wozu der Servo-Ausgang gut ist.

In einem gut sortiertem Haushalt findet man immer ein Servo in irgend einer Schublade, und in der Werkstatt war schnell ein Winkel gezaubert. Der hausinterne Stardesigner Laurenzo de G kreierte das ultimative Testfahrzeug dazu und fertig war die monstermäßige Scan-Maschine.



 

Kann der Sensor Ecken scannen? Im Diagramm unten sind ein paar Sprünge zu erkennen. Der Scan stammt aus einer Ecke, drei mal abgetastet. Ich bin mir nicht mehr sicher, ob sich das Testfahrzeug dabei bewegt hat oder nicht, da die Wiederholgenauigkeit zu wünschen übrig lässt...


Beim Blick in die Software fällt auf, dass eine Menge Delays drin stehen. Außerdem sind die Abtast-Zeiten für kurze Distanzen sehr schnell und verlängern sich dann mit zunehmendem Abstand. Deshalb werde ich mir die Software nochmal vornehmen und vielleicht mein altes Scheduling-Konzept ausgraben, welches ich im Terence-Projekt entworfen hatte.

So ein bisschen Abwechslung macht schon Spaß!

Montag, 30. April 2012

JTAGICE-MKII clone

Ich habe ein neues Spielzeug: einen chinesischen Clone des AVR JTAGICE-MKII. War im Vergleich zum Atmel Original ziemlich günstig (ich hab noch weniger bezahlt, als die Sure-Homepage angibt...). Der Versand aus China dauerte ca. einen Monat und vor ein paar Tagen habe ich das Päckchen dann beim Zollamt gegen einen kleinen Obulus (Einfuhrumsatzsteuer) in Empfang genommen – Freude!

Viel habe ich noch nicht damit gemacht, aber ich wollte Euch das Ding trotzdem schon mal kurz vorstellen. Sieht von außen exakt aus, wie das Original:

I

Im Innern findet sich dann eine ganz ordentlich aussehende Platine: 

Ein wenig herumtracen ergab, daß die beiden Header oben rechts wohl JTAG Header für die beiden ATmega128A Chips sind, die auf dem Bord stecken (auch wenn ich noch nicht alle Pins zugeordnet habe). Ich hab die gleich mal bestückt. Leider habe ich kein zweites JTAG Gerät, sonst hätte ich auf diesem Weg vermutlich ein Firmware-Backup machen können (Hey Chris, Du brauchst doch bestimmt auch eins - oder? ;-)  ). Und mein Versuch, das Ding dazu zu bringen, die eigene Firmware auszulesen ist erwartungemäß gescheitert ;-)

First Light

Immerhin habe ich schon mal einen ersten Funktionstest gemacht: Arduino Flash auslesen im ISP-mode mit avrdude:

  avrdude -p m328p -c jtag2isp -P usb -U flash:r:flash.bin:r

...das ging wie eine Eins :-))
Was ich bisher nicht hingekriegt habe, ist das JTAGICE unter Avrstudio4 in Betrieb zu nehmen. Allerdings weist einiges darauf hin, daß das ein Problem mit der Virtualbox ist und nicht mit dem Gerät selbst. Muß das bei Gelegenheit mal mit einem nativen Windows probieren. OK – gelöst: war ein temporärer Schluckauf bei der Treiberinstallation. Nu gehts und ich habe bereits die Firmware mit AVR-Studio auf den neusten Stand gebracht. Im Gegensatz zu vielen anderen China-Clones läuft dieser nämlich mit der original Atmel Firmware.

Für einen richtigen Test muß ich mir aber erstmal irgendwas aufbauen – vielleicht mit meinem STK500. Der Arduino ist so out of the box weniger geeignet, denn da muß man erst einen Kondensator amputieren oder mindestens einen Trace kappen (je nach Modell) bevor der bei DebugWire mitspielt und dazu hatte ich heute keine Lust. Also muß ich nun wirklich was zum debuggen finden – zu dumm, daß meine Programme nie Bugs haben ;-)

Update

Inzwischen hab ich einen ATmega16 aus der µC Schachtel geholt und in das STK500 gesteckt. Noch den JTAG-Adapter drauf und ein bisschen herumprobiert und schon konnte ich ein kleines C-Programm via JTAG flashen und auch mit der Kombination avarice/gdb eine Debugging-Session starten. Funktioniert tatsächlich recht gut!  :-)

Jetzt muß ich nur noch meine rudimentären gdb Kenntnisse auf Vordermann bringen, dann ist kein Bug mehr vor mir sicher ;-)

Samstag, 21. April 2012

Simpler Komponententester

Mein Oszi hat keinen Komponententester – ich weiß: viele Leute sagen, die Dinger sind ungefähr so nützlich wie ein Loch in der Kniescheibe, aber ich wollte einen haben. Basta!

Bekanntermaßen besteht so ein Teil im Wesentlichen aus einem Trafo (hier 6V Nennspannung), einem Widerstand (hier 10k), zwei Polklemmen und zwei BNC Buchsen, außer man wird eitel und will verschiedene Widerstände und/oder variable Spannungen etc. All das ist sicher nützlich, aber wenn ich sowas will, dann lieber gleich mit einem Anschluss für den Funktionsgenerator. Heute sollte es aber die Supersimpelvariante sein. D.h. das Aufwändigste war das Gehäuse ;-)

Bei der Gelegenheit habe ich festgestellt, daß mein Bohrständer Sperrmüll ist und ich mir irgendwann mal eine Standbohmaschine besorgen sollte. Aber egal hier erstmal der Schaltplan:

Die Diode repräsentiert das zu testende Bauteil (device unter test: DUT) Und so sieht das fertige Gerät aus:

Simpel, wie versprochen. Nun noch ein paar Impressionen im Einsatz:

 Offen – d.h. kein Bauteil drin.

 Kurzschluss

2.2µF Elko 

Siliziumdiode

Basis-Emitter Strecke eines C558B PNP Transistors

Inspiration für ambitionierte Maker: Chris Eckert

Heute habe ich mal einen Webtipp, den ich extrem toll finde. Chris Eckert (nein nicht unser ChrisE ;-) ) zeigt auf seiner Homepage mehrere echt begeisternde Arbeiten, die sich aus toller Mechanik und elektronischer Steuerung zusammensetzten:


Mein persönlicher Favorit ist die Maschine, die den Papierstreifen mit Handschrift füllt, aber auch der Bettelnde Roboter ist wirklich cool!


Ob ich jemals etwas auf dem Niveau hinkriege? Elektronisch vermutlich schon, aber in Puncto Mechanik bin ich davon Lichtjahre entfernt. Aber das ist ja auch der Sinn der Sache: Spaß dabei interessante neu Sachen zu lernen – und sich daran zu erfreuen, was manch anderer so macht!

Mittwoch, 18. April 2012

Li-Io Akkus Laden: "Einfach nur Strom reinmachen..."

Genau. Ist echt nicht schwer. Über das Laden von Li-Ion Akkus findet man viel im Netz. Auch sehr viel brauchbares. Eigentlich.
Die besten Beiträge sind die, in denen Leute behaupten es sei sogar einfacher ein Ladegerät für Li-Ion-Akkus zu bauen, als für Ni-MH. "Man muss ja nicht umständlich das Maximum über die delta-U oder delta-2-U Methode (zweite Ableitung) ermitteln". In einen Li-Akku macht man einfach Strom rein und wartet bis er voll ist. Eigentlich.
Hab ich mir auch gedacht, bei eBay schnell zwei gebrauchte Laptop Akkus geschossen und rein ins Vergnügen.

Im Allgemeinen jedoch liegen Teufel  im Detail.

Wie bereits geschrieben, gibt es eine Menge Wenn und Aber, die zu beachten sind. Der Zustand des Akkus, bzw. jeder einzelnen Zelle muss erfasst werden, also die Leerlaufspannung, der Ladestrom und sicherheitshalber noch die Temperatur. Weichen während des Ladens die Zellspannungen ab, muss man das ausgleichen - Balancieren. Dafür gibts unterschiedliche Strategien, Schaltungen usw.
Am Anfang ist der Akku mit Strombegrenzung zu laden, bis alle Zellen ihre Zielspannung erreicht haben, danach kommt die Sättigungsphase, in der man die Spannung konstant hält und den Akku voll laufen lässt. Abschalten bei I=0.05C.

Ich will das hier nicht in die Länge ziehen, zusammengefasst heißt das:
  1. Spannung genau messen - Auflösung kleiner 0.05V (oder besser: die Genauigkeit)
  2. Ein großes Stück Software schreiben, dass für alle Fälle und Situationen eine Lösung parat hat.
  3. Hardware bauen, die präzise ist. 
Zunächst die Schaltung, die am Akku angeflanscht wird. Sie ist dafür gedacht immer dran zu bleiben und kontrolliert das Laden und das Entladen. Ein Mikrocontroller übernimmt die Logik dazu.

Im Wesentlichen besteht die Schaltung aus fünf Teilen:
  • Spannungsteiler zum Messen der Zellenspannungen
  • Balancer-Schaltungen mit Lastwiderständen
  • zwei Leistungstransistoren, um Entladen / Laden zu schalten
  • ein rudimentärer Verstärker für den Temperatursensor
  • und ein Summen-Differenzverstärker mit Shunt, zur Lade-/Entladestrommessung
Die Problematik, die sich mit dem Netzteil ergibt will ich hier noch nicht ansprechen.

Und so sieht der Versuchsaufbau aus:

 Wie funzt das jetzt alles?

 

Spannungsteiler

Nicht schwer. R13 und R6 bzw. R8/R16 bilden einen Spannungsteiler, um die max. 8.4V/4.2V auf 2.56V Pegel für die ADC-Eingänge anzupassen.
Aber hier schon das erste Teufelchen: Die beiden Teiler würden immer Strom ziehen, lägen sie auf GND. Die Elektronik soll aber am Akku bleiben, weshalb die Teiler statt an GND an den Collector von Q3 geführt sind. So ziehen sie nur Strom, wenn der Controller in Betrieb ist.
Übrigens: Im ausgeschalteten Zustand ist der Stromverbrauch der gesamten Schaltung 0 A. Ein bisschen Leckstrom ist immer, konnte ich aber nicht messen.

Aber damit ergibt sich gleich das nächste Teufelchen: Wie hoch ist denn die Spannung am Knoten R13/R6, wenn die Schaltung nicht im Betrieb ist? Richtig 8.4V, bzw. Akku-Spannung. Die ADC-Eingänge des µC schätzen so etwas nicht, weshalb die Messspannungen über U1A / U1B (Spannungsfolger) zum ADC geführt werden.

 

Balancer

Während des Ladens baut sich die Spannung in den Zellen nicht gleichmäßig auf. Das liegt an den unterschiedlichen Kapazitäten der Zellen, wie bereits diskutiert. Liegt also die Spannung einer Zelle zu hoch, wird der jeweilige Transistor Q1 bzw. Q2 durchgeschalten und der Ladestrom fließt über die Lastwiderstände R3 / R4.
Interessant wird, ob sich im Test die Strategie als richtig bestätigt, früh einzugreifen und mit wenig Strom zu balancieren. Und ob die 2W Widerstände halten...

 

Leistungstransitoren für On/Off/Laden

Zwei Transistoren schalten die Lasten zum Entladen, bzw. zum Laden. Ist Q4A aktiv, kann der Akku entladen werden, unabhängig des Zustandes von Q4B. Dieser steuert die Ladung des Akkus.
Über die Transistoren Q3 / Q6 steuert der Mikrocontroller die beiden Lasttransistoren an. Ein direktes Ansteuern ist leider nicht möglich, da Pull-Up Widerstände nötig waren - R18 / R25, um die Schaltzustände im ausgeschalteten Zustand, bzw. beim ein und ausschalten stabil zu halten.
Der Taster SW1 dient zum Einschalten des Controllers. Ist er gedrückt, zieht er die Basis von Q3 auf VDD und Q4A schaltet. Damit wird der Spannungsregler U2 versorgt, an dem der Controller hängt. Als erste Aktion legt dieser dann den Pin "Battery-On" auf High und hält damit den Zustand des Lasttransistors.
Ist der Transistor Q3 durchgeschalten, liegt auch der Spannungsteiler auf Masse.

 

Temperaturmessung

Ein simpler, nicht invertierender Verstärker um U1D, an dem ich einen KTY81-110 hängen will. Über R21 fließt aus der Referenzspannung nicht ganz 1mA durch den Sensor.
Der Aufbau ist nicht ganz korrekt, da sich der Strom durch den Zweig ACRef - R21 - KTY81 - GND ändert, wenn sich der Widerstand des Temperatursensors ändert. Anstelle des Widerstandes müsste eigentlich eine konstant-Stromquelle sitzen. Das ist jedoch viel zu aufwendig, denn es reicht die ungefähre Temperatur des Akkus zu ermitteln. Wenn's warm wird, geht was schief, da spielt ein Grad hin oder her keine Rolle.

 

Summen-Differenzverstärker

Eigentlich das heißeste Teil auf der Platine - leider hab ich es nicht selber erfunden, sondern hier abgekupfert: u5-operations-verstaerker.pdf
Das Teufelchen an dieser Stelle ist, dass der Spannungsabfall über dem Shunt R10 positiv oder negativ sein kann, je nach dem ob der Akku geladen, oder entladen wird. Wie also messen?
Natürlich gibt es sog. Shunt-Monitore, die sind aber erstens nicht billig (ca. 2,-- EUR) und die Verstärkung ist nicht frei einstellbar (z.B. 100 oder 50). Bei Reichelt hätte ich einen geeigneten gesehen, den AD 8218 B für 1,80 EUR. Hatte ich aber gerade nicht in der Schublade, deshalb ein paar Widerstände und einen OP aus der Ramschkiste und los gings.
Der Summen-Differenzverstärker kann Anliegende Spannungen addieren oder subtrahieren und verstärkt das Resultat um einen beliebigen Faktor. In der oben angegebenen Quelle ist die Berechnung der Widerstände ausführlich mit Beispiel beschrieben. Da die Werte etwas krumm werden, hab ich in der Schaltung jeweils zwei Widerstände vorgesehen (R2 + R5 / R11 + R12). Alle Widerstände sollten entweder eine Toleranz von 1% haben, oder handverlesen sein. 





So, das sollte erst mal reichen. Die Software für das Arduino Board ist schon weit fortgeschritten. Ein wenig Probleme habe ich allerdings noch mit der Spannungsversorgung. Dazu später mehr.

Montag, 16. April 2012

Auflösung des Rilderbätsels

Hey,Ihr seid echt gut!

Tatsächlich handelt es sich um einen Robter:


Ich hab seinerzeit zwei von den Dingern gebaut, Terence und Philip. Die Namen sind aus der South-Park Serie inspiriert, dort gab es in einer Fernsehserie zwei Figuren, die immer eklige Sachen gemacht haben.

Auf meiner alten Homepage hab ich ein bisschen was zu den Dingern geschrieben. Ist allerdings schon Dekaden her:

http://www.typsiland.de/BuildThatRobot/philip.html

Später hab ich ein Atmega-8 Board geklöppelt und die Sensorik verbessert. Die IR-Detektoren haben ganz gut funktioniert.
Die beiden Robis sollten sich finden und mit dem Ausleger die Feder des anderen Berühren. An der Feder gestupst zu werden gab für den attackierten Robo Minuspunkte.
Ich hatte damals den Ansatz von Rodney Brooks verfolgt, die Subsumption-Architektur. Heute hätte ich dazu ein paar neue Ideen.

Beide Chassis sind tatsächlich aus CDs. Hatte ich im Internet gesehen und für eine Gute Idee gehalten. Allerdings taugt diese Material nichts, ist zu dünn und zu spröde.

Der Stand von 2004 / 2005:

Philip

Terence 

Sonntag, 15. April 2012

Rilderbätsel

Na gut, bevor ich hier richtig abkotze, wie es mir mit dem Akku-Lader geht, stelle ich Euch das Rilderbätsel, welches ich noch schuldig bin.
Eigentlich wollte ich ein richtiges "Ihr werdet schon sehen, was Ihr davon habt" machen, hab mich dann aber doch entschlossen ein paar verräterische Details mit auf die Bilder zu nehmen.

 Also, was isses? Ich geb keine Tipps, sonst wirds wirklich zu leicht.

So, und jetzt hol ich mir ein Beissholz und setz mich in die Ecke.

Viel Spass!




Dienstag, 10. April 2012

Nanu – was macht denn die Lötbrücke da?

Neulich habe ich mir einen Arduino Duemillanove im Ausverkauf besorgt – die wollten wohl die Lager leer machen, weil doch nun alle den Uno haben wollen (den hab ich mir auch gleich mitbestellt). Diesen habe ich als Gehirn im Netzmonitor-Projekt auserkoren und wie Ihr an den letzten Posts sehen konntet funktioniert er auch wunderbar. Gerade habe ich das Board mal genauer studiert und die SMD-Löterei bewundert, als mir auffiel, daß mein Gerät eine fiese Lötbrücke zwischen den Pins 25 und 26 des FT232 Chips hat. Es war ziemlich schwierig, das mit der Kamera einzufangen, ich hoffe, man kann es erkennen (3. und 4. Pin von rechts in der vorderen Reihe):


Nachdem das der USB2RS232 Chip ist, hätte ich eigentlich mit Problemen bei der Datenübertragung gerechnet, aber ich habe das Gerät problemlos über diese Schnittstelle programmiert und auch die Kommunikation im Rahmen des Netzmonitorprojekts ging einwandfrei. Also stellt sich die Frage: Was sind das für Pins?

Mit Googles Hilfe habe ich mir ein Datenblatt besorgt und darin folgendes Pinout gefunden:

Also haben wir es mit den Signalen TEST und AGND zu tun. AGND ist laut Datenblatt die Masse für den clock-multiplier und TEST "puts the device in IC test mode. Must be tied to GND for normal operation...". Aha - deshalb gibt es keine Probleme! Hätte ich aber auch schneller merken können, daß die Brücke unkritisch ist, denn wenn man das Arduino Board genau ansieht, stellt man fest, daß die Leitbahnen der beiden Pins sofort verbunden werden.

Also wieder abregen und mit was produktiverem weitermachen ;-)

Eingepegelt – kommerzieller usb2serial Adapter

Bevor mir klar geworden war, daß mein Handy-Datenkabel ein perfektes USB-seriell Kabel ist, hatte ich mir irgendwann mal einen billigen USB-seriell TTL Adapter aus China bestellt - hatte den schon fast vergessen, aber heute ist er angekommen. So sieht er aus:

Abgesehen davon, daß er ein bisschen handgelötet ausschaut macht er einen guten Eindruck. Wie auch das Handykabel verwendet er einen PL2303; das hat mich etwas überrascht, denn die meisten Adapter die ich auf diversen Bastlerseiten und Zulieferern gesehen hatte bauen auf dem FTDI Chip FT232 auf, warum auch immer. Ansonsten fallen mir drei Dinge auf:
  1. Auf der Platine sitzt ein USB Typ-A Stecker. Das ist unpraktisch – eine Buchse vom Typ-B oder Mini Typ-B wäre besser, denn dann könnte man statt einer USB-Verlängerung ein normales USB-Kabel verwenden.
  2. Es gibt Pins für 5V und 3.3V
  3. Das Ding hat einen Jumper
Letzteres hat mein Interesse geweckt: Ob man mit dem Jumper zwischen den Signalpegeln für die beiden Spannungen wählen kann? Und wie sehen wohl die Pegel in den beiden Stellungen aus?

Also schauen wir uns das mal an. Zunächst habe ich die Versorgungsspannung an den Pins 5V und 3.3V nachgemessen und wie schon in anderen Posts bemerkt sind die 5V des USB-Ports bei mir nur 4.6V, während die 3.3V exakt stimmen. Ich habe, wie beim letzten mal, einfach einen Haufen Nullen auf das Interface geschickt und mich mit dem Oszi auf TX geklemmt. Hier zunächst mit Jumper "unten" (Vermutung: 5V Stellung):



Und nun "oben" (Vermutung: 3.3V):



Ich habe es auch bei ungesetztem Jumper probiert und glaubt mir, es sieht wieder exakt genauso aus. Scheinbar verlässt sich auch dieser Adapter darauf, daß 3.3V µCs 5V tolerante Eingänge haben. Aber wofür in aller Welt ist der Jumper dann gut? Hatte ich schon erwähnt, daß der Adapter ohne jede Dokumentation kam? Also diesmal kann mir niemand vorwerfen, ich sei nur zu faul zum Lesen gewesen ;-)

Also hab ich das Multimeter rausgeholt und die Verbindungen der drei Pins verfolgt - hier das Ergebnis:
  1  GND
2 RX
3 ??
Das verstehe ich nun wirklich nicht. In der oberen Stellung lege ich RX also auf Masse - wozu soll das gut sein? Jumper-Stellung für Leute die sich gerne selbst reden hören??? Und wenn Pin 3 eh nicht verbunden ist, warum dann ein Header mit 3 Pins? Normalerweise würde man sagen, damit der Jumperstecker ein Zuhause hat, aber chinesische Hersteller sind nicht gerade für Verschwendungssucht bekannt und da hätte man bestimmt 0.01 ¢ pro Modul sparen können!

Also weiterforschen. Einiges Herumprobieren ergab dann doch noch etwas Interessantes: offenbar sind die 3 Pins nicht einfach nur ein Jumper, sondern ein zweiter Header mir der Belegung
    1  GND
2 RX
3 TX
Und zwar für 3.3V Volt Schaltkreise. Hänge ich mich auf diesen TX-Pin bekomme ich dies:


Der high Pegel ist zwar nicht wirklich unter 3.3V, aber immerhin niedriger, als zuvor. Und wozu ist dann aber der komische Jumper? Nach einigem Denken und Rumlesen im Web bin ich zum Ergebnis gekommen, daß der evtl. zu Testzwecken dient: verbinde ich RX und TX mit dem Jumper kann ich natürlich jedes Zeichen, das ich im Terminalprogramm tippe sofort wieder empfangen (habe das mit den 5V und den 3.3V Pins getestet). Wieder was gelernt.

Montag, 9. April 2012

Noch ein Batterieentladeprojekt

Mit Interesse habe ich Haralds Batterieentlade-Projekt verfolgt und bin schon gespannt auf die nächste Folge. Und wie es der Zufall so will bin ich im WWW über eine anderes Projekt gestolpert, das ebenfalls Entladekurven zur Grundlage hat: Denis Hennessy beschreibt auf seiner Seite einen ziemlich umfangreichen Vergleich verschiedener Batteriemarken. Ich finde das hoch interessant und fände es toll, die Entladekurven verschiedener, bei uns in Deutschland angebotener, Batterien zu sehen. Harald – wäre das nicht was für Dich?

Freitag, 6. April 2012

Ikeaschreibtischlampenphotobloggingstativ

Viele meiner Blog-Posts enthalten Fotos. Und die mache ich gewöhnlich mit meiner Kompaktknipse. Wie es der Zufall (und die in Mitteleuropa übliche Arbeitszeit) so will, finden die meisten meiner Projekte am Abend statt, d.h. das Licht ist mäßig. Und so musste ich viele der Bilder aus meinen Beiträgen mehrfach aufnehmen, bis endlich eins dabei war, das ich nicht verwackelt hatte. Nun hätte ich ja auch mein Fotostativ holen können sagt Ihr? Klar, aber viele der Bilder zeigen Dinge, die auf meinem Schreibtisch liegen – von oben aufgenommen. Und dafür ist zumindest mein Stativ wenig geeignet. Was also tun?

Es gibt natürlich alles mögliche Stativ-Zubehör und auch (sündteure) Spezialkonstruktionen zu kaufen, aber das wäre kostspielig und langweilig. Also habe ich mal kurz überlegt, was man zu einem guten Blogging-Stativ umbauen könnte. Ich präsentiere – das Ikeaschreibtischlampenphotobloggingstativ!

Die Basis

Grundlage für das Stativ ist eine Ikea Schreibtischlampe:



Kabel und Lampenschirm waren schnell entfernt. Nun fehlt nur noch eine Halterung für die Kamera. Irgendwo lag noch ein Hama-Ministativ rum, das ich irgendwann unbedingt haben musste, das sich aber als wackelig und praxisuntauglich erwiesen hatte. Aber der Mini-Kugelkopf, den es besitzt ist für eine Kompaktkamera völlig OK:


Freundlicherweise ist der Kopf einfach über eine stinknormale M4 Schraube mit dem Rest verbunden und war schnell abmontiert:


Mit Hilfe einer etwas längeren Schraube und einer passenden Unterlegscheibe war der Kopf schnell montiert und die Kamera draufgepfanzt:


Und so sieht das Ganze dann aus, wenn es sich harmonisch in mein Chaos integriert


Natürlich ist das Ganze nicht so stabil wie ein echtes Photostativ, deshalb ist es am besten, wenn man die Finger nicht an der Kamera hat, wenn das Bild gemacht wird. Meine Knipse hat leider keinen Fernauslöser, deshalb verwende ich den auf 2 Sekunden eingestellten Selbstauslöser. Klappt super. Hier das erste Bild das ich mit dem neuen Setup geschossen habe:


Der Ausschnitt ist in Originalgröße und zeigt ein Detail der Siemens-Handy Platine von neulich. Die Schärfe passt perfekt, nur hat die Kamera leider etwas Sensorrauschen, aber das werde ich wohl nicht durch Basteln wegbekommen...

Datenkabel einsatzfertig

Mein USB-seriell Datenkabel hatte ich ja vor ein paar Tagen vorgestellt. Funktioniert wunderbar, aber immer mit nackten Kabelenden rumhantieren fand ich lästig. Außerdem kann sich mein vorgealtertes Hirn immer nicht merken, welche Farbe nun gleich wieder welches Signal führt. Und so habe ich beschlossen, dem ganzen ein paar Header Pins und Buchsen sowie eine Legende zu verpassen. Nicht der anspruchvollste Blog-Beitrag der Geschichte, aber egal. Hier isses:

Donnerstag, 5. April 2012

Netzspannungsüberwachung – Teil 2

Erster Praxistest

Nachdem wir nun ein (hoffentlich) µController-freundliches Spannungssignal haben ist es an der Zeit, einen ersten Praxistest zu starten. Dazu habe ich eines der Beispielprogramme für den Arduino (AnalogReadSerial) genommen und minimal modifiziert (konkret: die Datenübertragung über die serielle Schnittstelle auf 115200 bps hoch gesetzt). Das Programm tut nicht anderes, als den vom ADC gelesenen Rohwert über die serielle Schnittstelle zu funken. Mit seinen 16MHz Takt sollte der Arduino locker in der Lage sein, dem Spannungssignal zu folgen. Die Schnittstelle ist hier klar der Flaschenhals, dennoch sieht der erste Test sehr erfreulich aus. Ich habe einfach die Daten einen Moment lang mit geloggt und in eine Datei geschrieben und dann ein paar Datenpunkte einfach der Reihenfolge nach geplottet, d.h. die Zeitachse ist nicht notwendigerweise vertrauenswürdig. Dennoch sieht das Ergebnis einer sinusförmigen Halbwelle schon erfreulich ähnlich:


Quiz
Was wir hier messen ist ja die positive Halbwelle der Wechselspannung. Also sollte die Periode ohne Spannung genauso lang sein, wie die sichtbare Halbwelle. Ist sie aber im obigen Plot nicht! Es sieht eher nach einem Verhältnis von ca. 1:2 aus. Zuerst war ich verwirrt. Könnte es sein, daß die Geschwindigkeit des ADC von der anliegenden Spannung abhängt? Unwahrscheinlich, außerdem ist der ADC um einiges schneller, als die Schnittstelle. Aber welches Geheimnis steckt dann dahinter? Dann dachte ich, es verstanden zu haben und schließlich bin ich wieder verwirrt.

Preisfrage: Wie kommt dieses Artefakt zustande?

Wer es zuerst rauskriegt bekommt einen selbstgebastelten IR-Tester von mir ;-)

Ausblick

Jetzt muss ich nur noch die Software ein bisschen aufbohren: Peak-Spannung über ein bestimmtes Zeitfenster mitteln und die Daten auf SD-Karte speichern. Danach heißt es dann eine ganze Weile Geduld haben, denn wir wollen ja Statistik über ein paar Wochen betreiben.