Polarkoordinaten mit 3200 Schritten pro 360 Grad

Hallo liebes Forum,

also ich habe einen Schrittmotor mit 3200 Schritten pro Umdrehung,
ich möchte die 3200 Messwerte von einem Distanzsensor der auf der Motorachse befestigt ist auf einen Kreis mappen.

Ich bin allerdings in Mathe nicht so fit, und hoffe auf schnelle Hilfe...
x= distance sin((z3.14)/180);
y= distance cos((z3.14)/180);

So funktioniert es mit 360 Schritten pro Umdrehung .

Allerdings habe ich 3200 Schritte, was zur folge hat das der Kreis fast 10mal "überzeichnet" wird.

Wie muß ich die Formel ändern, damit sie mit 3200 Schritten funktioniert?

Ich weiß, ist eher Mathe, als Arduino, aber es ist ja ein Arduino-Projekt... :slight_smile:

Wäre über Hilfe sehr erfreut...

Lieber Gruß
Chris

z3.14/1600 anstelle von z3.14/180?

Vielen Dank,

hätte nicht gedacht, daß das so "einfach ist"....

Perfekt, es funktioniert!!!!

Danke!
Lieber Gruß
Chris

So, nun kommt die 3te Dimension dazu....

ich würde das ganze gern in eine Funktion legen, damit der Sourcecode ein bisschen übersichtlicher wird.

void koords(int schritthorizontal, int schrittvertikal, double entfernung, int schritteproumdrehung) {
x=entfernung*sin((schritthorizontal*3.14)/(schritteproumdrehung/2));
y=entfernung*cos((schritthorizontal*3.14)/(schritteproumdrehung/2));
z=entfernung*cos((schrittvertikal*3.14)/(schritteproumdrehung/2));
return;
}

Insbesondere interessiert mich ob z so richtig ist,
und ob man die Funktion noch optimieren kann?

Lieber Gruß
Chris

Was genau verstehst Du unter Optimierung und warum brauchst Du die?

Liegen die Berechnungen im Arduino oder woanders? Wie oft werden die ausgeführt und warum? Wenn Du nur "optimalen Code" haben willst aber nicht sagst in welche Richtung Du optimieren willst kann man wenig machen.

Wenn Geschwindigkeit ein Problem ist, dann kann man alles auf Tabellen umstellen und zur Not auch in Assembler programmieren. Aber die Frage ist ob der Aufwand wirklich nötig ist.

Gruß, Udo

Hallo Udo,

nein... ich programmiere schon eine Weile in anderen Sprachen,
und ich weiß das immer mehrere Wege nach Rom führen...
daher die Frage...

Die Performance ist garnicht mal so wichtig...

Nur, da ich "gerade" mit dem Arduino beginne...
und schon den einen oder anderen Trick entdeckt habe,
der nicht sofort erkennbar war....

Hatte ich gehofft, daß jemand im übertragenen Sinne sagt:
"Pins für nen Stepper brauchst Du nicht mit DigitalWrite schlaten, sondern per PortD... das ist schneller..."

Nur eben vielleicht im Bezug auf diese Funktion...

Aber wie gesagt, wichtig ist der Aspekt nicht....

Mich würde noch interessieren, ob jemand weiß ob die Z-Achse so >> richtig ist...


Ja was will er denn machen...???
Also vielleicht kennt der eine oder andere den 3D-Scanner von Designer2k ... der ist ebenfalls per Arduino angesteuert.... allerdings werden dort Servors benutzt....

Ich möchte das Projekt auf meine Weise adaptieren...
Meine Ziele sind... Stepper 3200 Schritt per Easydriver Microstepping...
Verarbeitung im Arduino....

Horizontal spuckt er mir bereits ein .OBJ bzw. VRML File aus... fix und fertig... vom Arduino vorverarbeitet...

Ich möchte jetzt aber nicht nur die horizontale scannen, sonder die horizontale verlassen und mich an Z (alo die vertikale) machen.

Da ich langsam aber sicher im Code ersticke... oben mein Post...
und die Fragen...

  • Z-Achse so korrekt?
  • Kann man das Snippet noch optimieren? Oder einfach so lassen?

Da eine wirklich große Menge an Messpunkten aufgenommen wird...
im Bereich 3200x3200...
ist die performante Verarbeitung schon irgendwo ein Kritikpunkt...
aber kein Problem bei der Realisierung.

Ich versuche das Projekt nur möglichst "optimal" im Sinne von Preis/Leistung anzugehen....

Ich für meinen Teil würde denken, daß hier weder Tabellen noch Asssembler nötig ist.

Manchmal gibts aber einfache Kniffe um etwas besser zu machen,
und darauf bezog sich die Frage.

Lieber Gruß
ChrisS

