Variabele Tacktfrequenz bei dem ATMEGA2560 moglich?

Ich mag gern einen Atmega2560 mit einem Rotor koppeln.
Er soll nach dem Winkel die PWM's Syncronisieren.
Da die PWM's nun direckt in zusammenhang mit der Tacktfrequenz des Ardoinos liegen hatt ich gedacht diese direckt vom Rotor mit einer Geberscheibe abzugreifen anstadt die Drehzahl genau einzuregeln.
nun ist meine frage in welchem Externen Tackt der Ardoino bei 5V Arbeiten kann und ob er bei Tacktschwankungen Stabil laufen kann?

Das die RS232/COM so nicht funktionieren kann und ich einen genauen 16MHz Tackt anlegen muss zum Programieren bzw. Komunizieren ist mir durchaus bewust.

Aus meiner Sicht: Falscher Ansatz!

Für solche Probleme wurden die Timer erschaffen, welche auch die PWM erzeugen.

Mache dich kundig, was diese Timer alles können.
Dort wirst du die Lösung finden.

Die “Variable Taktfrequenz” ist eine Schnapsidee.

Hallo,

ich sage auch, dass ist der falsche Weg. Nur eines ist richtig, der PWM Takt wird aus dem µC Takt abgeleitet bzw. daraus gewonnen. Jedoch gibt es dazwischen tausende Einstellmöglichkeiten für die Timer. Du müsstest dir mal die Zeit nehmen und dich mit dem Thema Timer näher befassen. Das µC 2560er Datenblatt ist dafür unerlässlich.

Die serielle funktioniert übrigens fast immer. Man muss sich nur die passenden Baudraten aussuchen. Bei 16 oder 8MHz am besten immer ein gerades Vielfaches, somit sind zum Bsp. 50k, 250k oder 500kBaud mit errechneten 0% Fehlerabweichung möglich. Das am Rande. Blöd ist nur das serielle Monitor der IDE sturr auf seine voreingestellten Werte beharrt. Man muss dann notfalls andere Terminals verwenden.

Ich sehe da gleich 2 mal einen falschen Ansatz.

  1. Ich verstehe nicht wieso die Frequenz eines PWM Signals geändert werden muß/soll. Das einzige was mir einfällt ist, daß Du einen Frequenzumrichter für einen Drehstrommotor (Brushless DC Motor) meinst aber PWM schreibst.

  2. Wenn Du die Taktfrequenz über einen Encoder von der Motorachse ableiten willst, dann muß der Motor am Anfang sich drehen damit der Arduino überhaupt startet. Das heißt die Regelung berginnt erst nach einigen Sekunden zu arbeiten. Du kannst den Motor auch nicht abschalten. Das Regelverhalten ist wegen des variablen Takt auch nich besonders gut/genau. alles was mit Zeit zu tun hat ist nicht konstant/wiederholbar/genau.

Zusatzinfo: Im Prinzip funktioniert der ATmega2560 auch mit einer variablen Taktfrequenz die über einen der beiden Quarzpins eingespeist werden kann. Ich glaube einige Fuse müssen dann noch richtig gesetzt werden.

Grüße Uwe

Die sache ist ein Ansatz um ein stehendes Bild zu projezieren.

Der Rotor Dreht mit ca 3000RPM
Die PWM's sind mit LED's am Rotor verbunden.
3000RPM entspechen 50 Umdreungen pro Sec.
50 x 320.000 Gebertackte macht 16.000.000 Hz

nun sollen naheinander daten auf die PWM's geschickt werden.

wenn nun ein PWM Signal 512 Tackte lang ist habe ich 625 Wiederholungen Pro Drehung.
Stehend, auch wenn die Drehzahl etwas sinken oder schwanken sollte.
Das heist 625 Pixel in Drehrichtung deren Helligkeit beeinflussbar ist mit ihrer Lenge.
Nun muss ich nur nach jedem PWM durchlauf einen neuen Wert laden.

Sollte eine Programierte PWM drinn sein auf grundlage der mills die ja dann auch mit den RPM's gekoppelt sind kann ich von Innen nach Ausen 28 RGB LED's Befeuern.
Diese werden nach Masse geschaltet da der AtMega dort den kleineren Innenwiederstand besitzt. Also auch weniger Werme entwickelt wird.

Es Ist auch nicht geplant das alle LED's eine komplette Umdreung An sind, womit der AtMega Also auch mit der Stromlast Klar kommen sollte.

Soweit die Teorie.

Schritt 2 wird dann eine komunikation mit dem Atmega auch im Betrieb herzustellen. SPI oder so, jedenfalls etwas was ein Clock zum Synken hat.

Aber eins nach dem anderen.

Du hast wieder einen falschen Ansatz.

