Forum: Mikrocontroller und Digitale Elektronik Druckelement Epson Model-620 ansteuern?


von Ulrich 1. (picbastler)


Lesenswert?

Hallo Leute,
ich habe bei Pollin das o.g. Teil erstanden, eigentlich weil ich nur das 
Wickelmotörchen nutzen wollte. Jetzt sehe ich aber, dass dort eine Reihe 
Zahlenrädchen drin sind, die anscheinend von dem gemeinsamen Motor mit 
angetrieben und vermutlich durch kleine Elektromagneten angekoppelt 
werden. Also kein Thermodruck, sondern richtig mechanisch. Vielleicht 
werde ich einmal spaßeshalber versuchen, das Ding anzusteuern. Hat 
jemand davon eine Ahnung und kann mir ein paar Tips geben?

Bei Pollin gibts ein Bild unter Bestellnummer 721 254.

von Nosnibor (Gast)


Angehängte Dateien:

Lesenswert?

Ja, das ist ein normaler elektromechanischer Rechenmaschinendrucker. Für 
jede Spalte, die er drucken kann, hat er ein Typenrad mit allen Ziffern 
und einigen Symbolen darauf, das zum Drucken in die richtige Position 
kommen muß. Dazu sitzen die Typenräder alle lose auf einer gemeinsamen 
Achse, die sich knapp eine Umdrehung weit dreht, bevor das Papier 
angedrückt wird. Normalerweise kommt dabei das "Leerzeichen" nach vorne, 
es wird also nichts gedruckt, und der ganze Zauber dreht sich wieder 
zurück, während das Papier eine Zeile Vorschub bekommt.

Zu jedem Typenrad gehört aber auch ein Elektromagnet, der einen kleinen 
Haken betätigt, der das Rad anhalten kann. Je nachdem, wann der Magnet 
anzieht, wird das Typenrad in einer anderen Position aufgehalten und 
bringt dann die entsprechende Ziffer zu Papier.

Bei diesem Modell ist das Farbband durch eine farbgetränkte 
Schaumstoffrolle ersetzt, die die Typenräder einfärbt. Der Nachteil 
dabei ist, daß man nur einfarbig drucken kann (normalerweise drucken 
Rechenmaschinen negative Zahlen rot statt schwarz); der Vorteil ist 
wahrscheinlich, daß der Farbträger mit weniger mechanischem Geschick und 
geringerem Sauereirisiko auszuwechseln geht.

Unter einer Abdeckung an der Seite sind Schleifkontakte und Schalter, 
die den steuernden Prozessor über den Zustand der Mechanik informieren, 
damit er im richtigen Moment die Magnete ansteuern kann.

Der Motor zieht bei 5V knapp 250mA, aber das ist mit einem trägen 
Multimeter gemessen, man sollte also kurzzeitig mit dem doppelten 
rechnen, denn die Last schwankt stark, wie man merkt, wenn man mal einen 
Zyklus von Hand durchdreht (eines der Zahnräder hat einen Pfeil für die 
richtige Drehrichtung aufgedruckt). Mit Motorantrieb macht das Ding 
ungefähr zwei Zyklen (Zeilen) pro Sekunde.

Auf dem Bild (wenn das mit dem Dateianhang klappt) ist der darstellbare 
"Zeichensatz" zu sehen (die Nullen in Zeile "3" sind Absicht, zum 
Spaltenzählen).

von Stefan W. (wswbln)


Angehängte Dateien:

Lesenswert?

Hi Leute,

Ich hab' bei dem Preis auch nicht widerstehen können und so'n Druckwerk 
geordert. ;-)

Im Anhang mal ein paar Bildchen zur Pinbelegung und dem Timing der 
Sensorik (Signale R,S,T wie im Schaltplansymbol). Die "WH"-Pins sind die 
Typenrad-(Wheel-)Magnete.

Das mit dem Index (Pin "S") haut noch nicht ganz hin: Wenn ich von Hand 
drehe, wird der betätigt. Läuft der Motor, dann ist er immer offen. 
Allerdings werden die Magnete noch nicht angesteuert - vielleicht macht 
das dann noch einen Unterschied.

von Ulrich 1. (picbastler)


Lesenswert?

Hey, genial. Ich hatte auch vor, solche Bilder zu machen, aber bei mir 
sind manche Projekte ziemlich langfristiger Natur. Ich habe das Teil 
seitdem leider noch nicht wieder angefasst.

