Motortreiber verursacht Probleme (?)

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

  • Motortreiber verursacht Probleme (?)

    Hallo liebes Forum !

    Ich habe ein kleines Problem , bei einem meiner Projekte.
    Ich lese über den TIMER1 ein PPM-Summensignal ein, verarbeite dieses und gebe es als PWM-Signal wieder aus.
    Eigentlich klappt das soweit ganz gut. Jetzt möchte ich mit dem verarbeitetem Signal einen Motor ansteuern.
    Auch das klappt - als einzelner Programmteil - gut. Der Motor wird über einen L293B Baustein angesteuert. Der
    µC legt dabei (später) über 2 Ports die Drehrichtung fest und über einen Port, der das PWM-Signal ausgibt, die
    Geschwindigkeit. Soweit so gut.

    Sobald ich aber beide Programmteile zusammenführe, klappt das PPM-Signal-Auslesen nicht mehr, bzw nur noch
    mit abartigen Fehlimpulsen. Ich vermute, dass dies an dem "laufenden" Motor liegt..? Zur Umgebung :

    Der µC steckt während dessen die ganze Zeit im (umgebauten) Pollin-Board. Der Motortreiber ist auf einem Steck-
    brett, ebenso die Impulsaufbereitung und die Spannungsversorgung des Motors. Die Spannungsversorgung kommt
    von extern über ein Steuergerät, welches die Fahrspannung mit den überlagerten PPM-Impulsen per Zuleitung an
    das Steckbrett abgibt. Die Verbindung zum µC (Impuls-Eingang an INT0 - PD2, sowie Ausgang PD5 für PWM) ist
    mit demSteckbrettadapter von Pollin via 40-Pol-Flachbandkabel hergestellt, die GND's sind verbunden.

    Der Motor hat einen Entstörkondensator parallel zu den (Bürsten) Kontakten , sowie in jeder Zuleitung eine Drossel
    von 3,9µH und 900mA. Trotzdem scheint er den µC total raus zu bringen...

    Apropos: der µC - ein ATtiny 2313 - läuft auf 4MHz mit internem RC-Oszillator. Enstört (?) ist er über die Bauteile,
    die auf dem Pollinboard zur Verfügung stehen (?) - also mit dem üblichen Angst-C von 0.1NF und der Standardbe-
    schaltung...

    Hat jemand eine Idee, was ich anders oder bessser machen kann ? Oder ob das überhaupt umsetzbar ist. Stören
    die Motoren generell so heftig ? Oder kann ich die Fehlimpulse per Software erkennen und eleminieren ?
    Sollte man generell alle vorhandenen (nicht genutzten) Ports des µC "definieren" ? z.B. als Eingänge und dann die
    Pullups intern aktivieren ?

    Währe über ein wenig Hilfe sehr dankbar. a_58_b54cfdb4

    Gruss Billy !
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bascom-Billy ()

  • Bascom-Billy schrieb:

    Hat jemand eine Idee, was ich anders oder bessser machen kann ?

    zur Lösung von eventuellen Programmproblemen, ist es sinnvoll, das Programm anzuhängen.
    Elektrische Probleme erkennen erfahrene Helfer am Layout bzw. der fertigen Platine. Es empfiehlt sich, in dem Fall ein entsprechendes Bild anzuhängen.

    Was genau ist für dich ein PPM Summensignal?


    Bascom-Billy schrieb:

    Oder ob das überhaupt umsetzbar ist. Stören
    die Motoren generell so heftig ?
    Das Thema ist umsetzbar und auch schon oft so gemacht worden.

    Bascom-Billy schrieb:

    Oder kann ich die Fehlimpulse per Software erkennen und eleminieren ?
    Es ist besser, die Ursachen statt die Symptome zu bearbeiten.

    Bascom-Billy schrieb:

    Sollte man generell alle vorhandenen (nicht genutzten) Ports des µC "definieren" ? z.B. als Eingänge und dann die
    Pullups intern aktivieren ?
    Nein, nicht generell, aber zur Vermeidung von unnötigen Stromverbrauch macht man das gerne.
  • Michael schrieb:

    Elektrische Probleme erkennen erfahrene Helfer am Layout bzw. der fertigen Platine. Es empfiehlt sich, in dem Fall ein entsprechendes Bild anzuhängen.

    Was genau ist für dich ein PPM Summensignal?
    Es gibt kein Layout - steht ja im Text ! "Pollinboard" und "Steckbrett".

    Ein PPM-Summensignal ist standardmässig eine Folge von mehreren aufeinanderfolgenden Impulsen von 1-2ms Dauer,
    gefolgt von einer langen Paulspause (zur Synchronisation) - in meinem Fall 6-Impulse. PPM= Pulse-Pause-Modulation.

    Erkennung der Impulse Standard-Programm aus dem Buch "Mkrocontroller programmieren in Bascom-Basic", bzw. von RN-Wissen.de
    (leicht geändert) den Programmteil für die Motorsteuerung habe ich weggelassen , da ich zum Testen, den Motor manuell steuere :

    BASCOM-Quellcode

    1. $regfile = "attiny2313a.dat"
    2. $crystal = 4000000
    3. $hwstack = 40
    4. $swstack = 16
    5. $framesize = 32
    6. $baud = 9600
    7. Dim Empf(6) As Word
    8. Dim Channel As Byte
    9. Const Timer1reload = 1050
    10. Config Timer1 = Timer , Prescale = 8
    11. Config Int0 = Rising 'Interrupt0 an Pin6 (PD2)
    12. Config Pind.2 = Input
    13. Portd.2 = 1
    14. Load Timer1 , Timer1reload
    15. On Int0 Measure
    16. On Ovf1 Timer1_isr
    17. Enable Timer1
    18. Enable Int0
    19. Enable Interrupts
    20. Start Timer1
    21. Do
    22. Print Empf(1) ; " CH1" ;
    23. Print Empf(2) ; " CH2" ;
    24. Print Empf(3) ; " CH3" ;
    25. Print Empf(4) ; " CH4" ;
    26. Print Empf(5) ; " CH5" ;
    27. Print Empf(6) ; " CH6" ;
    28. Print " "
    29. Loop
    30. Measure:
    31. If Channel > 0 And Channel < 7 Then
    32. Empf(channel) = Timer1 - 64486
    33. End If
    34. Timer1 = 64486 'preload für 4ms
    35. Incr Channel
    36. Return
    37. Timer1_isr:
    38. Load Timer1 , Timer1reload
    39. Channel = 0
    40. Return
    Alles anzeigen


    Fakt ist : lasse ich den Motor mitlaufen (einfach nur manuell) kommen falsche Impulse -teilweise Werte, die mit dem Programm gar nicht ausgelesen werden.
    Daher vermute ich, dass der µC komplett aussteigt !? Wie ich das feststellen kann, weiss ich nicht...
    Die Spannung des Motors liegt bei 15V max. , wenn der L293B voll durchgesteuert ist. Manuell legt man dafür den Eingang 1 (Enable) auf high.
    Der L293b bekommt die Motorspannung getrennt von der Logic-Spannung zugeführt. Die Logik-Spannung kommt NICHT vom µC , sondern wird mit
    Spannungsregler (+Beschaltung) aus der Motorspannung gewonnen. Es sind nur die GND's verbunden - der µC hängt also nur mit GND in der Schaltung,
    bzw. mit dem Eingang INT0 und (später mit den Ausgängen für PWM und Motorrichtung (momentan nicht angeschlossen).

    Gruss Billy
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !
  • Bascom-Billy schrieb:

    Es gibt kein Layout - steht ja im Text ! "Pollinboard" und "Steckbrett".
    Du schreibst ja weiter unten, dass GND verbunden ist. Am Foto der Schaltung hätte man vielleicht sehen können, on Motorstrom darüber fließt.

    Bascom-Billy schrieb:

    Ein PPM-Summensignal ist standardmässig eine Folge von mehreren aufeinanderfolgenden Impulsen von 1-2ms Dauer,
    gefolgt von einer langen Paulspause (zur Synchronisation) - in meinem Fall 6-Impulse. PPM= Pulse-Pause-Modulation.
    Warum sprichst du nicht gleich von einem (Modell-)Fernsteuersignal?

    Bascom-Billy schrieb:

    den Programmteil für die Motorsteuerung habe ich weggelassen
    da kann ich dann auch leider nichts zu sagen.

    Bascom-Billy schrieb:

    Fakt ist : lasse ich den Motor mitlaufen (einfach nur manuell) kommen falsche Impulse -teilweise Werte, die mit dem Programm gar nicht ausgelesen werden.
    Motoren entstört? Schutzdioden verbaut? Welche? Layout?

    Bascom-Billy schrieb:

    Daher vermute ich, dass der µC komplett aussteigt !? Wie ich das feststellen kann, weiss ich nicht...
    Du lässt am Anfang des Programms eine LED für eine Sekunde aufleuchten und machst sie wieder aus.
    Sobald die LED leuchtet, hatte der AVR einen Reset.
  • Michael schrieb:

    Bascom-Billy schrieb:

    Es gibt kein Layout - steht ja im Text ! "Pollinboard" und "Steckbrett".
    Du schreibst ja weiter unten, dass GND verbunden ist. Am Foto der Schaltung hätte man vielleicht sehen können, on Motorstrom darüber fließt.

    ---Ich müsste das scannen und evtl. eben "zusammen-painten" - dauert etwas !

    Bascom-Billy schrieb:

    Ein PPM-Summensignal ist standardmässig eine Folge von mehreren aufeinanderfolgenden Impulsen von 1-2ms Dauer,
    gefolgt von einer langen Paulspause (zur Synchronisation) - in meinem Fall 6-Impulse. PPM= Pulse-Pause-Modulation.
    Warum sprichst du nicht gleich von einem (Modell-)Fernsteuersignal?

    --- ich kenne das nur aus meiner Literatur als "PPM-Signal" - Fernsteuerungen im Sinne von RC (?)

    Bascom-Billy schrieb:

    Fakt ist : lasse ich den Motor mitlaufen (einfach nur manuell) kommen falsche Impulse -teilweise Werte, die mit dem Programm gar nicht ausgelesen werden.
    Motoren entstört? Schutzdioden verbaut? Welche? Layout?
    Ja : siehe mein Text ---> C über den Pol-Anschlüssen und je eine Drossel, wie beschrieben !

    ---Layout kann ich nur von RN-Wissen zeigen, so habe ich es übernommen (ohne Motor2, links)
    ---inkl. der Schottky-Dioden , momentan BAT48 ! Abermals (s.Text) kein Layout, sondern Steckbrett.



    [IMG:http://rn-wissen.de/wiki/images/1/1d/L293B_Schaltplan.png]


    (C) RN-Wissen.de

    Bascom-Billy schrieb:

    Daher vermute ich, dass der µC komplett aussteigt !? Wie ich das feststellen kann, weiss ich nicht...
    Du lässt am Anfang des Programms eine LED für eine Sekunde aufleuchten und machst sie wieder aus.Sobald die LED leuchtet, hatte der AVR einen Reset.


    ---Genial- manchmal sieht man den Wald vor Bäumen nicht...Danke !
    ---DAS gehe ich mal eben an...Rückmeldung folgt.


    Gruss Billy
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !
  • Hallo Michael - im Prinzip so -nur der 2313 steckt dabei im Pollin-Board, bekommt also noch 5V vom Board statt vom Impulsteil
    und ist standardmässig beschaltet (fehlt jetzt hier auf dem Bild) -der Rest im Steckbrett, wie beschrieben !

    [IMG:http://www.wir70er.de/files/AVR/Impuls.png]
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bascom-Billy ()

  • Bascom-Billy schrieb:

    -inkl. der Schottky-Dioden , momentan BAT48 ! Abermals (s.Text) kein Layout, sondern Steckbrett.
    BAT48, die finde ich etwas schwach für den Einsatzzweck.

    Der Spannungsregler des AVRs braucht einen eigenen Kondensator am Eingang. Ein dicker Kondensator hinter dem Gleichrichter fehlt und GND und Versorgung müssen sternförmig von dort ab gehen.
    Deine Schaltung ist nicht wirklich nützlich, es fehlen zu viele Werte an den Bauteilen, da kann ich keinen Sinn erkennen.
    Vielleicht kannst du noch erklären, wozu die Beschaltung um den Spannungsregler herum dient.
  • Michael schrieb:

    Bascom-Billy schrieb:

    -inkl. der Schottky-Dioden , momentan BAT48 ! Abermals (s.Text) kein Layout, sondern Steckbrett.
    BAT48, die finde ich etwas schwach für den Einsatzzweck.
    Der Spannungsregler des AVRs braucht einen eigenen Kondensator am Eingang. Ein dicker Kondensator hinter dem Gleichrichter fehlt und GND und Versorgung müssen sternförmig von dort ab gehen.
    Deine Schaltung ist nicht wirklich nützlich, es fehlen zu viele Werte an den Bauteilen, da kann ich keinen Sinn erkennen.
    Vielleicht kannst du noch erklären, wozu die Beschaltung um den Spannungsregler herum dient.
    Die BAT48 habe ich nun gegen 1N5918 getauscht.
    Leider habe ich keinen anderen digitalen Schaltplan.
    Anbei Bauteilwerte :

    R1,R3 = 1K
    R2 = 2,2K
    R4 = 47K

    C1 33µ
    C2,C3 = 0,1µF/tantal

    D1 = Z-Diode 16V
    D2 = 1N4148

    T1 = BC547

    IC1 µA7805

    Der AVR steckt im Pollin-Baord - das überliest du scheinbar dauernd !? Dort ist er ordnungsgemäss beschaltet/spannungsversorgt !
    Später soll er allerdings auf einer Platine zusammen mit dem Impulsteil und dem Motortreiber wohnen...
    Die Schaltung siebt die Impulse aus der Spannung, die am Gleichrichter anliegt aus ! An D2 (Leitung zu INT0) stehen dann die Impulse
    mit max. 5V zur Verfügung. S. Bild/obere Impulsfolge). Ausserdem gibt Sie die 15V für den Motor weiter an den L293B.

    [IMG:http://www.wir70er.de/files/AVR/Imp.bmp]
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bascom-Billy ()

  • Bascom-Billy schrieb:

    Der AVR steckt im Pollin-Baord - das überliest du scheinbar dauernd !?
    Nein, aber es ist deine Aufgabe, die korrekte Beschaltung zu prüfen.

    Bascom-Billy schrieb:

    Dort ist er ordnungsgemäss beschaltet/spannungsversorgt !
    Bist du sicher?

    Bascom-Billy schrieb:

    Die Schaltung siebt die Impulse aus der Spannung, die am Gleichrichter anliegt aus ! An D2 (Leitung zu INT0) stehen dann die Impulse
    mit max. 5V zur Verfügung. S. Bild/obere Impulsfolge)
    Das kann ich jetzt nicht nachvollziehen.
    Die Schaltung ergibt keinen Sinn.
  • Michael schrieb:

    Bascom-Billy schrieb:

    Die Schaltung siebt die Impulse aus der Spannung, die am Gleichrichter anliegt aus ! An D2 (Leitung zu INT0) stehen dann die Impulse
    mit max. 5V zur Verfügung. S. Bild/obere Impulsfolge)
    Das kann ich jetzt nicht nachvollziehen.Die Schaltung ergibt keinen Sinn.
    Dann erklär das mal bitte den 3 unterschiedlichen Verfassern der 3 Bücher , wo Sie drin abgedruckt Ist. Ist auch nicht meine Aufgabe, das nach zu weisen.
    es funktioniert - siehe Oszibild und

    Buch 1 : Dr. Chistoffer - Franzis Verlag , ISBN 3-77-23-1831-2, Seiten 90 ff.
    Buch 2 :Köhler, Weltbild ISBN 3-89350-536-9 , Seiten 301 ff.
    Buch 3 : Bernd Raschdorf (online)

    Das Bild mit den Impulsen , die auf meinem USB-Oszi dargestellt sind, git exakt die Spannungsverläufe am Pin INT0 des µC wieder. So wie zu sehen, stehen
    diese dort an !
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !
  • Michael schrieb:

    Bascom-Billy schrieb:

    gemessene Werte
    der Impulse geraten aber total durcheinander ...
    weil Programm und zu erwartende Impulse nicht zueinander passen (z.B. rising Int0)
    Ist ja Quatsch ! Ohne laufenden Motor messe ich ja die Impulse, korrekt. Werte stimmen, sind immer konstant.

    Wie die in den µC kommen ?? Über die Leitung die zu INT0 führt von der Diode D2 - dort stehen die Impulse lt. Oszi Bild
    genau so an - das sieht man aber am Schaltplan schon.

    gruss Billy !
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !
  • Michael schrieb:

    Ich versuche dir zu helfen und habe eine Frage gestellt. Dazu hatte ich noch einen Hinweis gegeben, dass das Programm so keinen Sinn ergibt.
    Ich helfe gerne, aber anstänkern lassen muss ich mich nicht.
    Schönen Abend noch.
    Vergisses - so was brauch ich hier nicht.
    Schönen Dank !

    Wenn Du keinen Bock hast das zu verstehen, dann eben nicht.
    Krieg ich auch so hin. Bin nicht auf so "Arrogantos" angewiesen.

    Auf nimmer Wiedersehen !
    10 GOTO 20: PRINT "HALLO"
    20 GOTO 10

    Geht nicht...dämliche Computer !
  • Bascom-Billy schrieb:

    Vergisses - so was brauch ich hier nicht.
    Schönen Dank !
    Äh wer sucht denn hier die Hilfe???
    Du oder @Michael

    Es wäre auch für andere schön gewesen mal ein Bild von deinem Aufbau zu sehen - aber das kam ja leider nicht.
    Denn Steckbretter sind nun mal nicht das Optimum und haben sehr oft Schwachstellen die man gern übersieht.
    Das komplette nicht funtionierende Programm wäre auch besser als nur Teile davon oder eine gekürzte Version.
    Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
  • Äh, darf ich mal zusammen stellen?
    Der Avr wird von einer separaten Versorgung (auf dem Pollinboard) versorgt.
    Der Motor wird von einer Versorgung gespeist, auf dem das PPM Signal drauf moduliert ist, das über Spannungsteiler auf den intx-Eingang vom Kontroller geht.
    Wenn das so richtig ist, dann ersetze doch mal den Motor durch eine Glühlampe. Geht das wie gewünscht, mal einen anderen Motor verwenden. Wenn das mit Motoren nie geht, dann die Entstörung genauer untersuchen. Gehäuse des Motors an Gnd zB. Oder, wie schon erwähnt, den Gnd sternförmig anlegen, damit jedes 'Objekt' eine eigene Gnd-Leitung hat, über die kein anderes Objekt angeschlossen ist.
    Raum für Notizen

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

    -----------------------------------------------------------------------------------------------------
  • Hallo Billy,

    grundsätzlich finde ich @Michaels Nachfragen angebracht. Bei so einem Fehler kann man sich nur herantasten.
    Als erstes sicherstellen das HW grob funktioniert. Ja auch wenn mal eine Frage nervt. Es sind doch Welten ob ich HW in den Finger habe oder nur eine grobe Beschreibung bekomme.
    Ich stelle erst mal in Raum HW ist grob okay.
    Nun erlaube ich mir mal zu erklären wie ich an Fehlersuche gehe.
    Das Wichtigste ist ein Terminalprogramm Externes wie z.B. „Hterm oder Terminal v1.9b kann ich empfehlen.
    (Voraussetzung ist immer ich reserviere Uart- Pin des µC erst mal für Tests)
    So nun kann ich an jeder beliebigen stelle im Programm eine Abfrage(Print) setzen.
    Egal ob nur Print “hier bin ich gerade“ oder sehr wichtig bei Berechnungen, um zu Wissen, was wann in einer Variable steht.
    Mal so in deinem Code:

    Quellcode

    1. $regfile = "attiny2313a.dat"
    2. $crystal = 4000000
    3. $hwstack = 40
    4. $swstack = 16
    5. $framesize = 32
    6. $baud = 9600
    7. 'µC auslesen kommt immer mit Neustart/Reset
    8. Print
    9. Print "erstallt am : " ; Version(1)
    10. Print "Version Code : " ; Version(3)
    11. Print
    12. Wait 1
    13. Dim Empf(6) As Word
    14. Dim Channel As Byte
    15. Const Timer1reload = 1050
    16. Config Timer1 = Timer , Prescale = 8
    17. Config Int0 = Rising 'Interrupt0 an Pin6 (PD2)
    18. Config Pind.2 = Input
    19. Portd.2 = 1
    20. Load Timer1 , Timer1reload
    21. On Int0 Measure
    22. On Ovf1 Timer1_isr
    23. Enable Timer1
    24. Enable Int0
    25. Enable Interrupts
    26. Start Timer1
    27. 'hier lässt du dich das Ergebnis anzeigen
    28. Do
    29. 'sehen wie sich Variable hochzählt
    30. Print "Channel = " ; Channel
    31. Wait 1 'nur für Test
    32. If Channel > 0 And Channel < 7 Then
    33. Empf(channel) = Timer1 - 64486
    34. End If
    35. Print Empf(1) ; " CH1" ;
    36. Print Empf(2) ; " CH2" ;
    37. Print Empf(3) ; " CH3" ;
    38. Print Empf(4) ; " CH4" ;
    39. Print Empf(5) ; " CH5" ;
    40. Print Empf(6) ; " CH6" ;
    41. Print " "
    42. Loop
    43. Measure:
    44. 'muss Timer1 unbedingt hier stehen?
    45. Timer1 = 64486 'preload für 4ms
    46. Incr Channel
    47. Return
    48. Timer1_isr:
    49. Print "Timer1 = " ; Timer1
    50. Load Timer1 , Timer1reload
    51. Channel = 0
    52. Return
    Alles anzeigen
    Vermute Störungen in Int0. Merke Int(x) so schmal wie möglich halten.
    Möchte Dich nicht belehren aber Interrupts sollten „wohl überlegt“ gestartet werden. Erstrecht wenn Auslöser Extern kommt und dann noch Int0. Into0 kommt in der Hierarchie gleich nach Reset.
    Kannst/Sollst auch an kritische Stellen für Fehlersuche ein Wait einfügen. Ist dann sogar in der Interrupt erlaubt(macht Sinn wenn kurze Störimpulse oder prellen vermutet werden).
    Somit ist dies ein zuverlässiger SW-HW Abgleich. Bekommt eine Variable „Misst“ wo auch immer her ist Ergebnis auch „Misst“.
    Na gut es gibt schlaue Programmierer die bauen eine Aufwendige „Misstkorrektur dazwischen“ und Ergebnis stimmt dann auch.

    Nicht vergessen nach erfolgreichem Test alle überflüssige Prints löschen/deaktivieren. Verballern schon einiges an Programmablaufzeit.

    Mit freundlichen Grüßen

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

  • @Fredred: Lass es gut sein. Die Formulierungen von Billy legen nahe, dass er sich nicht (mehr) hier helfen lassen möchte. Er hatte sich möglicherweise unter einem Forum eher so etwas wie eine Hersteller-Hotline vorgestellt und hatte nicht bedacht, dass hier im Forum alle freiwillig sind und man sich freuen kann, wenn andere sich in ein Problem einlesen und eindenken.Wie Du auch schreibst, muss man sich dabei oft auch an den Kern eines Problems herantasten. Offenbar möchte Billy sich nun anders behelfen.

    Bascom-Billy schrieb:

    Auf nimmer Wiedersehen !
    Damit können wir diesen Thread schließen.
    Stefan