Reparaturblog Sinclair C5 - Seite 15:
Mi, 01.12.2010:Ein Ersatz für den ULA-Chip
Ups! Es ist tatsächlich schon ein halbes Jahr her, dass ich in diesem Blog etwas geschrieben habe.
Aber auch, wenn ich hier etwas schreibfaul war, war ich am C5 dafür umso fleißiger. Um es kurz zu fassen - neben vielen kleinen und großen Änderungen am C5 selbst habe ich eine neue Steuereinheit entwickelt. Und genau diese soll der folgende Absatz etwas vorstellen.
Motivation
Bei der Entwicklung des Sinclair C5 in den frühen 80ern wurde viel Wert auf einfache und gewöhnliche Komponenten gelegt, um die Herstellungskosten niedrig zu halten.Die Einfachheit und der Verzicht auf Spezialteile hat natürlich auch zur Folge, dass der für nahezu jeden sehr gut instandsetzbar ist.
Allerdings gibt es eine Sache, welche nicht repariert werden kann: der ULA-Chip.
Dieser Chip (ein uncommitted gate array) ist sozusagen das "Gehirn" des C5.
Wenn dieser Chip verloren geht oder defekt ist, kann der C5 zwar immer noch verwendet werden - allerdings ohne Überwachung des Motorstroms und ohne das charakteristische LED-Display.
Wie ich schon letztes Mal geschrieben hatte, arbeitete ich da gerade an einem Prototyp einer Tacho-Einheit mit großem Display, Eingabetasten, Funkuhr, usw., welche die komplette Anzeige- und Steuereinheit des C5 (das POD) ersetzen sollte.
Inzwischen habe ich mich allerdings anders entschieden und stattdessen ein Ersatzmodul entwickelt, welches anstelle des ULA-Chip in das POD eingesteckt wird und diesen simuliert.
Die Motivation war, allen C5-Besitzern einen Ersatz für verlorene oder defekte ULA-Chips zu bieten und auf einfache Weise einen Pedelec-Modus zu implementieren.
Features
Folgend mal die Möglichkeiten, welches dieses kleine Modul bietet:- Messen der Batteriespannung und des Motorstroms
- Ansteuerung der LED-Balken für Strom und Spannung
- Messen der Motortemperatur
- Ansteuern eines Motorlüfters möglich
- Messen der Fahrgeschwindigkeit
- Messen der Pedalierfrequenz
- Messen der zurückgelegten Strecke
- Pedelec-Modus - erlaubt den Betrieb innerhalb der EU ohne Zulassung/Versicherung
- Interne Selbsttests
- Ausgabe aller Betriebsdaten über eine serielle Schnittstelle
- Ein Bootloader ermöglicht das Aufspielen neuer oder eigener Software
Es handelt sich somit um einen vollwertigen Ersatz für den bisherigen ULA-Chip, welcher einfach in das POD gesteckt werden kann und darüber hinaus noch ein paar Extras bietet.
Vorüberlegungen
Um den ULA-Chip zu simulieren, muss man wissen, wie er funktioniert. Abgesehen von meinen eigenen Untersuchungen haben dazu ganz entscheidend die Dokumente auf c5alive.co.uk beigetragen.Ein dickes DANKE hierfür an alle Autoren!
Der ULA-Chip ist ein 28pin Chip im DIL-Gehäuse. Das schränkt den Platz für ein Ersatzmodul entsprechend ein. Der Chip steckt in einer IC-Fassung im POD. Nach oben hin ist im Gehäuse noch reichlich Platz, so dass problemlos Steckerleisten o.ä. platziert werden können. Unmittelbar rechts vom ULA-Chip sind auf der POD-Platine nur niedrige Bauteile, so dass die Platine der Ersatzschaltung, welche auf die ULA-Fassung gesteckt wird, hier noch ein paar Millimeter überragen kann.
Da das Ersatzmodul auf die Fassung des ULA-Chips gesteckt wird, ist man natürlich an die vorgegebene Pin-Konfiguration gebunden:
Somit ergeben sich Platinenmaße von ca. 49 x 19 mm. Da das recht eng ist, mussten, soweit möglich, SMD-Bauteile verwendet werden.
Controller
Bei der Auswahl des Controllers habe ich mich für einen ATmega88 entschieden, welcher hier mit 16MHz läuft.Der Controller hat 8kB Flash, 512 Byte EEPROM und lässt sich über ein ISP-Interface (In-System Programming) beschreiben.
Die nötige Beschaltung für den Controller beschränkt sich auf ein Minimum:
R1 ist der Pullup-Widerstand für die Resetleitung, C3 dient der Glättung der Betriebsspannung und C1, C2 und Q1 bieten die Taktquelle.
Auch das ISP-Interface ist als 10poliger Anschluss auf der Platine herausgeführt und entspricht dem Atmel-Standard.
LED-Ansteuerung
Zur Ansteuerung der LEDs des POD sind keine Bauteile auf dem Ersatzmodul erforderlich.Die Leitungen MUX_CURRENT und MUX_FUEL gehen direkt an die Multiplexertransistoren. Bei der Entwicklung des Ersatzmoduls habe ich übrigens festgestellt, dass diese Transistoren durch BC557 ersetzbar sind.
Softwareseitig geschieht das Multiplexing durch einen Timer des ATmega. Jede Millisekunde wird zwischen Spannung und Strom gewechselt, so dass eine flackerfreie Anzeige entsteht.
Spannungsmessung
Wie man hier sehen kann, wird die 12V Batteriespannung über einen 47k-Widerstand an den ULA-Chip gegeben (Pin 1).Zusammen mit einem weiteren 15k-Wiederstand gegen Masse auf dem Ersatzmodul ergibt dies einen Spannungsteiler von 0.32. D.h. aus 12V Batteriespannung werden 3.83V am AD-Eingangspin ADC0 des ATmega. Der ATmega löst mit seinem AD-Wandler Spannungen zwischen 0V und AREF (5V) mit 10 Bit auf.
Daraus folgt:
12V Batteriespannung * 15k/47k = 3.83V
3.83V/5.04V * 1024 = 784 (Die Ausgangsspannung des 7805-Reglers beträgt ziemlich exakt 5.04V)
⇒ 784 ist der zu erwartende Wert des AD-Wandlers für 12V Batteriespannung.
Mit dem gewählten 15k-Widerstand sind Spannungen bis 15.8V messbar:
5.04V * 47k/15k = 15.792V
Da eine Autobatterie bei Spannungen über 14.4V Schaden nimmt, ist diese Dimensionierung also völlig ausreichend.
Strommessung
Die Messung des Motorstroms beim originalen ULA-Chip funktioniert folgend:Der Spannungsabfall über einem 1mΩ Shunt wird einem Operationsverstärker in der Control Box im Heck zugeführt.
1A Motorstrom resultiert also in 1mV Eingangspannung.
Dieser Wert wird durch einen DAC im ULA-Chip variabel verstärkt. Konkret heißt das, der Verstärkungsfaktor wird solange erhöht, bis ein bestimmter Ausgangswert erreicht ist. Anhand der Verstärkung kann man dann zurückrechnen, welcher Eingangsspannung dieser Wert entspricht. Der Vorteil dabei ist, dass so auch kleine Ströme extrem verstärken lassen um sie exakt zu messen.
Wirklich eine sehr clevere Methode!
Aber - leider hat der ATmega88 keinen DAC. Und einen externen DAC auf der Platine unterzubringen war wegen der Platzverhältnisse nicht möglich.
Um dennoch den Motorstrom irgendwie messen zu können, habe ich die Verstärkung des OPV mit einem zusätzlichen 47k-Widerstand auf einen festen Wert gebracht:
Der 47k-Widerstand befindet sich zwischen Pin 7 und Pin 5.
Der Verstärkungsfaktor des OPV ist nun fest eingestellt auf 1 + 47k/2.7k (⇒ 18.4):
Diese Verstärkung ist geeignet Ströme bis ca. 160A zu messen. Allerdings ist zu berücksichtigen, dass das Messergebnis durch das lange Kabel zwischen OPV und POD erheblichen Störungen unterliegt, was sich besonders bei niedrigen Strömen bemerkbar machen kann.
Es ist zwar schade, dass das Prinzip der variablen Verstärkung mit dem ATmega nicht realisiert werden konnte, aber auf der anderen Seite wurde so die Emitterleitung zwischen POD und Control Box nicht mehr benötigt und konnte zur Ansteuerung eines Motorventilators verwendet werden.
Temperaturmessung
Die Messung der Motortemperatur erfolgt mit einem temperaturabhängigen Widerstand. Zusammen mit den Widerständen R9 und R20 im POD ergibt sich ein Spannungsteiler. Der Spannungswert an Pin VtH wird de AD-Wandler zugeführt und von der Software in eine Temperatur umgerechnet.Bedingt durch Widerstandstoleranzen und Unlinearität ist das Ganze zwar relativ ungenau, aber für den Zweck völlig hinreichend.
Motortaster
Der Taster am Lenker des C5, welcher dem Einschalten des Motors dient, hängt mit einem Anschluss direkt an 12V.Wird der Taster geschlossen, wird diese Spannung über einen 15k-Widerstand an Pin 21 den ULA-Chip geleitet.
Auf der Platine des Ersatzmoduls bildet ein weiterer Widerstand mit 4.7kΩ ein Spannungsteiler mit Faktor 4.7k/15k = 0.31.
Aus den 12V werden so verträgliche 3.76V, welche an einen AD-Eingang geführt werden.
Motorrelais
Die Leitung zum Aktivieren des Motorrelais ist direkt mit einem Controller-Pin verbunden und erfordert keine weitere Hardware. Bitte beachten: wenn dieses Signal aktiviert ist, muss trotzdem erst auch der Motortaster gedrückt werden damit das Relais geschaltet wird.Lüfter
Das der Emitterausgang (Pin 4 des ULA-Chip) zur Temperaturmessung nicht mehr benötigt wird, und ich am ATmega88 noch ein IO-Pin übrig hatte, kann mit diesem Anschluss ein Lüfter oder anderer Verbraucher geschaltet werden.Die Leitung ist mit einem 10k-Widerstand (R6 auf der Ersatzmodulplatine) auf 5V gezogen um mehr Strom liefern zu können, als es mit dem Controller sonst möglich wäre.
Um einen 12V-Lüfter oder ein Relais zu betreiben muss man aber noch einen Transistortreiber vorschalten.
Über den Bootloader kann eine Temperatur eingestellt werden, ab welcher der Lüfter aktiviert werden soll.
Der Lüfter wird ebenfalls immer aktiviert, wenn die Motortemperatur 70°C überschreitet.
Lautsprecher
Wenn die Motortemperatur dauerhaft 70°C übersteigt, die Batteriespannung sehr niedrig ist oder die Stromaufnahme zu hoch, wird der Piezo-Lautsprecher im POD durch ein Rechtecksignal aktiviert.Tachosignal
Das von mir entwickelte ULA-Ersatzmodul bietet die Möglichkeit einen Reed-Schalter anzuschließen, welcher durch einen Magneten am einem der Räder geschlossen wird.Mit dem Bootloader kann der Radumfang des Rades eingegeben werden.
Somit kann die Software auf dem ATmega die derzeitige Fahrgeschwindigkeit errechnen und über die serielle Schnittstelle ausgeben.
Pedalsignal
Das Ersatzmodul bietet zudem die Möglichkeit einen zweiten Reed-Schalter anzuschließen, welcher durch einen Magneten am Pedalritzel geschlossen wird.Somit kann die Software feststellen ob und mit welcher Geschwindigkeit pedaliert wird.
Diese Information ist relevant um den C5 als Pedelec zulassungsfrei in der EU zu betreiben.
Serielle Schnittstelle
Die serielle Schnittstelle dient dazu über den Bootloader Einstellungen (z.B. den Radumfang) vorzunehmen und ggf. neue oder eigene Software aufzuspielen.Im normalen Betrieb werden über diese Schnittstelle alle 256ms folgende Informationen ausgegeben:
#DIST|SPEED|RPM|TIMEOUT|SWITCH|TEMP|VOLT|VREF|CURR|ENA|COND|TIME
Die Ausgabe beginnt mit einem '#'-Zeichen und wird mit einem Newline-Zeichen ('\n') beendet.
DIST | zurückgelegte Strecke |
SPEED | aktuelle Geschwindigkeit in Zehntel km/h (123 entspricht 12.3km/h) |
RPM | aktuelle Pedalierrate in Umdrehungen pro Minute |
TIMEOUT | für den Pedelec-Modus: Zeit in ms die verbleibt, bis der Motor disabled wird, da nicht mehr mitgetreten wird |
SWITCH | 0 wenn der Motortaster nicht gedrückt ist; sonst beliebiger Wert <=1023 |
TEMP | AD-Wert der Motortemperatur |
VOLT | AD-Wert der Batteriespannung |
VREF | AD-Wert der Referenzspannung (einstellbar mit dem Poti im POD) |
CURR | AD-Wert des Motorstroms |
ENA | 0 wenn Motorrelais disabled ist; sonst 1 |
COND | Sicherheitszustand. 0 wenn alles ok ist. |
TIME | Systemzeit in Millisekunden |
Die serielle Schnittstelle wird mit 9600 Baud betrieben. Wichtig ist, dass die herausgeführten Signale auf der Platine 5V-Pegel haben und auf keinen Fall direkt mit einem COM-Port verbunden werden dürfen!
Zum Anschluss an einen Computer ist ein Pegelwandler nötig.
Reparaturblog: Inhaltsverzeichnis
- Seite 1Vorgeschichte
- Seite 1Ein neues Bastelprojekt
- Seite 2Demontage und erste Probleme
- Seite 2Der Kampf mit der Lenkstange
- Seite 3Exhumierung eines Motors
- Seite 3Es werde Licht!
- Seite 4"Termitenhöhle"
- Seite 4Rost, Rost, Rost
- Seite 5Schleifen, schleifen, schleifen
- Seite 5Alles blitzeblank schmirgeln
- Seite 6Fahrgestell abschleifen
- Seite 6Vorderrad zerlegt
- Seite 6Von schleifen und Seifen
- Seite 7Fahrwerk fertig abgeschliffen, Radgabel lackiert
- Seite 7Fahrwerk und Radgabel lackiert
- Seite 8Radgabel nochmal lackiert, Vorderradkugellager gesäubert
- Seite 8Kugellager der Titanic
- Seite 9Ein Puky wird geopfert
- Seite 9Eine elektrische Zahnbürste mit richtig Power
- Seite 10Und weiter geht's!
- Seite 10Getriebehalterung
- Seite 10Kette und Kleinkram
- Seite 11Reflektorstreifen, probeweiser Zusammenbau, neue Probleme
- Seite 11Anhängerkupplung und Verschiedenes
- Seite 12Ich bin frustriert!
- Seite 12Puky muss noch mal herhalten
- Seite 13I am Iron Man!
- Seite 13Getriebehalterung fertig
- Seite 14Vorderradfelge aus Stahl
- Seite 14Verkehrsrechtliches
- Seite 15Ein Ersatz für den ULA-Chip