Forum: Mikrocontroller und Digitale Elektronik SimonK/Mikrocopter Brushlessregler I2C Protokoll


von Peter K. (peterka2000)


Lesenswert?

Hallo,

ich habe hier gerade einen selbstgebauten AfroESC-Klon liegen. Die 
Ansteuerung über Servosignal geht auch so weit. Ich wöllte das gerne 
aber auch noch über I2C probieren. Wie ist das Protokoll dafür? Ich 
sende die Adresse, das Write-Bit, das ganze wird Geackt, dann sende ich 
einfach die Daten für die Geschwindigkeit, in dem Fall 0x55, das ganze 
wird auch Geackt. Aber der Motor dreht sich nicht.
Ich habe schon mehrere Kombis von mehreren gesendeten Bytes probiert, 
z.B. 0x00 0x55 oder 0x55 0x01 oder ...

Hat hier schon mal jemand so etwas gemacht?

von unbekannt (Gast)


Lesenswert?

Such mal im Forum von mikrokopter.de, da gibts Beträge zu dem Thema

von Peter K. (peterka2000)


Lesenswert?

Hab geguckt. Das 
http://wiki.mikrokopter.de/en/BL-Ctrl_V1.2#Controlling_with_own_Hardware 
gefunden. Mein Code ist identisch, der Motor dreht sich aber trotzdem 
nicht. Einzig das Kein-Signal-Erkannt-Piepoen vom SimonK hört auf.

von Christian B. (christian_b28)


Lesenswert?

Peter K. schrieb:
> Hallo,
>
> ich habe hier gerade einen selbstgebauten AfroESC-Klon liegen. Die
> Ansteuerung über Servosignal geht auch so weit. Ich wöllte das gerne
> aber auch noch über I2C probieren. Wie ist das Protokoll dafür? Ich
> sende die Adresse, das Write-Bit, das ganze wird Geackt, dann sende ich
> einfach die Daten für die Geschwindigkeit, in dem Fall 0x55, das ganze
> wird auch Geackt. Aber der Motor dreht sich nicht.
> Ich habe schon mehrere Kombis von mehreren gesendeten Bytes probiert,
> z.B. 0x00 0x55 oder 0x55 0x01 oder ...
>
> Hat hier schon mal jemand so etwas gemacht?

Du kannst Dir den Sourcecode dafür hier mal ansehen:
http://svn.mikrokopter.de/websvn/filedetails.php?repname=Projects&path=%2FTransportables_Koptertool%2Ftags%2FV3.x%2FPKT355_FC086.zip

motortest.c
twimaster.*

I2C-Mode ist der relevante Anteil in motortest.c.

Gehört zu dem PKT-Projekt, deshalb musst Du die PKT spezifischen Teile 
rausschmeissen oder anpassen, Displayausgabe,Uart etc.


Die "Gas"-Werte müssen zyklisch gesendet werden, sonst bleibt der Motor 
stehen.

Christian

von Peter K. (peterka2000)


Lesenswert?

Hier noch mal mein Code. Das ist doch eigentlich der selbe?
1
#ifndef F_CPU
2
#define F_CPU 16000000UL
3
#endif
4
5
#include <avr/io.h>
6
#include <util/delay.h>
7
#include <avr/interrupt.h>
8
9
#include "uart.h"
10
#include "i2cmaster.h"
11
12
#define UART_BAUD_RATE 38400
13
14
int main(void){
15
  int ret;
16
17
  DDRD = 0xFF;
18
19
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
20
21
  i2c_init();
22
23
  sei();
24
25
  uart_putc(0xFF);
26
27
  while(1){
28
    ret = i2c_start(0x50 + (1 << 1) + I2C_WRITE);
29
    if(ret){
30
      i2c_stop();
31
    }else{
32
      i2c_write(200);
33
      //i2c_write(0);
34
      i2c_stop();
35
    }
36
37
    _delay_ms(50);
38
  }
39
  return 0;
40
}

von Peter K. (peterka2000)


Lesenswert?

Für alle die es wissen wollen: Es geht inzwischen.

Man muss dem Regler ganz am Anfang erstmal 0x00 schicken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.