So mein Quad macht Fortschritte.
Das Problem lag an einem Falsch montierten Propeller
so wie den aktivierten Roll Gyro reverse.
Jetzt muss ich die Akkus neu laden und die Parameter finden.
Neben bei habe ich ein kleines Motortest Programm geschrieben.
Damit kann man die Motoren jeden Motor an und aus schalten und die Drehzahl hoch und runter regeln.
Gesteuert wird über ein Terminal (HyperTerminal, Putty oder den von Bascom)
Ausgelegt ist das Prog für 4 Motoren die über I2C angesteuert werden.
Für Einsteiger vielleicht sehr hilfreich.
Code:
'Platine+I2c+ESC+Motor Tester by HDM
'Based on William's Thielicke Programm for Shrediquette
'Switch off position : nothing
'Switch acro position : Motors selected with roll stick
'Switch hover position : All 3 Motors
'Leds show switch position
'Values shown via Tx/Rx
'===CHIP SETTINGS===
$regfile = "m328pdef.dat" ' "m168def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 38400
'--Alias's
Led_1 Alias Portd.7
Led_2 Alias Portb.0
Led_3 Alias Portb.1
Led_grn Alias Portb.5
Dim I As Byte
Dim A As Byte
Dim Speed As Byte
Dim Motor1 As Bit
Dim Motor2 As Bit
Dim Motor3 As Bit
Dim Motor4 As Bit
Declare Sub Motor_aus
Declare Sub Motor1
Declare Sub Motor2
Declare Sub Motor3
Declare Sub Motor4
Declare Sub Speedhoch
Declare Sub Speedrunter
'===PORT SETTINGS===
Config Pind.7 = Output 'led 1
Config Pinb.0 = Output 'led 2
Config Pinb.1 = Output 'led 3
Config Pinb.5 = Output 'Arduino LED_grn
Config Scl = Portd.5 'for ESCs
Config Sda = Portd.4
Print "Motortest fuer Brushless Regler die über I2C angesteuert werden"
Print "Tasten 1-4 Motor 1-4 an/aus ---- + und - Speed rauf und runter"
'Startwerte setzen
Beginn:
Speed = 10
Motor1 = 0
Motor2 = 0
Motor3 = 0
Motor4 = 0
For I = 1 To 10
Toggle Led_grn
Waitms 50
Next I
Gosub Status
'alle LEDs Ausschalten
Reset Led_1
Reset Led_2
Reset Led_3
Reset Led_grn
'ASCII Cods für die Tasten
'1 Ascii Code 49 From Serial
'2 ascii Code 50 From Serial
'3 ascii Code 51 From Serial
'4 ascii Code 52 From Serial
'+ Ascii Code 43 From Serial
'- Ascii Code 45 From Serial
Do
'auf Tastendruck reagieren
A = Inkey()
Select Case A
Case 0 : 'nichts tun wenn keine Taste gedrückt wurde
Case 27 : Motor_aus
Case 49 : Motor1
Case 50 : Motor2
Case 51 : Motor3
Case 52 : Motor4
Case 43 : Speedhoch
Case 45 : Speedrunter
Case Else : Print "taste nicht unterstuezt"
End Select
' Motoren Je Nach Zustand Ein Oder Ausschalten
If Motor1 = 1 Then
Set Led_1
I2csend &H52 , Speed
Else
I2csend &H52 , 0
End If
If Motor2 = 1 Then
I2csend &H54 , Speed
Else
I2csend &H54 , 0
End If
If Motor3 = 1 Then
I2csend &H56 , Speed
Else
I2csend &H56 , 0
End If
If Motor4 = 1 Then
I2csend &H58 , Speed
Else
I2csend &H58 , 0
End If
Loop
' Subrotine Um Die Motoren Ein Bzw. Auszuschalten
Sub Motor_aus
Print "Speed auf 0!"
Speed = 0
gosub STATUS
End Sub
Sub Motor1
Toggle Motor1
Toggle Led_1
Gosub Status
End Sub
Sub Motor2
Toggle Motor2
Toggle Led_2
Gosub Status
End Sub
Sub Motor3
Toggle Motor3
Toggle Led_3
Gosub Status
End Sub
Sub Motor4
Toggle Motor4
Toggle Led_grn
Gosub Status
End Sub
Sub Speedhoch
Speed = Speed + 1
If Speed > 200 Then
Speed = 200
End If
Gosub Status
End Sub
Sub Speedrunter
Speed = Speed - 1
If Speed <= 0 Or Speed > 210 Then
Speed = 0
End If
Gosub Status
End Sub
Status:
Print ""
Print "Motro 1 = " ; Motor1 ; " Motro 2 = " ; Motor2 ; " Motro 3 = " ; Motor3 ; " Motro 4 = " ; Motor4 ; " Speed = " ; Speed
Return
Gruß Ingo
Lesezeichen