Ik ben alweer een tijdje bezig met een programmeerbare voeding. Ik wil hem kunnen gebruiken als normale voeding, maar ook als meetinstrument, soort van curve tracer.

Het hoeft voor mij geen grote vermogens te kunnen verwerken. Ik werk nu met een trafo van 60VA, 2 x 12VAC, en daarmee krijg ik 10V 2A uit de voeding.

De verdere eisen zijn :
- Nauwkeurig instellen van stroom en spanning
- Spanning : 0.000 - 20.000V in mV
- Stroom : 0.0 - 2000.0 mA in 0.1 mA stappen
- Nauwkeurig meten van actuele stroom/spanning, ook op 1mV, 0.1mA.
- Meerdere units koppelen aan de PC
- Aanstuurbaar dmv scripts
- Alle units volledig gescheiden van elkaar
- Optioneel geschikt voor (veel) hogere spanningen
- Optioneel geschikt voor (veel) kleinere stromen

Ik heb ondertussen PCB's laten maken en daarmee ben ik nu aan het testen. Alles lijkt goed te werken.

Wel zie ik dat de DAC nogal veel ruis levert (ongeveer 1 mV), en die wordt door de power stage versterkt. Die ruis wordt wel gedeeltelijk gefilterd door de uitgangs condensator, en de A/D converter lijkt er weinig last van te hebben, maar toch stoort het me wel.

Hierbij het schema van het analoge deel:

De opzet is een beetje anders dan een normale zwevende-regelaar:
- De massa van de regel-versterker zit direct aan de emitter van de power-transistor. Dat is expres zodat de basisstroom van die transistor niet door de emitter-shunt weerstanden loopt.
- De spannings-regelaar is uitgevoerd als verschil-versterker. Daardoor kun je de uitgangsspanning regelen onafhankelijk van de spanningval over de emitter-shunt-weerstanden.
- Er is voorzien in een trim-potmeter om de mismatch van de ingangs-weerstanden van de verschilversterker te kunnen afregelen. Dat blijkt als effect te hebben dat je de uitgangsweerstand kunt afregelen naar 0, en zelfs negatief. Dus daarmee kun je ook eventueel externe bekabeling compenseren.
- Er is voorzien in sense-wires om de daadwerkelijke spanning op de DUT te kunnen bepalen.
- De stroom-regeling heeft een vaste offset van 5mV. Daarmee wordt het mogelijk om de stroom volledig naar 0.0 mA te regelen, ondanks dat de DAC niet helemaal naar 0 kan.
- Stroom en spanning instellingen dmv een grof- en fijn- regeling. Dit omdat de gebruikte 12-bit DAC te weinig resolutie heeft. Een extra 12-bit uitgang op de fijn-regeling kan dan gebruikt worden om bij te regelen.

Het digitale deel

Tamelijk recht-toe/recht aan. Een ADS1115 om spanning en stroom te meten, met 15-bit resolutie, een 4-kanaal 12-bit DAC om stroom en spanning in te stellen, een processortje om alles te besturen, en een seriële poort om te koppelen aan een externe master.

De opto-couplers zijn zo geschakeld dat je meerdere units parallel kunt zetten op een enkele interface, en zijn geschikt voor redelijke hoge snelheid (115200 baud).

En de PCB

Ik worstel nog een beetje met de ruis uit de DAC. Die moet ergens gefilterd worden, aan de bron, dus direct na de MCP4827. Maar de ingangs-impedantie van de spanningsregelaar is kritich, dus dan moet ik ook een buffer-trapje toevoegen?

Waarom gebruik je geen 16-bit (of beter) DAC? Je hebt nu 4096 stappen op elke DAC, terwijl je 20.000 stappen wilt. Idealiter zout je nog veel meer resolutie hebben, zodat je altijd de stap kunt kiezen het dichtst bij de gewenste instelling, met een fout die veel kleiner is dan 1mV.

Je hebt nu 5 grote TH weerstanden voor de stroommeting; ik denk dat dit altijd het inductie geeft dan SMD weerstanden. Het totale vermogen is 0.8W, dus dat zou ook voeg moeten gaan met 5 dikke meetweerstanden, in 2512 formaat of zo.

Ik zou nadenken over een down-regulator (current sink), als je weinig belasting hebt, en eventueel wat extra capaciteit op de uitgang, zal die wellicht het setpoint niet kunnen volgen.