von Stefan W. (wswbln)


Lesenswert?

...bei mir sieht's zeitlich auch etwas knapp aus. Vielleicht hat ja 
"Nosnibor" noch ein paar Tipps zur Ansteuerung?

von Nosnibor (Gast)


Lesenswert?

Ich bilde mir ein, daß die Ansteuerung kein Problem sein sollte, kann 
das aber (noch) nicht durch praktische Erfahrungen belegen (muß erst 
noch 'ne Handvoll ULN2803 und Zubehör bestellen).

Dem Anschluß S habe ich mal eben ein Lämpchen verpaßt, und das leuchtet 
bei meinem Exemplar bei jedem Zyklus einmal auf, auch bei Motorantrieb. 
Wäre auch unpraktisch, wenn nicht: schließlich soll der Prozessor daran 
erkennen, wann eine Zeile fertig gedruckt ist, damit er den Motor so 
ausschaltet, daß die Mechanik in Ruhelage ist und nicht noch das Papier 
festklemmt oder so.

T würde ich als Trigger nehmen, um die Magnete einzuschalten, R zum 
Ausschalten. Vielleicht muß man sie auch eine bestimmte Zeit lang 
einschalten, das käme auf einen Versuch an.

Interessant ist jedenfalls, daß Kontaktprellen keine Probleme bereiten 
kann: der Prozessor wartet ja immer nur auf genau ein Sensorsignal 
gleichzeitig und immer nur darauf, daß der Kontakt zum ersten Mal 
schließt.

Die Timing-Diagramme finde ich genial: die beantworten einige Fragen, 
die beim Schreiben der Steuersoftware plötzlich auftauchen werden, 
nachdem zuerst alles klar schien.

von Nosnibor (Gast)


Angehängte Dateien:

Lesenswert?

So, bei mir funktionierts. Schaltplan kann ich mangels entsprechender 
Software nicht liefern, aber das ist sowieso ein improvisiertes 
Gewurstel.

Für die Ansteuerung der Magnete bieten sich drei ULN2003A an, das sind 
dann 18 Treiber für die Magnete + 3 parallel für den Motor. Da ich hier 
ein NET-IO herumliegen hatte, habe ich das als Prozessorplattform 
genommen (also AVR Mega32 bei 16MHz), mit der Folge, daß nicht mehr so 
viele Portpins frei waren, also 2x'595 als 16-bit-Port dazu. Die 
Einzelheiten zur Pinbelegung stehen im Quelltext.

Ebenfalls im Quelltext stehen zwei Beispielfunktionen:

demo_diagonal() druckt den ganzen "Zeichensatz", aber spaltenweise 
versetzt.

demo_quadratzahlen() druckt eine Tabelle der Quadrate vierstelliger 
Zahlen, schließlich ist es ein *Rechenmaschinen*druckwerk, da muß man 
auch mal etwas rechnen. Ich habe es aber leider nicht durchgehalten, 
alles in Dezimalarithmetik zu machen. Und natürlich wäre zum Erstellen 
von Tabellen die Differenzenmethode angemessen (Babbage läßt grüßen)...

Zu tun bleibt noch eine Menge, bevor das (außer als Selbstzweck) zu 
gebrauchen ist:

  - auf Interruptnutzung umstellen, damit die CPU noch etwas anderes 
nebenher tun kann (z.B. Daten empfangen).

  - eine sinnvolle Datenquelle finden (also z.B. UART oder SPI, wenn das 
Ding nur Drucker spielen soll. Oder Tastatur&Display, wenn eine 
Rechenmaschine gewünscht ist)

  - einen kleineren Prozessor auswählen (soviel Speicher ist ja nicht 
nötig) und entweder die Schieberegister oder das große Gehäuse einsparen

  - Quelltext besser lesbar machen. Ich muß noch viel lernen, was die 
Gepflogenheiten und standard-libs bei C für AVR angeht.

von Stefan W. (wswbln)


Angehängte Dateien:

Lesenswert?

@Nosnibor:

Danke für die Vorlage - hoffentlich komme ich bald mal dazu, das 
auszuprobieren.

A propos kleinerer Prozessor:
Ich habe im Anhang einfach mal ein paar Bauteile auf ein leeres Blatt 
geworfen und wollte - bevor ich die Strippen ziehe - mal in die Runde 
der Interessierten fragen: Wäre die Bauteilauswahl für euch ok (ich 
denke ihr wollt dann ggf. auch eine Platine? ;-) ) Hättet ihr was gegen 
SMD?

