stm32 timer-synchronisation

Gast #4857577
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?
Gast #4857581
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.
Gast #4857858
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.
(Firma: TU Darmstadt) #4857993
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 :-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.