Forum: Mikrocontroller und Digitale Elektronik PWM-Frequenzwandlung mit Arduino?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ths S. (motorburner)


Lesenswert?

Hallo zusammen,

in einem Bestandskühlsystem ist ein Lüfter verbaut, welcher im Moment 
mittels Koppelrelais 0/1 gesteuert wird.
Zur Senkung der Lautstärke soll zukünftig eine PWM-Ansteuerung 
eingesetzt werden, hierfür benötige ich eine PWM-Endstufe.

Der Lüfter soll lt. Hersteller mit einer Frequenz von 10kHz angetaktet 
werden und hat eine Nennstromaufnahme von 20A bei 12V.

Mir steht bereits ein PWM-Signal zur Verfügung, welches folgende 
Eigenschaften hat:
- Open-Collector-Ausgang -> Ausgabe des Signals über Kollektorwiderstand 
oder PNP
- unter Verwendung eines Kollektorwiderstandes/PNP: High-Pegel 12V
- Frequenz: 10-250Hz einstellbar
- Tastverhältnis 0-100% temperaturabhängig

Ich möchte nun unter Verwendung eines Arduinos (welcher, ist mir nicht 
ganz klar, aber im Moment bevorzugt Arduino Nano) die 100Hz-PWM 
einlesen, auf 10kHz bringen und an einen N-MOSFET ausgeben, der dann die 
Antaktung des Lüfters übernimmt, ausgeben.
Ich habe leider von Arduino nicht so wirklich Ahnung, sehe das aber als 
ideales Einstiegsprojekt.
Mir steht für das komplette Modul eine Versorgungsspannung von 12V zur 
Verfügung, ich würde deshalb einen 7805 vorsehen, der den Arduino 
speist. Am PWM-Ausgang des Arduino dann noch ein Gate-Treiber und 
dahinter dann den N-MOSFET mit Schottkydiode.
Eine hardwareseitige Schutzbeschaltung gegen Überspannung ist nicht 
vorgesehen. Die Schaltung soll so einfach wie möglich sein.

Meine Fragen dazu:
- wie löst man am besten die Frequenzvervielfachung softwareseitig?
- wie schützt man den Arduino zukünftig softwareseitig vor unbefugter 
Umprogrammierung?
- taugt der Logik-Level-MOSFET Typ IRLB8748PBF als Endstufe?

Beste Grüße!

von Peter D. (peda)


Lesenswert?

Ths S. schrieb:
> - wie löst man am besten die Frequenzvervielfachung softwareseitig?

Man mißt die 100Hz PWM über den Capture Input und gibt die PWM über 
einen weiteren Timer aus.

von Obelix X. (obelix)


Lesenswert?

Ths S. schrieb:
> - wie löst man am besten die Frequenzvervielfachung softwareseitig?

Mit Timer Impulslänge des Eingangs messen -> umrechnen -> Wert in Timer 
für Ausgangs PWM setzen

von Falk B. (falk)


Lesenswert?

Ths S. schrieb:
> in einem Bestandskühlsystem ist ein Lüfter verbaut, welcher im Moment
> mittels Koppelrelais 0/1 gesteuert wird.
> Zur Senkung der Lautstärke soll zukünftig eine PWM-Ansteuerung
> eingesetzt werden, hierfür benötige ich eine PWM-Endstufe.

Mal wieder. Lüftersteuerung per PWM, der Volkssport Nr. 1!

> Der Lüfter soll lt. Hersteller mit einer Frequenz von 10kHz angetaktet
> werden und hat eine Nennstromaufnahme von 20A bei 12V.

Ganz schön viel.

