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...