PWM PIC16F1788

ritmeester

Golden Member

Ik heb even wat in elkaar geknutseld op een breadboard maar ik vraag mij af hoe dit kan werken? Ik moet er wel bij zeggen dat ik tot nu weinig heb gedaan met PWM. Het werkt dus perfect maar ik snap niet hoe :-)

Ik maak gebruik van een PIC16F1788 met acht uitgangen voor LEDs. Om deze te dimmen wil ik gebruik maken van PWM.

(Q9_OUT gaat naar een LED)

Schema van één configuratie:

Je ziet dat de (Logic Level) MOSFET wordt aangestuurd via CH-1 (RC0). Deze gaat aan en uit. Dus 5V of 0V. Met een PWM channel (RB0) kan ik de helderheid regelen van de LED als deze aan is.

Hoe kan dit? Ik mijn veronderstelling zie ik dat de MOSFET 5V of 0V krijgt maar toch kan ik dimmen.

------

De 0R resistor zit er nu tijdelijk om netten te scheiden in Eagle. Later komt hier een simpele "PCB doorverbinding"

I love it when a plan comes together !

Ik zie het nut vah die CH -1 niet? (je kunt alles toch met die PWM output doen?)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
ritmeester

Golden Member

Op 4 maart 2020 17:54:05 schreef Arco:
Ik zie het nut vah die CH -1 niet? (je kunt alles toch met die PWM output doen?)

Thanks Arco, Zal best maar dat is niet mijn vraag :-)

I love it when a plan comes together !

De PWM output schakelt gewoon de fet aan of uit. Als je de duty-cycle kleiner maakt, gaat de lamp zwakker branden (de gemiddelde spanning wordt lager)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
PE9SMS

Special Member

Met de pulsbreedte regel je de gemiddelde spanning..
e: te laat :)

[Bericht gewijzigd door PE9SMS op 4 maart 2020 18:11:52 (13%)]

This signature is intentionally left blank.
ritmeester

Golden Member

Ok, maar als CH-1 (RC0) actief is (dus de mosfet is open) hoe kan dan het PWM signaal dit beïnvloeden ?

I love it when a plan comes together !

De twee pinnen zitten nu aan elkaar geknoopt (wat een slechte gewoonte is...), de sterkste pin gaat gewoon winnen...
(of ze moeten tijdelijk een van de pinnen als input schakelen)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Als RC0 hoog is wordt die pulsbreedtegemoduleerd kortgesloten door RB0, een aparte aanpak.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.
ritmeester

Golden Member

Op 4 maart 2020 18:46:40 schreef Arco:
... de sterkste pin gaat gewoon winnen...

Op 4 maart 2020 18:53:48 schreef Hunter:
... een aparte aanpak.

Ok, begin het te begrijpen. Maar is deze setting levensvatbaar ? Of moet R23 een andere waarde krijgen ?

I love it when a plan comes together !
Lambiek

Special Member

Gewoon een poortpin gebruiken, wat je nu doet is knoeiwerk in mijn ogen. Alleen via pwm dus.

Als je haar maar goed zit, GROETEN LAMBIEK.

Dit is m.i. niet levensvatbaar.

R23 is niet relevant, RC0 en RB0 zijn direct doorverbonden, dat is je probleem.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.

RC0 en RB0 zijn direct doorverbonden.

In dit project dus niet meer dan een PWM gestuurde kortsluiting tussen 2 uitgangen

Geheel aan of uit is niets anders als de pwm duty-cycle op 100% of 0% zetten... (daar is geen extra pin bij nodig)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Ik ben wel benieuwd wat het einddoel is, want 8 leds onafhankelijk pwm-dimmen gaat op deze manier niet lukken. De controller heeft maar 3 pwm-kanalen.

Dus voordat we allemaal onder de motorkap staan te kijken waarom een auto met vierkante wielen niet rijdt, graag wat meer info over de totale opzet.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.
Lambiek

Special Member

Op 4 maart 2020 20:09:57 schreef Hunter:
...., want 8 leds onafhankelijk pwm-dimmen gaat op deze manier niet lukken. De controller heeft maar 3 pwm-kanalen.

Nu heb je het over HPWM denk?

Maar er is ook nog zoiets als dit.

code:


Pwm
Syntax
Pwm Pin, Duty, Cycles
Overview
Output pulse-width-modulation on a pin, then return the pin to input state.
Operators
Pin is a Port.Pin constant that specifies the I/O pin to use.
Duty is a variable, constant (0-255), or expression, which specifies the analogue level desired
(0-5 volts).
Cycles is a variable or constant (0-255) which specifies the number of cycles to output. Larger
capacitors require multiple cycles to fully charge. Cycle time is dependant on Xtal frequency. If
a 4MHz crystal is used, then cycle takes approx 5 ms. If a 20MHz crystal is used, then cycle
takes approx 1 ms.
Notes
Pwm can be used to generate analogue voltages (0-5V) through a pin connected to a resistor
and capacitor to ground; the resistor-capacitor junction is the analogue output (see circuit).
Since the capacitor gradually discharges, Pwm should be executed periodically to refresh the
analogue voltage.
Pwm emits a burst of 1s and 0s whose ratio is proportional to the duty
value you specify. If duty is 0, then the pin is continuously low (0); if
duty is 255, then the pin is continuously high. For values in between,
the proportion is duty/255. For example, if duty is 100, the ratio of 1s to
0s is 100/255 = 0.392, approximately 39 percent.
When such a burst is used to charge a capacitor arranged, the voltage across the capacitor is
equal to:-
(duty / 255) * 5.
So if duty is 100, the capacitor voltage is
(100 / 255) * 5 = 1.96 volts.
Als je haar maar goed zit, GROETEN LAMBIEK.

