Bei mir arbeitet die Fault-Logik des dspic33fj64gs610 nicht, wie von mir
erwartet, bzw. sie scheint mir überhaupt nicht aktiv zu sein.
1 | FCLCON1bits.FLTPOL = 1; // The selected Fault source is active-low
|
2 | IOCON1bits.FLTDAT = 1; // If Fault active, then FLTDAT<1> provides data for PWM1H and FLTDAT<0> provides data for PWM1L
|
3 | FCLCON1bits.FLTSRC = 29; // Fault Control Signal Source Select bits for PWM Generator 1 => Fault22/Pin58 (FLT1H || FLT1L)
|
4 | FCLCON1bits.FLTMOD = 1; // The selected Fault source forces PWM1H, PWM1L pins to FLTDAT values (cycle)
|
5 | FCLCON1bits.IFLTMOD = 0; // Normal Fault mode: Current-Limit mode maps CLDAT<1:0> bits to the PWM1H and PWM1L outputs. The PWM Fault mode maps FLTDAT<1:0> to the PWM1H and PWM1L outputs.
|
6 | FCLCON1bits.CLMOD = 0; // Current-Limit mode is disabled
|
Da ich zusätzlich
1 | IOCON1bits.POLH = 0; // PWM1H pin is active-high
|
2 | IOCON1bits.POLL = 1; // PWM1L pin is active-low
|
konfiguriert habe, erwarte ich eigentlich bei Auftreten von
Fault22/Pin58 == low (und Aufruf des entsprechend programmierten
Interrupts), dass PWM1H == low und PWM1L == low von der
dspic33fj64gs610-Hardware ausgegeben wird - verstehen könnte ich auch
noch PWM1H == low und PWM1L == high (wenn der Inhalt von FLTDAT <1:0> ==
0x01 direkt, unter Nichtbeachtung von IOCON1bits.POLH und
IOCON1bits.POLL, an die Ausgänge durchgereicht wird), ich messe aber
immer nur PWM1H == high und PWM1L == low.
Fällt jemanden etwas auf, was ich vergessen habe, zu konfigurieren?