STM32F4: Timer mit Break-Funktion, Timingprobleme

OP #4634549
Werte Mitmenschen,
für die Ansteuerung eines ICs, brauche ich 5 ms lange bursts von Pulsen 
mit einer Frequenz von 100 kHz.
Dafür habe ich Timer1 so konfiguriert, dass dieser die gewünschten Pulse 
mit einer Frequenz von 100 kHz erzeugt. Außerdem wurde bei Timer1 die 
Break-Funktion eingeschaltet. Das bedeutet, dass der Output von Timer1 
nur so lange die Pulse ausgibt, wie der Ausgang von Timer 3 high ist.
Das ist in Soll.jpeg zu sehen.

Mein Problem besteht darin, dass wenn ich auf Timer3 Trigger, die Bursts 
mir langsam davon laufen und ich keine Ahnung habe, woran das liegen 
könnte (zu sehen in Lauf.jpeg).

Außerdem ist es zur Zeit so, dass mein Timer1-Signal HIGH ist, solange 
keine Bursts erscheinen. Ich brauche es aber so, dass das Signal LOW 
ist. Wie kriege ich das hin?

Ich bin über alle Anregungen erfreut und bedanke mich schonmal im 
Voraus!

Hier mein Code zur Einstellung der Timer
1
void TIM1_Configuration(void)
2
{
3
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
4
  TIM_OCInitTypeDef  TIM_OCInitStructure;
5
  TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
6

7
  // TIM3 Configuration //
8

9
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
10
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
11
  TIM_TimeBaseStructure.TIM_Period = 0xAFFF;
12
  TIM_TimeBaseStructure.TIM_Prescaler = 0x00FF;
13
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
14
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
15

16
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
17
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
18
  TIM_OCInitStructure.TIM_Pulse = 1750; //1750
19
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
20
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
21

22
  TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);
23

24
  // TIM1 Configuration // 100 kHz
25
  
26
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2; // 180MHz/2 = 90MHz
27
  TIM_TimeBaseStructure.TIM_Period = 89; // 90MHz/(89+1) = 1 MHz
28
  TIM_TimeBaseStructure.TIM_Prescaler = 19;
29
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
30
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0F;
31
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
32

33
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
34
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
35
  TIM_OCInitStructure.TIM_Pulse = 5;
36
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
37
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);
38

39
  TIM_BDTRStructInit(&TIM_BDTRInitStructure);
40
  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
41
  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
42
  TIM_BDTRInitStructure.TIM_DeadTime = 0;
43
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
44
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
45
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
46
  TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
47

48
  TIM_Cmd(TIM1, DISABLE);
49
  TIM_Cmd(TIM3, ENABLE);
50

51
  TIM_CtrlPWMOutputs(TIM1, ENABLE);
52
  TIM_CtrlPWMOutputs(TIM3, ENABLE);
53
}
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.