PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motoren einzeln ansteuern



Jannik18
19.05.2014, 21:21
Hallo,
in der ASURO Library gibt es ja eine sogenannte sound.c Funktion.
Leider kann man mit diesem Befehl nur einen Mono Sound erzeugen.
Falls jemand weiß wie man den Befehl so umschreiben kann, dass man einen Stereo Sound hin bekommt, wäre das genial.
Im Grunde genommen muss man die Funktion doch so umschreiben, dass man beide Motoren unterschiedlich ansteuern kann, oder?

Ich wäre über eine Antwort sehr erfreut.
ps: Beweg mich hier noch relativ auf Neuland.

Geistesblitz
19.05.2014, 23:34
Was hat Sound denn mit Motoren zu tun?

oberallgeier
20.05.2014, 07:28
Was hat Sound denn mit Motoren zu tun?Viel! Motorbleche können nämlich "singen" wenn nur der Strom gering genug ist, dass der Motor gerade noch nicht dreht und die PWM die Frequenz hat, mit der die Bleche einen hörbaren Ton abgeben.

PICture
20.05.2014, 09:59
Hallo!

@ Jannik18

Bei echtem stereo (Raumton nicht über Kopfhörer) muss ziemlich großer Abstand zwischen Tonquellen sein. Bei dicht zueinander liegenden Tonkquellen ist es unmöglich. ;)

Jannik18
20.05.2014, 15:07
@ PICture

Danke für die die Antwort. Jedoch habe ich trotzdem gelesen, dass es möglich ist die genannte Funktion sich umschreiben lässt, sodass man die Motoren mit unterschiedlichen Frequenzen ansteuern kann. Demnach ergibt sich dann vielleicht kein richtiges Stereo, dennoch erzeugen die Motoren jeweils einen Ton. Mein Problem ist hierbei das Umschreiben, damit man nun die Motoren einzeln ansteuern kann.

PICture
20.05.2014, 15:56
Demnach ergibt sich dann vielleicht kein richtiges Stereo, dennoch erzeugen die Motoren jeweils einen Ton.

Das ist sicher möglich ! :D

Jannik18
20.05.2014, 22:00
Das ist sicher möglich ! :D

Die Frage ist nur, wie. :idea:

oberallgeier
21.05.2014, 08:18
... Mein Problem ist hierbei das Umschreiben ...
Die Frage ist nur, wie ...Stimmt - nur ist es eben so, dass ausgefeilte Vorlagen für sehr spezielle persönliche Projekte selten verfügbar sind.



... Im Grunde ... Funktion ... dass man beide Motoren unterschiedlich ansteuern kann ...Genau - und vorher am Besten den ersten Satz im Kleingeschriebenen unter den Postings von PICture lesen.

robin
21.05.2014, 08:56
Das ganze ist recht einfach zu ändern:

Hier ist die original Funktion:
http://www.asurowiki.de/pmwiki/pub/html/sound_8c.html





Sound( uint16_t freq, uint16_t duration_msec, uint8_t amplitude)00069 {0070 uint16_t wait_tics;0071 uint32_t n,k,period_usec,dauer_usec;0072 0073 period_usec = 1000000L / freq;0074 dauer_usec = 1000 * (uint32_t) duration_msec;0075 k = dauer_usec / period_usec;0076 0077 //IR Interuptfreq=36KHz0078 //Wavefreq=18KHz0079 0080 wait_tics = 18000 / freq;0081 0082 MotorSpeed (http://www.asurowiki.de/pmwiki/pub/html/motor__low_8c.html#72bb9f060fd3b5a9a9471b84bef882c d) (amplitude, amplitude);0083 0084 for (n = 0; n < k; n++)0085 {0086 MotorDir (http://www.asurowiki.de/pmwiki/pub/html/motor__low_8c.html#561935d5de881e56c9ad4592514cf47 f) (FWD (http://www.asurowiki.de/pmwiki/pub/html/asuro_8h.html#a02f16883c5ce325e2dbb8c3835aa9a1), FWD);0087 Sleep (http://www.asurowiki.de/pmwiki/pub/html/time_8c.html#99b57953c558fb6618e2bd10ef291546) (wait_tics);0088 MotorDir (http://www.asurowiki.de/pmwiki/pub/html/motor__low_8c.html#561935d5de881e56c9ad4592514cf47 f) (RWD (http://www.asurowiki.de/pmwiki/pub/html/asuro_8h.html#0c3c1353638d84aafe3b0f52882c540f), RWD (http://www.asurowiki.de/pmwiki/pub/html/asuro_8h.html#0c3c1353638d84aafe3b0f52882c540f));0 089 Sleep (http://www.asurowiki.de/pmwiki/pub/html/time_8c.html#99b57953c558fb6618e2bd10ef291546) (wait_tics);0090 }00091 MotorSpeed (http://www.asurowiki.de/pmwiki/pub/html/motor__low_8c.html#72bb9f060fd3b5a9a9471b84bef882c d) (0, 0); 00092 }


Eigentlich doch recht offensichtlich, was die Funktion macht. Es werden beide Motoren zum erzeugen des selben Tons genutzt. Übergibt man dem rechten und linken Motor andere Parameter, sollten auch 2 verschiedene Töne bei raus kommen.

Einzig bei dem Sleep bzw. der For-Schleife muss man aufpassen, da man ja 2 Frequenzen hat. Das könnte etwas kniffliger werden, weil man 2 unterschiedliche Perioden hat. Hier müsste man vorher die Frequenzen filtern und entsprechend die waits anpassen.

Übernehmen wird dir die Arbeit aber vermutlich keiner.

oberallgeier
21.05.2014, 11:06
... 2 Frequenzen ... etwas kniffliger ... unterschiedliche Perioden ... die waits anpassen ...Da liegt wohl der Hase (ne ganze Rotte !!) im Pfeffer. WENN ich mit waits die Frequenz MotorLinks ändere, dann ändert sich wohl die Frequenz MotorRechts gleich mit. Die Routine ist eben für EINE Tonfolge entworfen, zwei parallele würde man (würde ich) ähnlich wie Servobedienung mit Timern machen. Das könnte für Jannik18 erstmal etwas schwierig werden, aber man wächst ja an seinen Aufgaben. Na ja, gut, auch für waits gäbs ne simple Lösung : waitmotre = tonwert-waitmotli - - oder so ähnlich; nur als Denkanstoß.

PICture
21.05.2014, 11:32
Das könnte für Jannik18 erstmal etwas schwierig werden, aber man wächst ja an seinen Aufgaben.

Deshalb würde ich es zuerst auf einem unabhängigem µC ausser ASURO probieren.

Jannik18
21.05.2014, 15:08
Vielen Dank schon mal für die guten Tipps.
Mir ist natürlich klar, dass mir hier keiner ein Vollständiges Programm liefern wird. Ich werde nun versuchen mit diesen Denkanstößen weiterzukommen und mich intensiv mit den Motoren beschäftigen.