Hallo,
ich bin gerade dabei für einen Warenausgabeautomat (sicher kennt ihr die
"Zigarettenautomaten" wie sie in Supermärkten stehen) umzubauen.
Der Automat hat 60 "Auswerfer". In jedem Auswerfer ist eine kleine
Platine.
Auf der Platine sind im Prinzip nur 2 Taster: einer ist geschlossen wenn
Ware im Schacht vorhanden ist, der andere gibt an ob sich der Auswerfer
in der Endposition befindet. Außerdem ist an der Platine noch der Motor
des Auswerfers angelötet.
Die Schaltung mit der aktuellen Verdrahtung hat den Nachteil das die
Hauptplatine erst mitbekommt ob ein Schacht leer ist wenn Ware aus
diesem angefordert wird. Nach dem Befüllen des Entsprechenden Schachts
muss dem Automaten dies auch erst durch Tastendruck mitgeteilt werden
das nun wieder Ware vorhanden ist.
Was ich nun vorhabe:
Ich möchte im Prinzip die komplette Steuerung des Automaten ersetzen
(Hauptplatine stellt kein Problem dar).
Für die Auswerfer möchte ich kleine Platinen fertigen lassen.
Auf die Platine soll ein kleiner µC.
Die µCs haben dabei folgende Aufgabe:
- Auf Anforderung vom Master-µC den Motor einschalten
- Motor laufen lassen bis der Schieber wieder in Endposition ist
- Schieber nach X Sekunden nicht in Endposition -> Motor aus, Bericht
an Master
- Schacht leer -> Bericht an Master
- Schacht wieder gefüllt -> Bericht an Master
Die µCs möchte ich dabei über ein BUS-System verbinden.
Welchen µC würdet Ihr hierfür verwenden? Ob AVR oder PIC ist mir
eigentlich relativ egal. Sollte nur "günstig" sein (um nicht zu sagen
"billig" :D)
Und welches BUS-System?
Stehe hier gerade n bisschen auf dem Schlauch :D
Martin schrieb:> Für die Auswerfer möchte ich kleine Platinen fertigen lassen.> Auf die Platine soll ein kleiner µC.
Solange da nur digitale Signale notwendig wären, würdens auch
Port-Expander o ähnlich tun.
Möglicherweise gibts sogar Motortreiber mit I/O
Hätte den Vorteil das die "Platinen" keine eigene Software haben müssen.
Wenn man die Software mal ändern muss, kannste 60uC's updaten..
Hallo,
Die Beschreibung kommt mir sehr bekannt vor.
Darf ich fragen, um welchen Automaten es geht (Hersteller, Typ,
Baujahr)?
Würde mich mal so nebenbei interessieren.
Peter D. schrieb:> Ich würde den ATtiny24 oder ATtiny261 empfehlen. Dann hat man reichlich> Pins.
Die schwirrten mir auch sofort im Kopf rum.
Johnny S. schrieb:> Wenn man die Software mal ändern muss, kannste 60uC's updaten..
Ein weiteres Problem, dass bedacht werden muss.
Dabei ist dann noch die Frage, wie du die Module adressieren willst?
Soll jedes Modul eine feste Adresse bekommen, weil es nur der eine
Automat ist?
Soll das vielleicht größer werden, sodass man eine eigenständige (aber
konsistente und reproduzierbare) Adressierung der Module mithilfe des
Masters vorsieht. - Was ist mit "ausgebauten" Modulen? (Schacht zu
schmal)
Gruß
LPC11C24
Kleiner Cortex-M0 mit CAN und(!) integriertem CAN-Transceiver. D.h., du
hast keine weiteren Aufwand für die CAN-Anschaltung. Preis liegt bei
1,50€ bei 100 Stück vom Distributor.
Durch CAN hast Du einfache und flexible Möglichkeiten der Kommunikation.
Adressierung der Module über einen zusätzlichen Draht zwischen den
Platinen (Daisy Chain) zur Adressvergabe oder normale DIP-Schalter
Die Adressvergabe könnte man wie folgt lösen:
1. Die Modul Adresse liegt im EEPROM bzw. in einem durch den µC selbst
dauerhaft beschreibbaren Speicher (Flash etc.)
2. Neben der vergebenen Adresse hört der Slave immer unter einer
weiteren Adresse (0xFF) = Basisadresse.
3. Beim Adressieren hängt immer nur derjenige Slave am "Bus", der eine
neue Adresse bekommen soll; alle andere sind entweder nicht
angeschlossen oder im RST. Dieser Slave wird auf der Basisadresse
angesprochen und seine Adresse als Parameter über den Bus gesetzt.
So kann man die Adresse eines jeden (einen nach dem anderen) setzen.
Firmware update via Bootloader.
Die meisten Programmer können eine EEPROM Zelle (=Adresse) auch direkt
beschreiben, damit könnte diese Zelle auch direkt ausgelesen und
beschrieben werden.
Wie ist das denn bisher gelöst? Wie kommt es, daß die Hauptplatine den
"Schacht leer"-Taster nicht zu jeder beliebigen Zeit abfragen kann?
Adressvergabe sollte am besten automatisch über die Hardware gehen, also
entweder mit einer daisy-chain-Leitung zu diesem Zweck oder indem der
Bus selber als daisy-chain ausgelegt ist (WS2812 läßt grüßen). Alles
andere provoziert Fehler bei der Montage oder spätestens bei
Wartung/Reparatur im Feld.
Mach dir einen großen SPI Ring.
Jeweils MOSI and MISO, den Clock und CS parallel an alle.
Damit bekommst du ein großes Schieberegister mit 8Bit (
Schiebregisterbreite) * Anzahl der Platinen.
Auf dem Main macht du dir einen Puffer mit Größe Schiebregisterbreite *
Anzahl der Platinen.
Die Position im Puffer entspricht der Position der Platine im Ring,
damit hast du die Adressierung ohne zusätzlichen Aufwand.
Eine Erweiterung ist sehr einfach durch hinzufügen im Ring und Anpassung
des Puffers.
Zu Kommunikation dann CS auf Aktiv ( jede Platine legte ihren Datenwert
ins Schiebregister), dann alle Bytes durch takten, danach CS auf Pasiv
und damit die Daten die gerade aktuell im Schiebregister sind in die
Platinen übernehmen.
Danach hast du im Eingangsbuffer alle Daten der Platinen und jede
Platine hat das für sie vorgesehene Byte.
Noch einfacher geht es wohl nicht.
Ich denke nicht das du für die paar Informationen mehr als ein Byte
benötigst.
Gruß,
Ralph
Die Idee ist Klasse, nur mit einem Hacken. Wann weiß einer der Clients:
Wann er an der Reihe ist mit schreiben / Welche Position er beim
Schreiben hat??
Deine Überlegung macht durchaus Sinn, wenn es eine einseitige
Kommunikation ist, die vom Master zu den Clients geht.
Möglich wäre aber, wenn sie im Daisy Chain hängen. Das jeder, wie im
Schieberegister, mit DIN DOUT CLK alle am Anfang eine eigene Adresse
zugewiesen bekommen, und mit dieser dann Rekursiv Antworten.
Ralph schrieb:> Mach dir einen großen SPI Ring.
Meine Erfahrung ist, daß SPI extrem störempfindlich ist und für große
Leitungslängen unbrauchbar ist.
Ich benutze SPI nur innerhalb einer Platine.
Schon die Führung über eine Backplane auf mehrere Platinen machte eine
Filterung auf jeder Platine erforderlich.
Den Cortex-M0 mit CAN intern finde ich recht interessant.
Zur Adressierung würde ich einfach die Module der Reihe nach an den Bus
anschließen und der Master vergibt dann jedem neuen Modul eine Adresse,
die es sich im EEPROM merkt. Damit ist dann automatisch auch die Lage
der Module festgelegt.
Bei einer Reparatur setzt man das neue Modul auf jungfräulich und der
Master stellt fest, welche Moduladresse fehlt.
Draco schrieb:> Wann weiß einer der Clients:> Wann er an der Reihe ist mit schreiben / Welche Position er beim> Schreiben hat??
Gar nicht und ist auch egal.
Nur der Master muss wissen wer wo ist.
Auf CS Aktiv legt jeder Slave seine Datenwort ins Schieberegister. Damit
ist die Position im Ring vorgegeben.
Nach dem durch takten aller Bytes hat jeder Slave SEIN Datenwort im
Schieberegister liegen und der Master die Daten aller Slaves in seinem
Puffer.
Die Slaves lesen gar nicht alle Bytes ein, die werden nur durch
geschoben.
Die Übernahme im Slave erfolgt mit CS auf Passiv.
Empfindlichkeit ist so eine Sachen.
Da ist CAN auch nicht ganz ohne.
Wir haben auf der Arbeit eine 10 Mbit SPI Verbindung über 10 m Kabel
laufen.
Die Verbindung steht 1a stabil.
Kommt immer drauf an wie man das macht.
Wenn man hier eine Verbindung mit 10 Kbit nimmt ( dürfte bei der
Datenrate locker reichen) sollte das nu wirklich stabil stehen.
Hallo miteinander,
war leider einige Tage nicht zuhause und hab eben erst die ganzen
Antworten gelesen.
M. P. schrieb:> Die Beschreibung kommt mir sehr bekannt vor.> Darf ich fragen, um welchen Automaten es geht (Hersteller, Typ,> Baujahr)?> Würde mich mal so nebenbei interessieren.
Das ist eine "Smokythek SMT 60" von Harting.... Baujahr hab ich gerade
nicht im Kopf
Hmmm... Ich dachte (nach der ersten Antwort von "Jürgen") an I2C.
Ich hätte das dann so ungefähr gelöst:
ATtiny25 (würde von den PINS her genau reichen und ist für unter 1€ zu
haben^^)... Jeder davon bekommt beim Flashen gleich eine eindeutige ID
mit in den EEPROM und einen entsprechenden Aufkleber mit auf die
Platine.
So kann ich dem Master später mitteilen "Slave 21 sitzt in Schacht 45".
Der Master soll dann einfach der Reihe nach von den bekannten IDs den
Status abfragen oder sagen "Slave 21: Wirf mir bitte eine Schachtel aus"
So uuuuungefähr hatte ich mir das nun gedacht - noch keine Ahnung ob das
dann in der Praxis auch genauso gut funktioniert wie in meinem Kopf :D
Ralph schrieb:> Da ist CAN auch nicht ganz ohne.
Ähm... hab gehört CAN wird in der Automobilindustrie eingesetzt....
CAN ist einer der störunempfindlichsten Busse überhaupt. Das ist
schließlich überhaupt der Vorteil von CAN.
Wenn es wirklich µC für 1,50€ mit CAN-Controller und Transceiver gibt,
dann macht das für mich am meisten Sinn.
Adressierung könnte natürlich auch auf jedem Board mit Jumpern
vorgenommen werden. Bei 60 Schächten reichen dann ja 6 Jumper aus. Würde
aber dann gleich 8 Jumper spendieren, damit 256 Schächte adressierbar
sind.
Der Cortex wird vermutlich genug IOs haben um die 8 IOs einzulesen.
Ralph schrieb:> Empfindlichkeit ist so eine Sachen.> Da ist CAN auch nicht ganz ohne.
Kann ich überhaupt nicht bestätigen.
CAN funktioniert selbst über Klingeldraht problemlos, selbst wenn man
die 2. Terminierung am anderen Ende vergißt.
Selbst billigstes unverdrilltes ungeschirmtes DB9-Kabel geht.
Wir hatte auch ein Fremdgerät, wo SPI über differentielle RS-485 Treiber
geleitet wurde. Das ganze war hochgradig störempfindlich. Das Kabel
durfte nur max 10m lang sein und mindestens geschirmtes und paarig
verdrilltes Ethernetkabel.
Schau Dir mal das Datenblatt der CAN-Transceiver an. Die funktionieren
selbst bei +/-5V GND-Shift. D.h der Receiver funktioniert immer noch,
wenn CANL/H beide unter GND oder über VCC liegen.
CAN führt ähnlich wie RS-232 eine Mehrfachabtastung je Bit durch.
Wenn bei SPI eine kurze Störnadel auf SCK auftritt, sind die Daten nur
noch Müll. Oder bei einem Übersprechen des SCK auf die Datenleitungen.
Timo N. schrieb:> Ralph schrieb:>> Adressierung könnte natürlich auch auf jedem Board mit Jumpern> vorgenommen werden. Bei 60 Schächten reichen dann ja 6 Jumper aus. Würde> aber dann gleich 8 Jumper spendieren, damit 256 Schächte adressierbar> sind.> Der Cortex wird vermutlich genug IOs haben um die 8 IOs einzulesen.
Natürlich hat so ein CAN-Treiber eine maximale Anzahl Nodes. Bei dem in
dem LPC11C24 verwendeten Transceiver (musste mal ein wenig suchen,
irgendwo steht das (aber nicht im Datenblatt)). Ich meine, dass die
Grenze hier bei 64 liegt. Notfalls zweiten Strang aufmachen.
Martin schrieb:> Das ist eine "Smokythek SMT 60" von Harting.... Baujahr hab ich gerade> nicht im Kopf
Interessant was sich manche Leute so ins Wohnzimmer stellen ;)
Mal im Ernst:
> Hmmm... Ich dachte (nach der ersten Antwort von "Jürgen") an I2C.
Einige haben es schon angedeutet: Störsicherheit. Du schreibst irgendwo,
dass an den Platinen auch die Motoren befestigt sind. Ein Bus, wie CAN,
der differenziell betrieben wird, kann dort eventuell viel Kummer
ersparen. Vernünftige Entstörung der Motoren, gute Leiterbahn- und
Kabelführung auch.
Hallo,
so ein Automat muß ggf. viel mehr aushalten als die Störungen von so
kleinen Motörchen.
Der Standardfall in der Automatenindustrie ist daß irgend so ein
Spaßvogel mit einem Elektroschocker mit 100-200 kV oder einem
EMP-Generator alle Ausgabeschächte auf einmal öffnet.
Alles was nicht differentiell und ohne CRC-Checksumme arbeitet fällt
damit als Bus aus.
Gruß Anja
Hannes J. schrieb:> Interessant was sich manche Leute so ins Wohnzimmer stellen ;)
Das Teil steht nicht bei mir im Wohnzimmer, sondern in einem
"Tante-Emma-Laden" einer bekannten...
Diese hat den Automaten vor einigen Wochen gebraucht für wenige Euros
gebraucht gekauft und er steht seitdem ungenutzt in einer Ecke bei Ihr
im Abstellraum... Die Motoren etc funktionieren alle, nur die Steuerung
hat wohl mit der Zeit irgendwie gelitten :)
Anja schrieb:> Der Standardfall in der Automatenindustrie ist daß irgend so ein> Spaßvogel mit einem Elektroschocker mit 100-200 kV oder einem> EMP-Generator alle Ausgabeschächte auf einmal öffnet.
Wie gesagt... Es handelt sich um einen Automaten wie er IN Supermärkten
steht... Also kein Zigarettenautomat wie er am Straßenrand steht.
Sollte sich an diesem wirklich einer mit einem Elektroschocker zu
schaffen machen hat Sie (denke ich) ganz andere Probleme.... :)