Ansteuerung eines DC Motors mit Lichtschranke und Näherungsschalter. Codefrage.

    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!

    • Ansteuerung eines DC Motors mit Lichtschranke und Näherungsschalter. Codefrage.

      Hallo nochmal alle zusammen.

      Ihr habt mir alle schon sehr geholfen bei meinem Projekt und bei der Hilfe sind bei mir wieder neue Fragen aufgekommen.

      Ursprünglicher Thread: Hilfe bei Verzweigung mit IF gesucht.


      Das Projekt steht ja eigentlich schon und "funktioniert" (Macht was es soll... rudimentär...)

      Worum geht es?!:




      Eine Apparatur die einen Fernseher rauf und runter fährt.

      Angesteuert mit einem Atmega644p, zwei Endschalter, einem 24V DC Motor, einem Taster und zwei Relais.


      Volle Kanne rauf und volle Kanne runter.



      In dem Thread sind Tipps und Fragen aufgekommen um die Apperatur etwas zu "verbessern".

      Alleine um den Fernseher zu schonen und er nicht mit voller Bewegung irgendwo gegen knallt.



      Dazu habe ich eben eine H-Brücke gekauft mit dem L298 BTS7960Modul.
      amazon.de/dp/B01M34T5LF/ref=pe_386171_38075861_TE_item


      Zur Auswertung habe ich heute zwei Näherungssensoren gekauft (Induktiv).
      diribo.de/media/sensors/docume…chalter-if5712_if5712.pdf
      (Werde ich mit einem Optokoppler an den AVR verschalten.)

      In meinem Fundos habe ich gerade noch eine Gabellichtschranke (vermutlich) gefunden.


      DSC_0336.JPG

      (An der Seite steht: P806 8 F)


      Leider finde ich dazu kein Datenblatt, aber vielleicht kennt einer von euch das Bauteil.


      Diesen will ich an dem Ritzel der Rolle so anbringen, das er die Zähne zält beim Fahren.

      Vlt. Positionsüberwachung wenn nötig.


      DSC_0334.JPG



      An den Enden des Hubweges befinden sich zwei Endschalter.

      Ist dieser ausgelöst stoppt der Motor.


      Ich wollte jetzt noch einen bzw. zwei Näherungssensoren mit einbringen.


      Entweder ein paar cm vor den Endschaltern damit der Motor über PWM langsamer dem Ende hin zu fährt, oder wie auf dem letzten Bild zu sehen an den drei Muttern anbringen, das dieser die zählt, bzw über die Lichtschranke am Ritzel.


      djmsc hat mir einen Code geschrieben für die Apparatur:


      BASCOM-Quellcode

      1. $regfile = "m644pdef.dat"
      2. $crystal = 20000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. Config Pina.0 = Input
      7. Config Pina.1 = Input
      8. Config Pina.2 = Input
      9. Config Pina.3 = Input
      10. Config Pina.4 = Output
      11. Config Pina.5 = Output
      12. Config Pina.6 = Input
      13. Obenno Alias Pina.0 'Schließer
      14. Obennc Alias Pina.1 'Öffner
      15. Untenno Alias Pina.2 'Schließer
      16. Untennc Alias Pina.3 'Öffner
      17. Rauf Alias Porta.4
      18. Runter Alias Porta.5
      19. Taster Alias Pina.6 'gegen GND
      20. Porta.6 = 1
      21. Porta.0 = 1
      22. Porta.1 = 1
      23. Porta.2 = 1
      24. Porta.3 = 1
      25. Dim Status As Bit
      26. Status = 0
      27. Rauf = 0
      28. Runter = 0
      29. Do
      30. Gosub Fahrrunter_start
      31. Rauf = 0
      32. Runter = 0
      33. If Taster = 0 Then
      34. If Status = 0 Then
      35. Gosub Fahrhoch
      36. Else
      37. Gosub Fahrrunter
      38. Waitms 20
      39. End If
      40. End If
      41. Loop
      42. End
      43. Fahrhoch:
      44. Status = 1
      45. If Untenno = 0 And Obenno = 1 Then
      46. Do
      47. Runter = 0
      48. Waitms 30
      49. Rauf = 1
      50. Loop Until Untenno = 1 And Obenno = 0
      51. End If
      52. Return
      53. Fahrrunter:
      54. Status = 0
      55. If Obenno = 0 And Untenno = 1 Then
      56. Do
      57. Rauf = 0
      58. Waitms 30
      59. Runter = 1
      60. Loop Until Untenno = 0 And Obenno = 1
      61. End If
      62. Return
      63. Fahrrunter_start:
      64. If Obenno = 1 And Untenno = 1 Then
      65. Do
      66. Rauf = 0
      67. Waitms 30
      68. Runter = 1
      69. Loop Until Untenno = 0 And Obenno = 1
      70. End If
      71. Return
      Alles anzeigen
      Dieser funktioniert super und alles macht auch das was es soll.

      Ich wurde aber überzeugt, das zum Ende hin der Hubvorgang langsamer wird, was auch das abrupte Stoppen beseitigt und es einfach viel eleganter aussieht.


      So jetzt weis man zumindest worum es geht.

      Nur wie steuer ich den Motor mit der H-Brücke bzw. mithilfe der Näherungssensoren bzw. Lichtschranke im Code an?

      Ich bin nicht so gut in BASCOM und suche deswegen Entwicklungshilfe.

      Zudem die Frage klären, ob Lichtschranke am Ritzel und Zähne zählen oder Näherungssensoren vor den Endschaltern.

      Ich eröffne diesen Thread weil es schon Anmerkungen gab, dieses Thema besser extern zu klären.

      Ich danke euch allen für die Hilfe und für jede weitere :)

      mfG

      D.I.
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von MadMax ()

    • MadMax schrieb:

      Dazu habe ich eben eine H-Brücke gekauft mit dem L298 Modul.
      Ich hoffe doch nicht, die wäre zu schwach. Ich glaub' du hast dich verschrieben, hast ja eine andere, stärkere erwähnt (im anderen thread) zu kaufen.

      MadMax schrieb:

      In meinem Fundos habe ich gerade noch eine Gabellichtschranke (vermutlich) gefunden.




      (An der Seite steht: P806 8 F)


      Leider finde ich dazu kein Datenblatt, aber vielleicht kennt einer von euch das Bauteil.
      Stehen oben Symbole drauf?

      MadMax schrieb:

      Zudem die Frage klären, ob Lichtschranke am Ritzel und Zähne zählen oder Näherungssensoren vor den Endschaltern.
      Wenn du Zähne zählen kannst, wäre die Motorüberwachung bei Verkanten/Überlast schneller zu erkennen.
      Raum für Notizen

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

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

      MadMax schrieb:

      Dazu habe ich eben eine H-Brücke gekauft mit dem L298 Modul.
      Ich hoffe doch nicht, die wäre zu schwach. Ich glaub' du hast dich verschrieben, hast ja eine andere, stärkere erwähnt (im anderen thread) zu kaufen.

      MadMax schrieb:

      In meinem Fundos habe ich gerade noch eine Gabellichtschranke (vermutlich) gefunden.




      (An der Seite steht: P806 8 F)


      Leider finde ich dazu kein Datenblatt, aber vielleicht kennt einer von euch das Bauteil.
      Stehen oben Symbole drauf?

      MadMax schrieb:

      Zudem die Frage klären, ob Lichtschranke am Ritzel und Zähne zählen oder Näherungssensoren vor den Endschaltern.
      Wenn du Zähne zählen kannst, wäre die Motorüberwachung bei Verkanten/Überlast schneller zu erkennen.
      Ja du hast Recht, ich habe das gerade geändert.

      Symbole... mom:

      Oben drauf:

      An der Kerbe steht 0,5 und gegenüberliegend ein Dioden Zeichen. (Bestimmt die IR/LED gemeint...)
      Unten drunter steht auch wieder 0,5.

      Das Herstellersymbol sieht aus wie ein S.

      Leider sind die rausgeführten Drähte alle gleich lang. Anode und Kathode nicht zu erkennen...
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • Bei der Gabellichtschranke könntest du Probleme mit Fremdlichteinfluss bekommen.
      Beim Initiator muß der Abstand relativ immer genau sein.
      Am einfachsten würde es über die Zeit gehen. Eine Fahrt dauert z.b. 4 Sekunden. Bei 3 Sekunden dann auf halbe Geschwindigkeit und bei 3,5 Sekunden noch langsamer.
      Du könntest die Position des Fernsehers mit einem Sharp Distanzsensor messen.
      Und du könntest eine Gray Code Scheibe auf das Ritzel kleben und mit CNY70 Reflexkopplern auswerten.
      Screenshot_2017-04-02-17-05-31.png
    • MadMax schrieb:

      An der Kerbe steht 0,5 und gegenüberliegend ein Dioden Zeichen.
      Ist doch schon was, du weißt, an welcher Seite die Diode ist. Vermutlich (keine Gewähr, wenn's raucht!) ist die Anschlußbelegung wie bei anderen auch, also bei einem Händler nach ähnlichen Bildchen gucken und im Datenblatt dazu die Pinbelegung entnehmen. Auch für die Diodenspannung würde ich von bekannten LS den Wert nehmen und mit 10-15 mA betreiben. Beim Empfängertransistor mal mit 1k pullup an 5V probieren und mit Voltmeter schauen, ob brauchbare Pegel entstehen. Einfach bisschen probieren...
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Zeiten:

      Rauf fahren dauert 5,9 Sekunden
      Runter fahren (Schwerkraft sei Dank) dauert 5,2 Sekunden.

      Armin, das ist eine gute Idee, aber aus finanziellen Gründen (OK, die scheibe kann ich auch ausdrucken etc.), wollte ich jetzt die Vorhandenen Materialien nehmen.
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • tschoeatsch schrieb:

      MadMax schrieb:

      An der Kerbe steht 0,5 und gegenüberliegend ein Dioden Zeichen.
      Ist doch schon was, du weißt, an welcher Seite die Diode ist. Vermutlich (keine Gewähr, wenn's raucht!) ist die Anschlußbelegung wie bei anderen auch, also bei einem Händler nach ähnlichen Bildchen gucken und im Datenblatt dazu die Pinbelegung entnehmen. Auch für die Diodenspannung würde ich von bekannten LS den Wert nehmen und mit 10-15 mA betreiben. Beim Empfängertransistor mal mit 1k pullup an 5V probieren und mit Voltmeter schauen, ob brauchbare Pegel entstehen. Einfach bisschen probieren...
      5 Versuche hätte ich, da 5 vorhanden :rolleyes:

      Könnte eine KSQ davor hängen und hoffen das ich den nicht überstrome.
      Durch messen dann auf Widerstand umsteigen wenn ich die Spannung und die Stromstärke kenne.
      Ich weis jetzt nur nicht ob Fotosensitiver Transistor oder eine Photodiode/widerstand.... sieht aber so aus wie eine Transe.

      Das ist ja nicht das Problem wie du selbst schreibst, ist raus zu finden. (Hoffe ich)

      Im Code werde ich aber vermutlich, egal welche Lösung nen Timer brauchen und nochmal einen Timer für PWM.

      Wie programmiere ich die Rampe zum ende hin?

      PS: @tschoeatsch, alles in dem Projekt sind Sachen von der Arbeit, welche die Kunden weg schmeißen wollten, bzw vom Flohmarkt.
      Das Modul ist jetzt das einzige was ich kaufen musste. Verwende sonst alles wieder und könnte, wenn ich alles verkaufen wollte, euren BASAR hier füllen :thumbup:
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • MadMax schrieb:

      Entweder ein paar cm vor den Endschaltern damit der Motor über PWM langsamer dem Ende hin zu fährt, oder wie auf dem letzten Bild zu sehen an den drei Muttern anbringen, das dieser die zählt, bzw über die Lichtschranke am Ritzel.
      Die Näherungssensoren würde ich direkt vor den Endschaltern anbringen, und zwar deswegen, weil du ja ein Seilzug benutzt der sich auch ausdehnen kann. Wenn dieser Fall eintritt stimmen dann deine am Ritzel (Muttern) gemessenen Werte nicht mehr mit der eigentlichen Position überein.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Du könntest auch eine Kunstoffscheibe mit einer Gewindestange mit dem Ritzel verbinden. Auf der Kunstoffscheibe am Rand Schraubenköpfe in einem gewissen Abstand anbringen und mit Initiator auswerten.
      Klar hat der CNY auch Fremdlichteinfluss.
      Aber wenn er direkt vor der Gray Code Scheibe sitzt und nur Ja/Nein entscheiden muss sollte es gehen.
    • MadMax schrieb:

      Im Code werde ich aber vermutlich, egal welche Lösung nen Timer brauchen und nochmal einen Timer für PWM.
      Ein timer für PWM, ja, einen weiteren für den Motorschutz, Wo sich der Aufzug gerade befindet könnte das Hauptprogramm zählen.

      MadMax schrieb:

      Wie programmiere ich die Rampe zum ende hin?
      Durch das Zählen im Hauptprogramm, weiß man, wielange (Zählschritte) es zum Ende ist und kann beim Weiterzählen in Schritten die PWM verringern, sodass am Ende nur noch eine ganz kleine Drehzahl übrig bleibt, die dann abgeschaltet wird. (Vorschlag!)
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ich könnte den Sensor am Schlitten befestigen und mit zwei Eisen Elementen die Positionen vor den Endschaltern befestigen.
      Spart auch ein bisschen Strom da nur einer benötigt wird, allerdings ist so, durch die mittlere Platzierung der Weg bis zum Ende hin länger als direkt davor.

      Eine Frage, trotz PWM, wird der Motor bei langsamer Fahrt nicht viel mehr Strom ziehen?!

      Ich hoffe mit meinem 5A NT von Meanwell bekomme ich die Last gestemmt...
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • Bezüglich mit Relais zu arbeiten und nur eine gesteuerte Spannung mit PWM zu benutzen, von dir und den anderen?!

      Ja habe ich. :) Die Idee ist kostengünstig, nur zu blöd das ich da schon die Bestellung für die H-Brücke raus geschickt hatte....
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • Motorsteuerung mittels zwei 2P Wechsler Relais, einen BUZ oder BT Transistor.
      Das ist wie gesagt eine sehr einfache, kostengünstige Lösung für eine "H-Brücke"

      Ich nutze jetzt nur das Modul.
      Ein Relais kann schneller verschleißen als einen korrekt betriebenen FET/Transistor.
      (Nur meine eig. Meinung)

      Und wie gesagt da war die Bestellung schon draußen.

      PS: am liebsten würde ich ja gerne den Strom überwachen, nur dafür habe ich nichts...
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • Es gibt theoretisch 4 Sensoren.
      Zwei Endlagen, zwei kurz davor.

      Ich starte den PWM im Code und einen Timer. (Vlt über einen Interrupt Eingang?!)

      Beim Anlauf oben so wie unten gebe ich nur high an die H-Brücke raus.
      Durch Positionserkennung wird vorm Ende die Geschwindigkeit verringert.
      Bevor das passiert muss ich ohne Auswertung der Position wissen wie die Zeiten vor dem Ende sind.
      In der Rampe verringere ich, anhand der festgestellten Zeit die PWM Wert so lange bis die maximal niedrig Geschwindigkeit erreicht ist und der Vorgang wird abgeschlossen durch auslösen des Endschalters.
      Das unten sowie oden.

      @djmsc, ich denke ich werde deine Logik dafür benutzen können, nur muss ich das alles implementieren und den Syntax dafür richtig gestalten.
      Ich hoffe du oder jemand anders kann mir dabei helfen.

      Ich gehe jetzt mal völlig ohne Überwachung aus, sprich zählen usw.

      Ist die Logik bis da hin richtig?!
      Studieren kann jeder, nur ob er dann weiß was er macht, sieht man dann erst wenn die Praxis gefordert wird :P
    • MadMax schrieb:

      Beim Anlauf oben so wie unten gebe ich nur high an die H-Brücke raus.
      Da würde ich die PWM auch "hochfahren" und nicht gleich mit voller Power loslegen.

      Wenn du eh eine Positionserkennung vor den Endschaltern hast musst du die Zeit nicht extra berechnen.
      Es reicht wenn du ab der Position vor dem Endschalter die PWM runterregelst bis auf Wert X.
      Der AVR braucht dafür auch nur wenige Millisekunden.
      Und mit erreichen der Endschalter regelst du dann komplett auf 0 runter.


      MadMax schrieb:

      Ich hoffe du oder jemand anders kann mir dabei helfen.
      Na klar doch dafür sind wir doch hier :)
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.