Zwevende magneet!

Waarschuwing: Veel tekst. Zweefmagneet 1 valt te zien in de filmpjes onderaan deze pagina. Wie liever plaatjes heeft, zie zweefmagneet 2.

Let op: dit is geen howto. Meer een kijkje in mijn hobbylab, keuken of schuur om te laten zien hoe ik het voor elkaar gekregen heb om een magneet te laten zweven. Ik probeer het ook voor de niet-elektronicamens duidelijk uit te leggen, maar garandeer niet dat dat lukt. Als wel-elektronicamens kun je waarschijnlijk wel mijn opstelling ongeveer nabouwen. Als je zelf een magneet wilt laten zweven of toch wilt weten hoe je dat voor elkaar krijgt hoop ik dat je iets aan deze pagina hebt.

In november 2008 ben ik begonnen aan Zweefmagneet 1. Dit is het desbetreffende topic op circuitsonline. Ik wilde gewoon iets laten zweven, voor de lol. Met een elektromagneet iets aantrekken en de zwaartekracht het weer naar beneden laten trekken. Door de elektromagneet dan op het juiste tijdstip in te schakelen (als het voorwerp beneden is) en uit te schakelen als het de magneet bijna raakt. Zo zou het voorwerp moeten gaan zweven. Ik heb dit geprobeerd met een NE555, maar helaas werkte het niet. Het voorwerp tikte of telkens tegen de magneet aan, of viel gewoon naar beneden. Ik ging dus eens kijken naar andere methodes, en uiteindelijk kwam ik uit op een Elektorartikel.

Er zijn meer methodes, bijvoorbeeld met 2 plakken bismut. Zie daarvoor zweefmagneet algemeen.

Elektromagneet

Als er stroom door een draad stroomt wordt deze magnetisch. Wikkel de draad rond een kern en je hebt een elektromagneet. En 2 magneten kunnen elkaar aantrekken. Ziehier de basisingrediënten voor een zwevende magneet. De zwaartekracht trekt de magneet uiteraard naar beneden. Door 'm nu met evenveel kracht omhoog te trekken met de elektromagneet zal 'ie blijven zweven. In de praktijk is het vrij lastig de elektromagneet zodanig geregeld aan te sturen dat dat goed gaat: immers als de magneet dichter bij de elektromagneet komt is de aantrekkingskracht tussen de magneet en de elektromagneet nog sterker, waardoor ze nog sneller naar elkaar toe bewegen. Met louter permanente magneten een magneet laten zweven is dan ook onmogelijk. De kracht van de elektromagneet moet geregeld worden aan de hand van de hoogte van de magneet, anders werkt het niet.

Elektuur (inmiddels Elektor) heeft een mooi artikel geschreven over een zwevende magneet. Het heet "volledig gewichtsloos" en is hier te downloaden van hun site, voor €1.20. De sourcecode is gratis te downloaden op dezelfde plek. Ook verkoopt Elektuur een bouwpakket met de belangrijkste onderdelen. Als je het artikel gelezen hebt weet je hoe Elektuur de positie meet: namelijk met een hallsensor. Andere afstandssensoren, zouden ook gebruikt kunnen worden, of bijvoorbeeld een lichtsluis, onder de elektromagneet. Mocht de magneet (of een voorwerp van een ferrometaal, b.v. een stalen kogellagerkogel) dan in de lichtstraal terecht komen, dan is 'ie te dichtbij de elektromagneet, en word de stroom door de spoel tijdelijk sterk verminderd of uitgeschakeld. Een 2e lichtsluis wat verder onder de elektromagneet kan dan gebruikt worden om als de magneet (of het voorwerp) te laag komt de stroom door de spoel weer te verhogen, of in te schakelen. Eerder heeft Elektuur ook over de methode met de lichtsluis iets gepubliceerd: de zwaartekrachtoplichter. Dit artikel is ook te downloaden op de Elektuursite, en wel gratis.

Hallsensor

