Zoals ik al aangegeven heb in het algemene topic over de voeding, wil ik voor mijn voeding een digitale aansturing ontwikkelen. Ik denk dat meerdere CO'ers hetzelfde idee hebben, waardoor het mij interessant lijkt om de sturing samen te ontwikkelen, maar natuurlijk ook van elkaar leren;) Uit eindelijk zou het mooi zijn om een basis PCB te laten produceren, waarbij de gebruikers de keuze hebben om bepaalde delen te bestucken of niet.

Het idee
Mijn idee is om een modulaire besturing te maken voor de CO voeding, waar iedereen modules aan kan toevoegen. Een concept heb ik uitgewerkt in de link hieronder.

Concept

Ik wil zelf gebruik maken van een STM32(STM32F303RE / STM32F334R8 / STM32F091RC) processor, maar het staat natuurlijk vrij om een fork te maken naar een andere processor. De MCU's die ik op het oog heb, hebben ieder 12-bit ADC's en DAC's aan boord, maar een ander idee is het gebruiken van aparte I2C ADC's/DAC's welke galvanisch gescheiden kunnen worden van het controller board en zo dicht mogelijk bij de voeding geplaatst kunnen worden. Op deze manier kunnen ook meerdere voedingen digitaal aangestuurd worden vanuit een enkel controller board (voedingen kunnen in serie geplaatst worden).

De voeding heeft (gelukkig) een referentie mogelijkheid voor het meten van zowel spanning als stroom, maar ook voor het aansturen van de voeding. De shunt weerstanden van de transistoren kunnen gebruikt worden voor het meten van de stroom, maar voor de totale stroom is het nodig om een sommatie versterker te gebruiken in combinatie met een inverterende versterker. Een andere mogelijkheid is het meten van de individuele stromen en die op te tellen in de processor. De spanningsmeting heeft een inverterende versterker nodig, aangezien de 0v van de voeding negatief is ten opzichte van het referentie punt. De DAC's hebben misschien nog enige versterking nodig, aangezien de MCU maximaal +3V3 uit de DAC stuurt(oke oke, dat kan 3,6 V worden). Een schemaatje...(let niet op de gebruikte componenten en waarden)

Het controller board moet in mijn geval ook de temperatuur van het koelblok meten, aangezien ik actieve koeling wil gebruiken(2 CPU koelers uit 2 PC's).

De besturing kan door middel van knopjes of rotary encoders gebeuren en de weergave met een HD44780 display of 7 segments displays. Ook wil ik graag de LEDs behouden voor CC/CV mode. De besturing en weergave kan op een andere PCB geplaatst worden, welke door gelinkt kunnen worden voor meerdere besturingen.

Overzicht

  • STM32 MCU
  • Analoog deel voor aansturen/meten van spanning en stroom
  • Interne/Externe(gescheiden) ADC's/DAC's
  • Temperatuur meting
  • Temperatuur regeling
  • Modulaire besturing

Ik stel voor om gezamenlijk een duidelijk concept/ontwerp te maken met alle features en wensen.

Ik heb zelf de voorkeur om Github te gebruiken voor source code/hardware files.

Oef... wat is het moeilijk om een goede startpost te maken en een idee uit mijn hoofd uit te leggen... Eventueel wil ik ook wel via Skype oid mijn idee verder proberen uit te leggen

Ik zat zelf meer aan Arduino te denken, MCP4725 12 bit DAC, ADS1015 12 bit ADC.

Mijn voorkeur zou ook uitgaan naar een AVR (Arduino) met losse AD/DA converters.

Hi r3dnax,

Er is geen reden twee maal LTC2050 inverterend achter elkaar te zetten,
één is ruim voldoende, er is ruim voldoende openloop gain voorradig, voor de nodige versterking.
R3 en R4 mogen ook 1K zijn, R5 kan je dan aanpassen aan de nodige gain.

Verder begrijp ik niet waarom je een inverterende versterker neemt met 10K waarden voor de versterker instelling,
deze waarden belasten sterk je 1:10 deler.
Ik heb gelezen dat ik niet op de waarden moet letten, maar waarom niet iets meer tijd besteed aan het schema?

Verder zie ik graag van je, hoe het uiteindelijk gaat worden :-)