Die 1mV ruis op je DAC is, als ik de datasheet goed lees, meer dan hij inherent zou moeten doen (290uV typical). Is dat nog afhankelijk van de digitale signalen (dan zou het synchroon moeten zijn met de SPI bus), of komt het uit de voeding? Die 290uV is ook al best wel hoog.

Je hebt een DAC gebruikt met maar één voedingspin; ik zou altijd een DAC gebruiken met aparte analoge en digitale voedingen, en dan de analoge voeding van een aparte LDO laten komen, met nog een choke vóór de ontkoppelcondensator, vlak bij de DAC.

Ik heb zelf recentelijk de MAX5134 gebruikt voor een signaalgenerator voor een wetenschappelijke opstelling, en was daar erg tevreden over, op het protocol na; het is een 4-kanaals DAC, maar je moet de CS pin hoog en laag cyclen na elke schrijfactie; je kunt dus niet alle 4 de kanalen in één DMA transfer updaten.

Eigenlijk begrijp ik niet waarom je zoiets nog met een dergelijke oude processor en een seriële verbinding zou maken. Persoonlijk zou ik een STM32F072 of zo gebruiken, en een geïsoleerde CAN interface om het aan te sturen. Op die manier kun je meerdere voedingen of andere instrumenten op één bus zetten, met een hoge update rate (10ms of zelfs 1ms als het moet) is de implementatie van het protocol echt super simpel, en kun je de software om het aan te sturen simpel in Python schrijven. Ik heb er wel een handje van om echt alles via CAN te doen.

DAC
Dus de verkeerde DAC. Inderdaad. Ik heb wel gezocht naar 16-bit multi-channel DAC's maar die ik vond waren ofwel audio DAC's ofwel voor mij onbetaalbaar. Het moet wel leuk blijven :) .

Die MAX5134 is wel interessant. Voor hier is 2 kanalen voldoende, dus dat wordt dan een MAX5136. Met 18uV ruis een heel pak beter dan de 290uV van de MCP4728.

Het grote voordeel is dan dat er geen ruis is en er dus ook niet gefilterd hoeft te worden. Mooi toch.

Die 290uV uit de datasheet is alleen de <10Hz ruis. Daar komt nog een heel pak ruis bij voor de hogere frequenties. Een betere ontkoppeling van de voeding helpt wel een beetje, maar veel scheelt het niet

Shunt Weerstanden
Ik had deze express over-gedimensioneerd om te voorkomen dat ze warm worden en daardoor verlopen. Dat kan met SMD ook natuurlijk. Het zijn wel metaal-film weerstanden en daardoor toch redelijk stabiel.

Current-sink
Daarin is voorzien (R34). Die zit wel aan de verkeerde kant van de shunt weerstanden. En 4K7 is ook wel aan de hoge kant. Een actieve current-sink is natuurlijk wel beter, maar dat vergt dan weer een negatieve voeding.

Processor
Het betreft hier een 5V systeem en dan is een 5V processor wel handig. Deze AtTiny3224 heeft ruim voldoende peripherals en performance en ik heb alle tools voor deze processor. Dus voor mij geen reden om een andere te gaan zoeken.

Seriele poort
CAN heb ik als interface niet overwogen, dat kom bij mij niet op, misschien vooral omdat ik daar geen ervaring mee heb. Ik zou niet weten hoe ik een CAN-bus aan de PC moet koppelen.

Wat ik hier vooral nodig heb is een bus met geïsoleerde aftakkingen. Vandaar de opto-couplers. Die staan hier in een wired-or configuratie, dus met 1 driver kan ik meerdere modules besturen. De interface naar de PC gaat nu via een HC06 bluetooth moduletje. Voor python is dat een standaard seriële poort en dus eenvoudig aan te sturen. En bovendien heb ik hier nog een aantal UI printjes liggen met een display en een paar rotary encoders. Die hebben allemaal een seriële poort en kunnen nu dus direct gekoppeld worden.

Zo'n STM32 heeft digitale I/O pinnen die vrijwel allemaal 5V tolerant zijn, dus voor I2C kun je gewoon een pull-up naar de 5V zetten, terwijl de CPU zelf op 3v3 loopt.

De optocouplers in wired-OR kan natuurlijk ook. Ik heb heel veel hardware en software voor automotive en luchtvaart gedaan, en daar hangt alles met CAN aan elkaar, dus ik weet niet beter. Ik heb professionele USB naar CAN dongles liggen, maar die zijn vrij kostbaar (~250 euro). In China is ook genoeg te koop voor veel minder.