Als Eingang würde ich RS232 (alternativ auch direkt die UART-Pins) und 
SPI auf Stecker führen.

Eine Stromversorgung mit einem kleinen Switcher für 9-24VDC sähe ich 
auch noch vor.

Kommentare?

von Nosnibor (Gast)


Lesenswert?

2xULN2803 gibt nur 16 Ausgänge. Da fehlt dann mindestens noch etwas für 
den Motor --und für die zwei Typenräder mit den Symbolen, wenn man die 
auch nutzen will. 3xULN2003 trifft es da meiner Meinung nach besser. Ich 
muß aber zugeben, daß ich die Ansteuerung des Motors nicht nachgerechnet 
habe. Das Fehlen von Rauchzeichen bisher ist ja noch kein Beweis für 
korrektes Schaltungsdesign.

Beim Schieberegister stört mich noch, daß ich so viele Pins zur 
Ansteuerung benutze. Entweder /OE oder RCK sollte man einsparen können. 
Allerdings weiß ich noch nicht, wie man dann sicherstellt, daß die 
Ausgänge alle tot bleiben, solange noch keine Software im AVR läuft.

Bei den Sensoren würde ich  den Common-Anschluß auf einen 
Interrupteingang legen (anstatt direkt auf Masse, wie ich das zuerst 
gestöpselt habe). Dann kann die Software sich aussuchen, ob sie den 
Common auf Masse legt und die Sensoren per Polling abfragen will, oder 
den Sensoranschluß, auf den sie wartet, auf Masse legt und sich einen 
Interrupt geben läßt, wenn der Kontakt schließt.

Bei der Spannungsversorgung wäre es wichtig zu wissen, ob man AVR und 
die ganzen induktiven Lasten (Motor&Magnete) an dieselbe 5V-Quelle 
hängen darf oder wie weit man das entkoppeln muß. Möglicherweise tun es 
für die Mechanik auch ungeregelte 6V, mit denen man dann nebenbei noch 
einen Regler für die Versorgung der Logik speist. AVR und 
Schieberegister sollten ja auch mit weniger als 5V auskommen können, 
oder?

von Frank K. (fchk)


Lesenswert?

Stefan Wimmer schrieb:

> Ich habe im Anhang einfach mal ein paar Bauteile auf ein leeres Blatt
> geworfen und wollte - bevor ich die Strippen ziehe - mal in die Runde
> der Interessierten fragen: Wäre die Bauteilauswahl für euch ok (ich
> denke ihr wollt dann ggf. auch eine Platine? ;-) ) Hättet ihr was gegen
> SMD?

Wenn Du TI TPIC6A595 oder 596 nimmst, hast Du Schieberegister und 
Leistungstreiber in einem. Mit Ausnahme des anderen Pinouts und der 
höheren Ausgangsleistung (bis zu 50V und bis zu 350mA pro Ausgang) 
kannst Du die Teile wie 74HC595 benutzen.

Die Schieberegister würde ich ans SPI anschließen, das macht das 
Raustakten schneller und einfacher. Damit ISP-Programmierung auch noch 
geht, würde ich die Leitungen zum Schieberegister über ein 74HC125 
führen, bei dem die Gate-Eingänge auf /RESET gelegt sind, so daß der ISP 
freie Fahrt hat, wenn er den RESET herunterzieht. /SRCLR der TPICs auch 
an /RESET, das sorgt dafür, dass nach einem Reset alle Ausgänge aus 
sind.

Als Prozessor hätte ich vielleicht einen AVR Atmega32U4 genommen. Da 
wäre dann vielleicht noch ein USB Printing Support mit drin ... obwohl 
bei DEM Druckwerk vielleicht nicht so interessant wie bei Pollin 721 
345. Zumindest würde ich den Mega8 nicht mehr einsetzen, sondern nur 
noch den Nachfolger Mega88PA, der ist pinkompatibel und hat eine Reihe 
an Verbesserungen. Da kann man dann auch den UART als zweiten SPI 
betreiben, wenn man ein SPI-Interface will.

fchk

von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

So, ich hab meine Gedanken in der Mittagspause eben mal schnell 
zusammengepinselt.

@Nosnibor:
>Allerdings weiß ich noch nicht, wie man dann sicherstellt, daß die
>Ausgänge alle tot bleiben, solange noch keine Software im AVR läuft.

