Forum: FPGA, VHDL & Co. FSM mit ADC synchronisieren


von E. W. (derneugierige)


Angehängte Dateien:

Lesenswert?

Hallo,

bin neu hier und bin VHDL Anfänger.

Ich bin gerade dabei eine Resolver Auswertung in VHDL zu realisiere und 
habe irgendwie Schwirigkeiten meine FSM einsynchronisieren.

Die FSM soll eine SPI und den Cordic steuern. Die SPI habe ich von 
Lothar M. hergenommen und ein wenig angepasst. Die SPI Schnittstelle 
liest mit(200kHz) von zwei ADCs 16bit Werte ein die dann von der FSM mit 
einer kleinen Subtraktion an den Cordic übergeben werden der auch den 
Winkel korrekt berechnet.

Das Problem ist die Synchronisation: ich will vom ADC alle 125us (8kHz 
Resolver Frequenz: wird über zwei PWMs vom FPGA erzeugt) neue Daten vom 
ADC holen.

Habe momentan drei Zustände (z0-z2) wobei der Eine ein Init-Zustand ist 
und danach zwischen den anderen hin und her gewechselt wird. Der z2 wird 
erst dann erreicht wenn SPI Transfer beendet wird.

Wie kann ich am besten das Problem in den Griff bekommen damit bei jeder 
steigender Flanke des Signal ADC_CLK die FSM den Spi Transfer einleitet?

MFG
derNeugierige

PS: der Cordic und der Querztakt arbeiten mit 10MHz

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

E. W. schrieb:
> Das Problem ist die Synchronisation: ich will vom ADC alle 125us (8kHz
> Resolver Frequenz: wird über zwei PWMs vom FPGA erzeugt) neue Daten vom
> ADC holen.
Dann darfst du nur alle 125us das Signal TX_Start aktivieren.
Hier fehlt offenbar noch das Modul, das den SPI und deine FSM 
verknüpft...

> Wie kann ich am besten das Problem in den Griff bekommen damit bei jeder
> steigender Flanke des Signal ADC_CLK die FSM den Spi Transfer einleitet?
Du ermittelst die steigende Flanke dieses "Taktes" und setzt daraufhin 
TX_Start.

von E. W. (derneugierige)


Angehängte Dateien:

Lesenswert?

Hallo,
und Danke erstmal.

>Du ermittelst die steigende Flanke dieses "Taktes" und setzt daraufhin
>TX_Start.

Eigentlich habe ich das so oder ähnlich gemacht, habe Tx_Start => senSPI 
im Zustand z1 gesetzt.

Habe mal die FSM einbischen abgeändert so dass der Zustand z1 jedesmal 
bei steigender Flanke gesetzt wird und z2 bei fallender Flanke und 
TX_Done und es läuft einigermassen.

Was mich da jetzt Stört ist dass die Werte die ich im z2 in Signale 
zwischen speichere sich im z1 ändern und ich dadurch unerwüscht der 
Winkel auch ändert. Warum oder was übersehe ich da?


gruß
derNeugierige

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.