Ik zou ook Ethernet als alternatief hebben overwogen; zwaar overkill voor deze toepassing, maar wel simpel aan te sturen (de microcontroller kant daarentegen is niet helemaal simpel), en je krijgt de galvanische scheiding erbij.

Hi deKees, :-)

Leuk! nog een voeding project hier op CO besproken volgens een eigen manier.

Ik heb wat opmerkingen en als eerste over je Power Regelaar.
Je gebruikt een "normale" Darlington om de energie te leveren aan de uitgang.

Dat kan natuurlijk maar dan is voor betere stabiliteit en een sneller regelende loop wel een aanpassing van wat weerstanden nodig.
Laten we beginnen om R25 die nu 10K is een flink stuk omlaag te brengen, neem hiervoor iets tussen 47 en 100Ω, laten we uitgaan van 68Ω
Deze waarde zorgt er voor dat de opgebouwde lading(condensator) van de basis goed kan worden afgevoerd, wat de regelloop weer sneller maakt.
R24 kan 100Ω blijven, maar zeker ben ik niet, dit omdat ik niet heb kunnen vinden welke waarde UB heeft.

De tweede weerstand is R22 hiervoor geld het zelfde, maar omdat de basis capaciteit hier een stuk lager is hoeft deze weerstand niet zo laag te worden,
inschattend denk ik dan aan ongeveer 4K7, dat resulteert er dan in dat je R21 ook wat lager zal moeten maken zodat punt 14 van IC1D weer mooi in het midden zit van je voeding spanning voor dit IC.
Dat de opamp een paar mA meer moet gaan leveren is geen punt, dat kan hij makkelijk aan.

Over R21 kan het handig zijn een kleine condensator te maken voor "speed up" het kan je U loop sneller maken vooral in het originele schema,
Bij de waarden dit ik voorstel zal het waarschijnlijk niet heel veel schelen.

Wat betreft de compensatie van de U en de I loop, C4 en C5 kan zo blijven wat positie betreft maar hou ook rekening met parallel aan deze twee condensatoren een serie schakeling van een weerstand en een condensator over C4 en C5 voor het goed kunnen trimmen van de loop constanten.

Uitgang klemmen circuit
47µF is laag in waarde, dan zal je de loop goed moeten trimmen om dat werkbaar te maken met weinig over en/of undershoot.
Als je een goede elco daar gebruikt, is 1x 100nF voldoende er parallel aan.

Dan je "dummy load" weerstand R34, die doet weinig bij lage uitgang spanningen, daar is een andere manier voor en die laat ik je hieronder zien.
Dit is een stroombron voor bij mij ongeveer 50mA voor de zelfde max output van 2-Ampere die ook voor mijn project geld.
Als je dynamische testen gaat doen, dan zie je vanzelf dat die ongeveer 50mA een hele aardige waarde is wat betreft het beheersbaar maken van je over of undershoot.

Om je schema optimaal te krijgen is een stroombron en een goed ingestelde U en i loops noodzakelijk.
Dit geld nog meer als je dus niet alleen een DC instelling kiest, maar er ook een AC signaal op superponeerd vanuit je DAC.
Je kan trouwens ook aan P4 een BNC ingang vastmaken voor een externe functiegenerator, natuurlijk wel met wat electronica die het signaal conditioneert.

Oja de stroombron. :-)

https://www.bramcam.nl/NA/Precision-PSU/Output-Current-Source-01.png

.
De generator aansluiting in het schema heb je niet nodig, dat was voor het testen van de schakeling om zijn dynamisch gedrag goed te maken.
Mijn massa teken is jouw uitgang klem -bus.
Ik heb voor 12V voeding gekozen van het LM10 IC, dit kan over een redelijk groot bereik gevarieerd worden.
Deze stroombron werkt tot minder dan 0,1V goed.
Voor verdere uitleg zie daarvoor mijn low noise voeding project waar ik nu mee bezig ben.

Wat betreft je DAC's en ruis, zorg er vooral voor dat je electronica die de DAC's stuurt galvanisch gescheiden zijn en ja, dat vergt bijna altijd een extra trafo wikkeling.
De "short cut" van een kleine DC gescheiden SMPS, levert je meestal veel ontwikkeltijd op, dit omdat je het heel goed schoon moet houden!
Als je een I2C of SPI DAC gaat gebruiken, doe dat dan via I2C/SPI bus isolators, TI heeft daar mooi spul voor.

