Hallo allerseits,
ich brauche für eine Anendung einen Mikrocontroller, mit dem man 18 PWMs
erzeugen kann. Ich habe schon überall gesucht und keinen gefunden. Mit
den PWMs möchte ich 6 Bürstenlose Gleichstrommotoren betreiben. Ich
währe euch für jede Hilfe dankbar. Notfalls lasse ich auch mehrere
Mikrocontroller synchron laufen. Es währe super, wenn ihr mir welche
empfiehlt, mit den ihr erfahrung hattet.
Rachid schrieb:> Notfalls lasse ich auch mehrere> Mikrocontroller synchron laufen
Den Weg würde ich gehen. Pro Motor einen µC, Sollwertvorgabe z.B. über
gemeinsamen i²c-Bus.
Danke für die Antorten. Die Softwarelösung möchte ich meiden, da die PWM
Signale zu ungenau waren. Einen Mikrocontroller pro Motor muss ich wohl
notfalls nehmen. Da ich jedoch sehr wenig Platz für die Elektronik habe,
währe es nicht schlecht, wenn ich etas mehr reduziere. Außerdem habe ich
noch keine Erfahrung mit der Synchronisation von Mikrocontrollern. Ist
es ohne weiteres möglich, sieben Mikrocontroller synchron laufen zu
lassen? Der zusätzliche Mikrocontroller ist dann für den Hauptprogramm.
Rachid schrieb:> Ist> es ohne weiteres möglich, sieben Mikrocontroller synchron laufen zu> lassen
Die müssen doch garnicht synchron laufen. Jeder kümmert sich um seinen
Motor und sonst nix.
Die Steuerdaten über I2C oder UART oder SPI erfordern auch nicht, dass
die µCs mit gleichem Takt o.Ä. laufen.
Die Motoren sind von einander abhängig. Jeder Motor bewegt jeweils ein
Gelenk eines Schlangenartigen Roboters. Jedes Gelenk ist vom Winkel des
Anderen Gelenks abhängig.
Dann brauchst du eher Schrittmotoren. Oder Servos.
Oder hast du Getriebe + Encoder an den BLDC-Motoren?
in dem Fall: jeder µC kriegt vom Master einen "Soll-Winkel" angegeben,
und fährt diesen selbständig an.
=> keine Synchronität nötig.
Ich habe an jedem Motor einen Winkelsensor. An den Motoren und an der
Mechanik kann ich nichts mehr ändern. Mein Plan war es, die sechs Winkel
im Hauptprogramm zu ermitteln anschließend die Sollwinkel. Danach
Manipuliere ich die PWMs so, dass die Sollposition immer erreicht wird.
enn ich für jeden Motor einen Mikrocontroller benutze, muss ich jedem
Mikrocontroller die sollpsition übergeben und ständig aktualisieren.
Genau das würde ich in die "Pro Gelenk" µC auslagern. Also: Jeder der 6
µCs hat seinen Winkelsensor und seinen Motor und kümmert sich um beides.
alles an einen Bus, der Zentral-µC kann bei jedem Gelenk den aktuellen
Winkel abfragen, und ihm einen neuen Soll-Winkel vorgeben (ggfs:
Drehrichtung, Winkelgeschwindigkeit, ...), und muss sich um die
Ansteuer-Details keine Gedanken machen.
Vorteil:
Modulares System, leicht auf mehr oder weniger Gelenke anpassbar
und bei Hardwarewechsel (auf Servos oder Schrittmotoren) müssen nur die
Gelenk-µCs angepasst werden.
Wäre halt der Weg, den ich gehen würde, muss deshalb nicht der einzig
wahre sein...
Großer µC mit vielen PWM-Kanälen oder SoftPWM ginge natürlich auch...
Obwohl, Schul- oder Uniprojekt?
Mit der modularen Lösung kriegst du drei extra-Kapitel für die
Ausarbeitung geschenkt, Systemaufbau, Gelenk-Steuer-Einheit und
Kommunikationsprotokol :)
Es ist auch eine Frage der Störsicherheit.
Wenn Du 18 Leistungs-PWM auf langen Kabeln rumsauen läßt, ist das
vielleicht ein guter Handy-Blocker.
Wenn aber jeder Motor direkt seinen MC + Leistungsteil hat, mußt Du nur
unkritischen Gleichstrom (z.B. 24V) übertragen.
Für den Datenbus bietet sich CAN an. Dann muß man nicht mehr viel
Protokoll selber schreiben, die CAN-Hardware macht das gröbste selber
(Arbitrierung, Retry, Adressierung, Fehlererkennung).
Peter
>Mit den PWMs möchte ich 6 Bürstenlose Gleichstrommotoren betreiben.
Viel zuviel für einen uC.
würde je Motor einen uC nehmen. ist viel besser scalier u. handhabbar.
Als Bus kan man auch ein 'richtigen' Adr/Daten-bus nehmen, der ist dann
sehr schnell.
Hi,
der Atmel AT89C51AC3 (auch nett ist der AT89C51ED2) hat eine
PCA-Einheit. Die kann 5 PWMs erzeugen und läuft nach Initialisierung
unabhängig von der Software.
Dann könnte man z.B. auch mehrer MCUs mit SPI (Master/Slave) oder UART
im 9Bit Mode miteinander verknüpfeln. Da geht Einiges ...
http://www.atmel.com/dyn/resources/prod_documents/doc4383.pdf
Ist vielleicht einen Versuch wert.
Gruß
RABIS
Oder ein FPGA zuhilfe nehmen. Ich bin gerade dabei, mir einige
Überlegungen zu einer Steuerelektronik für vier Brushless-Motoren (nur
Kommutation) basierend auf einem ProAsic von MicroSemi (früher Actel) zu
bauen. Aber eben, das sind erst allererste Überlegungen und einige
wenige Zeilen VHDL. Die Idee besteht im Moment darin, über ein SPI
(o.ä.) Interface die vier "Spannungen" (für jeden Motor eine) in den
FPGA zu laden. Dazu für jeden Motor drei Eingänge für Komparatoren, die
den Kommutierungszeitpunkt feststellen, dann halt einge SM,
PWM-Generatoren etc...
Über SPI gingen die Drehzahlen zurück; mit Strommessung hätte das FPGA
nichts am Hut. Und auch nicht für Regelungen irgendwelcher Art. Das
würde dann der uC machen.
Mal sehen, ob was draus wird...
Gruäss
Simon
Der STM32 kann bis zu 32 PWM Kanäle.
Mehr gibt es im Artikel STM32 zu lesen.
(Timer können bis zu 4 PWM Ausgänge haben, die separat programmierbar
sind)
Daran habe ich auch gedacht. Für einen Brushless hätte der auch wirklich
eine wunderschöne Unit, mit komplementärausgängen, Totzeit etc...
Die restlichen Units sind dann aber ein bisschen spartanischer. Ich muss
gestehen, dass ich es (noch) nicht genauer angeschaut habe, aber vier
oder gar 6 Brushless mit Kommutation in einem STM32 ohne externe
Hardwareunterstützung unterzubringen halte ich für sportlich. Aber das
ist bloss ein Bauchgefühl.
Peter Dannegger schrieb:> Für den Datenbus bietet sich CAN an.
Wenn die neuen Befehle nicht allzu oft kommen, genügt wahrscheinlich
sogar I²C. Arbitrierung braucht man eigentlich nicht, weil's nur
einen dedizierten Busmaster gibt.