Ich habe /G von den TPICs auf einen Portpin gepackt und mit einem Pullup 
versehen. Nach einem Reset sind ja alle Portpins auf Input geschaltet, 
d.h. der Pullup zieht die Leitung hoch, und die Ausgangstreiber bleiben 
aus. Wenn der AVR dann läuft, werden die Portpins entsprechend 
programmiert, und wenn alles erledigt ist, zieht man /G auf Low, und 
dann gehts los. /RCLR ist auf /RESET des Controllers gelegt, d.h. nach 
einem Hardware-Reset sind die Register leer. Ich würde die aber in 
Software nochmal löschen wollen; das hat dann beim Debuggen Vorteile.

fchk

von Stefan W. (wswbln)


Lesenswert?

Nosnibor schrieb:
> 2xULN2803 gibt nur 16 Ausgänge

Jepp, ich war ja auch noch nicht fertig... ;-)

> Bei der Spannungsversorgung wäre es wichtig zu wissen, ob man AVR und
die ganzen induktiven Lasten (Motor&Magnete) an dieselbe 5V-Quelle
hängen darf oder wie weit man das entkoppeln muß.

Ich würde sie über einen kleinen LDO entkoppeln. Der AVR etc. "frisst" 
ja nicht viel, so dass ein LP2950 o.ä. reichen würde. Das bringt dann 
genug "ripple rejection" (umd die 80dB bis 1kHz). Die Spannung für das 
Druckwerk würde ich so auf 5,8V einstellen, das ist dann quasi die 
Kompensation zur Vce des Treibers.



Frank K. schrieb:
> Wenn Du TI TPIC6A595 oder 596 nimmst..

Ich kenne die, wollte mit Hinsicht auf Erhältlichkeit und der "großen" 
Stückzahl bei "Standardkram" bleiben

> Die Schieberegister würde ich ans SPI anschließen ...

...würde ich nicht, denn ich wollte SPI (falls ich doch einen der 
herumliegenden M8-er nehmen sollte) als alternativen Eingang vorsehen.
Den '125er kannst Du übrigens durch einen 1K Längswiderstand in der 
MISO-Leitung ersetzen, solange die Schieberegister beim Programmieren 
via High am G-Eingang ruhiggestellt werden. Das bisschen 
Bitbang-Schieben macht der AVR doch mit Links.

> Zumindest würde ich den Mega8 nicht mehr einsetzen...
Da die Neuen pinkompatibel sind, nehme ich immer noch das M8-Symbol aus 
der Library. Vor dem Ziehen der Stückliste würde der schon noch auf was 
moderneres umgelabelt. :-)

Und von wegen "viele Pins" und "Mega32U4": Der Mega8 sollte doch reichen 
was Pinzahl und Speicher angeht. Er hat in dem Projektchen ja nichts 
weiter zu tun als auf Eingaben hin das Druckwerk zu betätigen. 
Vielleicht noch ein bisschen Handshake, damit die Buffer nicht 
überlaufen. USB wäre IMHO wirklich etwas über's Ziel hinaus...

Danke für die Beiträge.

von Nosnibor (Gast)


Lesenswert?

Die Spannungsversorgung macht noch Schwierigkeiten. Wenn ich ein 
leichter kontrollierbares Testmuster als ausgerechnet die 
Quadratzahlentabelle drucke, fallen mir gelegentlich Druckfehler auf, 
die sich alle damit erklären lassen, daß ein Magnet nicht schnell genug 
anzieht: "-" statt ".", "." statt "9", "1" statt "0" etc..
Mit höherer Versorgungsspannung (6V) werden die Fehler nicht weniger 
(aber der Drucker läuft deutlich schneller). Bei reduzierter 
Versorgungsspannung (4V) sieht es schon besser aus, am besten aber, wenn 
der Motor mit 4V und die Magnete weiterhin mit 5V betrieben werden. 
Allerdings läuft der Motor bei 4V deutlich langsamer und hat ziemliche 
Mühe, das Papier anzudrücken. Da wäre eine Geschwindigkeitsregelung 
hilfreich: eine Schaltung, die dem Motor mehr Spannung gibt, wenn er 
mehr Strom zieht. Ein Cassettenrecorder braucht dafür zwei Transistoren 
und allerlei Passivkram; hier sollte das doch der Prozessor per PWM 
erledigen können, oder?

von Frank K. (fchk)


Lesenswert?