Das heist 625 Pixel in Drehrichtung deren Helligkeit beeinflussbar ist mit ihrer Lenge.

Nein. Bei bewegten LED wird durch PWM nicht die Helligkeit sondern die Länge der Leuchtspur jeden Punktes definiert.
Du solltest Dich informieren wie PWM funktioniert.

Wenn Du ein Kugelbild einer sich drehenden Ledzeile machen willst, kannst Du auf keinen Fall PWM verwenden. Die LED müssen je nach Drehwinkel ein oder ausgeschaltet sein. Dazu genügt es die Drehzahl und die Position zu wissen. Die Position errechnet sich aus einem Index-Sensor (Einfache Gabel-Lichtschranke oder Magnetsensor) und der Drehzahl (= Abstand zwischen 2 Index Signalen).
Alles andere errechnet man sich da x Zeit nach dem Indexsignnal der Rotor sich um y° gedreht hat und darum LED a b und d einzuschalten sind und LED c e f auszuschalten (je nach darzustellenden Bild).

Ich glaube aber nicht, daß dieses Projekt von einem Anfänger erfolgreich gebaut werden kann weil die Programmierung sehr Zeitkritisch ist.

Sollte eine Programierte PWM drinn sein auf grundlage der mills die ja dann auch mit den RPM's gekoppelt sind kann ich von Innen nach Ausen 28 RGB LED's Befeuern.
Diese werden nach Masse geschaltet da der AtMega dort den kleineren Innenwiederstand besitzt. Also auch weniger Werme entwickelt wird.

Arduino Mega 2560 hat keine 84 AUsgänge schon gar nicht PWM Ausgänge.
Was ist das mit Wärme für ein konfuses Zeug? LED brauchen Vorwiderstände damit der Strom begrenzt ist. Ohne Vorwiderstände machst Du den Arduino kaput. Dar ATmaga auf dem Arduino verträgt in summe 200mA auf den Spannungs/stromanschlüssen. Darum ist die Summe der Ströme der HIGH bzw LOW Ausgänge begrenzt. Bestimmte Pin Gruppen haben in summe eine noch geringere Strombelastbarkeit.

Grüße Uwe

Bei einer PROGRAMIERTEN PWM 84 I/O's
PORTA = 8
PORTB = 8
PORTC = 8
PORTD = 8
PORTE = 8
PORTF = 8
PORTG = 6
PORTH = 8
PORTJ = 8
PORTK = 8
PORTL = 8

sind 86
nur weil da A1 drann steht muss ma nicht den analogen eingang nutzen sondern kann ihn auch als Ausgang nutzen.
geht wie mit jedem anderen I/O auch.
wenn ich jetzt einen Pin als CLK
und einen als DATA IN haben will bleiben 84 I/Os...
bei 3 Grundfarben ROT GRÜN BLAU sind das 28 LED's.

Gut erkannt das der strich seine Dimension vareiert bei konstanter Helligkeit. Wenn ich so zu meinem innenrollo schaue tut sich da was bei der gesammthelligkeit. Bei einem geratenen Wert von nem guten halben Grad is der Strich Optisch nen Punkt. Nen weißen Pixel erkennst du ja auch als Weiß und nicht als 3 Pixel mit RGB.

Wenn der XTAIL vom Rotor kommt ist 1 Tackt 360 / 320.000 = 0,001125Grad. Winkelberechnung ist damit geschichte weil sie direckt zum Tackt Propotional ist. Der Tackt soll ja vom Encoder kommen.

Das die Fuses geändert werden müssen stimmt, Muss ich aber eh da das dann mit nem ATMEGA2560-16U Aufgebaut wird und der ist werksmäßig glaub auf 1Mhz internen tackt ohne Bootloader gebrannt.

Meines erachtens darf ein I/O 20 mA ABER der IC MAX 100mA.
84 x 20mA = 1,680A
Knapp das 17 fache.
macht also 1/16,8
gesammt ED = 6%

Was soll der Quatsch mit dem Niderohmigen Transistor. Hmm U x I = P. P wahr Werme. Die sollte wohl am Vorwiederstand produziert werden und nicht im IC damit er grillt.
Nach Masse Schalten weil der Transistor des I/O's niederohmiger ist der gegen Masse Schaltet als der der gegen 5V Schaltet. Das darfst gern nachmessen mit nem Amperemeter und nem 100 Ohm Wiederstand nachmessen. Aber mess nich zu lange. da kommen irgendwas unter 50mA raus, das sind 2,5 des angegebenen Maximalwertes. Nen moment geht das.

