Forum: Mikrocontroller und Digitale Elektronik Probleme mit AS5040 rotary encoder


von Marcus W. (Gast)


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

von Marcus W. (Gast)


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 :)

von Jankey (Gast)


Lesenswert?

Danke für diesen Input, wir werden das beim nächsten Datenblatt update 
hinzufügen.

lg Jan

von Detlef _. (detlef_a)


Lesenswert?

Marcus W. wrote:
>
> So, jetzt hab ich mir die Nacht verdient :)

Falls Du noch mitliest:
Rückst Du den Ansteuerungscode für den Sensor raus?
Ich werde den Sensor auch benutzen und das sollte mir möglicherweise 
auch 5h Kopfzerbrechen ersparen.

THX
Cheers
Detlef

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Hallo

Ich habe mir auch diesen Sensor besorgt,
könnt auch mir jemand einen schon vorhandenen Code geben?

Danke

von Philipp (Gast)


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

von Ralf (Gast)


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

von tobi (Gast)


Lesenswert?


von Ralf (Gast)


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.

von tobi (Gast)


Lesenswert?

http://techwww.in.tu-clausthal.de/site/Projekte/CarBoTUC/?main&structure

vielleicht hilft dir das ja weiter.
ich nutze bisher nur die analogen oder die PWM chips von ams

von Ralf (Gast)


Lesenswert?

Ich habe mich nun ein wenig auf der Projektseite der TUClaustal 
umgesehen. Allerdings suche ich dort vergeblich nach dem AS5040.

Kannst Du hierzu noch genauere Links schicken?

von Ralf (Gast)


Lesenswert?

Hier noch der Nachtrag:
Ich habe den AS5040 schon gefunden, allerdings nur mit PWM auswertung 
und in VHDL programmiert.

Für die SSi bzw. SPI Schnittstelle hilft dies ja erst mal noch nicht.

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.