Hier noch die restlichen Bilder.
Hallo liebe Roboternetz community.
Ich habe folgendes Problem, wenn ich versuche die Motoren anzusteuern zucken sie nur kurz und der Mikrocontroller startet neu. Zumindest verlässt er die Endlosschleife arbeitet den Teil davor ab und geht wieder in die Endlosschleife. Das PWM Signal bleibt manchmal erhalten und manchmal verschwindet es, manchmal laufen sie auch problemlos aber eher selten. Das ganze wirkt sehr zufällig.
Der Aufbau meiner Schaltung sowie den Schaltplan der Mikrocontrollerplatine habe ich als Skizze angehängt da es schwer zu erklären ist.
Als ich den L7805 an meinem Labornetzteil betrieben habe und nur die Motorspannungsversorgung über die Batterie lief das ganze / läuft das ganze wunderbar. Masse war natürlich verbunden.
L7805 ist nach Datenblatt beschaltet.
Zur Hardware:
Motorcontroller ist ein RN2V2 Dualmotor
Foxboard G20 über I²C mit einem Atmega 8 verbunden.
Motoren sind folgende: http://www.conrad.de/ce/de/product/1...266-12-61-BFEC
Habe es auch schon mit drosselspulen in der Motorleitung versucht leider ohne Erfolg.
PWM Frequenz ist 2KHz habe es auch mit 15KHz versucht, selbes Phänomen.
Im Voraus vielen Dank für eure Hilfe.
Mit freundlichen Grüßen
Striker1985
Hier noch die restlichen Bilder.
...hast Du das Problem auch bei abgezogenem RS232/ISP ?
Die durch den Transistor geschaltete Reset-Leitung fällt mir als Kandidat auf...
Hallo Andree-HB,
Ich werde es heute Abend direkt testen, glaube aber das das Problem auch mit abgezogenem RS232 Kabel da war.
Was ich allerdings vergessen habe zu erwähnen ist das das ganze super funktioniert wenn ich am RN2V2 die Motoren abklemme und nur schaue ob ein PWM signal anliegt. Sobald ich die Motoren anschließe egal ob einen oder beide fängt das Problem an. Auch bleibt wie erwähnt während diesem "reset" das PWM Signal manchmal erhalten auch wenn die Motoren nicht drehen. Drücke ich aber den Reset Taster ist das signal direkt weg.
Mit freundlichen Grüßen
Striker1985
Hast du schon versucht die Reset Leitung mit einem 100nF Kerko zu entstören?
Du könntest auch noch versuchen den µC mit einem Elko zu puffern. Sollte das nicht funktionieren mit einer Diode den Hauptstromkreis (Motoren) vom µC Kreis zu trennen und den µC dann mit einem Elko stützen. Die Diode ist dafür da das die Motoren nicht den Pufferellko für den µC "leersaugen".
MfG Hannes
Ich gehe davon aus dass dein Akku voll ist?
Nam et ipsa scientia potestas est..
Ich habe generell in meiner main eine Blinkroutine - nach der Portdefinition und VOR jeglichen anderen Initialisierungen und VOR dem Erlauben von Interrupts. An der spezifischen Frequenz (ca. 0,1 sec) und der Anzahl der Blinkies kann ich eindeutig irgendwelche zufälligen Resets erkennen. Siehe Codebeispiel zwischen den "Ausrufungszeichen". Ich habe auch eine Testroutine die nur fallweise eingeklinkt wird und entsprechende Signalfolgen mit unterschiedlichen Blinkzeichen generiert, je nachdem, welcher Resetvektor gerade angesprungen wurde. Damit finde ich mich bei ähnlichen Fehlersuchen relativ schnell zurecht.
Code:// ============================================================================== = // === HAUPTProgramm =========================================================== = // Initialisierungen, LED1 kurzblinken als Signal für Programmstart, // Ausgabe des Identifizierungsstrings per USART // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int main(void) { // // Pins/Ports als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren // A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp DDRB = 0b00011111; // siehe aktuell oben oder Fortschritt/R2D2 PORTB = 0b00100000; // und Port/Pull Ups (1) aktivieren DDRC = 0b01110000; // PC3 ist ADC3, PC0 .. 6 , kein PC7-Pin bei m168 PORTC = 0b00000111; // Beachte für ADC: PC3 ist ADC-Eingang ##>> OHNE Pullup !! DDRD = 0b11110000; // -> siehe unter DDRB, sowie PD2,3 extInt PORTD = 0b00001111; // Pull Ups aktivieren // Encoder_1 = ExtINT0 = PortD2, Encoder_2 = PortD3 // Dadurch Initialisierung der Anschlüsse für miniD0 auf mega328: - - - - - - - - // /RESET,PC6 1 A A 28 PC5,(SCL), gLED // RxD,PD0 2 EU A 27 PC4,(SDA), rLED // TxD,PD1___3 EU E 26___PC3, ADC0=GP2D120 // SigMot1/ExtINT0,PD2 4 EU EU 25 PC2, SFH 5110, IN irDME 4 Rechts // SigMot2/ExtINT1,PD3 5 EU EU 24 PC1, SFH 5110, IN irDME 3 Links // _|-- 3,4 Guz, PD4___6 A EU 23___PC0, SFH 5110, IN irDME 1-2 Mitte // - - - - - - Belegung Pinne - - - - - - - - - // XTAL1 PB6___9 EU 20___VCC // XTAL2 PB7 10 EU EU 19 PB5, SCK, Taster2 // PWM 1,2 uz+Guz,PD5 11 A A 18 PB4, MISO, _|-- 3,4 uz, (Taster1) // PWM 3,4 uz+Guz,PD6__12 A A 17___PB3, MOSI, Reserve 2 // _|-- 1,2 uz,PD7 13 A A 16 PB2, Servo // _|-- 1,2 Guz,PB0 14 A A 15 PB1, OC1A = SFH 415, OUT (irDME) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! for(i=0; i<10; i++) // LED/PC5 blinkt i-mal ##>> bevor Interrupts erlaubt sind // um ungewollte Resets u.ä. erkennen zu können { SetBit(PORTC, 5); // LED auf PC5 schalten EIN, HELL waitms(3); // ... damit man kurze resets besser erkennt ClrBit(PORTC, 5); // LED auf PC5 schalten AUS, Dunkel waitms(97); // } // Ende von for(i=0; i<10; i++) // ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Es folgen Initialisierungsroutinen, z.B.: init_USART0(MYUBRR); //USART0 initialisieren mit wählbarer Baudrate (s.o.) XTI_0_1_init(); //Initialisiere den externen Interrupt 0 und 1 // sei(); //Globalen Interrupt freigeben // // .....
Ciao sagt der JoeamBerg
Hallo,
ich würde darauf tippen, dass die Versorgungsspannung aufgrund der Einschaltströme der Motoren einbricht.
Auf den Foto mit dem 7805 erkenne ich nur Keramikkondensatoren, da würde ich auf der 12V-Seite noch eine Diode + einen Elko (>100µF) einbauen, damit die Versorgung des Controllers eine gewisse Zeit unterbrechungsfrei ist.
Grüße,
Bernhard
edit: Das hat 021aet04 schon geschrieben
Geändert von BMS (21.01.2012 um 11:48 Uhr)
Vielen dank für eure Antworten.
Ich fange mal von vorne an zu antworten.
Ohne RS232 Kabel passiert genau das selbe.
Hannes,
ich bin Elektrotechnisch nicht vom Fach habe mir das alles durch viel lesen und nachfragen angeeignet.
Ich habe noch keinen Kondensator in der Reset Leitung. Muss mal schauen ob ich einen Kerko mit dieser Kapazität habe, Folienkondensatoren habe ich auf jeden Fall wären diese auch ok?
Was meinst du genau mit dem trennen der Motoren und dem MC durch eine Diode? Wie soll sie genau verbaut werden?
Welche Diode würdest du dazu empfehlen? Ich habe 1N4001, 1N4936 und Z Dioede 5,1V 3,1W da alles andere müsste ich bestellen.
BMS,
an dich die selbe Frage bezüglich der Diode, ist eine von den obigen geeignet wenn nicht welche wäre es und wie soll sie genau sperren?
Ich habe Elkos in > 100µF
470µF und 1000µF gillt da das Motto viel hilft viel oder lieber eine andere Größe?
oberallgeier,
ich habe eine ähnliche Blink LED wie in deinem Vorschlag sie blinkt vor dem eintreten in die Endlosschleife 5x mit 5Hz und während dem normalen Betrieb im 1Hz Takt. Daran habe ich auch den "Neustart" erkannt.
Ich habe auch ein Oszi zur Verfügung bin aber mit dem Umgang noch nicht so sicher also wenn sich damit etwas besser Analysieren lässt bin ich für anregungen offen.
Mit freundlichen Grüßen
Striker1985
Das du nicht vom Fach bist macht nichts. Wichtig ist nur das Interesse.
Bei der Diode kannst du jede beliebige Diode nehmen mit Ausnahme von Z-, Zener- oder Spannungsreferenzdioden. Du kannst also eine normale Gleichrichterdiode (z.B. 1N400x Serie wie deine 1N4001) oder eine Schottky Diode (ist aber nicht nötig). Die Diode dient hier nur dazu das sich der Kondensator nicht entlädt.
Du musst die Motoren direkt vom Akku versorgen. Den µC musst du vom Aku über eine Diode versorgen. Anschließend musst die Versorgung des µC puffern. Das sieht so aus: Batterie => Diode => Kondensator und µC
Welche Kapazität der Kondensator hat ist nicht so genau. Du kannst für den Versuch den 470µF und/oder 1000µF nehmen.
Mit dem Oszi kannst du das am Besten im Single Shot Modus anschauen. Ich würde Single Shot Modus mit falling Edge (fallender Flanke) einstellen. Die Spannung würde ich etwas unter die Versorgungsspannung stellen. Sollte die Spannung einbrechen wird automatisch der Single Shot ausgelöst. Du kannst dann schauen ob und wie weit die Spannung einbricht. Bei der Zeit musst du dich herantasten.
MfG Hannes
Lesezeichen