Forum: Mikrocontroller und Digitale Elektronik PWM mit inverted output wird nicht ausgegeben.


von STM32 Einsteiger (Gast)


Lesenswert?

Hallo,

ich benutze ein Nucleo Board mit dem STM32F030R8 drauf. Hier versuche 
ich mit dem Timer 1 eine PWM und dazu passend eine invertierte PWM 
auszugeben.
Die nicht invertierte PWM wird richtig ausgegeben.
Die invertierte PWM wird nicht ausgegeben. Der Port wird richtig 
initialisiert, aber das Tastverhältnis beträgt ständig 0 Prozent.

Das Projekt wurde mit CubeMX/HAL erzeugt.
Sieht hier jemand den Fehler den ich mache?
1
/* TIM1 init function */
2
void MX_TIM1_Init(void)
3
{
4
5
  TIM_MasterConfigTypeDef sMasterConfig;
6
  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
7
  TIM_OC_InitTypeDef sConfigOC;
8
9
  htim1.Instance = TIM1;
10
  htim1.Init.Prescaler = 0;
11
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
12
  htim1.Init.Period = 2000;
13
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
14
  htim1.Init.RepetitionCounter = 0;
15
  HAL_TIM_PWM_Init(&htim1);
16
17
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
18
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
19
  HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);
20
21
  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;
22
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
23
  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
24
  sBreakDeadTimeConfig.DeadTime = 5;
25
  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
26
  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
27
  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
28
  HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig);
29
30
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
31
  sConfigOC.Pulse = 1200;
32
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
33
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
34
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
35
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
36
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
37
  HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2);
38
39
}
40
41
/* TIM14 init function */
42
void MX_TIM14_Init(void)
43
{
44
45
  htim14.Instance = TIM14;
46
  htim14.Init.Prescaler = 1000;
47
  htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
48
  htim14.Init.Period = 50;
49
  htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
50
  HAL_TIM_Base_Init(&htim14);
51
52
}

Der Timer wird initialisiert und mit
1
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
gestartet.

Vielen Dank!

von DauerLutscher (Gast)


Lesenswert?

Du brauchst den advanced timer.

von Stm32 Einsteiger (Gast)


Lesenswert?

Timer 1 ist der advanced timer oder?

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.