PWM mit inverted output wird nicht ausgegeben.

Gast #4654668
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!

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