Ik gebruik softwarematige 24 kanalen pwm op en pic24 zonder probleem. (48 kanalen zou waarschijnlijk ook nog wel gaan...)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

TS gebruikt RB0, dat is een hardware PWM-uitgang, dat er in software meer mogelijk is weet ik. Daarom ben ik benieuwd naar de verdere opzet van het project.

Ben overigens ook benieuwd hoe je die 'code' in een PIC16F1788 krijgt.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.
ritmeester

Golden Member

Blijkbaar is meer duidelijkheid nodig. De uiteindelijke bedoeling is dat alles 8 leds dimmen met maar één PWM kanaal. Gewoon 8 LEDs, meer is er niet.

Toen ik deze opzet maakte op een breadbord met maar één mosfet dacht ik dat dit niet zou lukken. Maar toch werkte het. Mooi en vloeiend.

Maar omdat ik de werking ervan niet begreep heb ik deze vraag gesteld.

Morgen ga ik 8 mosfets met LEDs aansluiten op het breadboard en laten besturen door maar één PWM kanaal. Gewoon om te kijken wat er gebeurd.

De 8 LEDS laat ik dan aan en uit uit gaan per seconde door PORTC (C0 tot C7). Of gewoon Aan om te testen.

I love it when a plan comes together !

PWM is zoals gezegd alleen maar een kwestie van aan of uit. Hoe langer de 'uit' periode, hoe zwakker de lamp brandt...
Met 8 fets zou ik er wel een driver tussenzetten als de TC4427, die stuurt de fets veel beter aan als een microprocessor pinnetje...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
ritmeester

Golden Member

Op 5 maart 2020 17:30:17 schreef Arco:
Met 8 fets zou ik er wel een driver tussenzetten als de TC4427, die stuurt de fets veel beter aan als een microprocessor pinnetje...

Goede tip Arco. Maar dan nog begrijp ik nog niet HOE dit kan werken. De fet krijgt 5V voor Aan. Hoe kan dan het PWM signaal de led zwakker laten branden als er 5V op fet staat ?

I love it when a plan comes together !

Pic poorten kunnen beter sinken dan sourcen.
Op het moment dat RC0 hoog is en de PWM uitgang laag, gaat de PWM het dus winnen. Andersom natuurlijk ook.

ritmeester

Golden Member

Op 5 maart 2020 18:36:52 schreef Zonnepaneeltje:
Pic poorten kunnen beter sinken dan sourcen.
Op het moment dat RC0 hoog is en de PWM uitgang laag, gaat de PWM het dus winnen. Andersom natuurlijk ook.

Dus als ik jouw versie hoor dan kan het gewoon? Volgens anderen is het een soort kortsluiting.

I love it when a plan comes together !

Het is een zeer slechte schakeling. Je knoopt 2 i/o pinnen aan elkaar en laat dan de ene laag en de andere hoog trekken.
Nog afgezien van het feit dat een van de twee op den duur kapot kan gaan is het een heel onfrisse aanpak. (en ook zinloos; 1 pin kan dat zelfs beter)

De 4427 is nodig, omdat de 8 gates een te zware belasting voor de i/o pin zijn. Door de capaciteit kan 'ie niet meer snel genoeg schakelen.
Daardoor komt de fet onnodig lang in lineair gebied waardoor hij onnodig heet wordt...

[Bericht gewijzigd door Arco op 5 maart 2020 19:37:09 (30%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Op 5 maart 2020 19:25:05 schreef ritmeester:
[...]

Dus als ik jouw versie hoor dan kan het gewoon? Volgens anderen is het een soort kortsluiting.

Nee, het kan niet want je hebt 2 uitgangen aan elkaar hangen, het is in feite een kortsluiting.
Jij vroeg hoe het kan dat het 'werkt' en daar gaf ik antwoord op.

Maar dan nog begrijp ik nog niet HOE dit kan werken. De fet krijgt 5V voor Aan. Hoe kan dan het PWM signaal de led zwakker laten branden als er 5V op fet staat ?

Dat is juist de truc van PWM. De FET wordt inderdaad vol aan en vol uit gestuurd. Maar dat gaat op een hoge frequentie van bijv 1kHz. Als je dan met 1 kHz korte pulsjes aanstuurt (bijv 1000 keer per seconde telkens 0.1 milliseconde aan en 0.9 milliseconde uit) dan is de led het grootste deel van de tijd uit, en maar een klein deel van de tijd aan. Door de hoge frequentie zie je alleen het gemiddelde, dus dan lijkt het alsof de led zwakker licht geeft.
De DutyCycle is dan 10 %.

Als je de pulsen dan bij diezelfde frequentie breder maakt, (bijv 0.9 milliseconde aan en 0.1 milleseconde uit) dan gaat de led langer aan, en de totale hoeveelheid licht wordt veel meer.
De DutyCycle is dan 90 %.