Hallo Leute,
ich habe den BTS3035EJ Low-Side Schalter:
https://www.infineon.com/dgdl/Infineon-BTS3035EJ-DS-v01_00-EN.pdf?fileId=5546d462576f34750157be864ba243a9
Den Schalter konnte ich mit permanenter Spannung am Input Signal
erfolgreich testen. Nur mit der PWM will es nicht klappen. z.B. möchte
ich den Schalter alle 0,5s schalten.
Es funktioniert zwar, aber nicht ganz genau:
Programmiert habe ich das ganze mit dem STM32 nucleo F401RE.
folgendermaßen sieht der Code aus (while-Schleife);
1 | //Low side switch START
|
2 | if (number == 4) {
|
3 | LS_SET_PWM();
|
4 |
|
5 | if(LS_STAT == 0.0 && LS_IN2==1) {
|
6 | //LS_SET_PWM();
|
7 |
|
8 | pc.printf("Status is low\n");
|
9 | pc.printf("Overtemperature!\n");
|
10 | LS_IN = 0;
|
11 | wait(3);
|
12 | } else
|
13 | pc.printf("Status is high\n");
|
14 | }
|
15 | //******************** END ************************
|
LS_SET_PWM(); setzt ein PWM Signal mit einer Periode von 1s und einem
DutyCycle von 50%.
Der if-Teil funktioniert ohne Probleme, wie schon erwähnt, wenn der
Input permanent auf High ist.
So, kommen wir nun zum Punkt, den ich nicht verstehe.
Am Ende der while Schleife ist ein wait_ms(1000); Also eine Sekunde
warten, bis der nächste Durchlauf beginnt.
Verringere ich nun diese Zeit auf z.B. 500ms, dann gibt der PWM Pin
permanent High aus. Ändere ich nun den DutyCycle auf 10% (Periode immer
noch auf 1s), dann messe ich am Oszi eine Periode von 500ms und einen
100ms langen Pegel, welcher ja 10% von 1s ist.
Das selbe Schema funktioniert allerdings mit einem High-Side Schalter
problemlos, auch ohne wait_ms() Befehl.
An den PWM Pins, kann es nicht liegen, habe schon andere ausprobiert.
Was habt ihr für Tipps?