Gegroet,
Blackdog

PS
Let op als je met DA's de potmeters gaat vervangen, C7 en C12 zal je moeten verwijderen.
Deze condensatoren belasten je schakeling te veel en kan hierdoor onstabiel worden.
Verder zouden ze je programmeer snelheid kunnen aantasten.
Deze voeding heeft geen "down programmer" of een stroombron aan de uitgang,
dit betekend dat bij lichte belasting het naar beneden programmeren langzaam zal gaan, dit dus afhankelijk van de geleverde stroom.
De oorzaak hiervan is de noodzakelijke condensator C1 die overde uitgang zit.

Een ATmega moet in principe genoeg zijn inderdaad, als er geen belangstelling verder is voor een versie met STM32, zal ik ook een AVR gaan gebruiken met losse DA/AD converters.

@blackdog,

Ik heb 2 opamps achter elkaar gezet omdat de sommator een negatieve uitgangsspanning heeft en deze simpelweg weer geïnverteerd moet worden.
Voor de waarden en andere gebruikte componenten heb ik simpelweg de tijd niet genomen. Ik denk ook dat het een en ander aan filtering moet gebeuren. Ik wou simpelweg snel even iets als schema hebben, omdat 1 plaatje meer zegt dan 1000 woorden..

De C's op de PCB had ik al opgemerkt. Er zal enige terugkoppeling plaatsvinden om de instelling te finetunen. Eventueel kan een MOSFET aan de uitgang gekoppeld worden oid om als belasting te functioneren.

Hi r3dnax,

Waarom wil je met een opamp deze stroomwaarde optellen?
Die twee weerstanden zelf zijn mooi genoeg (R3 en R4 in jouw schema).
Je kan als je een redelijk lage impedantie wilt hebben, een weerstand na de twee 10K weerstanden zetten (2K2)en de opamp wat meer laten versterken, wat ik al zij, openloop gain voldoende :-)

Verder hoef je misschien de DAC's helemaal niet te versterken, voor de stroominstelling kan je al zien dat de uitgang van RV2 flink omlaag geschaald wordt.
Er is dus voor die instelling geen rede eerst weer naar 5V te gaan.

Als je 3,3 of 3,6V hebt voor de spannings instelling kan je ook R20 en R21 schalen zodat je de goede uitgansspanning krijgt bij je maximale DAC output.

Gegroet,
Blackdog

Mijn voorkeur is ook een arduino ( nano), met de i2c da convertor.

@blackdog, zo kunnen R9 en R10 (in de voeding) gebruikt worden voor het meten en worden onderlinge verschillen meegenomen in de meting. Als de verschillen echt klein zijn, is het natuurlijk makkelijker om maar 1 te meten en de stroom te vermenigvuldigen met 2.

Het herschalen zal ik nog even moeten doorrekenen. Met een 3V3 DAC is er natuurlijk veel meer vrijheid met verschillende DAC's (intern en extern).

Ik moet straks eerst een soldeerbout regelen om de voeding in elkaar te zetten :D
Verder niemand in het kamp STM :'( ?

Ik ben ook een voorstander voor STM! Maar liever wel met losse DAC en ADC ivm optocouplers. Voordeel is dan ook dat mensen ook hun eigen controller zouden kunnen gebruiken. Ik ben alleen geen fan van de arduino omgeving (ivm debuggen etc.)
En ik ben nog bezig met het uitpluizen hoe de voeding werkt, dus ik kan nog geen input leveren voor het schema.

[Bericht gewijzigd door DutchEngineer op (19%)]

Haha, qua processoren is er zo enorm veel aanbod en iedereen heeft natuurlijk een andere smaak. Vandaar mijn voorstel, een printje waar een spi aansluiting op zit die de voeding kan besturen. Dus zonder processor, in dat geval kan iedereen zijn eigen processor gebruiken.

