PWM PIC16F1788


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 %.

Het menselijk oog reageert niet zo snel, film (24fps) en televisie (25fps) geven ook een vloeiend beeld terwijl dat allemaal verschillende beelden achter elkaar zijn. Een normale gloeilamp op 230VAC knippert 100 keer per seconde. Dat zie je ook niet.

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

Special Member

Dit is de werking van een PWM signaal "links". Op het rechtse plaatje staat een PFM signaal, daar is de pulsbreedte een vast gegeven en varieert de frequentie.

Bij pwm is het zo dat de frequentie vast is en dat de pulsbreedte varieert. Stel dat je de frequentie instelt op 10KHz dan blijft dat zo, alleen de pulsbreedte wordt aangepast.

Hier een klein voorbeeld:

pic basic code:



Declare Adin_Res = 8         ; resolutie 8 bits
Declare Adin_Tad = frc       ; set RC osc
Declare Adin_Stime = 50      ; sample tijd 5

Declare CCP1_Pin PORTB.0     ; PWM uitgang

Dim POTMETER As Byte

START:

    POTMETER = ADIn 0
    
    HPWM 1,POTMETER,10000
    
GoTo START.

END

Je selecteert eerst je HPWM poort en je maakt een variabele aan bijv. potmeter. Dat wordt in dit geval een byte. De potmeter lees je in met een analoge ingang, de waarde van je pulsbreedte kan nu variëren tussen de 0 en 255.

Je kunt het ook via drukknoppen doen, dan maak je een teller aan die je via de drukknoppen bediend. De teller laat je dan van 0 tot 255 tellen en van 255 tot 0. Dat kun je doen met DEC en INC.

Wat jij nu gedaan hebt is twee uitgangen aan elkaar geknoopt en dat gaat niet, dat zal even werken maar niet voor lang, dat gaat stuk. Dus gewoon één HPWM uitgang gebruiken en zoals Arco al zei, zet er een fet driver tussen.

Misschien heb je dit al eens gelezen, maar misschien ook niet. Staat het één en ander in over mosfets en drivers.

https://www.circuitsonline.net/artikelen/view/41

Als je haar maar goed zit, GROETEN LAMBIEK.

Ik denk dat TS bedoelt: "hoe kan de lamp zwakker gaan branden door pwm terwijl ik met een andere pin de fet op +5v houd"

Da's het gevolg van hoe i/o ports nu eenmaal werken. Een ST pin is aan bij 0.8*Vdd, en uit bij 0.2*Vdd, daartussen kan van alles gebeuren.
Voeg daarbij dat pinnen beter kunnen sinken als sourcen en je ziet dat bij sinken de pwm pin gaat winnen.
Maar 't blijft een heel slecht idee om de boel zo te misbruiken...

(als je 't licht uit wilt doen steek je toch ook geen vleesvork in het stopcontact?... ;) )

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

Special Member

Op 6 maart 2020 10:06:38 schreef Arco:
Voeg daarbij dat pinnen beter kunnen sinken als sourcen en je ziet dat bij sinken de pwm pin gaat winnen.
Maar 't blijft een heel slecht idee om de boel zo te misbruiken...

We wachten in spanning af. :)

Als je haar maar goed zit, GROETEN LAMBIEK.
ritmeester

Golden Member

De afgelopen week ook met andere dingen bezig geweest maar ook hiermee.

Even nog voor de duidelijkheid:
CH1 ... CH8 hebben een simpele LED knipperfunctie. PWM1 moet de LEDs dimmen tot een bepaalde ingestelde waarde.

(Deze schakeling staat nu op een breadboard.)

Dit werkt "goed" bij CH-1 maar komt de rest erbij dan valt PWM1 langzaam uit. De pin PWM1 "trekt het dan niet meer".

Ook met de tip die Arco gaf om gebruik te maken van een TC4427 (Mosfet Driver) krijg ik geen goed resultaat als ik meerdere kanalen aansluit.

Hieronder een simpele versie van het schema met aansluitingen waar het om gaat.

In het schema staan nu 3K3 resistors. (het was 0R om schematechnisch netten aan elkaar te koppelen)

Misschien dat iemand met een idee kan komen om dit toch werkend te krijgen.

I love it when a plan comes together !

Wat doen CH-1 t/m 8, je wilt de leds toch met pwm aansturen, doe dat dan ook.

Misschien helpt het als je je doel duidelijk omschrijft, en hoe je verwacht dat jouw oplossing werkt.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.

De hele CH1...CH4 weglaten, de 3k3 doorverbinden. Zo als het nu is werkt de PWM natuurlijk nooit...

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

Uiteindelijk komt het dan neer op de software om het geheel netjes te laten werken.

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

Special Member

Op 13 maart 2020 18:26:24 schreef ritmeester:
Dit werkt "goed" bij CH-1 maar komt de rest erbij dan valt PWM1 langzaam uit. De pin PWM1 "trekt het dan niet meer".

Lees je wel wat we geschreven hebben? Dit kan niet goed werken, want je staat de boel in sluiting te trekken.

Ook met de tip die Arco gaf om gebruik te maken van een TC4427 (Mosfet Driver) krijg ik geen goed resultaat als ik meerdere kanalen aansluit.

Daar gebeurt precies het zelfde zoals hier boven geantwoord.

Misschien dat iemand met een idee kan komen om dit toch werkend te krijgen.

Ik weet nog steeds niet wat je nu precies wil. Wil je alles laten knipperen maar dan gedimd? Of anders?

Als je haar maar goed zit, GROETEN LAMBIEK.

Hunter RitMeester, je zou eens een lijstje moeten maken wat je echt wilt.

Bv.

- 8 Leds gezamelijk laten dimmen met 1 pwm signaal.
- bediening hiervan via een potentiometer/ + en - drukknoppen...
- elke led apart kunnen uitschakelen met ik weet niet wat.
- enz...

LDmicro user.

Als het schema op zich al niet deugt, gaat een extra TC4427 daar geen verandering in brengen... ;)

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

Special Member

Op 13 maart 2020 18:26:24 schreef ritmeester:
Misschien dat iemand met een idee kan komen om dit toch werkend te krijgen.

Als het moet werken zoals ik denk dat het moet werken, kun je dit proberen. Maar misschien zit ik er helemaal naast hoor, het is niet helemaal duidelijk wat je wil. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Als TS zelf geen duidelijk antwoord kan geven of een schema kan produceren is dit misschien wel de beste oplossing.

De zinloosheid des levens is nog geen rechtvaardiging voor sisyphusarbeid.

Hunter, mijn bericht was voor Ritmeester bedoeld, heb het ondertussen aangepast, sorry.

LDmicro user.