> Mir steht bereits ein PWM-Signal zur Verfügung, welches folgende
> Eigenschaften hat:
> - Open-Collector-Ausgang -> Ausgabe des Signals über Kollektorwiderstand
> oder PNP
> - unter Verwendung eines Kollektorwiderstandes/PNP: High-Pegel 12V
> - Frequenz: 10-250Hz einstellbar
> - Tastverhältnis 0-100% temperaturabhängig
>
> Ich möchte nun unter Verwendung eines Arduinos (welcher, ist mir nicht
> ganz klar, aber im Moment bevorzugt Arduino Nano) die 100Hz-PWM
> einlesen, auf 10kHz bringen und an einen N-MOSFET ausgeben, der dann die
> Antaktung des Lüfters übernimmt, ausgeben.

Kann man machen.

> Ich habe leider von Arduino nicht so wirklich Ahnung, sehe das aber als
> ideales Einstiegsprojekt.
> Mir steht für das komplette Modul eine Versorgungsspannung von 12V zur
> Verfügung, ich würde deshalb einen 7805 vorsehen, der den Arduino
> speist.

Den kann man direkt mit 12V speisen, der hat einen Spannungsregler an 
Bord (Eingang VIN).

> Am PWM-Ausgang des Arduino dann noch ein Gate-Treiber und
> dahinter dann den N-MOSFET mit Schottkydiode.

So sieht's aus.

> - wie löst man am besten die Frequenzvervielfachung softwareseitig?

Man stellt einen freien Timer auf 10kHz ein. Fertig.

> - wie schützt man den Arduino zukünftig softwareseitig vor unbefugter
> Umprogrammierung?

Wozu? Ist dein Projekt so geheim und kritisch?

> - taugt der Logik-Level-MOSFET Typ IRLB8748PBF als Endstufe?

Ist OK.

von Falk B. (falk)


Lesenswert?


von Michael B. (laberkopp)


Lesenswert?

Ths S. schrieb:
> Versorgungsspannung von 12V zur Verfügung, ich würde deshalb einen 7805
> vorsehen

Wenn deine Versorgungsspannung ein KFZ Bordnetz ist, überlebt der nicht 
lange.

https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.23

Es gibt dafur übrigens feine Lüfter mit eingebauter PWM.

Ths S. schrieb:
> und hat eine Nennstromaufnahme von 20A bei 12V.

Wenn der MOSFET direkt die 12V des Lüfters takten soll, reicht nicht die 
Nennstromaufnahme sondern man muss den 
Anlaufstrom=Blockierstrom=12V/Innenwiderstand zu Grunde legen, leicht 
200A.

Dafür verwendet man zwischen Arduino und MOSFET besser einer 
Gate-Treiber damit das Umschalten schneller erfolgt. Die Freilaufdiode 
muss auch die 20A aushalten. Eine aktive Freilaufschaltung, also 2 
MOSFETs in Halbbrücke, verringert die Verlustleistung. Dafur gibt es 
fertige Halbbrückentreiber wie IR2184.

Klügere Leute verwenden überstromgeschützte Treiber wie LT1158 und 
brauchen dann keine 200A MOSFETs.

von Ths S. (motorburner)


Lesenswert?

Moin,

Michael B. schrieb:
> Wenn deine Versorgungsspannung ein KFZ Bordnetz ist, überlebt der nicht
> lange.

es handelt sich um die Hydraulikkühleinheit eines Gabelstaplers. der ist 
teilweise in der Nachtschicht außen zu laut, weshalb über die Verwendung 
einer PWM-Steuerung nachgedacht wird.

Michael B. schrieb:
> Es gibt dafur übrigens feine Lüfter mit eingebauter PWM.

Die gibt es, aber die verwendeten Lüfter sollen weiter in Gebrauch 
bleiben.

Ich werde Anfang kommender Woche mal einen Stromlaufplan zusammenbasteln 
und dann hier posten, die Verwendung eines LT1158 sieht interessant aus.

von Alexander (alecxs)


Lesenswert?

hier noch was zur Programmierung des Arduino zum Lesen des 
Eingangsignals

Alexander schrieb:
> Mit einer Summe pulseIn(Pin, HIGH) + pulseIn(Pin, LOW) bekommst Du die
> Frequenz und damit kannst Du Duty cycle = pulseIn ÷ Summe berechnen.

von Frank O. (fop)


