Forum: Mikrocontroller und Digitale Elektronik stm32 timer-synchronisation


von grundschüler (Gast)


Lesenswert?

Ich habe 3 Timer tim2,3,4 die synchron laufen sollen

gestartet wird mit:
1
          TIM_Cmd(TIM2, ENABLE);
2
          TIM_Cmd(TIM3, ENABLE);
3
          TIM_Cmd(TIM4, ENABLE);

gemessen wird mit
1
void TIM2_IRQHandler()
2
{
3
  if(sw_store_ms1u){
4
    store_ms_u=timer_timeout_up_ms;
5
    sw_store_ms1u=0;
6
  }
7
8
  period= speedmult*255/speeddiv;
9
  pulse_vh= speedmult*sinetable[step]/speeddiv;
10
  pulse_vl= speedmult*sinetable[step+24]/speeddiv;
11
  pulse_uh= speedmult*sinetable[step+8]/speeddiv;
12
  pulse_ul= speedmult*sinetable[step+24+8]/speeddiv;
13
  pulse_wh= speedmult*sinetable[step+16]/speeddiv;
14
  pulse_wl= speedmult*sinetable[step+24+16]/speeddiv;
15
16
     TIM2->ARR = period;
17
     TIM2->CCR1 = pulse_vh;
18
     TIM2->CCR2 = pulse_vl;
19
20
21
  step++;
22
  if(step>(maxstep)){
23
    step=0;
24
    speed_ctrl++;
25
  }

messung per ir ausgelöst:
1
      case (198)://Synchronizität prüfen
2
    sw_store_ms1u=1;
3
    sw_store_ms1v=1;
4
    sw_store_ms1w=1;
5
      sw_store_ms2=1;
6
            break;



angezeigt:
1
          if(!sw_store_ms1w && sw_store_ms2){
2
             sw_store_ms2=0;
3
             lg(3,1);
4
             li(store_ms_u);lw("/");
5
             li(store_ms_v);lw("/");
6
             li(store_ms_w);lw("/");
7
           }
angezeigt werden für u,v,w immer identische Werte, dass heißt jeweils 
die gleiche ms.

Reicht die Genaigkeit der Messung aus und sind die timer für einen fu 
somit ohne weitere Maßnahmen ausreichend synchron?

von W.S. (Gast)


Lesenswert?

grundschüler schrieb:
> Ich habe 3 Timer tim2,3,4 die synchron laufen sollen

Das ist in sich unlogisch.

Entweder die 3 Timer sind alle exakt gleich programmiert, dann laufen 
sie auch synchron (und du würdest nur einen brauchen, das die anderen 
redundant sind), oder sie sind unterschiedlich programmiert, dann laufen 
sie schon nach kurzer Zeit nicht mehr synchron.

Also nimm einen einzigen Timer und überdenke dein Konzept.

W.S.

von grundschüler (Gast)


Lesenswert?

W.S. schrieb:
> grundschüler schrieb:
>> Ich habe 3 Timer tim2,3,4 die synchron laufen sollen
>
> Das ist in sich unlogisch.
>
> Entweder die 3 Timer sind alle exakt gleich programmiert, dann laufen
> sie auch synchron (und du würdest nur einen brauchen, das die anderen
> redundant sind), oder sie sind unterschiedlich programmiert, dann laufen
> sie schon nach kurzer Zeit nicht mehr synchron.
>
> Also nimm einen einzigen Timer und überdenke dein Konzept.
>
> W.S.

habe den systick auf 10us reduziert und sehe jetzt teilweise um 1 
abweichende Werte. Die 3 timer laufen aber anscheinend synchron. eine 
Abweichung könnte dann entstehen, wenn die ISRs, die ja nicht paralell 
sondern hintereinander laufen, zu einer Verschiebung führen. Dafür ist 
die Dauer der irq s aber offensichtlich zu klein.


Eigentlich müsste es eine Verschiebung geben denn
         TIM_Cmd(TIM2, ENABLE);
          TIM_Cmd(TIM3, ENABLE);
dauert länger als ein Takt der PWM. D.h. die TIMs müssen vor dem 
Prescaler zwingend unsynchron sein und per Master/slave gestartet 
werden?


3 Timer * 2 Channel wegen 6 Halbbrücken. Ist programmtechnisch für mich 
einfach und ich bekomme kein Geld zurück wenn ich die Timer nicht 
benutze.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Zu den verschiedenen STM32 gibt es Application Notes zur Verschaltung 
der Peripherie untereinander, z.B. AN4651 für den F3. Dort schaust Du 
Dir das Unterkapitel "From TIM to TIM" (z.b. Kap 3.15 für den F3) an. 
Dort siehst DU, welcher Timer welchen Timer starten kann. Für den F3 
kannst Du z.B. F2/3/4 mit TIM1 /15/19 starten. Jetzt musst Du nur noch 
das entsprechende Referenzmanual lesen und das Timer Master/Slave 
Wechselspiel implementieren :-)

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Manche STM32 haben auch Hardware für 3-Phasen Motorsteuerung mit 6 CCR 
Registern. Dann entfällt das Master/Slave Wechselspiel...

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.