Problem mit STM32 und AD7912

OP #6222770
Lesenswert?

Hallo Leute,

ich habe damit angefangen einen STM32L031C6 zu programmieren.
Ich scheitere gerade daran einen externen A/D-Wandler (AD7912) mit zwei 
Kanälen über SPI (bis zu 18Mhz) auszulesen.

Ich möchte dazu HAL verwenden und habe folgendes eingestellt:

Data Size: 8Bit
First Bit: MSB
Baud Rate: 16MBits
CPOL: High
CPHA: 2 Edge
NSS Signal: per Software

Mit der Funktion TransmitReceive will ich parallel Daten senden und 
empfangen:

uint8_t transmit[2] = {0x30, 0x00} // Channel 1 auslesen
uint8_t receive[2];

HAL_GPIO_WritePin(SPI1_NSS_GPIO_Port, SPI1_NSS_Pin, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, transmit, receive, 2, HAL_MAX_DELAY);
HAL_GPIO_WritePin(SPI1_NSS_GPIO_Port, SPI1_NSS_Pin, GPIO_PIN_SET);
Angehängte Dateien:
OP #6232523
Lesenswert?

Die Schaltung habe ich von einem Kollegen.
Die Frequenz habe ich jetzt auf 10kHz reduziert und die Kondensatoren 
habe ich entfernt. Außerdem habe ich per SW einen Pullup bei der 
MISO-Leitung hinzugefügt.
Die Daten (0x0300), die ich rausschicke, um den Kanal 1 auszulesen, 
passen auch schon. Nur passt das Ergebnis, das ich auslese leider noch 
nicht.
#6232662
Lesenswert?

Tim K. schrieb:
> Außerdem habe ich per SW einen Pullup bei der
> MISO-Leitung hinzugefügt.

Bei der Pin-Konfiguration des STM32L031 hast du die internen Pull-ups 
aktiviert? Ich meine = bin mir nicht 100% sicher, wenn der Pin als 
Ausgang oder als Special Function (I2C, SPI, ...) konfiguriert ist, dann 
funktioniert das nicht so, wie du dir das erhoffst, weil die 
Pull-Ups/-Downs nur dann eine Rolle spielen, wenn der Pin als Eingang 
konfiguriert ist. Ist der Pin aber ein Ausgang, wird von der 
STM-internen HW der Pullup erst abgeklemmt und dann die 
Daten/Clock/whatever verschickt, d. h. du hast einen kurzen Moment, wo 
der Pull-Up/-Down nicht mehr mit dem Pin verbunden ist und damit kann es 
schief gehen. Deswegen, mit einem Oszi bzw. Logig-Analyzer kann man das 
sehen. Oder noch besser, lass den STM-internen Pull-Up/-Down weg und 
klemm extern einen an, dann bist du auf der sicheren Seite. Aber das mit 
den wie und was der internen Pull-Up/-Downs steht irgendwo im User 
Manual, Reference Manual oder Datasheet.
Gast #6233820
Lesenswert?

Tim K. schrieb:
> Ich nutze ein Oszi.
>
> Der MISO Eingangs-Pin ist HIGH, wenn ich den Pullup aktivere und LOW
> wenn nicht.

Dann zeig doch mal einen Screenshot von einer Übertragung mit MISO MOSI 
SCK  und CS.

Die internen Pull-ups/Pulldowns sind nur aktiv wenn der Pin ein GPIO 
ist! Und wären für 16MHz viel viel zu hochohmig. Es hat schon seinen 
Grund, dass SPI-Ausgänge von jedem Hersteller als Push-Pull ausgeführt 
sind. Gerade wenn man solche Datenraten fahren will wie du ist eine 
solche Optokoppler-Schaltung nicht wirklich optimal.

10k Pullups und dann noch 1nF macht schon eine 3dB-grenzfrequenz von 
16kHz! Also von deinen 3,3V ist bei 16 kHz noch ca. 2V (3dB von 3,3V) 
da. Und das gilt für sinusförmige Signale. Die Frequenz mit der du 
rechnen musst ist die gewünschte Anstiegszeit für dein Signal (SCK 
steigende / fallende Flanke). Deine Flanken dürften ein völliger Brei 
sein. 1nF raus und 470 R für die Pullups. Und bitte ein Oszillogramm ...
Gast #6234021
Lesenswert?

Tim K. schrieb:
> Der MISO Eingangs-Pin ist HIGH, wenn ich den Pullup aktivere und LOW
> wenn nicht.

Und welchen Pegel hat er während der Kommunikation? Tut sich da was, 
sind die Signalpegel gut und die Flanken steil genug? Sind die Pegel bei 
der Taktflanke* stabil?

*) Brauchst du die steigende oder die fallende Flanke?
#6237121
Lesenswert?

Sieht schon besser aus, immerhin 3,2 V Spitze. Aber schön ist was 
anderes, denn die steigende Flanke braucht ca. 40 µs um auf ca. 2,5 V zu 
kommen, damit würde theoretisch bei 12,5 kHz Clock der Spitzenwert auf 
2,5 V sacken, weil die OK nicht hinterher kommen. Ich gehe mal davon 
aus, dass dass der Output vom OK ist, oder?
Was machen wir da? Genau die OK rauswerfen und andere einpflanzen, so 
wie Gebhard R. schon geschrieben hat.
Gebhard R. schrieb:
> Diese Optokoppler sind für diese Anwendung völlig ungeignet.

Jetzt machen!
#6240345
Lesenswert?

So aus dem ff nicht. Vllt. nal bei den Distributoren wie Mouser, Farnell 
usw. kucken, also bis zu den OK durchklikken und dann über Parameter 
filtern, alternativ vllt. auch besser, bei den Herstellern nach 
Anwendungsfall filtern und dann den Rest. Oder mal guhgeln, wie, was 
andere so gebraucht haben.

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