Lesenswert?

Schau Dir mal den Arduino Mega 2560 an. Der hat mehr Timer.

von Falk B. (falk)


Lesenswert?

Frank O. schrieb:
> Schau Dir mal den Arduino Mega 2560 an. Der hat mehr Timer.

Wozu? Der Nano mit dem 328 reicht. Das ist sogar praktisch nachgewiesen, 
mit den noch kleineren ATtiny24.

Beitrag "Re: PWM Signal ( 5V, Pulslänge 1-2ms) für Servomotor in 0-10v umsetzen"

Es reicht sogar ein ATtiny13. Denn dieser Wandler muss keine große 
Geschwindigkeit erreichen, einfach die Eingangs-PWM mit RC-Filter in 
Gleichspannung wandlen, mit ADC einlesen und einen PWM-Ausgang 
ansteuern. Fertig.

von Alexander (alecxs)


Lesenswert?

Könnte man so machen wenn man die Arduino IDE/Libraries nicht nutzen 
wöllte. Sonst wäre pulseIn() einfacher. Die ATtiny hätten wohl auch 
Fuses / Lockbits Funktionalität, was wohl mangels Pins auch mal 
unbeabsichtigt passiert. Wer sich damit auskennt.

https://forum.arduino.cc/t/understanding-lock-bits-fuse-bits-and-code-security/979657

: Bearbeitet durch User
von Ths S. (motorburner)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin heute mal dazu gekommen, einen ersten Schaltplanentwurf 
fertigzustellen, siehe Anhang.
- RSense wurde für 30A dimensioniert
- Supressordioden für 15/18V wurden eingeplant
- Kl. 15 als Erkennung "Gabelstapler an" eingeführt, damit habe ich vor, 
das Ganze bei abgeschaltetem Stapler nachzukühlen

Schaut gerne mal drüber und lasst eure Kommentare da. Wenn das von eurer 
Seite aus da Go bekommt, würde ich layouten.

von Norbert (der_norbert)


Lesenswert?

Ths S. schrieb:
> - RSense wurde für 30A dimensioniert

Das wären 900 Quadrat-Ampere mal 5e-3Ω.
Also 4.5W. Kann er das ab?

von Ths S. (motorburner)


Lesenswert?

Die Leistung über Rsense ist noch mein Problem. Habe 
DPAK-Dickschichtwiderstände gefunden, die gibt es aber nur ab 10m, 
werden also 2 parallel.

Alternativ wäre frei gewickelter Widerstandsdraht THT frei fliegend.

Alternative wäre den Strom auf den Nennstrom von 20A zu begrenzen, aber 
ob das Anlaufverhalten dann noch befriedigend ist..

von Michael B. (laberkopp)


Lesenswert?

Ths S. schrieb:
> Schaut gerne mal drüber

Arduino nano an bis zu 18 V ?

Das wird der nicht überleben.

von Falk B. (falk)


Lesenswert?

Ths S. schrieb:
> Die Leistung über Rsense ist noch mein Problem. Habe
> DPAK-Dickschichtwiderstände gefunden, die gibt es aber nur ab 10m,
> werden also 2 parallel.

Naja.

> Alternativ wäre frei gewickelter Widerstandsdraht THT frei fliegend.

Kann funktionieren oder auch nicht. Wenn der zuviel Induktivität hat, 
geht's schief.

> Alternative wäre den Strom auf den Nennstrom von 20A zu begrenzen, aber
> ob das Anlaufverhalten dann noch befriedigend ist..

Man kann die Strombegrenzung im Treiber auch weglassen und einen 
einfachen Halbbrückentreiber nehmen. Wenn man die PWM langsam hochfährt, 
gibt es auch keinen großen Anlaufstrom. Klar, gegen Blockieren und 
andere Defekte ist man dann nicht geschützt, bestenfalls mit einem 
schnellen Sicherungsautomaten.
Wichtig ist vor allem der Aufbau und die Leitungsfühung. Sternförmige 
Masse an C6.
Um den Spannungsregler vom Arduino ein wenig zu entlasten, könnte man 
noch eine 6,8V, 1,3W Z-Diode in Reihe zu Vin schalten.
Es fehlt noch ein 10k Pull-Down Widerstand an U1/Pin 6, damit der sicher 
auf LOW liegt, wenn dein Arduino programmiert wird.

