Forum: Mikrocontroller und Digitale Elektronik AVR mit NRF24L01+ und L293D macht Probleme


von Stefan K. (stefan_ok)


Lesenswert?

Hallo, endlich bin ich neu hier ;)


Ich (Anfänger) wäre dankbar für jeden Tipp woran folgendes liegen kann:

Meine Schaltung für ein RC-Auto (auf Lochrasterplatine) besteht aus 2 
parallel geschalteten L293D-Motortreibern die 2 DC-Motoren steuern. Das 
tuen sie auch soweit zufriedenstellend, jede Menge Lötzinn an den GNDs 
und ein Wärmeableiter obendrauf lassen die beiden gerademal Handwarm 
werden, und alles dreht sich auch so wie es soll. Nachdem was ich so 
gemessen habe hätte auch ein L293D gerade so reichen müssen, aber dachte 
mir "Doppelt hält besser".

Ein Arduino-Pro-Mini-Klon steuert das ganze, und macht soweit auch keine 
Probleme.

Ein NRF24L01+ Modul mit integrierter Antenne hängt am SPI-Bus und wird 
über einen nur für ihn zuständigen AMS111 3.3V Spannungsregler versorgt, 
dieser hat "vorne" und "hinten" je einen 22uF-Elko (sonst nix) und hängt 
letztendlich an 4xAA 1.5V Batterien (wie auch der AVR und die H-Bridge).
Direkt neben dem Sockel des NRF24 steckt nochmal ein 0,1uF Elko.
Der "Pro-Mini" (ATmega328P-PU @ 8 MHz, 3.3V) nutzt seinen onBoard 
Spannungsregler, die Motortreiber werden direkt mit den ca. 6V der 
Batterien gespeist.

Das ganze funktioniert soweit auch - Programm empfängt Funksignale, 
Programm steuert Motor, Auto bewegt sich...

Ich habe eine Art Programmiermodus: vom PC schicke ich über ein Terminal 
Codes an einen Arduino, dieser schickt sie per NRF24 an das Auto, 
welches ihn an ein array anhängt. Damit schicke ich eine Art 
(Pseudo-)Maschinencode an das Auto, den es ausführen kann.
z.B.:
004 (fahre vorwärts) , 255 (geschwindigkeit), 10 (*200ms Dauer)
001 (schlage links ein)
008 (fahre rückwärts), 255 (geschwindigkeit), 10 (*200ms Dauer)
003 (Lenkung loslassen = Nullstellung)
255 (Quit)

Das Auto fährt also 2 Sekunden Vollgas vorraus, schlägt links ein und 
fährt 2 Sekunden mit eingeschlagener Lenkung vollgas zurück und lässt 
die Lenkung dann wieder zurückschnallen und bleibt stehen.

Aber jetzt kommt der Punkt wo mir einfach Elektrotechnische Basics und 
Erfahrung fehlen:

Meistens kann ich das einmal machen, manchmal klappt es auch, dass ich 
dann nochmal ein paar Bytes Befehle anhänge, und er sie sogar ausführt, 
aber spätestens dann bricht die Funkverbindung ab und er nimmt keine 
Befehle mehr an.

Ich habe beim debugging an Serieller Schnittstelle festgestellt, dass 
der AVR nicht abgestürzt ist, sondern brav weiter den NRF24 abfragt, 
dieser aber entweder behauptet es wäre

a) kein Paket empfangen wurden
b) ein Paket voller Nullen empfangen wurde
c) ein Paket voller Einsen empfangen wurde
und manchmal auch
d) ein Paket mit irgendwelchem Inhalt
oder ganz gelegentlich auch
e) abwechselnd ein Paket (z.B. voller 14en) und dann ein z.B. voller 
63en
angekommen.

Meistens ist es allerdings b) ein Paket voller Nullen, allerdings stimmt 
nichts davon und tatsächlich gesendete Pakete werden nicht empfangen.

Sorry für die lange Einleitung, aber was kann das sein?

Ich habe verschiedene NRF-Module getestet, und generell funktionieren 
sie ja auch, an denen liegt es glaube ich nicht, eins habe ich auch mit 
integrierter PA und LNA, aber das Problem ist das gleiche, allerdings 
tendiert es mehr zu a) Nix empfangen.

Es tritt meistens auf, nachdem ein Motor lief, aber nicht unbedingt, und 
scheinbar auch nicht unbedingt sofort danach, aber mit Sicherheit sehr 
bald...
Manchmal nimmt er nach erfolgreichem Programmablauf noch 2,3 Bytes an, 
die ich schicke, und dann auf einmal nichts mehr - ohne dass erneut ein 
Motor lief.

Ich vermute allerdings dennoch, dass es irgendwas mit den Motoren und 
Spannungsspitzen zu tuen haben muss, weiss aber nicht wie ich das 
Problem aufspüren und lösen kann.

Also: Hinweise die zur Ergreifung des Übeltäters nützlich sein könnten 
bitte am örtlichen Terminal posten ;)

100nF-Keramik-Kondensatoren sind übrigens von jedem Motor-Pol zu GND, 
von den Logikspannungen der L293Ds zu GND und vor dem AVR-Modul zwischen 
der Eingangsspannung "RAW" und GND. Ausserdem am Motor selbst zwischen 
M+ und M-. Vor der Versorgungsspannung der Motortreiber geht nochmal ein 
100uF-Elko auf GND. Nur so der Komplettheit halber...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan Krause schrieb:
> Also: Hinweise die zur Ergreifung des Übeltäters nützlich sein könnten
> bitte am örtlichen Terminal posten ;)

 Alles 10 mal hintereinander ohne Motoren probieren. Wenns klappt,
 Motoren rausschmeissen, von Hand schieben. ;-)
 Im Ernst: wenns klappt, mit besserer Abschirmung versuchen, manchmal
 reicht schon ein Stück Alufolie.

von Stefan K. (stefan_ok)


Lesenswert?

Kennt ihr das Gefühl den Fehler gefunden zu haben, und man kann nur 
stöhnen wie dumm man war....

Fall ist gelöst, lag nicht am Motor, nicht an der Spannungsversorgung, 
nicht an Funkstörungen...

Wenn's wen interessiert: dumm programmiert, Array übergelaufen, weil 
Zeiger nicht zurückgesetzt. Ich nehme an, hinter dem Array lag im RAM 
Programmcode oder irgendetwas relevantes für den NRF-Chip, und das wurde 
einfach von meinem Motor-Befehls-Code überschrieben, deshalb macht der 
dann nur noch Müll.... Und deshalb trat es auch immer dann auf, wenn man 
vorher RUN gesagt hat es hin und her gefahren ist und dabei seinen 
Programmcounter ganz hochgezählt hat.

So kann ich dann ja beruhigt zu Bett gehen, und das morgen fixen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.