Hallo,
ich baue derzeit mit ein paar Kommilitonen im Rahmen einer Projektarbeit an einem FTS. Die Steuerung ist so ziemlich dem Asuro nachempfunden. Um die Drehzahl der asynchron Motoren genau regeln zu können, verwenden wir dabei Taktscheiben (120er Teilung). Das Problem ist, dass wir dabei eine viel zu hohe Anzahl an Pulsen bekommen. So haben wir z.B. bei 44 upm über 50000 Pulse/min gemessen (per Pin-Change Interrupt / beide Flanken). Wenn ich richtig rechne müssten es eigentlich 240 * 44 = 10560 sein. Wir haben mit dem Oszilloskop das Signal am Pin gemessen und haben eine recht saubere Rechteckspannung. Prinzipiell ist das für uns eigentlich kein Problem, weil Drehzahl und Pulse trotzdem gleichmäßig ansteigen - doppelte Drehzahl = doppelt soviele Pulse. Allerdings finden wir es jetzt nicht so wirklich schönWir verwenden einen Atmega 2560 und programmieren mit Bascom. Hier ist mal ein "Testprogramm" von uns, allerdings misst dieses nur noch eine Flanke (zumindest soll es das) und gibt die Drehzahl sekündlich aus... Sieht evtl. etwas wild aus, weil wir momentan nur "rumprobieren" (wir haben erst vor 3 Wochen angefangen uns damit zu beschäftigen)
Ich bin für jeden Tipp dankbar...Code:$prog , 255 , &B11011001 $regfile = "m2560def.dat" $hwstack = 120 $framesize = 100 $swstack = 100 $crystal = 16000000 'Timer für Zeitbezug (1 Sekunde) Config Timer1 = Timer , Prescale = 256 Enable Timer1 On Timer1 Timing Timer1 = 3036 '----------------------------------- 'Pin Change Interrupt 'Motor links Config Pink.4 = Input Portk.4 = 1 'Motor rechts Config Pink.5 = Input Portk.5 = 1 Enable Interrupts Pcmsk2 = &B00110000 On Pcint2 Test Enable Pcint2 'Variablen für Inkremente Dim Inkr_links As Word Dim Inkr_rechts As Word 'Variablen für vorherigen Zustand um Flanke feststellen zu können Dim Tmp_links As Bit Dim Tmp_rechts As Bit Inkr_links = 0 Inkr_rechts = 0 Tmp_links = 0 Tmp_rechts = 0 '--------------------------- 'PWM für beide Motoren Config Pinc.2 = Output Config Pinc.3 = Output Config Pinb.4 = Output Config Pinc.0 = Output Config Pinc.1 = Output Config Pinh.6 = Output Config Timer2 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 Portc.2 = 0 Portc.3 = 1 Pwm2a = 60 Portc.0 = 1 Portc.1 = 0 Pwm2b = 20 '------------------------------------ Do Loop End '-------------------------------------- 'Interrupt für Pulse Test: If Pink.4 = 1 And Tmp_links = 0 Then Incr Inkr_links Tmp_links = Pink.4 End If If Pink.5 = 1 And Tmp_rechts = 0 Then Incr Inkr_rechts Tmp_rechts = Pink.5 End If Tmp_links = Pink.4 Tmp_rechts = Pink.5 Return '------------------------------------- 'Timer für Zeitbezug (Umdrehungen/Sekunde) und Ausgabe Timing: Print Inkr_links ; " " ; Inkr_rechts Inkr_links = 0 Inkr_rechts = 0 Return







Zitieren
Lesezeichen