Hallo,
ich habe auf einer Platine mit einem STM32F4 eine Raumzeigermodulation
implementiert. Da ich die 6 Steuerausgänge leider auf zwei
unterschiedliche PORTS verteilt habe, sieht meine derzeitige Änderung
der Schaltzustände so aus:
1
voidTIM3_IRQHandler(void)
2
{
3
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
4
5
CLEAR_PORTMASKA();
6
CLEAR_PORTMASKB();
7
MyDelayUS(DEADTIME_US);
8
9
if(PWMState&&Frequency.ist>F_MIN){
10
GPIOA->BSRRL=PortBitmuster[Pulszykluszaehler][0];
11
GPIOB->BSRRL=PortBitmuster[Pulszykluszaehler][1];
12
}
13
14
if(++Pulszykluszaehler>7){
15
Pulszykluszaehler=0;
16
}
17
18
TIM3->ARR=Pulszykluszeit[Pulszykluszaehler];
19
TIM_Cmd(TIM3,ENABLE);
20
}
Das ist natürlich mega ineffizient was Schaltverluste angeht, da
pauschal immer alle Schalter ausgeschaltet werden und dann je nach
Tabelle die 3 neu zu setzenden Schalter geschaltet werden. Hat jemand
einen Vorschlag wie man das optimieren könnte.
Hier noch die Tabelle:
Du kannst das Bitmuster zunaechst in eine Variable schreiben, dann
entsprechend alle neuen Low-Bit auf Null setzen (die uebrigen Bit
koennen auf Low oder High gewesen sein und bleiben), anschliessend die
Deadtime abwarten und dann alle High-Bit setzen.
Wuerde das von den Schaltzustaenden her funktionieren?