Forum: Mikrocontroller und Digitale Elektronik STM32F405RGT6 Timer1 PWM


von Ma B. (drumstick)


Lesenswert?

Hallo

Bei meiner Fragestellung geht es um den PWM1 mit dem Timer1 Channel 1. 
Ich steuere einen BLDC Motor mittels PWM an. Dazu verwende ich einen 
STM32F405RGT6.

Beim debuggen sehe ich im yVision, dass der Timer 1 rauf zählt. Aber am 
Pin PB13 rührt sich nichts. Zu Testzwecken habe ich einen PWM mittels 
Timer 2 aufgesetzt. Das hat funktioniert. Timer 1 und 8 sind ja Advanced 
Timer. Ich habe aber nirgends gesehen, dass diese anders angesteuert 
werden müssen.

Zu meinen Fragen:
Habe ich die Bedeutung von der Bezeichnung "TIM1_CH1N" falsch gedeutet? 
Das N bedeutet doch eine Negation?

Und ich konnte im Datenblatt für die Ansteuerung des PWM mittels 
Advanced Timer gegenüber dem Timer 2 keinen, zum Problem passenden 
Unterschied sehen.

Vielleicht kann mir jemand helfen?

Besten Dank!
MC Bu
1
const     uint32_t  TIM1_PWM_Prescaler           = 10;
2
          uint32_t  TIM1_PWM_AutoReload_Value   = 245;
3
4
GPIO_InitTypeDef GPIO_InitStructure;
5
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
6
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13;
7
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
8
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
9
GPIO_Init(GPIOB, &GPIO_InitStructure);
1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
2
  
3
  /* Time base configuration */
4
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
5
  TIM_TimeBaseStructure.TIM_Period             = TIM1_PWM_AutoReload_Value;  // Full periode
6
  TIM_TimeBaseStructure.TIM_Prescaler         = TIM1_PWM_Prescaler;         // Update all 40us
7
  TIM_TimeBaseStructure.TIM_ClockDivision     = TIM_CKD_DIV1;
8
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 1; 
9
  TIM_TimeBaseStructure.TIM_CounterMode       = TIM_CounterMode_Up;
10
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
11
    
12
  {
13
    TIM_BDTRInitTypeDef bdtr;
14
    TIM_BDTRStructInit (&bdtr);
15
    bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
16
    TIM_BDTRConfig (TIM1, &bdtr);
17
  }
18
    
19
  /* Time Output Mode configuration */
20
  TIM_OCInitTypeDef    TIM_OCInitStruct;      
21
  TIM_OCStructInit(&TIM_TimeOutputModeStructure);
22
  TIM_TimeOutputModeStructure.TIM_OCMode         = TIM_OCMode_PWM1;
23
  TIM_TimeOutputModeStructure.TIM_OCIdleState     = TIM_OCIdleState_Set;
24
  TIM_TimeOutputModeStructure.TIM_OutputState   = TIM_OutputState_Disable;
25
  TIM_TimeOutputModeStructure.TIM_OutputNState   = TIM_OutputState_Enable;
26
  TIM_TimeOutputModeStructure.TIM_OCPolarity    = TIM_OCPolarity_Low;
27
  TIM_TimeOutputModeStructure.TIM_OCNPolarity   = TIM_OCNPolarity_High;
28
  TIM_TimeOutputModeStructure.TIM_Pulse         = 100;
29
  TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  
30
  TIM_OC1Init(TIM1, &TIM_TimeOutputModeStructure);
31
  
32
  TIM_ARRPreloadConfig(TIM1, ENABLE);  
33
  TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
34
  TIM_CCxCmd(TIM1, TIM_Channel_1, ENABLE);
35
  TIM_CtrlPWMOutputs(TIM1, ENABLE);
36
  TIM1->EGR |= (1 << TIM_EGR_UG);
37
  
38
39
  /* TIM enable counter */
40
  TIM_Cmd(TIM1, ENABLE);

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.