PS. Eine LED darf nur mit Vorwiederstand oder einer anderen STROMBEGRENZUNG betrieben werden sobald ihre Betribsspannung erreicht oder Überschritten wird da sie ein nichtleniares Bauteil darstellt.
eine LED mit 3V kann ohne weiteres an 2,5 V ohne vorwiederstand vor sich hin glimmen ohne weitere Strombegrenzung.
Ein Wiederstand ist die Einfachste und Energietechnisch Unwirdschaftlichste version.
Blindwiederstaende oder Pulsen ist da im Leistungsbereich die bessere wahl, als einfache anzeige allerdings reicht ein Wiederstand.

Warscheinlich wede ich Vorwiederstände nehmen, Pulsen ginge mit der Frequenz aber auch. Da muss ich halt die 100% auf den Sollstrom beziehen und vorher Rechnen.

50% bei 40mA sind von der Leistung auch 100% von 20mA. Das Pulsen muss nur schnell genug sein da so ne LED nun mal nicht viel masse hat die erwärmt werden kann, und je Wärmer der Kristall desdo höher auch der Strom.

Programierte PWM so oder so Ähnlich

void loop {
....
Digitalwrite(13,Programmierte_PWM(DATA[foo]);
...
}

bool Programmierte_PWM(byte wert) {
If (wert < mills % 255) { Programmierte_PWM = true } else {Programmierte_PWM = false};
};

Hallo,

mir ist das alles zu unüberlegt niedergeschrieben. Kein Mensch testet einen µC Port mit einem 100 Ohm Widerstand. Eben weil er weis das er dauerhaft nur 20mA verträgt. Minimum 250 Ohm. Vielleicht solltest du erstmal mit den Grundlagen anfangen.

@fox00014
Wenn Du meinst es geht, dann mach es doch.
Meine Gegenargumente kennst Du ja. Erwarte keine Hilfe von mir für Probleme die meiner Meinung durch falsche Konzepte, Ideen, Anwendungen, Elektronikwissen und Programmierung hervorgerufen werden.
Grüße Uwe

Die frage wahr ob ein ATMEGA2560 mit variabeler Tacktfrequenz leuf oder nicht.

Ob jemand versteht ob die idee einem ne menge programierarbeit mit winkel und zeitberechnungen abnimmt oder nicht is mir langsam egal.
erlich grundsatzdiskusionen ueber die anzahl der io’s oder zu schreiben das es jemandem zu unueberlegt sei einen ausgangsinnenwiederstand mit 100 Ohm zu bestimmen, obwohl oben ganz klar kurz steht und nicht 24/7.
grundlagendiskusionen ueber cmos bauteile die artbedingt im ubrigen alle gegen masse ein geringeren wiederstand haben, ausnahmen in leistungselektronik mal ausen vor. und und und. eine seite voll mit geplenkel.

ich habe erlich gesagt nichts gegen ideen oder einwende aber solangsam fuhl ich mich auf den schlips getreten. nen prototypenboard is nunmal nit mal eben zusammengeklatscht und manche fragen ob etwas geht bevor sie es testen. ich erklaere auch gern den aufbau soweit es notwendig ist um die absicht des vorhabens zu erleutern, und es kann sein das ich grundlegend elektronikkentnisse vorrausgesetzt habe…
ich schreibe auch keinen lebeslauf, untaetig wahr ich jedoch nicht in meinem leben, aber nur der libe gott weis alles, in dem sinne, sorry das ich gefragt habe…

Ungeloest geschlossen da ein ja mit verschidenen tackten gehts raus kahm aber keine erfahrung genannt wurde ob die internen schwinkeise oder aenliches probleme haben wenn die frequenz im laufenden betrieb vareiert.

Nun komm mal wieder etwas runter :wink:

Der µC läuft mit jedem Takt, auch mit 1Hz, wenn man das möchte. Der Takt kann sogar ganz angehalten werden, ohne daß Daten intern verloren gehen. Das alles steht im Datenblatt des Controllers. Eine Möglichkeit wäre also, den Takt vom Encoder produzieren zu lassen (mit PLL), damit das Rausschieben der Bits wirklich synchron mit der Motordrehzahl läuft.

Aber da gibt es ja auch noch die Timer, die mit einer variablen Frequenz von außen getaktet werden können. Die können dann z.B. in Verbindung mit einer UART dazu verwendet werden, Bytes mit dieser Taktfrequenz seriell rauszuschieben.

z.B. in Verbindung mit einer UART dazu verwendet werden, Bytes mit dieser Taktfrequenz seriell rauszuschieben.

Es geht so gar noch weiter....

Der ATMega2560 kann seine Seriellen nicht nur im UART Modus laufen lassen, denn eigentlich sind sie USART Ports. Synchrone Ausgabe ist also schon in der Hardware eingebaut.
Leider sind die dazu nötigen Pins, auf dem Arduino Mega nicht herausgeführt.
Dünne Drähtchen können das nachträglich erledigen.

z.B. beim Mini2560 sind die Pins erreichbar.