von Alexander (alecxs)


Lesenswert?

Michael B. schrieb:
> Arduino nano an bis zu 18 V ?
> Das wird der nicht überleben.

Arduino ist doch 5 V da brauchst Du noch einen Spannungsregler 
dazwischen.

https://www.pollin.de/p/spannungsregler-tle4271-170150

Ths S. schrieb:
> - Supressordioden für 15/18V wurden eingeplant

fehlt da nicht noch eine Sicherung, oder sollen die geopfert werden?

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Alexander schrieb:
> Michael B. schrieb:
>> Arduino nano an bis zu 18 V ?
>> Das wird der nicht überleben.
>
> Arduino ist doch 5 V da brauchst Du noch einen Spannungsregler
> dazwischen

Der Arduino HAT einen Spannungsregler, aber meist nur LD1117 bis 12V.

von Ths S. (motorburner)


Lesenswert?

Guten Abend,

Falk B. schrieb:
> Um den Spannungsregler vom Arduino ein wenig zu entlasten, könnte man
> noch eine 6,8V, 1,3W Z-Diode in Reihe zu Vin schalten.

Super Idee, werde ich direkt so einplanen.

Falk B. schrieb:
> Es fehlt noch ein 10k Pull-Down Widerstand an U1/Pin 6, damit der sicher
> auf LOW liegt, wenn dein Arduino programmiert wird.

Werde ich genau so machen. Für den PWM-Eingang muss ich das nicht 
machen, richtig?

Alexander schrieb:
> fehlt da nicht noch eine Sicherung, oder sollen die geopfert werden?

Ich habe mal irgendwo hier im Forum gelesen, dass Supressordioden nicht 
direkt beim 1. Auslösen beschädigt werden. Ich kann aber sicherlich noch 
2 5x20mm Feinsicherungen unterbringen, alternativ irgendwelche 
selbstrückstellenden.

Danke Euch!

von Alexander (alecxs)


Lesenswert?

So genau kann ich Dir das nicht sagen, bei mir ist noch nie der 
Überspannungsfall eingetreten. Bei Varistoren leuchtet es mir ein, die 
verringern ihren Widerstand und werden einfach selbst zum Verbraucher 
und verheizen die Energie.

TVS Dioden werden leitend, d.h die schließen doch nur die 
Spannungsquelle kurz? Da muss irgendwas durchbrennen, mangels Widerstand 
geht ja der Strom hoch.

Ob die Feinsicherung schnell genug ist?

Lothar M. schrieb:
> vor deine TVS-Diode T3 muss eine Sicherung, die im Fehlerfall auslöst,
> noch bevor die Siliziumschmelze in der TVS-Diode beginnt

: Bearbeitet durch User
von Manfred P. (pruckelfred)


Lesenswert?

Michael B. schrieb:
>> Arduino ist doch 5 V da brauchst Du noch einen Spannungsregler
>> dazwischen
> Der Arduino HAT einen Spannungsregler, aber meist nur LD1117 bis 12V.

.. und man weiß nicht genau, wieviel Verlustleistung man zuverlässig weg 
bekommt.

Ths S. schrieb:
> Falk B. schrieb:
>> Um den Spannungsregler vom Arduino ein wenig zu entlasten, könnte man
>> noch eine 6,8V, 1,3W Z-Diode in Reihe zu Vin schalten.
> Super Idee, werde ich direkt so einplanen.

Ich würde einen Spannungsregler verwenden, LM7808 oder 09 oder 10 oder 
einen 7805 mit LED im Fußpunkt - was ich gerade da habe. Der xx1117-5 
auf den Nanos regelt bis etwa 6,5V herunter sauber.

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.