Zelf denk ik dat er eerst moet worden gekeken naar de eis als 10mV resolutie, en dan vervolgens bepalen wat de dac/adc moet wezen.

Even een gooi naar eisen van het printje,
1. SPI, I2C of uart bestuurbaar? (Deze zitten standaard op veel µC processoren.)
2. Instelbare spanning in stappen van 10mV.
3. Instelbare stroom in stappen van 1mA.
4. Uitlezen actuele spanning en stroom in een resolutie van 1mV en 1mA.
5. Mute funcie.

Voeding voor het printje? 3v3 of 5v?

Ik heb beide printjes (MCP4725 12 bit DAC, ADS1015 12 bit ADC) inmiddels besteld. Tevens "Logic Level Converter Bi-directionele Module 5 V naar 3.3 V" besteld, slechts 27,8 eurocent per stuk (10 stuks incl verzenden 2,78).

http://ecx.images-amazon.com/images/I/517qOdvRCEL._SY355_.jpg

Waarschijnlijk ontwerp ik 1 drager printje waar ik de 3 modules (ADC, DAC & Converter) op kan zetten.

<edit> linkjes toegevoegd

[Bericht gewijzigd door Roland van Leusden op (33%)]

Op 5 april 2016 10:16:51 schreef Roland van Leusden:
Ik heb beide printjes (MCP4725 12 bit DAC, ADS1015 12 bit ADC) inmiddels besteld. Tevens "Logic Level Converter Bi-directionele Module 5 V naar 3.3 V" besteld, slechts 27,8 eurocent per stuk (10 stuks incl verzenden 2,78).

Waar heb je die zo goedkoop vandaan getoverd, Roland?

De ADS1015 heeft 4 ingangen waarmee ik zowel de ingestelde spanning & stroom als de werkelijke spanning & stroom ga meten. Arduino Nano + 2 stuks rotary encoder en display erbij, en klaar is Roland.

Moet uiteraard nog wel wat software geschreven worden. Hopelijk kunnen we dat gezamenlijk doen.

[Bericht gewijzigd door Roland van Leusden op (11%)]

Ik heb even gestoeid met de INA226 van TI. Een stroom en spanning monitor voor high en low side met I2C bus.
Ook met arduino nano.
Max spanning echter van 36V.Voor mij bij nader inzien te laag,maar toch erg leuk.

De STM32F4 zou voor mij de voorkeur hebben omdat deze via Ethernet, CAN en USB kan communiceren. Ik zie mogelijkheden voor handmatige instelling met encoders, en een dataverbinding met een PC om patronen te kunnen afspelen (het simuleren van een accu bijvoorbeeld), data te kunnen loggen (bij het laden van een accu), etc.

Ik gebruik bijna nooit symmetrische voedingen, en aan het besturen van meerdere voedingen had ik nog niet gedacht.

Het lijkt mij in ieder geval een goed idee om met een los "driver" bordje te werken met losse AD/DA (12 bit) converters en een misschien stabiele voeding. Zo kan er met verschillende bordjes gewerkt worden.
SPI/I2C maakt mij niet heel veel uit, al denk ik dat I2C handiger is i.v.m meerdere aansluitingen en vaak aparte adres instellingen. Zo kunnen er ook meerdere bordjes parallel gebruikt worden.
Een geïsoleerde verbinding is het makkelijkste denk ik. Hierin kunnen misschien ook eventuele level shifters mee gecombineerd worden (bijvoorbeeld de ISO154x vormt zowel een isolator als een level shifter). op deze manier kunnen mensen met zowel 3V3 als 5V werken.

@SparkyGSX, een STM32F4 zelfs :O Ik denk dat het wel interessant en leerzaam is om met ethernet te werken, de prijs is niet heel erg veel hoger. Een CAN bus heeft de F3 serie ook al.

edit:
Eagle of Altium?:)