Een hallsensor werkt als volgt: er word een klein stroompje door een plaatje halfgeleidermateriaal gestuurd. Als er nu een magneet in de buurt is, trekt het magnetisch veld van deze magneet de elektronen die door het halfgeleidermateriaal bewegen naar zich toe (of duwt ze van zich af). Elektronen zijn immers geladen deeltjes die door een magnetisch veld afgebogen kunnen worden. Door de stroom nu in de lengte door het halfgeleidermateriaal te sturen, lopen de elektronen er dus ook in de lengterichting door. Door een eventuele magneet worden ze dan naar de boven of onderkant van het halfgeleiderplaatje afgebogen, als deze magneet boven het halfgeleiderplaatje word gehouden. Zodoende ontstaat een een spanningsverschil tussen de boven en onderkant van het halfgeleiderplaatje. Dat is het hall-effect. De verschilspanning word versterkt, en zodoende bruikbaar gemaakt. In een hallsensor-ICtje zit dus niet alleen een plaatje halfgeleidermateriaal (de hallsensor zelf), maar ook de nodig elektronica om van het door deze hallsensor afgegeven signaal iets bruikbaars te maken.

In het geval van de door Elektuur (Elektor) gebruikte hallsensor geeft het ICtje een spanning af van 2.5V op een output pin indien er geen magneet in de buurt is. Is er wel een magneet, dan kan deze spanning variëren tussen de 0 en de 5V. Afhankelijk van hoe de magneet de sensor nadert, stijgt deze spanning van 2.5 naar 5V, waarbij bij 5V de magneet het dichtst bij is, en bij 2.5V het verst weg. Als de magneet andersom de sensor nadert (dus met de andere pool), dan daalt de spanning van 2.5V naar 0V, waarbij de magneet bij 0V het meest dichtbij is. Dit spanningsverloop is proportioneel afhankelijk van de afstand van de sensor tot de magneet. Door dus deze spanning te meten weet men hoe ver de magneet van de sensor verwijderd is, ofwel: hoog de magneet boven de sensor zweeft. Bij Elektuur gebruiken ze een HAL815 sensor, ik gebruik een MLX90242. Deze heb ik gekregen van een ander CircuitsOnline forumlid (hartelijk dank b2!).

De attiny26 microcontroller

Door de uitgang van deze sensor aan de a/d (analoog/digitaal) omzetten van een microcontroller te hangen is het mogelijk de afgegeven spanning met deze microcontroller te meten. Voor wie niet weet wat een microcontroller is: het is een ICtje waarin een soort computertje zit, alleen voert dit computertje maar 1 programma uit en heeft het stukken minder geheugen en processorkracht dan een PC. Door deze microcontroller te programmeren om deze spanning te meten en aan de hand hiervan de stroom door de spoel te regelen, en daarmee de magnetische veldsterkte van de spoel, en dus de trekkracht op de magneet, is het mogelijk de magneet te laten zweven.

De microcontroller meet de spanning, en berekend aan de hand daarvan hoe sterk de elektromagneet de magneet omhoog moet trekken. Elektuur gebruikt een dikke atmega88, en ik een attiny26, dus ik moest het programma wat aanpassen. De berekeningen werden allemaal gedaan met single variabelen (32 bit). Aangezien de Attiny26 maar een 8 bit processor heeft (de atmega88 ook, trouwens) kost het zo vrij veel tijd om deze 32 bit berekeningen te maken, en het programma neemt ook veel plaats in. Door enkele variabelen als integer te declareren ging de programmagrootte van meer dan 95% naar 74% van het totale programmageheugen van de attiny26.

De stroom door de spoel wordt geregeld met PWM. Pulse Widh Modulation, oftewel pulsbreedtemodulatie. Door telkens korte pulsjes spanning op de spoel te zetten, en de breedte van deze pulsen te regelen word de stroom door de spoel geregeld. Maar hardwarematige PWM op een attiny26 werd niet standaard ondersteunt door BASCOM. Ik moest dus even de datasheet induiken om uit te zoeken hoe ik dit handmatig kon instellen. Dat is ook gelukt.

Verder draait de atmega88 bij Elektuur op 16Mhz, en de attiny doet dat met standaardinstellingen niet. Ook daar heb ik dus wat aan lopen knoeien tot 'ie wel op 16Mhz draaide. Je zou als je de datasheet van deze controller bekijkt zeggen dat het helemaal niet kan. Er is een interne 8Mhz oscillator, die standaard door 8 gedeeld word om op een kloksnelheid van 1Mhz te komen. De deelfactor kun je aanpassen om op een snelheid van 2, 4 of 8 Mhz uit te komen. Maar de attiny26 heeft ook nog een Fast Peripheral Clock, die dmv. een PLL word afgeleid van de 1Mhz klok die (met een eigen deler) van de 8Mhz klok word afgeleid. Lekker ingewikkeld. Maar wel snel, want de PLL vermenigvuldigd de kloksnelheid van 1Mhz met 64! Zodoende komen we op 64Mhz. Door dit dan weer door 4 te delen komen we op 16Mhz. Dit alles valt in te stellen met de fuses, en op deze manier laat ik de attiny dus ook op 16Mhz lopen.

Naast het aanpassen van de variabelen en de instellingen voor PWM hoefde ik eigenlijk weinig meer te veranderen aan het programma van Elektor. Eigenlijk alleen de D factor van de PD regelaar aanpassen om de regeling stabiel te krijgen. De benodigde D factor is afhankelijk van de opstelling, ik heb de D factor aangepast naar 25 voor Zweefmagneet 1, maar bij Zweefmagneet 2 is de D factor hoger.

Het programma

Het programma van Elektor is bij Elektor ook gratis te downloaden, dus mijn programma ook. Het hele programma is te vinden in het "zwevende paperclip, waar hallesensor kopen" topic op CO, en wel hier.

PD-regelaar

Het programma is een PD regelaar. De P staat voor "Proportioneel", de uitgang (pulsbreedte voor de spoel) verandert lineair aan de hand van de gemeten waarde aan de ingang. Dus "uitgang = P*ingang". De D factor zorgt er voor dat de uitgang sterker reageert als de ingangswaarde ook sterk veranderd is. Die D factor maakt de regeling minder stabiel, maar zorgt er wel voor dat als de magneet snel omhoog of omlaag beweegt er hierop word ingespeeld door de stroom door de spoel sterker te verhogen/verlagen dan puur aan de hand van de hoogte van de magneet verwacht zou worden. De D staat voor Differentieel, wat aangeeft dat er naar veranderingen wordt gekeken (Differenties). Het verschil tussen de huidige meetwaarde en de vorige meetwaarde wordt gebruikt om de uitgang bij te sturen. Dus "uitgang = ingang - vorige_meetwaarde". Zo wordt er stapsgewijs gedifferentieerd. Uiteindelijk wordt de uitgang aangestuurd met de som van deze 2, dus "uitgang = P*ingang + D*(ingang-vorige_meetwaarde)". Op deze manier wordt het gemiddelde genomen, waarbij de deling achterwege kan worden gelaten door simpelweg P en D half zo groot te maken. Bij een PID regeling is er ook nog een integrerend deel.

Ik heb mijn meet/regellus zo snel mogelijk geprobeerd te houden, maar dat blijkt eigenlijk helemaal niet nodig te zijn. (Hij kan trouwens mogelijk nog wat korter/sneller, ik programmeer nu beter dan in 2008, maar het werkt zo ook en "if aint broken, don't fix"). Ik heb een zweefmagneet met een veel luxere, langere PID regeling in een arduino gezien (hier) en die werkt ook prima.

Hardware

Ik heb geen schema, aan de hand van de in de software genoemde poorten is ook wel uit te vissen wat waar hoort. Een schema in woorden vind je in de volgende paragrafen.

Zorg voor een stabiele 5V op de attiny26. Ik heb een 5V voeding, maar als je dat niet hebt gebruik je een spanningsregelaar als b.v. de 7805. Over de voedingspennen van de Attiny26 de standaard 100nF Ctjes, en een dikke 470 (of beter nog 1000uF) elco voor de ontkoppeling. Die 100nF valt inderdaad in het niet bij de 1000uF, maar de kleine 100nF ceramische Ctjes hebben een veel lagere ESR, en kunnen dus sneller stroom leveren bij korte piekjes als de attiny een uitgang omschakelt. Ook werken ze beter tegen hoogfrequente stoorsignalen dan de elco.

Verder word natuurlijk de sensor op de attiny aangesloten, en wel op de pin die in het programma word uitgelezen: adc6, op pin11 van de PDIP behuizing. De sensor krijgt uiteraard ook 5V voeding, en hierover staat ook een elco ter ontkoppeling: 100uF.

Tevens zitten er 2 drukschakelaartjes aan de attiny, op portb.3 en portb.4 (pin 4 en 7 van de DIP behuizing van de attiny26), deze dienen om de magneet hoger of lager te laten zweven. De drukschakelaartjes schakelen naar GND. De pinnen PB3 en PB4 hebben intern een pull-up. Als de schakeling start zweeft de magneet nog niet en ligt 'ie op de sensor. Met de schakelaar op PB3 kun je de magneet hoger laten zweven, met die op PB4 lager.

Dan moet de spoel nog aangesloten worden op de attiny26. De spoel kan niet direct op een pin van de attiny, hij vraagt daarvoor te veel stroom. Bij Elektor gebruiken ze een motordriver om de spoel aan te sturen, ik gebruik een BUZ11 FET. De BUZ11 word met de gate (pin 1 van de BUZ11) verbonden aan OC1A, pin 2 van de DIP behuizing van de attiny. De drain (pin 2) gaat naar de spoel, de source (pin3) gaat naar de GND. De nog vrije aansluiting van de spoel gaat naar de +, en over de spoel een 1N4007 als blusdiode. De kathode (streepje op de behuizing) van deze diode gaat dus naar de + en de anode naar de aansluiting van de spoel die op de FET zit. (Er zijn betere blusdiodes, hoe sneller ze zijn en hoe meer stroom ze aankunnen hoe beter, maar bij een kleine spoel gaat het goed met deze)

Dan de spoel: Ik gebruik een spoel uit een deurbel, en Elektuur wikkelt er een om een ferietstaaf uit een radio. Voor zweefmagneet 2 heb ik zelf koperlakdraad rond een bout gewikkeld en dat gaat ook prima.

Troubleshooting

Als de schakeling af is en voeding heeft, moet er met de magneet op de sensor ongeveer 4.5V staan op de uitgang van de sensor. Staat er eerder iets als 0V, dan ligt de magneet verkeerd om of maakt de meetpen geen contact. Eens de magneet goed op de sensor ligt zou je, als de spoel met de juiste kant naar beneden boven de magneet hangt, de magneet moeten kunnen laten zweven met de knopjes. Kan dat niet, dan zit je spoel met de verkeerde magnetische pool naar beneden. Draai de spoel om (of de aansluitingen van de spoel). Daarna zou het moeten werken.

JA! Filmpjes!

Eindelijk is het grote moment daar: de filmpjes! In deze filmpjes krijg je een uniek kijkje in mijn hobby"lab" (meer een rommelig bureau) bij de bouw van de zweefmagneet. De filmpjes staan op Youtube, hieronder heb ik ze ingebed. Zweefmagneet (1) tm Zweefmagneet (4) geven het verloop van de tests (en de bouw) weer, zweefmagneet (5) toont het eindresultaat. Tegen een camera praten levert soms een wat monotoon effect op, in het dagelijks leven praat ik anders.

Hier volgt "zwevende magneet (1)". In dit filmpje zie je de eerste test op breadboard. De "Update" waar ik het over heb heeft er mee te maken dat ik b2 (de CO er die me de sensors heeft gegeven) op de hoogte zou houden over de voortgang van het project.

Dan zwevende magneet (2). in dit filmpje zie je het resultaat van een aanpassing aan de PD regelaar. De regeling is daardoor stabieler geworden. Mijn camerawerk is niet echt stabiel, excuses daarvoor. Het oververhitten van de spoel waar ik over vertel is in de definitieve versie opgelost: het heeft te maken met de uitlijning v.d. spoel ten opzichte van de sensor en de magneet. Als die niet optimaal is, moet de elektromagneet harder werken.

Dan filmpje 3. Door de uitlijning tussen spoel en sensor te verbeteren kan de magneet nu wat hoger zweven, maar de proefopstelling is nog steeds erg gammel.

Filmpje 4: Hierin eigenlijk de definitieve opstelling, die alleen niet zo definitief is omdat 'ie niet werkt. Ik was domweg de condensators vergeten over te zetten van breadboard op gaatjesprint. Maar ook met de condensators werkte het nog niet. Wat bleek: mijn zwarte verf is magnetisch...

En dan nu natuurlijk het filmpje van het eindresultaat:

Alle filmpjes zijn ook in één keer als playlist te bekijken: en wel hier

update

Per februari 2012 heeft zweefmagneet 1 een nieuw onderkomen gevonden in PA4TIM's opvangtehuis voor buizenbakken, al zit er geen enkele buis in. Zweefmagneet 2 heb ik wel zelf gehouden :).



Vragen, aanvullingen, fout gevonden? Mail me gerust!

Om deze pagina te kunnen printen, zonder de rest van de frameset, voeg &print toe aan de url, of klik deze link: print. Kleur wordt als het goed is genegeerd (spaart inkt). Zo niet: stuur me a.u.b. even een (liefst niet al te boos) mailtje en ik pas het aan.