Forum: Mikrocontroller und Digitale Elektronik Keil MCBSTM32, Clocks, PCLK2 einbinden


von Mario (Gast)


Lesenswert?

Servus an alle.
Ich hoffe mir kann jemand helfen.
Für ein wichtiges Projekt bin ich an das ARM CORTEX M3, Keil MCBSTM32 
Board gebunden. Sprich keine Abntworten wie, wenn du das noch nicht mal 
kannst,dann mach erstmal AVR zum üben... muss der Micro sein!
Und zwar muss ich externe ADCs ansteuern, wie ist generell kein Problem, 
Sprache C.
Ein anderer Programmteil mittels

void SysTick_Handler (void) {
...
}
funktioniert auch schon (sysTick mit 9 MHz, also alle 50 microsekunden.)

Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den 
nanosekundenbereich <20ns.

Ich habe daher an PCLK2 gedacht, da der standertmäßig ja als HCLK und 
somit 72MHz bei dem Board definiert ist.

Wie muss ich das ganze jetzt umsetzen??

wenn ich jetzt z.B. einfach void PCLK2_Handler (void) {..
schreibe passiert logischerweise noch nichts...
Ich denke die Clock ist nicht enabled...
Wie gesagt, habe nicht die große Ahnung, da gibts doch nen Befehl RCC 
....
wie genau starte ich diese Clock bzw. kann man was definieren, dass ich 
ein signal einfach nur 1 oder 0 im größenordnungsbereich <20ns als 
output liefern kann um z.B. alle 15ns für 15ns ne 1 dann wieder 15ns ne 
null, dann wieder 1 usw. zu liefern..

Hoffe auf schnelle antworten, weil zeitkritisch...

Ich danke schon jetzt allen die mir antworten für Ihre Hilfe

von Mario (Gast)


Lesenswert?

Oder kann ich sogar gleich die SYSCLK dafür benutzen??

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Mario schrieb:
> Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den
> nanosekundenbereich <20ns.
>

Moin Mario,

Räum mal bei dir auf, was willst du genau machen?

Wenn ich mich in den Nachkommastellen nicht vertan habe, dann braucht 
der
Prozi schon 14ns für einen Takt. Was willst du denn alle 20ns so alles 
machen, brauchst du das überhaupt?

So wie sich das anhört gehst du das Problem völlig falsch an oder aber 
der STM32F1 ist zu langsam für dich und du musst auf F2 ggf. bald auf F4 
ausweichen.

MfG

Tec

von Matthias K. (matthiask)


Lesenswert?

Mario schrieb:
> void SysTick_Handler (void) {
> ...
> }
> funktioniert auch schon (sysTick mit 9 MHz, also alle 50 microsekunden.)
>
> Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den
> nanosekundenbereich <20ns.

20ns für den Systick! Das wird schon von der Theorie her nichts bei 
72MHz. Ich denke, Du solltest doch nochmal über das Back zum AVR 
nachdenken...

von Mario (Gast)


Angehängte Dateien:

Lesenswert?

Ich muss einen ADC (16BIT, 40kSPS) ansteuern, 4 stück, das DATACLK 
signal siehe bild Dauer t21 ist 15 ns lang. Das ist mein problem...

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Wenn ich mich nicht verrechnet hab, wären das schon mal 66MHz nur für 
einen ADC? Und das mal 4 ADCs? Aus 72MHz CClk? Nais!

Sieht übrigens nach so was wie SPI aus. Der STM32F1xx kann 25MHz SPI. 
Wenn das SPI ist, wird der ADC Daten-Takt vom Master (=STM32) aus 
gesteuert.

Ggf. kannst du mit NSS vom SSP peripheral den DAC komplett steuern, so 
dass du deine Daten ggf. sogar per DMA schaufeln kannst.

Auf jeden Fall das zeug auf ein Peripheral auslagern. Takt zum Einlesen 
der Bits per Hand erzeugen ist böhse... Ausserdem ist deine CPU hier 
dann zu 99,999999% mit dem INT ausgelastet ^^

von Matthias K. (matthiask)


Lesenswert?

Mario schrieb:
> t21 ist 15 ns

Da steht nur Minimal 15ns, es kann auch viel länger sein.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

wie heisst der ADC?

von Mario (Gast)


Lesenswert?

ein kompletter durchgang von ADC dauert max 25 microsekunden (t1). Da 
ich 40 kilosamples für jeden der 4 ADC realisieren muss, hab ich 
25microsekunden /16 bits=1,5625microsekunden. mit den anderen zu 
beachtenden mindestzeiten schätze ich 1 microsekunde. d.h. bei 4 ADCs 
würden 250ns vermutich auch reichen, wobei das ganze dann in der tat 
sehr knapp wird, da die übertragenen bitdaten(von 
beschleunigungsaufnehmern) auf einer SD karte gespeichert werden. Zur 
Not aber nur dann würden evtl. 20 kilosamples auch reichen... das ganze 
sind vibrationsmessungen...

von Mario (Gast)


Lesenswert?

Ist der ADS8513 von Texas instruments
16 BIT, 40kSPS, low-power sampling analog-to-digital converter with 
internal reference and parallel/serial interface

von Mario (Gast)


Lesenswert?

Zur Info, kam wohl nicht raus, die ADC werden immer nacheinander 
angesprochen...

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

wie bereits gesagt das ist SPI, also ein Bus das kann der STM in 
Hardware mit 25MHz max. die Daten die darüber rein kommen kannst du mit 
dem DMA in den RAM fahren. Du willst diese dann in einer SD Karte 
speichern? Wie lange willst du Messen?

16Bit bei 25MHz a 4 Kanäle komme ich auf knapp 400kSPS pro Kanal die du 
über den SPI raus bekommen müsstest.

Du hast 16Bit 40kSPS a 4 Kanäle als0 2,56kBit/s die du verarbeiten 
musst.

Mit einem Puffer von 1024 Werten kommst du auf einen Rambedarf von 16k 
für den Puffer. 512 Werte tuns aber auch. die Werte musst du dann Binary 
in eine bereits geöffnete Datei auf die SD karte schieben. das Über 
nimmt einweiterer DMA channel. alles kein Hexenwerk solange du nicht 
noch viel mit den Werten rechnen willst.

Das macht dann auch n Middensity Device mit 20k Ram

MfG

tec

von Matthias (Gast)


Lesenswert?

Also mit Timer ist da nichts. Warum machst du das nicht mit der SPI. Der 
ADC ist dafuer gebaut.
Ein Example fuer SPI mit DMA Transfer findest du zusammen mit der 
aktuellen Firmware Library von ST 
(STM32F10x_StdPeriph_Lib_Vx.x.x\Project\STM32F10x_StdPeriph_Examples\SPI 
\DMA)

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

"SPI™-Compatible Serial Port up to 20MHz" steht groß und Fet unter den 
Features im DB des ADC

von Mario (Gast)


Lesenswert?

verechnet werden soll weiter nichts. Die Daten werden später auf einem 
desktop pc ausgewertet. Schaue mir mal die Beispiele zu SPI an, DAnke 
schon mal für die vielen und schnellen Antworten, werde mich dann 
nochmal melden...

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.