Welche Möglichkeiten gibt es bem STM 32 F407-Board einen Ausgangspuls definierter Länge auszugeben?

Gast #5745574
Lesenswert?

Es handelt sich um einen digitalen Ausgang, der im Open-Drain-Modus 
läuft und der für einen Trigger mindestens 4 Mikrosekunden lang auf LOW 
schalten muss..

Wie realisiere ich das am Besten? Ich möchte ungerne einen Timer 
aktivieren, da der Ausgang ohnehin schon durch ein Interrupt ausgelöst 
wird. Gibt es spezielle Konfigurationen für z.B. Rechtecksignale am 
Ausgang? Werde aus dem Datenblatt diesbezüglich nicht schlau

Danke im Voraus für Hilfe jeder Art ;)
(Firma: matzetronics) #5745587
Lesenswert?

timjk schrieb:
> Ich möchte ungerne einen Timer
> aktivieren

Aber die Unmenge an Timer, die der Chip hat, bieten sich doch gerade an. 
Dein Interupt startet einen Timer, der nur einmal durchläuft und ein CC 
Register hat. Ich müsste jetzt mal nachschauen, wieviele Timer des F407 
PWM Ausgänge haben, aber es sind reichlich.
#5745606
Lesenswert?

timjk schrieb:
> Es handelt sich um einen digitalen Ausgang, der im Open-Drain-Modus
> läuft und der für einen Trigger mindestens 4 Mikrosekunden lang auf LOW
> schalten muss..
>
> Wie realisiere ich das am Besten? Ich möchte ungerne einen Timer
> aktivieren

Wie genau muss denn diese Triggerzeit sein?

Wenn es nicht so genau sein muss und nur die Mindestzeit von 4µs 
eingehalten werden muss, könntest Du nach dem Low-Setzen dir die 
aktuelle Systemzeit z.B. aus dem Systick-Timer holen.

Jedesmal wenn Du jetzt Deine Main-Schleife, Idle-Thread,... durchläufst, 
prüfst Du ob die 4µs schon vorbei sind. Wenn ja, dann deaktivierst Du 
das Signal.

Bessere RTOS bieten virtuelle Timer. Die sind genau für solche Dinge 
gedacht. Siehe z.B. hier:
http://www.chibios.org/dokuwiki/doku.php?id=chibios:book:kernel_vt
Gast #5745671
Lesenswert?

okay die Option zum Slave-Modus ist mir schon mal bei der Konfiguration 
in CubeMX unter die Augen gekommen.

Habe das aber noch nicht gemacht. (Bisher tatsächlich nur einen 
Timer-Interrupt, also genau der umgekehrte Weg)

Wie würde das dann bei der Auslösung in Programmiersprache aussehen?
Also welchen Befehl müsste ich dann in meiner ISR machen, um das Signal 
entsprechend der Länge des Timers auszugeben? Würde vermuten eine 
if-Bedingung im Zusammenhang mit der TIM-Variable...
Verwende übrigens die HAL_Library
#5745989
Lesenswert?

pegel schrieb:
> Geht es wieder um die Kamera?

Der Frage würde ich mich anschließen.

Und vorsorglich, weil die Antwort ja wohl "ja" sein wird, noch eine 
Folgefrage stellen: Auch wenn die Mindestimpulszeit der Kamera 3µs sind, 
warum machst du den Impuls mit 4µs so kurz? Nimm 4ms. Damit könntest du 
trotzdem noch über 100 mal pro Sekunde auslösen. Was die Kamera 
mußmaßlich sowieso nicht schafft.
Gast #5746905
Lesenswert?

Der STM32 hat Output Compare. Das würde ich mir mal ansehen. Damit 
müsste man das eigentlich lösen können.
Mit einer geschickten Kombination aus Timern und Prescalern sollte es 
möglich sein, beliebige Zeiten zu realisieren.

PS:
Warum verwenden alle immer die alten Gurken mit der schimmligen 
Peripherie wie den F407? Es gibt neuere und viel schönere STM32 
Derivate, wie den STM32F303.

Naja, wahrscheinlich wird man sonst von den Fanboys angekläfft :-(

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