Robvansuilen
Met vriendelijke groet, Rob
In een ander topic stelde ik al eens wat vragen mbt tot een raspberry pi. Ik wilde met de PWM van de pi een aantal mosfets aansturen en daarnaast het aantal IO poorten uitbreiden.
Ik had een overfocus op galvanische scheiding, waardoor ik uit het oog verloor dat de Raspberry weliswaar 4 PWM pennen heeft maar slechts 2 Pwm kanalen. Te weinig en dus moest het anders.
Dus terug naar de tekentafel en een andere oplossing gekozen. Het idee was nu; het aantal outputs via IC2 vergroten met de PCA9685. Voor de inputs heb ik dan genoeg poorten op de Pi over. Bovendien neemt de PCA9685 een groot deel van het PWM rekenwerk voor zijn rekening.
Het onderstaande schema bevat:
- PCA 9685 met periferie; gebaseerd op het vrijelijk beschikbare schema van adafruit.
- Level converter van 3,3v naar 5v voor de IC2. ook gebaseerd op een ontwerp van adafruit.
- Kanalen 0-3 van de PCA9685 sturen op hun beurt 4 mosfets aan zodat ik 12v lasten kan aansturen (RGB strip motoren enz.
- I@c poort @5v logiclevel voor schermpjes enz.
- Placeholder voor een DC-DC converter. (mini560) deze is gerate op 3amp. En er zijn na de 5v twee zekeringen opgnomen. Eén voor de 5v voedingslijn om externe zaken aan te voeden. Een tweede gezekerde 5v voedingslijn voor de voeding van de Raspberry PI en de PCA9685
- De 12 output poorten vand e PCA9685 zijn uitgevoerd in een drie pins header en krijgen GND en 5V mee
- De 16 input poorten. hangen via een 1k weerstand rechtstreeks aan de IO poorten van de PI. Ook hier worden 3 pins headers gebruikt om 3,3v en GND mee te sturen voor bijvoorbeeld een hallsensor.
Voor mij een best uitdagend ontwerp waarbij ik voor het eerst een aantal componenten zelf ontwierp. Zoals een placeholder voor de dc-dc converter een en een Diode die verticaal gemonteerd kan worden.
Ook kwam ik er achter dat je met het NAME attribuut ook draden een naam kan geven en deze zo kunt verbinden met andere draden met dezelfde NAME. Scheelt een kluwen aan tekenwerk. Nu ben ik best tevreden, maar ja gaat er niks fout? Dus hierbij een oproep to kritische beoordeling van mijn werk.
(Afwachtend in goed vertrouwen maar ik hou mijn hart vast
)
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
Ik weet niet wat je soldeer skills zijn met smd. De PCA9685 is een SOT361-1. De pennen staan slechts 0,65mm hart/hart uit elkaar. Dat is smaller als een normale SOIC.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Is een handig ic de PCA9685, kan veel.
Ik heb er pas nog voor iemand met een PIC software gemaakt die de PCA9685 als slave simuleert.
Die persoon gebruikte esp-easy. Die ondersteunt aansturing van een PCA9685, maar hij had fase aan/afsnijding nodig, en geen PWM.
De esp-easy denkt dat er een PCA9685 aan hangt, en de pic zet de pwm opdrachten om in fase aan/afsnijding...
Robvansuilen
Met vriendelijke groet, Rob
Op vrijdag 20 maart 2026 15:45:26 schreef buckfast_beekeeper:
Ik weet niet wat je soldeer skills zijn met smd. De PCA9685 is een SOT361-1. De pennen staan slechts 0,65mm hart/hart uit elkaar. Dat is smaller als een normale SOIC.
Scherpe reactie. Ik laat de print denk ik direct bij JLPCB maken en bestukken. Ik heb al eerder prints laten etsen door ze maar nog nooit een afgewerkt pcb besteld dus dat wordt ook weer een leuk avontuur.
Robvansuilen
Met vriendelijke groet, Rob
Op vrijdag 20 maart 2026 16:26:28 schreef Arco:
Is een handig ic de PCA9685, kan veel.
Ik heb er pas nog voor iemand met een PIC software gemaakt die de PCA9685 als slave simuleert.Die persoon gebruikte esp-easy. Die ondersteunt aansturing van een PCA9685, maar hij had fase aan/afsnijding nodig, en geen PWM.
De esp-easy denkt dat er een PCA9685 aan hangt, en de pic zet de pwm opdrachten om in fase aan/afsnijding...
Slimme actie, zo hoef je de easy esp firmware niet aan te passen. De PCA9685 is inderdaad erg divers, i2c adress kun je toekennen. De poorten kunnen zowel stroom leveren als sinken (geloof zelfs 25ma ofzo).Hij kan PWM maar ook logische 0 of 1. (ik stuur er bv een Mp3 speler mee aan).
Robvansuilen
Met vriendelijke groet, Rob
Niemand op of aanmerkingen op het schema?
[Bericht gewijzigd door Robvansuilen op (74%)]
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
Buiten het wat vreemde symbool voor een zekering en de naar beneden wijzende 12V symbolen, nee...
Het is te doen gebruikelijk om schema's zo te tekenen dat de (hoofd)signaalweg van links naar rechts gaat, positieve powersymbolen naar boven wijzen en negatieve powersymbolen naar beneden. Daarvan afwijken geeft menigeen een oncomfortabel gevoel en is vaak aanleiding tot verwarring, vergissingen en storingen...
Robvansuilen
Met vriendelijke groet, Rob
Op maandag 23 maart 2026 07:42:08 schreef fatbeard:
Buiten het wat vreemde symbool voor een zekering en de naar beneden wijzende 12V symbolen, nee...Het is te doen gebruikelijk om schema's zo te tekenen dat de (hoofd)signaalweg van links naar rechts gaat, positieve powersymbolen naar boven wijzen en negatieve powersymbolen naar beneden. Daarvan afwijken geeft menigeen een oncomfortabel gevoel en is vaak aanleiding tot verwarring, vergissingen en storingen...
Bedankt voor het meekijken en de nuttige tips. Ik ben autodidact in het hele schema tekenen en dat is voor mij geen gesneden koek, dus je tips over de correcte opmaak zijn zeer welkom!
Ps. De (poly) fuse is door mijzelf getekend, ik kan hem zo aanpassen. Wat is het meestgebruikte schema symbool hiervoor?
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
Dat is inderdaad het oogje, werkt voor alles (ook power en GND).
Als je in het schema een net wil highlighten moet je wel op een stuk van het net klikken, als je de symbolen direct aan elkaar hebt zitten (wat op zich prima is) lukt het niet.
Robvansuilen
Met vriendelijke groet, Rob
Hmm dan lijkt er toch echt wat fout te gaan. in het deel van het schema hieronder klik ik op het groene draadje aand e 12v. Alleen dat draadje licht op. Niet alle andere.
Robvansuilen
Met vriendelijke groet, Rob
EDIT: na wat gepruts en vervangen lijkt het nu goed te gaan. Dank voor deze Tip, anders hadden er nog flinke fouten in het schema gezeten.
Met het NAME command kon ik ook e.a. aanpassen zodat bijvoorbeels alle GND's nu ook echt met elkaar zijn verbonden.
[Bericht gewijzigd door Robvansuilen op (30%)]
Robvansuilen
Met vriendelijke groet, Rob
Inmiddels ben ik aan het routen. Meeste gaat met het handje. GND vlak heb ik op de onderzijde van de print liggen alsmede de meeste voedingslijnen. Waarschijnlijk maak ik aan de bovenkant ook een GND vlak.
Signalen probeer is zoveel mogelijk aan de bovenzijde te houden.
Hier een afbeelding van hoever ik nu ben.
Aan de onderkant en rechts op de print is het meeste op orde. Nu moet ik de IO's van de raspberry nog verbinden met de connectoren aan de bovenkant. Dat wordt nog een uitdaging. Het is nog rommelig en incompleet.
Alle tips en opmerkingen zijn heel welkom.
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
De led aan R0 zou ik de wire toch wat verder van het gat weg brengen. Je hebt de ruimte. Je led omdraaien maakt het ook eenvoudiger naar de weerstand toe.
Heb je al een DRC gerund?
Waarom laat je de signalen van de PCA kruisen? Ik probeer altijd zo gunstig mogelijk te routen. Moeten er enkele IO verwisseld worden? Dan is dat maar zo. De IO pas je aan in software.
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
Daar komt het gemak van een microcontroller naar voren: GPIO's zijn makkelijk toe te kennen, even een ander nummertje in de software...
Begin in het schema met de 'onderste' GPIO en knoop die aan R49 (dat heb je al gedaan), dan de volgende naar R43, enzovoort. Je houdt dan vanzelf een goed routeerbaar PCB over.
Eenzelfde strategie kun je volgen voor U0, dan ben je van de via's af.
Wat in een schema mooi uitkomt leidt op de PCB vaak tot 'creatieve' routing, en andersom. Het gebruik van een bus kan helpen, het herordenen van de connectoren op de PCB ook.
Robvansuilen
Met vriendelijke groet, Rob
Dank voor jullie snelle reactie heren! Heel fijn, ik zit toch een beetje in het onbekende te ploeteren.
De LED is omgedraaid en verplaatst.
Wat betreft de headers aan de PCA. Is het kruisen van de uitgaande PWM lijnen een probleem? (interferentie ofzo) Deze lijnen gaan ledjes servos en de IRL540 aansturen (slotjes, RGB strips). Gevoelsmatig heb ik deze toch liever op de "juiste volgorde". Pwm 1 eerst en dan PWM2 vind ik prettig. Dat geld (misschien in mindere mate) ook de voor IO lijnen direct naar de raspberry. Als ik over een aantal jaar hier weer een aan moet werken (software of hardware matig) dan is het fijn als er een logica in de nummering zit.
Dan de DRC. Nog nooit gebruikt en hij gaf best veel fouten. de warning waren alle maal wirestubs. Die heb ik opgelost.
Dan 25 errors waarvan 11 airwires. (logisch).
Drill size errors (ik had drill size op minimaal 0,3 staan. Sommige via's zijn 0,2 dus die vergroot ik.
en de 5 copperclearance ook opgelost
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
Voor zowat elk PCB pakket heeft JLCPCB (en de anderen) een DRU pakket beschikbaar. Vaak in 10mill, 8mill en 6mill. Als ik me niet vergis ook voor 4-layer. Download ze en gebruik ze. Voor een PCA9685 zal je 8mill nodig hebben denk ik. Voor eagle kan ik ze je wel bezorgen.
Voor de uitgangen gebruik je gewoon een array. Bijvoorbeeld PWM[]={1, 5, 7, 9}; Servo[]={2, 6, 10, 11};
Denk eraan dat je voor servo's een mooie 50Hz nodig hebt. Adafruit lost dat op door proefondervindelijk bij te sturen.
#define SERVO_FREQ 50 // Analog servos run at ~50 Hz updates
/*
* In theory the internal oscillator (clock) is 25MHz but it really isn't
* that precise. You can 'calibrate' this by tweaking this number until
* you get the PWM update frequency you're expecting!
* The int.osc. for the PCA9685 chip is a range between about 23-27MHz and
* is used for calculating things like writeMicroseconds()
* Analog servos run at ~50 Hz updates, It is importaint to use an
* oscilloscope in setting the int.osc frequency for the I2C PCA9685 chip.
* 1) Attach the oscilloscope to one of the PWM signal pins and ground on
* the I2C PCA9685 chip you are setting the value for.
* 2) Adjust setOscillatorFrequency() until the PWM update frequency is the
* expected value (50Hz for most ESCs)
* Setting the value here is specific to each individual I2C PCA9685 chip and
* affects the calculations for the PWM update frequency.
* Failure to correctly set the int.osc value will cause unexpected PWM results
*/
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(SERVO_FREQ); // Analog servos run at ~50 Hz updatesIk gebruik een 25MHz oscillator en dan is het altijd correct (pwm.setOscillatorFrequency(25000000);).
De minimum en maximum puls lengte ga je even moeten zoeken. Adafruit geeft
#define SERVOMIN 150 // This is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 600 // This is the 'maximum' pulse length count (out of 4096)Ik heb 100 voor minimale en 500 voor maximale uitslag.
Je moet ook even bekijken dat je PWM frequentie niet voor het ganse IC is. Ik vermoed van wel en dan is 50Hz wel laag voor PWM sturing van leds. Voor leds gebruik ik minstens 100Hz op 2 andere PCA9685 zonder 25MHz oscillator. Daar is de exacte frequentie minder van belang.
Robvansuilen
Met vriendelijke groet, Rob
Buckfast gatekeeper, dank voor je reactie. Wat betreft de designrules (DRU) had ik al wat gedownload. Standaard stonden sporen op een minimum van 0,13mm. Dat heb ik al veranderd naar 0,25. Zo heb ik nog wat aanpassingen gedaan. Dat zou dus goed moeten gaan.
Mocht je de files nog hebben liggen dan houd ik me alsnog aanbevolen. Beter 2x checken dan te weinig.
Bij de PCA kun je inderdaad maar een PWM frequentie instellen. Geen probleem in mijn toepassing. Ik noemde overigens servos. Maar tot nu toe heb ik die nog niet in mijn toepassing zitten.
Robvansuilen
Met vriendelijke groet, Rob
Ik ben klaar met routen. Hierbij de toplayer
en de bottom layer.
En wat de camjob ervan maakt
Top
Bottom (spiegelbeeld over verticale as)
[Bericht gewijzigd door Robvansuilen op (36%)]
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
Je probleem met logische volgordes is ook nog op een andere wijze op te lossen en ook eenvoudiger in gebruik. In plaats van altijd aan een IO nummer te moeten denken, geef je ze een logische naam.
const uint8_t PWM1 = 5;
const uint8_t PWM2 = 8;
const uint8_t PWM3 = 16; Verder heb je dan niet meer te doen dan:
PWM.setPWM(PWM1, 0 , 2000);fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
Vergeet niet om rijkelijk te strooien met via's om de GND vlakken aan boven- en onderzijde te verbinden, speciaal op hoekpunten en stubs; streef naar een maximale stublengte van 10mm of minder.
De DRC zal het worst zijn, maar voor de EMC is het meer dan aan te raden.
Robvansuilen
Met vriendelijke groet, Rob
Op vrijdag 27 maart 2026 15:08:07 schreef fatbeard:
Vergeet niet om rijkelijk te strooien met via's om de GND vlakken aan boven- en onderzijde te verbinden, speciaal op hoekpunten en stubs; streef naar een maximale stublengte van 10mm of minder.
De DRC zal het worst zijn, maar voor de EMC is het meer dan aan te raden.
Dank voor de tip, maar wat zijn stubs?