'Slowmotion frames' und deren Umsetzung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Also, es ist ein Unterschied feststellbar, zumindest beim Geräusch. Ich zeig' hier mal ein Filmchen, bei dem ich die beiden software-Varianten wechselweise in den Kontroller lade. Die erzeugten Geräusche sind im Film gut zu hören, die Amplitude der Zunge ist auch zu sehen. Die Zunge ist noch eine Stahlfeder, auf der ein kleiner Permanentmagnet pabbt, der in die Spulenwicklung hinein reicht. Der Magnetkern ist soweit zurück gezogen, dass ihn der Permanentmagnet nicht erreicht.
      Wieweit jetzt 'schwerere' Objekte mit Sinus besser geschüttelt werden, hab' ich noch nicht getestet, aber eine Reduzierung der Geräusche finde ich schon einen Fortschritt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • a_42_02cc30b2 a_22_9ac28a82
      Ich habe zwar einen Gehörknick, aber den Lautstärkeunterschied kann selbst ich feststellen.
      Was ich festgestellt habe, wenn du auf die Spule greifst, verringert sich die Lautstärke.
      Ein Zeichen dafür, das Spule und Eisenkern mechanisch zu lose gekoppelt sind, also schwingen.
      Vielleicht lässt sich das durch tränken oder Kleber noch minimieren.
      An sonsten :thumbup:

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Ich hab' ja schon 2 Frames verschenkt, jetzt will ich auch mal einen für uns (für meine Frau und mich) haben. Natürlich den besten :D . Ich hatte ja schon Versuche mit Sinusansteuerung gemacht um die Greräuschentwicklung möglichst zu minimieren. Weiter hatte ich die Idee, von einer Federzunge weg zu gehen und mehr einen Hebel zu nehmen, der mit 2 gegenüber angeordneten Magneten hin- und hergezogen wird. Der Hebel hätte dazu einen Magneten. Auf die Art, so denke ich mir, komme ich von einem resonanzbehafteten System (Federzunge und Masse vom Objekt) mehr zu einem zwangsgeführten System hin, was ich vielleicht leiser machen kann, weil die Einspannung der Feder wegfällt. Bei diesen Überlegungen ist mir aufgefallen, das es dieses System, 2 Spulen mit einem beweglichen Magnet dazwischen, schon fertig gibt. Das ist nämlich ein stepper. Aus diversen Spielautomaten hab' ich welche, die einen stepwinkel von 7,5° haben und mit 12V betrieben werden. Experimente mit Spannungsanlegen am stepper führten mich zur Halbwellen-Ansteuerung mit 2 Sinuswellen, die 90° phasenverschoben sein müssen. Also flugs mein vorhandenes Programm soweit erweitert, dass ich einen 2. Ausgang für den Magneten, jetzt Motorspule, habe und siehe da, es geht nicht schlecht. Die Masse des steppers ist so groß, dass ich den jetzt nur in ein weiches Kissen betten muss und man hört fast nix. Bei höheren Frequenzen wirkt sich jetzt natürlich auch diese Masse des steppers aus. Aber ich habe ja auch die Möglichkeit, mein Objekt weiter von der Drehachse entfernt anzuklemmen, das muss ich noch austesten. Hier mal ein Filmchen von den ersten Versuchen mit dem stepper.

      und das Programm zum Film

      BASCOM-Quellcode

      1. 'timer0 erzeugt die PWM mit 8-bit
      2. 'timer2 gibt PWM-Werte aus einer Tabelle vor
      3. 'der Sinus wird mit 16 Werten für eine Vollwelle beschrieben
      4. 'breakdance jetzt mit zufällig langer Bewegungs- und zufällig langer Verweildauer
      5. 'Sinusansteuerung des Magneten
      6. 'fast PWM für die Ansteuerung der Leds
      7. $regfile = "m328pdef.dat"
      8. $crystal = 16000000
      9. $hwstack = 34
      10. $swstack = 32
      11. $framesize = 64
      12. Led Alias Portb.2 'OC1B-Ausgang
      13. Config Led = Output
      14. Magnet1 Alias Portd.5 'OC0B-Ausgang
      15. Config Magnet1 = Output 'Pwm-Ausgang
      16. Magnet2 Alias Portd.6 'OC0A-Ausgang
      17. Config Magnet2 = Output 'Pwm-Ausgang
      18. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      19. 'Ende_magnet Alias Compare0b
      20. Magnet_frequenz Alias Compare2a
      21. Ende_blitz Alias Compare1b
      22. Blitz_frequenz Alias Compare1a
      23. Config Timer0 = Pwm , Prescale = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up
      24. Tccr0a.0 = 1 : Tccr0a.1 = 1 : Tccr0b.3 = 1 'mode 7, fast PWM compare0a=top-Wert
      25. Compare0a = 255 '8-bit PWM
      26. Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare_b_pwm = Clear_up
      27. Tccr1b.3 = 1 : Tccr1b.4 = 1 'mode 15, 16bit fast PWM compare1a=top-Wert
      28. Config Timer2 = Timer , Prescale = 64 , Clear_timer = 1
      29. On Compare2a Timer2_isr:
      30. Enable Compare2a
      31. Enable Interrupts
      32. Dim Blitz_frequenz_start As Word
      33. Blitz_frequenz_start = 32768 + 1500
      34. Dim Freq As Word , Frequenz_l As Word , Frequenz_m As Byte 'Grundfrequenz
      35. Dim Led_frequenz As Word 'feineinstellung Led-Frequenz
      36. Dim Amplitude As Word , Amp As Byte
      37. Dim Helligkeit As Word , Hell As Dword 'ED-Led
      38. Dim Versatz_ist As Word , Versatz_soll As Word , Zufall As Word
      39. Dim Versatz_ist_ As Word
      40. Dim Zeit As Word , Zeit1 As Word
      41. Dim Countdown As Word
      42. Dim Sinus As Byte , Datazaehler_a As Byte , Datazaehler_b As Byte
      43. Versatz_ist = 100
      44. Versatz_soll = 100
      45. Do
      46. Zufall = Rnd(100)
      47. Freq = Getadc(0) 'Grundfrequenz einstellung lesen
      48. Freq = Freq / 10 'Wertebereich 0..102
      49. Frequenz_m = Freq
      50. Frequenz_l = Freq * 128
      51. Magnet_frequenz = 255 - Frequenz_m 'compare-Wert neu festsetzen
      52. Led_frequenz = Getadc(1) 'Schwebungsfrequenz
      53. Select Case Led_frequenz
      54. Case Is < 20 : Gosub Breakdance
      55. Case 21 To 40 : Gosub Schwebung_slow 'zufällige Änderungen
      56. Case 41 To 1003 : Gosub Schwebung_manuell
      57. Case Is > 1003 : Gosub Schwebung_fast 'zufällige Änderungen
      58. End Select
      59. Amplitude = Getadc(2) 'Stärke derSchwingung
      60. Amplitude = 1023 - Amplitude
      61. Amplitude = Amplitude / 8 'Wertebereich 0..127
      62. Amp = Amplitude 'jetzt als byte
      63. Helligkeit = Getadc(3) 'Helligkeit
      64. Helligkeit = Helligkeit / 20 'Wertebereich 0..51
      65. Hell = Blitz_frequenz
      66. Hell = Hell * Helligkeit
      67. Hell = Hell / 1000
      68. If Hell < 100 Then Hell = 100
      69. Blitz_frequenz = Blitz_frequenz_start - Frequenz_l 'compare-Wert neu festsetzen
      70. Ende_blitz = Hell 'compare-Wert neu festsetzen
      71. If Helligkeit < 10 Then 'Ausschalten
      72. Reset Tccr0a.com0b1 '0C0B abschalten
      73. Magnet1 = 0
      74. Reset Tccr0a.com0a1 '0C0A abschalten
      75. Magnet2 = 0
      76. Reset Tccr1a.com1b1 '0C1B abschalten
      77. Led = 0
      78. Else
      79. Set Tccr0a.com0b1 '0C0B einschalten
      80. Set Tccr0a.com0a1 '0C0A einschalten
      81. Set Tccr1a.com1b1 '0C1B einschalten
      82. End If
      83. If Countdown > 0 Then Decr Countdown 'alle ca. 0,1msec
      84. Loop
      85. End
      86. Breakdance:
      87. If Countdown <= Zeit1 Then
      88. Frequenz_l = Frequenz_l + Versatz_ist_ 'innerhalb Zeit1 bewegt sich das Objekt in zufälliger Geschwindigkeit
      89. If Countdown = 0 Then 'hier wird die zufällige Geschwindigkeit gewürfelt und Zeit
      90. Zeit1 = 100 + Rnd(100)
      91. Zeit = 100 + Rnd(200) : Zeit = Zeit + Zeit1 'Zeit gibt die Verweildauer nach der Bewegung vor
      92. Countdown = Zeit
      93. Versatz_ist_ = Zufall * 20
      94. End If
      95. Else
      96. Frequenz_l = Frequenz_l + 1500 'hier sind Blitz und Magnet auf gleicher Frequenz
      97. End If
      98. Return
      99. Schwebung_manuell: 'die Schwebung (sichtbare langsame Bewegung des Objekts) wird mit dem Poti eingestellt
      100. Led_frequenz = Led_frequenz * 3
      101. Frequenz_l = Frequenz_l + Led_frequenz
      102. Return
      103. Schwebung_slow:
      104. If Countdown = 0 Then
      105. Countdown = 500
      106. If Versatz_ist = Versatz_soll Then Versatz_soll = Zufall 'die Schwebung verändert sich zufällig
      107. If Versatz_ist < Versatz_soll Then Incr Versatz_ist
      108. If Versatz_ist > Versatz_soll Then Decr Versatz_ist
      109. Versatz_ist_ = Versatz_ist * 20 'Versatz_ist_ soll einen Wert 0..3000 annehmen
      110. End If
      111. Frequenz_l = Frequenz_l + Versatz_ist_
      112. Return
      113. Schwebung_fast:
      114. If Countdown = 0 Then
      115. Countdown = 200
      116. If Versatz_ist = Versatz_soll Then Versatz_soll = Zufall 'die Schwebung verändert sich zufällig
      117. If Versatz_ist < Versatz_soll Then Incr Versatz_ist
      118. If Versatz_ist > Versatz_soll Then Decr Versatz_ist
      119. Versatz_ist_ = Versatz_ist * 20
      120. End If
      121. Frequenz_l = Frequenz_l + Versatz_ist_
      122. Return
      123. Timer2_isr: 'PWM-Wert aus Tabelle nehmen und als Wert für timer2 vorgeben
      124. Sinus = Lookup(datazaehler_a , Sinusdata)
      125. If Sinus > Amp Then Sinus = Sinus - Amp
      126. Compare0a = Sinus
      127. Datazaehler_b = Datazaehler_a + 8 'für phasenverschobenen Sinus am pin OC0B
      128. Sinus = Lookup(datazaehler_b , Sinusdata)
      129. If Sinus > Amp Then Sinus = Sinus - Amp
      130. Compare0b = Sinus
      131. Incr Datazaehler_a
      132. Datazaehler_a = Datazaehler_a And &B1111 'auf Wert von 0 bis 15 halten
      133. Return
      134. Sinusdata:
      135. Data 1 'Beginn OC0A
      136. Data 11
      137. Data 38
      138. Data 79
      139. Data 128
      140. Data 177
      141. Data 218
      142. Data 245
      143. Data 255 'Beginn OC0B
      144. Data 245
      145. Data 218
      146. Data 177
      147. Data 128
      148. Data 79
      149. Data 38
      150. Data 11 'Ende OC0A
      151. Data 1
      152. Data 11
      153. Data 38
      154. Data 79
      155. Data 128
      156. Data 177
      157. Data 218
      158. Data 245 'Ende OC0B
      Alles anzeigen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Noch ein Filmchen. Man sieht, das Anbringen von Objekten ist universeller zu gestalten. Jetzt steckt auf dem stepper noch das Originalteil, das die Walze beim Spielautomateneinsatz auf nahm. Das könnte man dann durch was selbstgedrucktes ersetzen.

      Das Flackern ist wieder eine Interferenz mit der Kamera.
      Das Programm aus dem vorherigen post muss mein 2. Ich geschrieben haben. Das kann wohl nicht so gut mit bascom umgehen X(
      Hier die korrigierte Version

      BASCOM-Quellcode

      1. 'timer0 erzeugt die PWM mit 8-bit
      2. 'timer2 gibt PWM-Werte aus einer Tabelle vor
      3. 'der Sinus wird mit 16 Werten für eine Halbwelle beschrieben
      4. 'breakdance jetzt mit zufällig langer Bewegungs- und zufällig langer Verweildauer
      5. 'Sinusansteuerung des Magneten
      6. 'fast PWM für die Ansteuerung der Leds
      7. $regfile = "m328pdef.dat"
      8. $crystal = 16000000
      9. $hwstack = 34
      10. $swstack = 32
      11. $framesize = 64
      12. Led Alias Portb.2 'OC1B-Ausgang
      13. Config Led = Output
      14. Magnet1 Alias Portd.5 'OC0B-Ausgang
      15. Config Magnet1 = Output 'Pwm-Ausgang
      16. Magnet2 Alias Portd.6 'OC0A-Ausgang
      17. Config Magnet2 = Output 'Pwm-Ausgang
      18. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      19. Magnet_frequenz Alias Compare2a
      20. Ende_blitz Alias Compare1b
      21. Blitz_frequenz Alias Compare1a
      22. Config Timer0 = Pwm , Prescale = 1 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up
      23. 'Tccr0a.0 = 1 : Tccr0a.1 = 1 : Tccr0b.3 = 1 'mode 7, fast PWM compare0a=top-Wert
      24. 'Compare0a = 255 '8-bit PWM
      25. Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare_b_pwm = Clear_up
      26. Tccr1b.3 = 1 : Tccr1b.4 = 1 'mode 15, 16bit fast PWM compare1a=top-Wert
      27. Config Timer2 = Timer , Prescale = 64 , Clear_timer = 1
      28. On Compare2a Timer2_isr:
      29. Enable Compare2a
      30. Enable Interrupts
      31. Dim Blitz_frequenz_start As Word
      32. Blitz_frequenz_start = 32768 + 1500
      33. Dim Freq As Word , Frequenz_l As Word , Frequenz_m As Byte 'Grundfrequenz
      34. Dim Led_frequenz As Word 'feineinstellung Led-Frequenz
      35. Dim Amplitude As Word , Amp As Byte
      36. Dim Helligkeit As Word , Hell As Dword 'ED-Led
      37. Dim Versatz_ist As Word , Versatz_soll As Word , Zufall As Word
      38. Dim Versatz_ist_ As Word
      39. Dim Zeit As Word , Zeit1 As Word
      40. Dim Countdown As Word
      41. Dim Sinus As Byte , Datazaehler_a As Byte , Datazaehler_b As Byte
      42. Versatz_ist = 100
      43. Versatz_soll = 100
      44. Do
      45. Zufall = Rnd(100)
      46. Freq = Getadc(0) 'Grundfrequenz einstellung lesen
      47. Freq = Freq / 10 'Wertebereich 0..102
      48. Frequenz_m = Freq
      49. Frequenz_l = Freq * 128
      50. Magnet_frequenz = 255 - Frequenz_m 'compare-Wert neu festsetzen
      51. Led_frequenz = Getadc(1) 'Schwebungsfrequenz
      52. Select Case Led_frequenz
      53. Case Is < 20 : Gosub Breakdance
      54. Case 21 To 40 : Gosub Schwebung_slow 'zufällige Änderungen
      55. Case 41 To 1003 : Gosub Schwebung_manuell
      56. Case Is > 1003 : Gosub Schwebung_fast 'zufällige Änderungen
      57. End Select
      58. Amplitude = Getadc(2) 'Stärke derSchwingung
      59. Amplitude = Amplitude / 4 'Wertebereich 0..255
      60. Amp = Amplitude 'jetzt als byte
      61. Helligkeit = Getadc(3) 'Helligkeit
      62. Helligkeit = Helligkeit / 20 'Wertebereich 0..51
      63. Hell = Blitz_frequenz
      64. Hell = Hell * Helligkeit
      65. Hell = Hell / 1000
      66. If Hell < 100 Then Hell = 100
      67. Blitz_frequenz = Blitz_frequenz_start - Frequenz_l 'compare-Wert neu festsetzen
      68. Ende_blitz = Hell 'compare-Wert neu festsetzen
      69. If Helligkeit < 10 Then 'Ausschalten
      70. Reset Tccr0a.com0b1 '0C0B abschalten
      71. Magnet1 = 0
      72. Reset Tccr0a.com0a1 '0C0A abschalten
      73. Magnet2 = 0
      74. Reset Tccr1a.com1b1 '0C1B abschalten
      75. Led = 0
      76. Else
      77. Set Tccr0a.com0b1 '0C0B einschalten
      78. Set Tccr0a.com0a1 '0C0A einschalten
      79. Set Tccr1a.com1b1 '0C1B einschalten
      80. End If
      81. If Countdown > 0 Then Decr Countdown 'alle ca. 0,1msec
      82. Loop
      83. End
      84. Breakdance:
      85. If Countdown <= Zeit1 Then
      86. Frequenz_l = Frequenz_l + Versatz_ist_ 'innerhalb Zeit1 bewegt sich das Objekt in zufälliger Geschwindigkeit
      87. If Countdown = 0 Then 'hier wird die zufällige Geschwindigkeit gewürfelt und Zeit
      88. Zeit1 = 100 + Rnd(100)
      89. Zeit = 100 + Rnd(200) : Zeit = Zeit + Zeit1 'Zeit gibt die Verweildauer nach der Bewegung vor
      90. Countdown = Zeit
      91. Versatz_ist_ = Zufall * 20
      92. End If
      93. Else
      94. Frequenz_l = Frequenz_l + 1500 'hier sind Blitz und Magnet auf gleicher Frequenz
      95. End If
      96. Return
      97. Schwebung_manuell: 'die Schwebung (sichtbare langsame Bewegung des Objekts) wird mit dem Poti eingestellt
      98. Led_frequenz = Led_frequenz * 3
      99. Frequenz_l = Frequenz_l + Led_frequenz
      100. Return
      101. Schwebung_slow:
      102. If Countdown = 0 Then
      103. Countdown = 500
      104. If Versatz_ist = Versatz_soll Then Versatz_soll = Zufall 'die Schwebung verändert sich zufällig
      105. If Versatz_ist < Versatz_soll Then Incr Versatz_ist
      106. If Versatz_ist > Versatz_soll Then Decr Versatz_ist
      107. Versatz_ist_ = Versatz_ist * 20 'Versatz_ist_ soll einen Wert 0..3000 annehmen
      108. End If
      109. Frequenz_l = Frequenz_l + Versatz_ist_
      110. Return
      111. Schwebung_fast:
      112. If Countdown = 0 Then
      113. Countdown = 200
      114. If Versatz_ist = Versatz_soll Then Versatz_soll = Zufall 'die Schwebung verändert sich zufällig
      115. If Versatz_ist < Versatz_soll Then Incr Versatz_ist
      116. If Versatz_ist > Versatz_soll Then Decr Versatz_ist
      117. Versatz_ist_ = Versatz_ist * 20
      118. End If
      119. Frequenz_l = Frequenz_l + Versatz_ist_
      120. Return
      121. Timer2_isr: 'PWM-Wert aus Tabelle nehmen und als Wert für timer2 vorgeben
      122. Sinus = Lookup(datazaehler_a , Sinusdata)
      123. If Sinus > Amp Then
      124. Sinus = 0
      125. Else
      126. Sinus = Amp - Sinus
      127. End If
      128. Compare0a = Sinus
      129. Datazaehler_b = Datazaehler_a + 8 'für phasenverschobenen Sinus am pin OC0B
      130. Sinus = Lookup(datazaehler_b , Sinusdata)
      131. If Sinus > Amp Then
      132. Sinus = 0
      133. Else
      134. Sinus = Amp - Sinus
      135. End If
      136. Compare0b = Sinus
      137. Incr Datazaehler_a
      138. Datazaehler_a = Datazaehler_a And &B1111 'auf Wert von 0 bis 15 halten
      139. Return
      140. Sinusdata:
      141. Data 1 'Beginn OC0A
      142. Data 11
      143. Data 38
      144. Data 79
      145. Data 128
      146. Data 177
      147. Data 218
      148. Data 245
      149. Data 255 'Beginn OC0B
      150. Data 245
      151. Data 218
      152. Data 177
      153. Data 128
      154. Data 79
      155. Data 38
      156. Data 11 'Ende OC0A
      157. Data 1
      158. Data 11
      159. Data 38
      160. Data 79
      161. Data 128
      162. Data 177
      163. Data 218
      164. Data 245 'Ende OC0B
      Alles anzeigen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Michael schrieb:

      Aber warum hast du die Drehachse nicht horizontal gemacht?
      Ich hab's mal probiert, die Feder hat dann aber sehr gerauscht. Es ist ja dann so, dass die weiter weg vom Drehpunkt befindlichen Teile theoretisch immer mehr ausgelenkt werden, je weiter sie weg sind. Das hat nicht so gut ausgesehen, wie senkrechte Achse und das gesamte Objekt wird (theoretisch) hin- und hergeschoben. Ich bin noch am experimentieren, aber verschieben ist leiser als schwenken. Die senkrechte Position gibt auch noch die Möglichkeit, das eingespannte Objekt mit der Hand um die Achse zu drehen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @Ulrich im post 'Slowmotion frames' und deren Umsetzung hast du geschrieben, dass du einen Ledfrequenzverdopplerschalter eingebaut hast. Wie ist dieser Effekt? Man sieht doch dann ein Doppelbild, beide Bilder bewegen sich synchron. Wirkt das unscharf? Nicht alle Bereiche des Objekts bewegen sich gleich stark.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich hab' schon wieder eine neue Idee. Aktuell werden ja jetzt beide Spulen des Steppers wechselweise bestromt. Da der Strom dabei nicht umgepolt wird, spielt sich die Bewegung innerhalb eines Stepper-steps ab. Durch dieses sinusartige An- und Abschwellen des Stromes ist das mit einem mikrostep-Betrieb zu vergleichen. Nur durch den großen stepWinkel meines Spielautomatensteppers kommt eine relativ große Auslenkung zustande. Aber, was hindert jetzt einen, das mit normalen 1,8° stepper und einem stepperTreiber zu machen?
      DRV8825-fullstep.png
      Eigentlich nix. Die Schwingfrequenz toggelt den dir (Richtung) Eingang des Treibers, die Anzahl der steppulse zwischen diesem toggeln ergibt die Auslenkung. Wenn das klappt, dann hätte man noch die Möglichkeit das Objekt sich langsam um die eigene Achse drehen zu lassen, indem einfach die Pulszahl für die beiden Richtungen unterschiedlich ausgegeben wird. Jetzt hab' ich für meine 7,5° 16 Sinuswerte, was 16 mikrosteps wären, wenn ich das mit einem 1.8° stepper haben möchte, müsste ich in der gleichen Zeit 4x 16 mikrosteps ausgeben, also 64 steps bei 16 mikrostep-Einstellung.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Michael schrieb:

      Damit näherst du dich den Prinzip des Servomotors. Mach mal ;)
      Hm, verstehe ich jetzt nicht. Ich dachte, bei einem Servo ist ein Regelkreis im Spiel. Sowas hab' ich hier ja nicht, bei mir kann's Schrittverluste wie'd Sau geben, ohne das das Programm was merkt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ahja, wusste ich nicht, dass die mit Sinus angesteuert werden. Davon gehe ich doch mit meiner neuen Idee weg, zumindest, wenn ich es mir so einfach mache, wie ich es versucht habe zu beschreiben. Ich kann mir auch vorstellen, dass es deswegen auch nicht klappt. Ich würde ja die step-Pulse zwischen dem toggeln der Richtung gleichmäßig ausgeben. Die daraus entstehende Drehung des steppers wäre eine mit konstanter Winkelgeschwindigkeit. Für das Schütteln des Objekts ist das sicherlich auch brauchbar. Ob der stepper das mit macht, hm, da kommen mir schon die ersten Bedenken. Ich müsste den Abstand der step-Pulse mit einem Sinus verknüpfen, gegen Ende der Drehung in eine Richtung lange Pausen, mitten in der Drehung kurze Pausen. Das ergäbe dann ein beständiges Beschleunigen und Abbremsen. Wie macht man das? Wenn ich die Gesamtzahl der Takte des timers habe, zwischen denen die Richtung getoggelt wird, so auf die zB 64 steps verteilen und in ein array schreiben, dass die Einzelwerte die Pausen zwischen den steps wiederspiegeln. Aus dem array werden dann nacheinander die Werte für das nächste compare des timers geholt, wo ein step ausgegeben wird? Jetzt wird's wirr und nein, ich habe noch nichts getrunken.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Das ergäbe dann ein beständiges Beschleunigen und Abbremsen. Wie macht man das?
      Du startest einfach mit deiner Beschleunigungsrampe bis die max-Geschwindigkeit erreicht wird und bremst später genauso.
      Da du die Anzahl Pulse weißt, kannst du entsprechend die Bremsrampe anfangen.
      Ist die Pulszahl kleiner, dann musst du eben ab der Hälfte der Pulse wieder bremsen.
    • Ahja, also nicht eine Geschwindigkeitsverteilung wie ein Pendel, sondern einen Bereich zwischen den Rampen mit konstanter Winkelgeschwindigkeit. Das erleichtert dann auch das Realisieren von regelbaren Amplituden. Die Amplitude entspricht ja die Anzahl steps in eine Richtung.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @tschoeatsch, komme erst jetzt dazu auf deinen Post #210 zu antworten.

      Wenn die LED-Blitzfrequenz verdoppelt wird, sieht es so aus als ob, beim Beispiel einer Feder, zwei Federn gegeneinander von rechts nach links, oder vice versa, schweben.
      Die Frequenzverdoppelung war als Testfall gedacht, um zu sehen, ob der Effekt eventuell ein "Brüller" sein könnte; ist jedoch nicht ganz der Fall. Wenn die Umwelt die leicht schwebende Feder bestaunt hatte, lautete in vielen Fällen die Frage, woher kommt denn der Wind? a_68_7bac02a1 Eine doppelte Feder zu sehen war dann nicht mehr ganz so effektvoll.

      Dies war im vergangenen Jahr. Seitdem ist der Wind abgeschaltet.

      Ich wünsche dir und all denjenigen, die dieses Forum mit ihren Fragen, Beiträgen und Lösungen, gerade auch für Mitlesende, so interessant gestalten, noch ein paar besinnliche Tage.


      Viele Grüße

      Ulrich
    • Der Weg zum besten slomoframe ist nicht ohne Steine. Mein Programm macht das:
      Die Leds werden mit fast pwm vom timer0 mit konstannter Frequenz angesteuert. Regeln kann man die Einschaltdauer.
      Timer2 erzeugt mit fast pwm die steps für den stepper. Ausgelegt ist er für 128 steps für jeden Lichtblitz. Die ED ist fix, regelbar ist die Frequenz der pwm, langsamere Frequent=weniger steps/Ledblitz=weniger Amplitude der Auslenkung des Objekts. Der Steppertreiber macht mikrostepps, wenn ich 1/32tel einstelle, macht der stepper eine Amplitude von 2 steppersteps.
      Timer1 läuft auch im fast pwm-Modus. Die Frequenz ist ähnlich dem timer0 mit den Leds, Frequenzunterschied ergibt die Schwebung und somit ein bewegtes Bild (derzeit noch fix eingestellt). Der compare-Fall von timer1 schaltet die Richtung vom stepper um. Ist ED=50%, dann dreht der stepper mit der halben Anzahl steps in einer Richtung, mit der gleichen Anzahl in der anderen Richtung. Das Objekt wird hin und her gedreht, bleibt aber stehen. Geregelt wird die ED, sodass sich die Anzahl der steps für die Richtungen gegeneinander verschieben. Man kann somit eine Drehung dem Hinundherschwingen überlagern, das Objekt wird also zusätzlich langsam gedreht. So ist zumindest der Plan, klppt aber nicht so recht. Die Drehung ist nicht gleichmäßig. Ich kann mir das nicht erklären, wo diese Interferenz her kommt. Wenn der top von timer1 einen geraden Wert hat, dann ist natürlich die Mitte nicht in der Mitte und es müsste somit eine sehr langsame Drehung entstehen. Wenn es langsam dreht, dann nicht gleichmäßig. Auch, wenn die steppfrequenz von timer2 mit timer1 eine Schwebung bildet, kann die doch nicht so langsam sein, weil es doch beim nächsten Durchlauf von timer2 dann wieder anders rum ist. Ich hab' mal ein Filmchen gemacht, man erkennt das ungleichmäßige Drehen und in der 2. Hälfte habe ich die stepps hörbar gemacht und man hört diese Schwebung. Wo kommt die her, wie kann ich die eliminieren.
      man achte auf den Ton.

      BASCOM-Quellcode

      1. 'Lichtpulsfrequenz konstant
      2. 'breakdance jetzt mit zufällig langer Bewegungs- und zufällig langer Verweildauer
      3. $regfile = "m328pdef.dat"
      4. $crystal = 16000000
      5. $hwstack = 34
      6. $swstack = 32
      7. $framesize = 64
      8. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      9. 'Led-timing
      10. 'die Blitzfrequenz sollte mindestens 60 Hz betragen
      11. 'timer0 im fast pwm-Modus prescale 1024, min. Frequenz= 61 Hz
      12. 'OCR0A=top-Wert, kleinerer Wert als &HFF=höhere Frequenz als 61Hz
      13. 'OCR0B=compare-Wert, Lichtblitzlänge=Helligkeit
      14. 'COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00 = TCCR0A
      15. '1 0 Clear OC0A on Compare Match, set OC0A at BOTTOM,
      16. ' (non-inverting mode).
      17. '1 0 Clear OC0B on Compare Match, set OC0B at BOTTOM,
      18. ' (non-inverting mode)
      19. 'Mode WGM02 WGM01 WGM00
      20. '7 1 1 1 Fast PWM
      21. Tccr0a = &B0010_0011
      22. 'FOC0A FOC0B – – WGM02 CS02 CS01 CS00 = TCCR0B
      23. 'CS02 CS01 CS00 Description
      24. '1 0 1 clkI/O/1024 (From prescaler)
      25. Tccr0b = &B0000_1101
      26. 'Startwerte
      27. Ocr0b = 20
      28. Ocr0a = 255
      29. Led Alias Portd.5
      30. Config Led = Output
      31. Led_frequenz Alias Ocr0a
      32. Led_helligkeit Alias Ocr0b 'ED-Led
      33. 'Schwingungsamplitude = Anzahl der steps
      34. 'pro Richtung max 64 steps = max. 128 steps/Lichtblitz
      35. '128 fache Frequenz des Lichtblitzes
      36. 'timer2 im fast pwm-Modus prescale 32
      37. 'OCR2A=top-Wert, größerer Wert als 190 =weniger steps als 128/Lichtblitz
      38. 'OCR2B=compare-Wert, Pulslänge 10=20µS
      39. 'COM2A1 COM2A0 COM2B1 COM2B0 – – WGM21 WGM20 = TCCR2A
      40. '1 0 Clear OC2A on Compare Match, set OC2A at BOTTOM,
      41. ' (non-inverting mode).
      42. '1 0 Clear OC2B on Compare Match, set OC2B at BOTTOM,
      43. ' (non-inverting mode)
      44. 'Mode WGM22 WGM21 WGM20
      45. '7 1 1 1 Fast PWM
      46. Tccr2a = &B0010_0011
      47. 'FOC2A FOC2B – – WGM22 CS22 CS21 CS20 = TCCR2B
      48. 'CS22 CS21 CS20 Description
      49. '0 1 1 clkT2S/32 (From prescaler)
      50. Tccr2b = &B0000_1011
      51. 'Startwerte
      52. Ocr2a = 190
      53. Ocr2b = 40
      54. Steppuls Alias Portd.3
      55. Config Steppuls = Output
      56. Amplitude Alias Ocr2a
      57. 'Richtungsumkehr=stehendes Bild bei 2x Umkehr innerhalb des Lichtblitzes, Drehung wenn ED<>50%
      58. 'timer1 im fast pwm-Modus prescale 8
      59. 'OCR1A=top-Wert Frequenz ähnlich Ledfrequenz
      60. 'OCR1B=Richtungswechsel etwa 50% ED
      61. 'COM1A1 COM1A0 COM1B1 COM1B0 – – WGM11 WGM10 = TCCR1A
      62. '1 0 Clear OC1A/OC1B on Compare Match, set Oc1a / Oc1b At Bottom(non -inverting Mode)
      63. 'Mode WGM13 WGM12 WGM11 WGM10
      64. '15 1 1 1 1 Fast PWM
      65. Tccr1a = &B0010_0011
      66. 'ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10 = TCCR1B
      67. 'CS12 CS11 CS10 Description
      68. '0 1 0 clkI/O/8 (From prescaler)
      69. 'FOC1A FOC1B – – – – – – = TCCR1C
      70. Tccr1b = &B0001_1010
      71. 'Startwerte
      72. Ocr1a = 32640 '32759
      73. Ocr1b = 16379
      74. Stepdir Alias Portb.2
      75. Config Stepdir = Output
      76. Motorfrequenz Alias Ocr1a
      77. Richtungsumschaltung Alias Ocr1b
      78. Dim Motor_frequenz_start As Word
      79. Motor_frequenz_start = 250
      80. Dim Dir_links As Word , Dir_rechts As Word
      81. Dim M_frequenz As Word
      82. M_frequenz = 32640
      83. Dim Frequenz As Word , Frequenz_m As Byte
      84. Dim Amp As Word
      85. Dim Helligkeit As Word
      86. Dim Drehzahl As Word
      87. Dim Versatz_ist As Word , Versatz_soll As Word , Zufall As Word
      88. Dim Versatz_ist_ As Word
      89. Dim Zeit As Word , Zeit1 As Word
      90. Dim Countdown As Word
      91. Versatz_ist = 10
      92. Versatz_soll = 10
      93. Do
      94. Zufall = Rnd(50)
      95. Frequenz_m = Motor_frequenz_start - 20
      96. Amp = Getadc(0)
      97. Amp = Amp / 20
      98. Amplitude = 255 - Amp
      99. '( Frequenz = Getadc(1) 'Schwebungsfrequenz
      100. Select Case Frequenz
      101. Case Is < 20 : Gosub Breakdance
      102. Case 21 To 40 : Gosub Schwebung_slow 'zufällige Änderungen
      103. Case 41 To 1003 : Gosub Schwebung_manuell
      104. Case Is > 1003 : Gosub Schwebung_fast 'zufällige Änderungen
      105. End Select
      106. ')
      107. Drehzahl = Getadc(2)
      108. Dir_links = M_frequenz / 2
      109. Dir_links = Dir_links - 512
      110. Dir_links = Dir_links + Drehzahl
      111. Richtungsumschaltung = Dir_links
      112. Helligkeit = Getadc(3) 'Helligkeit
      113. Helligkeit = Helligkeit / 40 'Wertebereich 0..
      114. Helligkeit = Helligkeit + 5
      115. Led_helligkeit = Helligkeit
      116. If Helligkeit < 11 Then 'Ausschalten
      117. Else
      118. End If
      119. If Countdown > 0 Then Decr Countdown
      120. Loop
      121. End
      122. '(
      123. Breakdance:
      124. If Countdown <= Zeit1 Then
      125. Frequenz_m = Frequenz_m + Versatz_ist_ 'innerhalb Zeit1 bewegt sich das Objekt in zufälliger Geschwindigkeit
      126. If Countdown = 0 Then 'hier wird die zufällige Geschwindigkeit gewürfelt und Zeit
      127. Zeit1 = 100 + Rnd(100)
      128. Zeit = 100 + Rnd(200) : Zeit = Zeit + Zeit1 'Zeit gibt die Verweildauer nach der Bewegung vor
      129. Countdown = Zeit
      130. Versatz_ist_ = Zufall * 2
      131. End If
      132. Else
      133. Frequenz_m = Motor_frequenz_start
      134. End If
      135. Return
      136. Schwebung_manuell: 'die Schwebung (sichtbare langsame Bewegung des Objekts) wird mit dem Poti eingestellt
      137. Frequenz = Frequenz / 30
      138. Frequenz_m = Frequenz_m + Frequenz
      139. Return
      140. Schwebung_slow:
      141. If Countdown = 0 Then
      142. Countdown = 500
      143. If Versatz_ist = Versatz_soll Then Versatz_soll = Zufall 'die Schwebung verändert sich zufällig
      144. If Versatz_ist < Versatz_soll Then Incr Versatz_ist
      145. If Versatz_ist > Versatz_soll Then Decr Versatz_ist
      146. End If
      147. Frequenz_m = Frequenz_m + Versatz_ist_
      148. Return
      149. Schwebung_fast:
      150. If Countdown = 0 Then
      151. Countdown = 200
      152. If Versatz_ist = Versatz_soll Then Versatz_soll = Zufall 'die Schwebung verändert sich zufällig
      153. If Versatz_ist < Versatz_soll Then Versatz_ist = Versatz_ist + 2
      154. If Versatz_ist > Versatz_soll Then Versatz_ist = Versatz_ist - 2
      155. End If
      156. Frequenz_m = Frequenz_m + Versatz_ist_
      157. Return
      158. ')
      Alles anzeigen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • Meine Enkelkinder fragten an, ob ich nicht mal wieder so einen Zaubertrick wie mit dem Slomoframes machen könnte. a_28_2c02f089 Ich nehme diesen Wunsch zum Anlass dieses Thema noch mal auf zu greifen.

      Also weitere Tests mit „Slomo-Frame Varianten“ und Maßnahmen, die Magnetspule mit Sinus anzusteuern. Hier eine etwas andere Möglichkeit, auch Pulsbreitenvariation, jedoch über den Umweg eines Class D-Leistungsverstärkers.

      Die selbstgewickelte Magnetspule (3,8 Ohm) steuerte ich diesmal über ein preiswertes 10W Class-D Verstärker Modul an. (Bilder) Eine direkte Ansteuerung der Magnetspule über eine variable sinuskonforme PWM mit Fet wurde schon erwähnt, war mir jedoch etwas zu gedankenintensiv a_27_b277ca12 ; Verstärker und Filterbaustein waren ja noch vorhanden.

      Für die erforderliche Umwandlung des 1:1 Timerrechteck-Signals in einen Sinus zur Ansteuerung des Class-D-Amps kommt ein MAX7400/Max7404 zum Einsatz. Dieser Baustein(8-Pin) ist ein einfaches 8.Ordnung Tiefpassfilter (switched capacitor Typ), dessen Filtergrenzfrequenz 1/100 der ansteuernden Switch-Frequenz ist. Letztere wird von einem weiteren Timer gesteuert. (Noch nicht komplett getestet a_71_f9c57bbe ) Die variable LED-Blitzfrequenz soll der dritte Timer im ATmega 328 generieren.

      Bei Versuchen den Effekt aus dem in #4 verlinkten Beispiel zu erhalten, habe ich den Wasserschlauch mal an der Federzunge (mit Schrumpfschlauch) festgemacht. (Magnetspule und Federzunge nun über Kopf) Würde die Bewegung der Federzunge ausreichen, um einen schwenkenden Wasserstrahl wie in #4 zu produzieren? Nein! Jedoch war festzustellen, dass die mechanischen Druckschwankungen auf den Schlauch, hervorgerufen durch die Vibrationen der Federzunge (50Hz), den Wasserstrahl derart modulierten, das ich im synchronen Led-Blitz saubere Tropfenform sehen konnte, die jedoch ohne Vibration nicht zu sehen waren. (ohne Vibration war nur ein durchgehender Wasserstrahl zu sehen) Eine Verbesserung der Tropfenform konnte ich durch ein Zuquetschen des Schlauches optimieren.

      Aus weiteren Recherchen war zu erkennen, dass alle Youtube-Beispiele zu „Levitating Water“mit einer Membranpumpe betrieben werden, die wohl ebenfalls eine Wasserstrahl-Modulation bewirkt. Habe mir jetzt eine bestellt bestellt (Fernost/lange Lieferzeit). Leider finde ich kaum andere Lieferanten, Pollin hat in entsprechender Bauform und Spannung/12V nur Kreiselpumpen im Programm.

      Aber dennoch, auch mit einer Kreiselpumpe (auch schon bestellt) in Verbindung mit Vibrationen der Federzunge sollte sich eine Tropfenform beobachten lassen. Bisher habe ich meine Versuche lediglich mit einer hoch gehängten PET-Wasserflasche und weißen LED’s durchgeführt.

      Ein nächster Schritt zu Levitating WaterDrops wäre mit farbigen in einander wandernden Wassertropen zu spielen.
      Und auch einen schwenkenden Wasserstrahl zu produzieren. Vielleicht hat schon jemand die erforderliche Mechanik ausgetüftelt und getestet.
      Dateien