Aha, die Performance wird aber vermutlich eher durch die Stepper als durch den Arduino beschränkt --> ich würde da gar nichts weiter optimieren. Wenn überhaupt würde ich vorher einmal 3.14 / ... als Konstante ausrechnen und dann immer mit dem Ergebnis multiplizieren. Grund: Multiplikation geht ganz erheblich schneller als Division.

Aber ich würde wetten der Arduino ist eh sehr viel schneller als die Stepper --> kein Thema. Die Z Achse sieht korrekt aus.

Gleiches gilt für digitalWrit: das ist tatsächlich lahm, aber hat das bei Dir wirklich Auswirkungen?

Gruß, Udo

Ich danke Dir für die Infos....

Ja, theoretisch....
Da ich die Motoren defaultmäßig im 1/8 Microstepping laufen lasse,
erreiche ich die volle Drehzahl nur wenn ich den Umweg über die Portmanipulation gehe... ich brauche durch das Microstepping ja quasi die 8 fache Frequenz zum ansteuern der EasyDriver....

Aber wie gesagt... ich fange gerade erst an, und da kann es sich auch um gefährliches Halbwissen handeln :slight_smile:

Ich sags mal so... das ist das was ich bei meinen Tests mit der Drehzahl gemerkt habe :slight_smile: allerdings kein Anspruch auch Richtigkeit.

Und für die Umsetzung sowieso nicht wichtig... da ich so schnell nicht Messen kann, als das die Motordrehzahl da eine Rolle spielen würde.

Lieber Gruß
ChrisS

PS: Genauso einen Tipp meinte ich! :slight_smile:

Hmm, wenn Du nicht schnell genug messen kannst, dann brauchst Du an dem Motoren auch nicht zu optimieren. Das wäre pure Zeitverschwendung. Man optimiert nur dort wo auch wirklich ein Flaschenhals ist.

Was man machen kann ist die Berechnungen in den PC zu verlagern. Aber solange die Meßwerte nicht schnell genug kommen ist auch das nutzlos.

Gruß, Udo

Hehe, klar...

der Test mit den Motoren war ganz unabhängig von dem was jetzt passiert... man probiert ja gern erstmal richtig aus was man sich kauft.... :wink:

Das mit den Pins per Port war nur als Beispiel gedacht... was ich für einen Tipp haben möchte... bezügl. der Funktion für berechnen der xyz-Achsen...

Haste Du mir dann ja auch gegeben...

Ich setzte den Sharp 20-150m ein, dessen "Zyklus" ich gerade nicht im Kopf habe...

Aber ich hatte das wage gefühl daß die Berechnung irgendwie spürbar ist.... daher dann als Resultat die Frage nach Optimierungsmöglichkeiten...

Ich denke erstmal ist mein Wissensdurst befriedigt...

Nun werde ich mal langsam weiter machen... und hoffen daß das Projekt irgendwann nocheinmal fertig wird :slight_smile:

Ich danke Dir erstmal....

Lieber Gruß
ChrisS

Also wo ich zuerst optimieren würde (bzw. habe) ist die Entwicklungsumgebung. Insbesondere Compile und Uploadzeiten. Das nervt beim Entwickeln am meissten. Im Moment habe ich >40k und brauche für Compile + Deploy ~ 3 Sekunden. Allerdings nehme ich nicht mehr die IDE sondern die Kommandozeile und einen Programmer :slight_smile:

Gruß, Udo

Hättest Du dafür irgendwo einen Tutorial-Link... hört sich interessant an...

Programmer? Hardwareprogrammer?

mmh, das wird bei mir dann vielleicht nichts...
Ich setzte die Modified Pico ein... bin auch absolut zufrieden,
aber Isp ist da soweit ich weiß nicht rausgeführt...

Hänge direkt am ftdi...

Wenns doch geht, bin ich sehr neugierig...

Lieber Gruß
ChrisS

Klar nehme ich einen Hardwareprogrammer: AVRISP MKII. Den kann ich auf 4 MHz hochdrehen. Siehe hier: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1254340446/0. Volle Geschwindigkeit gibt's nur wenn man das Teil mit dem Avrstudio unter Windows an den Anschlag schraubt. Danach merkt es sich die Einstellungen. D.h. einmal unter Windows auf 4 MHz und dann wieder unter Linux :slight_smile:

Anonsten soll auch der Teensy Teensy (ATmega32u4 USB dev board) in stock! « Adafruit Industries – Makers, hackers, artists, designers and engineers! per Bootloader (also ohne Programmer) superschnell zu beschreiben sein. Habe ich aber selber noch nicht ausprobiert. Allerdings kann ich mir das gut vorstellen. Und Arduino kompatibel soll er auch sein.

Keine Ahnung ob die IDE das unterstützt. Die benutze ich ja sowieso nicht mehr.

Gruß, Udo