Je stroom shunt van 5x 1Ω heb ik geen moeite mee, als je daarvoor een net plekje op de print hebt, bij je DAC's en je opamps vandaan.

Groet,
Bram

Dat zijn nuttige tips. Toch eens kijken hoe het systeem daarop reageert.

Allereerst de basis weerstanden. Daar had ik nog niet echt over nagedacht moet ik zeggen. En de waarden van 100 Ω voor R25 had ik zelf niet zo snel gekozen.

Om te testen heb ik het volgende:

  • DAC ingesteld om per 10 mS te schakelen tussen 1V en 10V.
  • Op de uitgang is een 100 mA current sink aangesloten.
  • Stroomregeling ingesteld op 600 mA
  • En de skoop is gekoppeld aan de uitgang van de spannings regelaar IC1D (gele trace)
  • En de paarse trace op pin 3 van J13, (evenredig met de 1/10 van de uitgang-spanning).

Dan krijg je zo een plaatje:

De opgaande flank van paars wordt gecontroleerd door de current limit regelaar (600mA) en de elco aan de uitgang. De uitgang van de spanning-opamp (gele trace) gaat dan even naar Ub (8V).

De neergaande flank van paars is de uitgangs elco die door de externe load wordt ontladen. De uitgang van de spannings-opamp gaat dan even naar 0 V totdat de elco leeg genoeg is en de opamp weer gaat regelen.

Het meest kritische punt is het eind van de opgaande flank van paars, dus het moment dat de stroom regeling loslaat en de spannings-regelaar het overneemt.

Als we daarop inzoomen krijg je dit plaatje:

De opamp moet van +Ub naar 0V, ter compensatie van een kleine overshoot op de uitgang. De opamp heeft daar iets van 70 uS voor nodig! Na 130 uS is de uitgang voldoende gezakt en begint de spannings-opamp te regelen.

Dit alles nog met de oorspronkelijke weerstanden zoals in het schema.

Vervolgens nieuwe weerstanden geplaatst en opnieuw getest:
R25 = 100 Ω (was 10K)
R24 = 4K7 (was 47K)
R21 = 1K (was 10K)

Dan krijgen we het volgende beeld:

Erg weinig verschil volgens mij.

Interessant is een tussenstap waarbij wel de beide basisweerstanden zijn aangepast, maar R21 nog de oorspronkelijke waarde heeft:

Nu lijkt het of de opamp weliswaar langzamer daalt, maar toch sneller de controle krijgt. De opamp-uitgang gaat nu niet meer helemaal naar 0! Dus misschien is dit wel de beste instelling.

Wat hier opvalt is dat de gele trace nu stabiliseert op 4V ipv 2V. Dus daardoor heeft het terugregelen eerder effect.

-Wordt vervolgd.

Volgens mij is de opamp de bepalende factor vwb de reaktie snelheid. Tijdens omschakelen van CC naar CV mode moet de opamp uitgang zakken van Ub naar het regelpunt van de eindtrap (rond 2V). De opamp heeft daar ongeveer 50 uS voor nodig. Dat heb ik nu wat kunnen versnellen door de opamp uit 5V te voeden. Dan is het te overbruggen spannings-verschil kleiner en is het eindpunt eerder bereikt.

Met dezelfde condities als hierboven krijg je dan zo een plaatje:

  • Hier weer:
  • Geel is de uitgang van de spannings-regel-opamp
  • Paars is de V-Sense pin (J13-pin3), corresponderend met 1/10 van de uitgangs-spanning.
  • Blauw is de uitgang van de stroom-regel-opamp.

Ik zie wel dat de snelheid van de opamp afhangt van de grootte van het ingangssignaal. Bij een hogere instelling van de stroom krijg je meer overshoot en reageert de opamp sneller.

Dus ik zou de versterking van de spanningsregelaar kunnen verlagen. De DAC geeft max 4V dus met de huidige 10x versterking kan ik tot 40V instellen.

Met de huidige voedingstrafo van 12V is dat wel erg ruim. Maar het is wel weer fijn dat ik hogere spanningen kan uitgeven door alleen een andere trafo te koppelen.

Dus ik denk dat ik de opamp niet veel sneller krijg.

Uitangs-elco