Das Phänomen hatte ich auch. Bei mir hat es geholfen, die Magnete beim 
T-Puls einzuschalten, aber nicht beim R-Puls wieder auszuschalten, 
sondern einfach beim nächsten T-Puls umzuschalten.

Bei mir sieht das dann so aus:

static void prt_printline(void)
{
  unsigned char mask[3];
  unsigned char cpos,wpos;

  // Drucken
  prt_motor_on();
  for (wpos=0;wpos<NUMOFWPOS;wpos++)
  {
    // Bitmaske erstellen
    mask[0]=mask[1]=mask[2]=0;
    for (cpos=0;cpos<NUMOFCOLS;cpos++)
    {
      if (line[cpos]==wpos) 
mask[mag_to_msk[cpos]]|=BIT(mag_to_bit[cpos]);
    }

    prt_waitfor(BIT_T,300);
    prt_set_mags(mask[0],mask[1],mask[2]);
    prt_waitfor(BIT_R,150);
  }
  prt_rel_mags();

  prt_waitfor(BIT_S,1000);
  prt_motor_off();

  // nach Gebrauch Zeilenpuffer löschen
  curcol=0;
  for(cpos=0;cpos<NUMOFCOLS;cpos++) line[cpos]=255;
}

fchk

von Nosnibor (Gast)


Lesenswert?

Danke, damit läuft es wesentlich zuverlässiger. Es war ja auch 
eigentlich eine völlig unbegründete Annahme, daß man beim R-Impuls schon 
abschalten soll, aber von alleine wäre ich davon wohl nicht abgerückt.
Der Trend zu mehr Druckfehlern bei höherer Spannung ist immer noch 
erkennbar, aber jetzt bekomme ich fehlerfreie Ausdrucke, ohne den Motor 
abzuwürgen.

Bei der Gelegenheit (Labornetzgerät) habe ich mal nach der Stromaufnahme 
gesehen: bei 5V zieht der Motor kurzzeitig über 1,2A 
(Strombegrenzungs-LED blitzt bei jeder Zeile kurz auf). Man kann die 
Strombegrenzung aber bis unter 400mA drehen, bevor der Drucker 
stehenbleibt.

von termi (Gast)


Lesenswert?

Hallo!
hab mir auch grad so ein Druckelement bestellt...
Haben sich mittlerweile noch neue Erkenntnisse ergeben? Der letzte Post 
ist ja doch schon ne ganze Weile her...
Dann muss ich das Rad nicht komplett neu erfinden^^
lg termi

von Nosnibor (Gast)


Lesenswert?

Nichts neues von meiner Seite.  Der gute Vorsatz, die Software bei 
Gelegenheit auf Interruptbetrieb umzustellen, ist zwar noch vorhanden, 
verstaubt aber in der Ecke (genau wie der Versuchsaufbau).

von M@rco (Gast)


Lesenswert?

Hallo,

Ich hab mir auch mal so ein Teil bestellt. Heute habe ich mal bei Epson 
electronic wegen  Datenblättern angefragt. Bin mal gespannt, ob was 
zurückkommt.

Ich möchte probieren, das Druckelement unter Bascom anzusteuern.

Gruß Marco

von Tom Z. (tom_z)


Lesenswert?

M@rco schrieb:
> Hallo,
>
> Ich hab mir auch mal so ein Teil bestellt. Heute habe ich mal bei Epson
> electronic wegen  Datenblättern angefragt. Bin mal gespannt, ob was
> zurückkommt.
>
> Ich möchte probieren, das Druckelement unter Bascom anzusteuern.
>
> Gruß Marco

Hallo Marco,

ich habe auch so ein Teil hier liegen.
Hast Du schon von Epson eine Antwort?

Ich programmiere auch in Bascom. Wir könnten ja mal Code teilen.


MfG Tom

von M@rco (Gast)


Lesenswert?

Hallo Tom,

leider hat meine Anfrage bei Epson nichts gebracht. Ich wurde von einer 
Abteilung zur anderen verwiesen, aber keiner konnte (oder wollte) mir 
helfen.

Ich denke ich werde in nächster Zeit einfach mal selbst ausprobieren.

LG Marco

von WernerB (Gast)


Angehängte Dateien:

Lesenswert?

Hab dass im Net gefunden, hoffe es hilft, habe selber so ein 
druckelement und verde es so mit meinem 89C51RD2 ansteuern.. Hoffe ich.. 
:)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.