Hallo Leute, für ein weiteres meiner Projekte (CNC Anwendung) möchte ich eure Meinungen bzw. Erfahrungen heranziehen. Bei diesem Projekt sollen bis zu 6 Atmel's miteinander kommunizieren Ein Mega8 erhält die Daten über RS232 vom PC, dieser soll auch als Master für das Bussystem zw. den Atmels arbeiten. Je nach Anzahl der CNC-Achsen kommen dann noch 3 bis 5 At90s2313er oder auch mega8 als Slave's zum Einsatz. Diese übernehmen die Interpolations-Aufgabe und Ausgabe an die Endstufen. Meine Frage: Welches der beiden Bussysteme I2C oder SPI würdet ihr hier verwenden. Vielen Dank für eure Beiträge im Voraus. Gruss Gerhard
Hier gab es etwas: http://www.mikrocontroller.net/forum/read-1-81113.html#81113 IIC geht gut, wenn die Leitungen kurz sind. Ich würde als Kopplung zum PC einen Mega64/128 oder 162 nehmen, der zwei UARTs hat und alle anderen µP am 2. UART mit Multiprozessorprotokol betreiben. Hier hat man meines Erachtens den größten Spielraum bzgl. langer Leitungen, unterschiedlicher µPs und Fehlersuche. (Bei Gelegenheit werde ich das noch halbduplex mit CAN-Bustreibern antesten.) SPI habe ich noch nie gebraucht - außer, um ext. SR anzusteuern. Zwar kann man die Byteübertragung sehr schnell machen, riskiert aber, daß der Empfänger 'überrannt' wird. Zudem finde ich es lästig, ein Byte zu senden, um ein Byte zu lesen.
Hallo Michael, Danke für deine rasche Antwort. Die AVR's sitzen alle auf einer Platine. Leitungslänge wird max. 5 cm sein. Im Vordergrund wird die Geschwindigkeit stehen. Mega 64/128 ist bestimmt eine Möglichkeit jedoch um einiges teurer als ein mega8. Ups, hab ich im vorigen Beitrag vergessen, es wird noch ein mega8 als Slave im Bus hängen der die Taktrate, Beschleunigung und Brems- werte berechnet und an die INT0 der anderen AVR's weitergibt.
Hallo Gerhard, dann wird Deine Wahl wohl auf IIC fallen. Wenn Du stärkere Motoren verwendest, solltest Du auf jeden Fall die Sicherheit des Bedieners/Systems beachten. Zu empfehlen ist ein Timeout für IIC, damit der Bus nicht hängenbleiben kann. Das könnte passieren, wenn der lesende IIC-Master nicht alle Bits vom Slave abholt (z.B. durch watchdog reset) und der Slave endlos auf den Abschluß der Übertragung wartet. (Der neuere LIN-Bus hat dies im Protokoll berücksichtigt.) Hilfreich kann es sein, daß die Haupt-CPU mit einem Portpin alles Sub-CPUs über /RESET neu starten kann; wenn INT1 nicht anders verwendet wird, könnten die INT1s alles µPs verbunden werden, um z.B. Aktionen zu synchronisieren. Ein einfacher Portpin ohne INT-Fähigkeit könnte auch genommen werden. Dies nur als Anmerkungen.
OT Hallo Gerhard! Über so einen Ansatz für eine Fräsmaschinensteuerung habe ich auch schon mal nachgedacht. Daher ein paar Fragen, die hier nicht wirklich hingehören, vielleicht passen sie auch gar nicht zu deinem Projekt: Welche Antriebe verwendest du? Bei Schrittmotoren: welche max. Frequenz? Machen die 'kleinen' nur einfache Pulsausgabe, oder interpolieren die auch noch? wenn ja: wie? Ist die Ansteuerung mit linearen Frequenzrampen oder ruckbegrenzt? zum PC-Programm: Fertig gekauft/Share/Freeware/eigen? Nach DIN/ISO, oder irgend welchen anderen Standards? Fräserradiuskorrektur? Bin schon 'ne zeitlang auf der Suche, hab' aber noch keinen sicheren Treffer. servus, Martin
Eine komplette PC-Lösung ist ja EMC, siehe http://www.linuxwiki.de/EMC. Es bräuchte nur nochmal jemanden, der eine kostengünstige Einsteckkarte designt, wo Encoder und Motorendstufen angeschlossen werden können. Winfried
Hallo Winfried, schau Dir das mal an. http://5128.rapidforum.com/topic=112282918267 Mit besten Grüßen Jürgen
Hallo Gerahrd, sechs AVRs auf einer Platine klingt etwas merkwürdig und falls Kosten relevant sind, auch nicht unbedingt wirtschaftlich. Ich würde SPI bevorzugen, wegen der besseren Synchronität. Du kannst alle in eine Daisychain packen und mit 1Mbaud Daten für alle Slaves durchblasen. Evtl. kannst Du sie auch parallel hängen. Durch ein Select oder Strobe-Signal hast Du alle 100% synchron. Wenn man noch synchrone I/Os braucht, kann man das einfach mit Schieberegistern machen. Aber schau Dir auch mal den TMC428 und TMC236 von trinamic.com an. Der 428 erzeugt Mikroschritte, Rampen usw. für drei Achsen, der 236 ist ein 28V/1,5A Treiber, u.a. mit SPI-Eingang. Kannst Du rein zufällig über mich beziehen. Soll aber keine Schleichwerbung sein. Wettbewerber sind z.B. Allegro A3972 (auch SPI, billiger, aber mehr Verlustwärme) oder auch ST (allerdings meist schlechteres Microstepping). Kannste auch kaufen, eigentlich vertreibe ich ja fertige Module und Baugruppen, übrigens auch an Fräsenbauer. Arbeite gerade an einem G-Code Interface, HPGL habe ich schonmal gemacht. In der Anlage noch eine evtl. Interessante Hardware-Alternative: ein kleines Board mit einem kleinen ARM7 von Philips (60MIPS, 32bit) plus USB-Interface. Der kann sehr viel besser interpolieren als der AVR und z.B. SPI-Motortreiber dann direkt ansteuern. Da bastele ich auch gerade an einem Prototypen für 2 Achsen. I/Os kann man noch ohne Ende per CAN oder SPI dranhängen. Hat übrigens auch I2C. Axel
Hi, danke Michael für deine Input's. Werde mal erste Test's mit IIC versuchen und mal den Datenfluss begutachten. @Martin , wie schon von Jürgen geschrieben, dort findest du die Servoendstufen, sind von mir. Die "kleinen" sollen auch die Interpolation der Achsen machen , also Arbeitsteilung. Rampen sind da wohl ein MUSS, ich möchte auf ca. 100 kHz Taktrate kommen. PC Prog , eigen. Sprache Din/ISO und ev. HH-Code. Fräserradiuskorr. , nein. "Bin schon 'ne zeitlang auf der Suche, hab' aber noch keinen sicheren Treffer." Ich auch, aber auch ohne Erfolg. @Winfried EMC läuft doch nur unter Linux , oder ? Gruss Gerhard
Ich sehe da auch nicht den Sinn des Vernetzens. Erstmal wird alles viel komplizierter, da ein sicherer, verlustfreier und echtzeitiger Datentransport benötigt wird. I2C oder SPI kannste beim 90S2313 vergessen, sowas hat der nicht. Bleibt also nur die UART. Und der LPC2106 hat ja schon 6 PWM-Ausgänge und 2 Interruptprioritäten. Lade Dir einfach mal die Keil Testversion runter. Peter
OT @Gerhard Servoendstufen... alle Achtung, 100kHz ist auch nicht ohne, aber wenn ich mir die Servoendstufen anschaue, ist das für dich sicher kein Problem. Werde mir demnächst mal Mach2 ansehen. Da sind ein paar ganz pfiffige Ideen 'drin. Fräserradiuskorrektur ist für mich eigentlich ein muß (hab' auch schon an 'ne echte TNCxx gedacht, eine die halt noch Analogsollwerte ausgibt. Sind aber schwer aufzutreiben, wenn man nicht zu viel Geld ausgeben will) servus, Martin
Hi , wenns ohne Bus geht , also alles von einem AVR machen lassen, das wäre natürlich einfacher, klar. Werd da mal ein paar Tests machen. Für 2-Achs- Interpolation z.B. Kreisfräsen sicher kein Problem aber bei Fünfachs-Interpolation mit vernünftiger Geschwindigkeit wird ein einziger AVR sicher überfordert werden. Deshalb mein Gedanke die Kommunikation zum PC getrennt von den Interpolationsberechnungen zu erledigen , natürlich syncronisiert, klar. Mit PWM kann ich hier nichts anfangen, brauch an den Ausgängen 2 Signale für Takt und Richtung pro Achse. Gruss Gerhard
@Gerhard: EMC - ja hauptsächlich Linux. Es soll wohl auch unter W2K laufen. Oder sagen wir es so: Es soll man jemand dran gebastelt haben und den Code dafür auch angepasst haben. Aber ich hab dafür noch keine fertigen Pakete gesehen. Das wird wohl dann eher in wochenlangem Basteln enden. Winfried
Hi, @Winfried, Hab ein komplettes Steuerprogr. für Windoof geschrieben was wie fast alle anderen über die parallele Schnittstelle die daten ausgibt. Läuft zu 99% absolut super, aber eben dieses eine Prozent krieg ich unter Windoof nicht in den Griff, weil's eben nicht Echtzeitfähig ist. Deswegen meine Überlegungen diesen Teil von ein paar AVR's machen zu lassen welche die Daten über die RS232 bekommen. Gruss Gerhard
Für meine Überlegungen war ich von ATmega8 mit IIC als Sub-CPUs ausgegangen. Korrektur: SMBus ist die Weiterentwicklung von IIC (LIN-Bus ist Quatsch). Mit einem ATmega64-16 betreibe zwei Stepper mit max. 10kHz, wobei jeder Schritt per Interrupt getriggert wird. Im Interrupt werden auch die Beschleunigungsrampen erzeugt. Vielleicht kann man das noch etwas beschleunigen, aber ich behaupte: 100kHz mit AVR ist zuviel verlangt. Es sollen ja nicht nur Schritte erzeugt werden.
Hi Michael, genau deswegen meine Überlegungen die Arbeit auf mehrere aufzuteilen und die aufwendigen Sachen wie Kreisinterpolation vom PC erledigen zu lassen Über die Rs232 kommen dann "nur" mehr die Werte die die einzelnen Achsen zu fahren haben die M-Befehle und Vorschubwerte. Gruss Gerhard
@Gerhard: Das ist wirklich nicht einfach, Windows echtzeitfähig zu bekommen. W98/ME sollte man sowieso vergessen. Aber ab W2K geht es definitiv. Und man bekommt sogar ganz erstaunlich gute Ausgabefrequenzen hin. Bis 25KHz Takt soll wohl kein Problem sein, manche sollen es sogar schon bis 40KHz hinbekommen haben. Wir hatten mal das Programm von trimeta da, das konnte glaube ich bis 25KHz. (www.trimeta.de) Man könnte mal in diversen Newsgroups googeln, ob man findet, wie man da vorgehen muss. Eine Frage des Trimeta Entwicklers findet man z.B. hier: http://groups.google.de/groups?q=friedemann+st%C3%BCtz&hl=de&lr=&ie=UTF-8&selm=3C67D56D.22737F7B%40humusoft.cz&rnum=1 Andererseits kämpfen viele mit dem Engpass, den eine parallele Schnittstelle mit dem Takt-Richtungs-Signal so mit sich bringt. Auch wenn du gut bist und 40 KHz hinbekommst, ist das für eine Microschrittendstufe mit z.B. 25 Microschritten zu wenig. Gleiche Probleme hat man, wenn man Servos mit hochauflösenden Encodern über eine Geckodrive (http://www.geckodrive.com) Endstufe o.ä. betreibt. Von daher finde ich es schon einen guten Weg, die Bahnberechnung in eine Extra Hardware zu verbannen und über serielle Schnittstelle oder USB zu gehen, um dann z.B. nur den G-Code zu übergeben, was ja nicht mehr zeitkritisch ist. Das, was du vor hast, hat übrigens jemand schon fertig: http://www.benezan.de/Beamicon-TPI.html Winfried
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.