Forum: Mikrocontroller und Digitale Elektronik PWM synchronisieren


von Micha S. (e-tec)


Lesenswert?

Guten Morgen zusammen,

ich habe ein kleines ... na gut ein großes Problem.
Ich habe zwei pulsweitensignale, eines ist fest vorgegeben (f= 
2kHz...10kHz). ich lasse einen großen Zähler mitlaufen auf 100ms basis 
(128MHz Prozessor(MPC5567), also von 1 - 12.800.000 tics) und einen 
kleinen zähler welcher mir meine zweite pwm generiert. die pulsweite ist 
mittelpunktsymetrisch, hat also den mittelpunkt des high impulses in der 
mitte des zählers.
die erste pwm wird über den großen zähler gemessen, bei der pos & neg 
flanke bekomme ich die entsprechenden werte in ein register übergeben 
und berechne mir hieraus den mittelwert der eingehenden PWM.
Jetzt muss ich die beiden synchronisieren.
mache mir seit längerem gedanken darüber und habe schon einiges 
ausprobiert, muss ja so gehen das ich mir bei einem call die aktuellen 
zählerwerte auslese und daraus die differenz der mittelpunkte zum 
zählerwert berechne. aber ich schaffe es nicht die beiden zähler in 
relation zueinander zu setzen... ich weiß ich bin kurz vor der lösung 
aber ich denke ich seh den wald vor lauter bäumen nicht mehr...:(
habe id esowfware vor einiger zeit mit workaround berechnungen regler 
etc vor längerem implementiert, damals war aber ein zähler die basis, 
nämlich der kleine. jetzt ist es aber nötig geworden den großen 
einzubauen.
ich hoffe die kurze beschreibung reicht euch...

viele grüße, micha

von Achim M. (minifloat)


Lesenswert?

Micha S. schrieb:
> hat also den mittelpunkt des high impulses in der
> mitte des zählers.

des kleinen Zählers oder wie?
1
 y
2
 ^     >|< Mittelpunkt beider PWM-Signale soll identisch sein?
3
 |   ___|___               _____
4
 |  |   |   | 2-10kHz PWM |     ...
5
 |__|   |   |_____________|
6
 |     _|_                    _
7
 |    | | |   deine PWM      |  ...
8
 |____|   |__________________|
9
 +------------------------------------> t
Meinst du das so wie ichs mal versucht habe mit ASCII zu zeichnen?
Bedenke, wenn die erste PWM-Frequenz sehr schnell variieren kann, dass 
du dir ziemliche Schweinereien einhandelst, weil du nur die 
Perioden-/Pausen-Zeit-Messungen der jeweils vergangenen Periode benutzen 
kannst.

Besteht die Möglichkeit, die erste PWM zu vermessen und dann beide 
Signale mit deinem Prozessor komplett neu zu erzeugen?


mfg mf

von Micha S. (e-tec)


Angehängte Dateien:

Lesenswert?

>
> Besteht die Möglichkeit, die erste PWM zu vermessen und dann _beide_
> Signale mit deinem Prozessor komplett neu zu erzeugen?

Guten Morgen, erst einmal danke für deine antwort!!!
nein diese möglichkeit besteht leider nicht, das erste pwm signal ist 
von dem prüfling und ist (leider) nicht beeinflussbar.

> Meinst du das so wie ichs mal versucht habe mit ASCII zu zeichnen?
> Bedenke, wenn die erste PWM-Frequenz sehr schnell variieren kann, dass
> du dir ziemliche Schweinereien einhandelst, weil du nur die

genau so ist es gedacht (es handelt sich um 2 elektromotoren, gesteuert 
wird das ganze über die stromzeiger generiert aus der pwm, deshalb 
müssen sie erst einmal synchron sein um danach den strom einzustellen, 
also die phasenverschiebung)

> Perioden-/Pausen-Zeit-Messungen der jeweils vergangenen Periode benutzen
> kannst.

das weiß ich, aber diesen tod muss ich wohl sterben. früher oder später 
wird noch ein softwareschalter eingebaut der die frequenzen in sprüngen 
umschalten kann.

soweit ist alles fertig (und hatte ja auch schon wunderbar funktioniert) 
mir geht es nur um die relation von Z1 zu Z2.
Grundgedanke hierbei war die zähler in ein verhältnis zueinander zu 
setzen, so etwa wie im anhang, wobeiu X die zählerdifferenz sein soll 
und C1 der mittelpunkt der eingehenden PWM, sowei C2 der der generierten 
PWM, welchen ich in puls/pause verhältnis sowie v.a. in der frequenz 
beeinflussen kann.
1
                     |        . Zähler eins
2
              C1     |   .    |
3
              \/    .|        |
4
               .     |        |
5
          .          |        |
6
     .               |        |     .
7
.               C2   |        |.
8
      .      .  \/  .|     .      . Zähler zwei
9
   .  |   .  |   .  ||  .  |   .  |
10
.     |.     |.     ||     |.     |
11
                     |
12
               |X|   |
13
|------------->      |        
14
|---------------->   |
15
                  |->|
16
               |---->|
17
                     |
18
                     |->Function call

von Micha S. (e-tec)


Lesenswert?

ich glaube ich hab die lösung, ich pojeziere den mittelpunkt des zweiten 
zählers auf den ersten (ausgehend von den zählständen beim funkt. 
aufruf)
somit müsste ich sie vergleichen können.

melde mich dann wieder wenn es funktioiert, kann aber noch dauern ;)

von Achim M. (minifloat)


Lesenswert?

Nun, du weißt, wo die Mitte des primären Impulses ist. Mit der 
Periodenzeit kannst du Vorhersagen, wo die Mitte des folgenden primären 
Impulses sein wird. Die primäre Pulszeit wurde dabei auch bereits 
gemessen.

Die primäre Pulszeit halbiere ich und multipliziere sie mit dem Tastgrad 
meiner sekundären PWM(0..1).

Die Zeit, die Ich da herausbekomme muss ich nun einmal von der 
vorhergesagten Mittenzeit Abziehen(=Einschaltzeitpunkt der Sekundär-PWM) 
und einmal addieren(=Abschaltzeitpunkt der Sekundär-PWM).

mfg mf

von Micha S. (e-tec)


Lesenswert?

genau, das ist das prinzip. bei mir ist der unterschied das ich nur die 
mittelpunkte benötige da ich bereits eine funktion habe welche mir von 
der übergebenen periodendauer meinen impuls mittensymetrisch realisiert.

mfg e-tec

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.