STM32F303K8 Input Capturing via internen Komparator

OP #5143248
Hallo,

ich möchte gerne Pulse mit Lowpegel von ca. 1V und Highpegel von ca 2,2V 
messen.
Hierfür wollte ich den COMP2 des uC nutzen und den Ausgang intern direkt 
auf den Input-Capture-Eingang des Timer2 leiten.

Der Komparator funktioniert soweit gut, als Referenz nutze ich den DAC1, 
die Pegel werden sauber auf 0V und 3.3V umgesetzt.

Leider wird der Capture Eingang des Timers nicht getriggert, der Timer 
zählt aber im Capture-Register tut sich nix.

Ich nutze zur Konfiguration STM32CubeMX und die HAL Teiber...

Hat jemand ne Idee wo es hakt?


P.s. wenn ich eine Kabelbrücke vom Augangspin des Komparators zum 
IC-Eingangspin des Timer2 lege funktioniert es. Laut Datenblatt soll das 
aber auch intern funktionieren...
OP #5143838
Hier noch der von CubeMX generierte Initialisierungscode für die 
entsprechende Peripherie.

Der Timer 2 mit Channel 4 ist auf Input Capturing direct konfiguriert 
und der Comparator 2 Ausgang auf den Timer 2 Channel 4

Vor der while(1) Schleife habe ich die beiden Module mit den Start 
Routinen gestartet:
1
  HAL_TIM_IC_Start (&htim2, TIM_CHANNEL_4);
2

3
  HAL_COMP_Start (&hcomp2);

1
static void MX_COMP2_Init(void)
2
{
3

4
  hcomp2.Instance = COMP2;
5
  hcomp2.Init.InvertingInput = COMP_INVERTINGINPUT_DAC1_CH1;
6
  hcomp2.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;
7
  hcomp2.Init.Output = COMP_OUTPUT_TIM2IC4;
8
  hcomp2.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
9
  hcomp2.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;
10
  hcomp2.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
11
  if (HAL_COMP_Init(&hcomp2) != HAL_OK)
12
  {
13
    _Error_Handler(__FILE__, __LINE__);
14
  }
15

16
}
1
static void MX_TIM2_Init(void)
2
{
3

4
  TIM_MasterConfigTypeDef sMasterConfig;
5
  TIM_IC_InitTypeDef sConfigIC;
6

7
  htim2.Instance = TIM2;
8
  htim2.Init.Prescaler = 0;
9
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
10
  htim2.Init.Period = 4294967295;
11
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
12
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
13
  if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
14
  {
15
    _Error_Handler(__FILE__, __LINE__);
16
  }
17

18
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
19
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
20
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
21
  {
22
    _Error_Handler(__FILE__, __LINE__);
23
  }
24

25
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
26
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
27
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
28
  sConfigIC.ICFilter = 0;
29
  if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
30
  {
31
    _Error_Handler(__FILE__, __LINE__);
32
  }
33

34
}
OP #5144257
Zur Info: Ich konnte das Problem lösen in dem ich beim Input Capture Pin 
(PA3) vom Timer 2 den Pull down aktiviere...

Leider war das im Datenblatt so nicht ersichtlich, ich habs letztendlich 
nur durch Zufall rausbekommen....

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.