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:
ULA-Chip pinout

Verwendete Pins


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

ATmega circuit

Beschaltung des Controllers

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):
OPV output

Verstärkung des OPV: grün = Ausgangsspannung, rot = Eingangsspannung (1mV entspricht 1A Motorstrom)


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
TIMEOUTfü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.


zurück


Reparaturblog: Inhaltsverzeichnis