Probleme mit AS5040 rotary encoder

Gast #1176646
Lesenswert?

Guten Abend,

ich hoffe ich finde hier jemanden, der den AS5040 schon mal benutzt hat.

Ich versuche den gerade über SPI auszulesen und bekomme nur 0x2001 als 
Rückgabewert.
Laut Datenblatt sollte nach dem Startup das OCF bit auf high gehen, 
dieses bleibt aber leider auf low.

Habe schon mit dem Oszi überprüft, ob mit der Datenübertragung alles 
funktioniert. Das scheint alles zu stimmen.


Der PWM output des AS5040 funktioniert allerdings tadellos.

Hat jemand einen Tipp für mich?

Gruß Marcus
Gast #1176664
Lesenswert?

Nach 5 Stunden Kopfzerbrechen hab ich die Lösung doch noch gefunden...

Falls andere auch mal in die Verlegenheit kommen hier die kurze 
Beschreibung:

Hab den IC mit dem SPI des mega64 auslesen wollen.
SPI-Einstellung war:
SPCR  &= ~(1<<CPOL); // rising edge leading
SPCR  |=  (1<<CPHA); // sample on falling edge

Soweit so gut.

Was ich aber nicht bedacht habe (und was auch nicht klar aus dem 
Datenblatt herausgeht): Die Clock muss im Idlezustand anscheinend high 
bleiben.

Ich mach das jetzt so: Nachdem der Interrupt kam und die Übertragung 
beendet ist wird der SPI ausgeschaltet und der Pin auf high gezogen.



So, jetzt hab ich mir die Nacht verdient :)
Gast #2047102
Lesenswert?

Ich brauch den Sensor auch für meine Diplomarbeit in der Schule.
Hab jedoch ein Problem beim Winkelauslesen.
Seriel sollte ein Wert von 0-1023 empfangen werden. (360° = 1023)
Ich bekomme jedoch immer nur einen Wert von 0 - ca. 500; in einem Teil 
des Kreise bleibt der Wert konstant auf ca. 500 (ich glaube es waren 
511) obwohl der Magnet gedreht wird.

Muss man den AS5040 vorher programmieren um auch Werte von 0 bis 1023 zu 
bekommen? Ich hab das AS5040-Adapterboard und den LPC935.
Hat jemand vielleicht schon einen fertigen C-Code?

thx
Gast #2357206
Lesenswert?

Hallo zusammen,

ich versuche mich auch gerade an dem AS5040 und der SPI Schnittstelle.
Prinzipiell scheint es als ob die SPI Schnittstelle funktioniert, da ich 
Daten empfange.

Aktuelle Einstellungen der SPI:
CPOL = 1
CPHA = 0


Wenn ich nun die empfangenen Daten bewerte, so muss ich feststellen, 
dass bei CPOL = 1 nur Daten im Bereich von ca. 500...1023 empfangen 
werden, hingegen bei CPOL = 0 zwischen ca. 0...500.

Dieses Phänomen ist mir noch nicht ganz klar.
Der PWM-Wert wird hingegen immer korrekt ausgegeben.

Hier mal der Code zum auslesen:
1
void as5040_spi_data(void)
2
{
3
  uint16_t data=0;
4
  SPCR |= (1<<CPOL);          // SCK high on IDLE
5
  
6
  clear_CSN();        //set low CSN
7
  data = spi_transferword(data);
8
  set_CSN();          //set high CSN
9
    
10
  AS5040data.state  = (uint8_t) (data & 0b0000000000111111);  // and extract status and angle
11
  AS5040data.value   = (data & 0b1111111111000000) >> 6;      // mask and shift 6 bits to the right
12
  
13
}

Für erste tests sollte die Auswertung der Statusbits ja egal sein. Oder 
seht Ihr das anders?

Gruß
Ralf
Gast #2357251
Lesenswert?

@tobi: Danke für den Link. Jedoch habe ich das Datenblatt als erstes mal 
studiert um dort auf eine Lösung zu kommen. Jedoch bis jetzt erfolglos. 
Daher habe ich ja auch hier im Forum geschrieben.

Wenn es bereits fertigen Code für diesen Chip gibt wäre ich auch nicht 
unglücklich darüber, aber primär möchte ich meinen Code zum laufen 
bekommen.

Daher bin ich über weitere Hinweise sehr dankbar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren