Meinst du die Pwm Eingänge vom Motortreiber?Scheint soweit alles zu passen....
hast du mal versucht deinen Motortreiber abzuklemmen und die Signale einfach mit dem Multimeter zu messen ?
Ich habe jetzt mal den Summer wieder eingebaut.Wenn ich jetzt das Programm starte beginnen die Motoren zu summen. Dann hören die Motoren aber wieder nicht auf und von dem Summer ist auch nichts zu hören.
Aber es ist, wie in deinem Ursprungsprogramm, ein Unterschied zwischen Mittelstellung und Seitenstellung des Knüppels zu hören.
Zu bedenken ist aber ,dass ich nicht den Summer für die Geschwindigkeit ,sondern für die Case Else Fälle eingesetzt habe.
Jetzt probiere ich noch mal wie du das wolltest.
Code:$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 $hwstack = 32 $swstack = 32 $framesize = 32 Config Portd.7 = Output Config Pind.2 = Input ' Signal 1(a) vom RC-Empfänger Config Pind.3 = Input ' Signal 2(b) vom RC-Empfänger Config Portc.6 = Output 'Motor links Config Portc.7 = Output 'Motor links Config Portb.0 = Output 'Motor rechts Config Portb.1 = Output 'Motor rechts Config Portd.4 = Output 'PWM links Config Portd.5 = Output 'PWM rechts Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 Dim Rckanal_a As Word Dim Rckanal_b As Word Dim Motor As Byte ' 1=Motor1 / 2=Motor2 /... Dim Drehrichtung As Byte ' 0= Bremsen / 1=links / 2=rechts Drehrichtung = 1 ' Drehrichtung >>>jetzt manuell auf Links gestellt <<< Dim Geschwindigkeit As Word ' Motorgeschwindigkeit Geschwindigkeit = 0 ' Motorgeschwindigkeit anfangs auf 0 Declare Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word) Sound Portd.7 , 400 , 450 Sound Portd.7 , 400 , 250 Sound Portd.7 , 400 , 450 Wait 2 Do ' Wert vom RC-Empfänger abfragen und weitergeben Pulsein Rckanal_a , Pind , 2 , 1 ' Wert vom Kanal 1...Motor 1. Motor = 1 Geschwindigkeit = Rckanal_a Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit) 'Daten an Subroutine/Motorsteuerung übergeben ' Subroutine hat Motor bearbeitet... weiter zum nächsten ' Wert vom RC-Empfänger abfragen und weitergeben Pulsein Rckanal_b , Pind , 3 , 1 ' Wert vom Kanal 2...Motor 2. Motor = 2 Geschwindigkeit = Rckanal_b Call Motorsteuerung(motor , Drehrichtung , Geschwindigkeit) 'Daten an Subroutine/Motorsteuerung übergeben ' Subroutine hat Motor bearbeitet... weiter zum nächsten Loop End Sub Motorsteuerung(byval Motor As Byte , Byval Drehrichtung As Byte , Byval Geschwindigkeit As Word) Geschwindigkeit = Geschwindigkeit - 85 'Wenn der Wert vom RC-Kanal etwa 90 bis 210 beträgt ... Geschwindigkeit = Geschwindigkeit * 2 ' ... grob umrechnen um innerhalb 0 bis 255 zu sein fürs PWM-Signal Select Case Geschwindigkeit ' sicherstellen, das keine Falschen Werte durchkommen Case Is >= 255 : Geschwindigkeit = 255 ' maximalwert 255 Case Is <= 15 : Geschwindigkeit = 0 ' Untere Schwelle, das der Motor auch wirklich still stehen kann End Select Select Case Motor ' Welcher Motor soll gesteuert werden ? Case 1 : Select Case Drehrichtung ' wenn Motor1, in welche richtung soll er drehen ? Case 0 : Portc.6 = 0 ' Ports für Drehrichtung setzen Portc.7 = 0 Case 1 : Portc.6 = 1 Portc.7 = 0 Case 2 : Portc.6 = 0 Portc.7 = 1 Case Else Sound Portd.7 , 400 , 450 ' bei ungültigen Werten fehler anzeigen End Select Pwm1a = Geschwindigkeit ' Geschwindigkeit Motor 1 regeln Case 2 : Select Case Drehrichtung ' wenn Motor2, in welche richtung soll er drehen ? Case 0 : Portb.0 = 0 ' Ports für Drehrichtung setzen Portb.1 = 0 Case 1 : Portb.0 = 1 Portb.1 = 0 Case 2 : Portb.0 = 0 Portb.1 = 1 Case Else Sound Portd.7 , 400 , 250 ' bei ungültigen Werten fehler anzeigen End Select Pwm1b = Geschwindigkeit ' Geschwindigkeit Motor 2 regeln Case Else Sound Portd.7 , 400 , 600 ' bei ungültigen Werten fehler anzeigen End Select Print "->Motor=" ; Motor ; " ->Richtung=" ; Drehrichtung ; " ->Geschwindigkeit=" ; Geschwindigkeit 'Werte anzeigen als Kontrolle End Sub







Zitieren


Lesezeichen