Pagina 1 di 1

STM32 timer comparatore

MessaggioInviato: 21 mag 2013, 23:36
da silvio93
Ciao a tutti,
sto cercando di rilevare la distanza tramite il seguente sensore: http://www.settorezero.com/wordpress/il-sensore-ad-ultrasuoni-hc-sr04/, per stamparla su display successivamente.

Premetto che il sensore funziona, perché genero un PWM che mi da un impulso da circa 20us e sull'oscilloscopio rilevo l'echo, e riconvertendolo mi da la misura in cm.

Il problema è che non ho ben capito come settare il TIM1 per catturare l'echo prodotto dal sensore e come leggere il valore del registro.

Codice: Seleziona tutto
/* GPIOA Configuration:TIM1 Channel1 as alternate function open-drain */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   
// enable timer clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);
   
   TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
   TIM_ICInitStructure.TIM_ICPrescaler = 0;
   TIM_ICInitStructure.TIM_ICFilter = 0;
   
   TIM_ICInit(TIM1 , &TIM_ICInitStructure);
   
      TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;
   TIM_ICInitStructure.TIM_ICPrescaler = 0;
   TIM_ICInitStructure.TIM_ICFilter = 0;
   
   TIM_ICInit(TIM1 , &TIM_ICInitStructure);
   
   TIM_SelectInputTrigger(TIM1 , TIM_TS_TI1FP1);
   TIM_SelectSlaveMode(TIM1 , TIM_SlaveMode_Reset);
   TIM_SelectMasterSlaveMode(TIM1 , TIM_MasterSlaveMode_Enable);
   
   while(1){
   capture = TIM_GetCapture1(TIM1);
   
   lcd_pos(0,1);
   printf("Temp: %d", capture);
   }


Questo è il codice, se qualcuno mi spiegasse cosa fanno di preciso i settaggi del timer gliene sarei grato.
Grazie in anticipo

Re: STM32 timer comparatore

MessaggioInviato: 23 mag 2013, 11:40
da silvio93
Nessuno ha consigli da darmi?
Scusate l'insistenza ma prorpio non riesco a capire come configurare i timer in input capture, in modo da misurare il tempo di un impulso.
Cercando su google non ho trovato una spiegazione esaustiva e dal datasheet non ho capito molto.
A grandi linee credo di dover configurare un timer in input e far in modo che inizi a contare su un fronte di salita e generare l'interrupt sul fronte di discesa, e il tempo che impiega dovrebbe corrispende la lunghezza dell'impulso.
Ogni consiglio è ben accetto :-)

Re: STM32 timer comparatore

MessaggioInviato: 23 mag 2013, 12:08
da simo85
silvio93 ha scritto:e dal datasheet non ho capito molto.


Se non lo linki, nemmeno noi possiamo capire molto. :)

Re: STM32 timer comparatore

MessaggioInviato: 23 mag 2013, 12:21
da silvio93

Re: STM32 timer comparatore

MessaggioInviato: 23 mag 2013, 12:27
da simo85
Dall'altro thread non ho più osservato il documento, sempre che sia lo stesso.

Ma a quale pagina si trova la descrizione?

Re: STM32 timer comparatore

MessaggioInviato: 23 mag 2013, 12:30
da silvio93
Il datasheet è sempre lo stesso
l'imput capture inizia a 225

Re: STM32 timer comparatore

MessaggioInviato: 26 mag 2013, 1:17
da silvio93
Allora nessuno riescie a darmi una mano?

Re: STM32 timer comparatore

MessaggioInviato: 26 mag 2013, 7:15
da marco438
Sollecitare le risposte (e questo e' il secondo solllecito) e' cosa poco gradita sul forum.
Se qualcuno ha la capacita' e la voglia di risponderti, lo fara' a tempo debito.