Een paar jaar geleden heb ik een soortgelijk project uitgevoerd.
Heb toen ook een printje gemaakt met:
- AtXmega32A4U
- 2 x 12-bit DAC
- 8 x 12-bit ADC
- USB
- Seriele poort
- Rotary encoder met schakelaar
- 4 x Buffer opamps voor analoge ingangen TLV
- 2 x Buffer amps om stroom te meten INA282.
- Referentie
- USB aansluiting

Dus dit komt wel een heel eind in de buurt volgens mij. Er is maar een enkele rotary encoder, zodat je met de ingebouwde drukknop een funktie moet kiezen.

Alles is wel in SMD. Dat kost mij erg veel moeite en tijd om de komponenten erop te zetten.

Op 2 april 2016 18:09:55 schreef r3dnax:Verder niemand in het kamp STM :'( ?

Ik zit nou toch te twijfelen; de STM32 Discovery boards zijn, in mijn ervaring, ronduit waardeloos m.b.t. analoge signalen, dus er zouden sowieso aparte ADCs en DACs bij moeten.

Ik denk dat er maar weinig mensen zijn die een CAN dongle hebben, en degene die er zijn, zijn waarschijnlijk diverse types en allemaal incompatible. Dan blijven Ethernet en USB dus over om met de voeding te communiceren, waarvan USB in de meeste gevallen waarschijnlijk praktischer is. Een Discovery F3 of F4 is ook wel lichtelijk overkill, en nog best kostbaar, zeker als je het Ethernet shield er ook bij wilt hebben.

Als het uiteindelijk toch op USB uitkomt, gaat die STM32 zijn doel wel helemaal voorbij; het lijkt me dan handiger om Arduino (of clone) hardware te gebruiken, met ofwel de Arduino libraries, of gewoon zonder, bare-metal met AVR studio.

Het voordeel hiervan is natuurlijk dat het een stuk goedkoper is, en waarschijnlijk toegankelijker voor meer mensen.

Als iemand een goed argument heeft in het voordeel van de STM32 hoor ik het graag, anders lijkt een Arduino (clone) met dus een prima optie, met ADCs en DACs via SPI (dus eventueel ook galvanisch te scheiden). Een nadeel van USB is natuurlijk dat er geen inherente galvanische scheiding is, zoals bij Ethernet, maar met een galvanische scheiding op de SPI bus is dat eigenlijk niet meer echt belangrijk.

Ik ben een testopstelling aan het maken met een ATXMEGA 32E5, een ATMEGA met 12bits AD en DA converter aan boord.

Een goede referentie eraan, en dan eens kijken hoe goed dat het is. Heb je toch een ATMEGA, maar geen losse AD DA converters. Scheelt toch weer in de component count ..

Bij mij was de Xmega A/D converter niet erg stabiel. Alleen met veel oversampling kreeg ik er bruikbare resultaten uit. Zonder oversampling waren de laatste 4 bits tamelijk random, maar misschien ligt dat aan mij (of mijn voeding of referentie).

Of aan de analoge ground, iets wat de ontwerper van de Discovery boards ook nog niet helemaal begrepen heeft.

Het voordeel van losse ADCs en DACs is natuurlijk dat de SPI bus daarheen een handige plaats is om een galvanische scheiding aan te brengen. Daarbij kan iedereen dan zelf beslissen om voor bijvoorbeeld 12 bits te gaan, of wat duurdere componenten te gebruiken en er 14 oud 16 bit van te maken.

Persoonlijk vind ik 40V in stappen van 10mV prima, en 4A in stappen van 1mA lijkt me ook goed, maar dat is natuurlijk de resolutie en niet de nauwkeurigheid.

Ik heb inmiddels met een arduino nano draaiende.
De spanning/ stroom monitoring komt met een 0.1 % nauwkeurigheid van een via i2c aangsloten ina226.
De aansturing gebeurt met een mcp4725 12bit dac.
Als referentie een lm4040 parralel zener met 4.096 volt.
De ic,s zijn optisch gescheiden via i2c iso1540.
De besturing is met een push rotary knop.
Uitlezing middels een 2 x 16 lcd display.
Ik probeer nu alles in te bouwen en de software te tunen.