De overshoot is nog vrij hoog. De max stroominstelling (2A) levert een overshoot op van 1V. Dus om dat kleiner te maken moet de uitgangs-elco groter. Nu 47uF, dus met 270uF zakt de overshoot naar 200mV. Dit is wel de worst-case situatie, met stroombegrenzing op max (2A) en een spannings-sprong van 0 naar 10V.

Ha deKees,

Je kunt kijken of je de uitgang klasse B kan uitvoeren en gebruik maken van een funnel versterker voor de meting van spanning en stroom.....
Welke firmware gebruik je in de controller heb je daar ook een regellus ?

Groet,
Henk.

Funnel versterker die ken ik nog niet. Dat zal ik eens bekijken.

De processor heeft geen noemenswaardige control loop. Wat hij wel doet is de DAC bij-regelen. Als ik bijv 5V aan de uitgang wil, dan berekent de processor de bijbehorende DAC waarde en schrijft die naar de DAC (Set-Voltage-1). Maar de DAC heeft maar 12 bits, en is niet helemaal lineair, dus die kan een paar tientallen mV afwijken.

De processor leest de actuele spanning terug via de ADS1115, ziet dus hoeveel die afwijkt van de Target, en corrigeert via het tweede DAC kanaal (Set-Voltage-2).

En zo ook voor de stroom instelling.

Maar tijdens deze opamp testen is dit mechanisme uitgeschakeld.
De processor schakelt hier steeds tussen een Target van 0V en 10V, zodat ik op de skoop kan kijken wat er dan gebeurt.

Klasse-B doe ik nu eigenlijk al door een externe current-sink van 100mA aan te sluiten. Voorlopig zie ik weinig verschil in de hoogte van de overshoot tgv omschakeling van CC naar CV mode. Het heeft wel effect op de snelheid waarmee het systeem weer herstelt van die overshoot.

PS: Het systeem schakelt eventjes naar CC mode op het moment dat de uitgang van 0 naar 10V moet. De Elco aan de uitgang moet dan opgeladen worden en daarvoor wordt de max beschikbare stroom gebruikt, afhankelijk van de ingestelde stroom limiet. En de opamp heeft tijd nodig om weer terug te schakelen, en in die tijd ontstaat de overshoot.

Ha deKees,

Even rustig je draadje door gelezen leuk idee om er tevens een I/V tester van te maken.
Ik lees dat je 0,1 mA en 1 mV stapjes wil maken ga je dat halen met 12 bit effectief ?
En je nauwkeurigheid is ambitieus welke referentie ga je gebruiken ?
Maak je ook nog een sense ingang het regelen van al die zaken tezamen maakt de regeling zeer complex dit is het geen je tegen aan loopt......
Voor jou nauwkeurigheid zul je de ADC moeten nullen heb je daar in de software rekening mee gehouden of,
ga je dat op een andere wijze oplossen.

Groet,
Henk.

De ADC is 15-bit effectief (32768 counts). Die heeft een interne referentie en die bepaalt ook de nauwkeurigheid.

De DAC heeft maar 12-bit, dus dat is niet genoeg. Daarom gebruik ik 2 DAC kanalen, 1 voor de grof instelling, en een tweede met 100 keer kleinere stapjes voor de fijnregeling. Met die fijnregeling kan ik dus bij-regelen zodat de gemeten waarde uit de ADC korrespondeert met de Target waarde.

En inderdaad. De software heeft een procedure om alles af te regenen. Daarbij moet ik 2 meetpunten bepalen (eentje laag en eentje hoog) en bij die twee meetpunten de actuele spanning opmeten en invoeren via de seriele poort. De processor leest dan de bijbehorende ADC waarden en berekent daaruit de Offset en de gain van de ADC.

En vervolgens is er ook een procedure om de offset en de gain van de DAC te bepalen.

Hierbij een paar voorbeeldjes van de grafieken die er uit komen:

Een G4 Led lamp met ingebouwde buck converter :

Of een Power transistor, met 2 units getest. Eentje voor de B-E spanning/stroom en de tweede voor C-E.

Of deze: Diezelfde power transistor zonder koelplaat. Dan kun je zien hoe de Vbe verandert door de opwarming van de transistor.

Het idee is hier om de Vbe te meten en daaruit de temperatuur van de transistor te bepalen, al is die Vbe niet alleen afhankelijk van de temperatuur maar ook van de collector stroom (die ook bekend is).