Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Beste MedeCO-ers.
Ik ben een beetje aan het prutsen een paperclip te laten zweven onder een spoel. Het idee was: spoel trek paperclip aan, als paperclip bijna bij spoel is stiekum spoel uitzetten -> paperclipje valt weer naar beneden. Weer stroom door de spoel laten lopen -> paperclipje weer omhoog.
Goed. De resultaten tot nu toe zijn:
PWM regeling uit NE555 datasheet: wil niet werken
Motorregeling CO met aanpassing zodat 'ie op veel lagere frequentie werkt: Paperclip werkt niet (blijft altijd aan spoel hangen, te licht van gewicht), winkelwagenmuntje werkt, maar tikt telkens tegen de spoel aan. Na de aan en uit tijd afzonderlijk regelbaar gemaakt te hebben wil het nog steeds niet, óf het muntje blijft tegen de spoel tikken, of het valt naar beneden.
Dus zal het wat ingewikkelder moeten. Ik heb het elektuurartikel gedownload over de zweefmagneet, daarin gebruiken ze snellere PWM, om zo de stroom door de spoel te regelen en daarmee de magnetische veldsterkte. Ook tillen ze gaan paperclip op, maar een magneet. En ze gebruiken een hall sensor voor de feedback (om die magneet te volgen, het magneetveld van de spoel gooit wel roet in het eten maar niet genoeg om het niet meer te laten werken). Ze gebruiken een PID regelaar rond een-of-ander AVR ontwikkelbord van ze (ATM18).
Nu wil ik ook wel wat gaan proberen met het hallsensor ->ad converter van AVR -> bergje formules -> PWM output -> driver -> spoel -> magneet -> halsensor recept, maar waar koop ik die halsensor?
Voti en Conrad hebben alleen hall schakelaars, Dick best heeft geen hall sensors, Futurlec heeft een hallsensor, en de computer:club² uit duitsland verkoopt zelfs de echte HAL815 die elektor gebruikt, maar is er niet iets dichterbij?
Heeft een van jullie een adresje, een hallsensor liggen, of is er een van jullie toevallig van plan bij futurlec een bestelling te plaatsen?
Ik heb wel een hall-schakelaartje uit zo'n raam-en-deurallarm, een spoeltje uit een brushless motor, en nog iets spoelachtigs uit een brushless motor.
Dit is nog best een lang verhaal geworden voor de avond, maar wie meer info wil: vraag gerust.
€12,95 Inclusief ferrietstaaf en magneetje.
Bij AK Modul-bus in Duitsland is deze HAL815 stukken goedkoper, maar ben je veel kwijt aan verzendkosten.
Persoonlijk zou ik bij Futurlec bestellen, meteen wat extra dingen meenemen. 
[Bericht gewijzigd door Henry S. op (21%)]
klein is fijn
Moderator
Iedere oude floppydrive / HD is uitgerust met minstens 3 halsensors. Zelfs sommige computerfans hebben die dingen.
[Bericht gewijzigd door klein is fijn op (25%)]
Hey Lucky luke, ik kan je wel wat samples van verschillende hal sensors bezorgen. Als je mij je adres bezorgt via email, dan stuur ik wel wat IC's met spec. (Wel niet van Micronas, maar van een concurent.)
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Op 17 november 2008 07:21:59 schreef ZX6RR:
Bij Elektor kan je gewoon die HAL815 bestellen...
Op 17 november 2008 18:59:19 schreef Henry S.:
€12,95 Inclusief ferrietstaaf en magneetje.
juist. En die een magneetje heb ik al, en een ferietstaaf... Ik heb al een spoel uit een deurbel, en anders ook nog wel een oude radio.
Bij AK Modul-bus in Duitsland is deze HAL815 stukken goedkoper, maar ben je veel kwijt aan verzendkosten.
Persoonlijk zou ik bij Futurlec bestellen, meteen wat extra dingen meenemen.
'k heb geen paypall, maargoed, dan bestel ik wel weer met iemand mee of doe bankvoorafbetaling na overleg met futurlec oid.
Op 17 november 2008 19:06:07 schreef klein is fijn:
Iedere oude floppydrive / HD is uitgerust met minstens 3 halsensors. Zelfs sommige computerfans hebben die dingen.
Sensors? Dus uitgangsspanning lineair verlopend met het magneetveld, en reeds versterkt? Of schakelaars, zegmaar veredelde reedcontacten? Hallelement-versterkertje-schmittrigger?
Ik zoek dus echt een sensor, gelijkaardig aan de HAL815.
Op 18 november 2008 15:19:58 schreef b2:
Hey Lucky luke, ik kan je wel wat samples van verschillende hal sensors bezorgen. Als je mij je adres bezorgt via email, dan stuur ik wel wat IC's met spec. (Wel niet van Micronas, maar van een concurent.)
Dankjewel voor het aanbod, ik zal een mailtje sturen.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
UPDATE:
Ik heb van b2 hallsensors gekregen (waarvoor hartelijk dank), en heb de code van elektuur een beetje lopen verbouwen voor een attiny26 (ik heb geen atmega88). Ik dacht daarmee even te testen, maar er komt hoegenaamd niets uit de PWM uitgang, wat ik ook probeer. Nu heb ik ook nog nooit PWM op een avr gedaan, dus ik ga voor de volgende poging me eerst eens inlezen. Dit is sowiso geen projectje wat in 1 avond gaat lukken...
de code so far (niet werkend):
' Atm18 PD regulator
' S1 At Pb3 = Up
' S2 At Pb4 = Down
$regfile = "attiny26.dat"
$crystal = 8000000
Dim N As Byte
Dim X As Integer
Dim Y As Single
Dim Z As Single
Dim Xold As Single
Dim Xp As Single
Dim Xi As Single
Dim Xd As Single
Dim P As Single
Dim I As Single
Dim D As Single
Config Adc = Single , Prescaler = 32 , Reference = Off 'AD-Wandler starten
Start Adc
Config Timer1 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
P = 0.1
D = 60
Do
If Pinb.3 = 0 Then P = P + 0.0002
If Pinb.4 = 0 Then P = P - 0.0002
X = 0
For N = 1 To 8
X = X + Getadc(6)
Next X
X = X / 8
If X < 512 Then X = 512
Xp = X - 512
Xp = Xp * P
Xd = X - Xold
Xold = X
Xd = Xd * D
Y = Xp + Xd
Y = Y / 2
If Y > 255 Then Y = 255
If Y < 0 Then Y = 0
Ocr1a = Int(y)
Loop
De originele elektuurcode (als ook op hun site gratis te downloaden):
' Atm18 PD regulator
' S1 At Pb3 = Up
' S2 At Pb4 = Down
$regfile = "m88def.dat"
$crystal = 16000000
Dim N As Byte
Dim X As Integer
Dim Y As Single
Dim Z As Single
Dim Xold As Single
Dim Xp As Single
Dim Xi As Single
Dim Xd As Single
Dim P As Single
Dim I As Single
Dim D As Single
Config Adc = Single , Prescaler = 32 , Reference = Off ' AD-Wandler starten
Start Adc
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
P = 0.1
D = 60
Do
If Pinb.3 = 0 Then P = P + 0.0002
If Pinb.4 = 0 Then P = P - 0.0002
X = 0
For N = 1 To 8
X = X + Getadc(6)
Next X
X = X / 8
If X < 512 Then X = 512
Xp = X - 512
Xp = Xp * P
Xd = X - Xold
Xold = X
Xd = Xd * D
Y = Xp + Xd
Y = Y / 2
If Y > 255 Then Y = 255
If Y < 0 Then Y = 0
Pwm0a = Int(y)
Loop
PWM0A gaf een error, en timer0 op de attiny26 doet geloof ik geen PWM (moet me nog inlezen, niet gelijk schieten aub). Dus timer1 van gemaakt en pwm1a. Echter ook dit gaf een error. Compare1a ook, maar ocr1a werd goedgerekend (hoewel het allemaal hetzelfde zou moeten zijn).
iig: ik doe de PWM fout, denk ik.
klein is fijn
Moderator
Ik denk dat het een heel stuk leesbaarder wordt als je de variabelen een naam geeft, en niet gewoon X Y Z. Daarbij kan die elektuur code behoorlijk wat verbetering gebruiken. Met enig gerommel zal je vast al die singles eruit kunnen schrijven, en daarme een veel sneller programma overhouden.
Maar ook simpele dingen als X = X / 8, dat is hetzelfde als Shift X , Right , 3. De laatste verbruikt alleen 5% minder geheugen en gaat drie keer zo snel.
Timer0 doet overgens gewoon PWM hoor, en beide codes compileren bij mij zonder problemen of errors.
/edit.. * klein is fijn kijkt nog eens beter naar die code..
Wie heeft daar zitten rommel bij de elektuur Xi staat wel gedimensioneerd maar wordt nergens gebruikt, zelfde geld voor I. Zo te zien hebben ze een uitgekleede PID regeling proberen te maken of ergens anders vandaan gehaald. Om over floating point errors nog maar niet te beginnen.
[Bericht gewijzigd door klein is fijn op (23%)]
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Elektor had die "handige" namen verzonnen
. Het 3-plekken-naar-rechts-schuiven-is-delen-door-8-verhaal: Ik heb nog niet echt behoefte aan een snellere/kleinere code (eerst maar werkend zien te krijgen), maar het is een handig trucje
, die moet ik onthouden.
Dat beide codes bij jouw compilen is niet gek, dat doen ze hier ook
. maar zet in de attiny26 code eens PWM1A in plaats van OCR1A en het gaat mis.
Timer0 van de attiny26 doet in mijn datasheet geen PWM
.
Ze proberen idd een uitgeklede PID regeling te maken: een PD regeling. Veel van hun formulewerk snap ik ook niet, vooral omdat het als losse berekeningen staat en niet netjes als formule. Zelf een code bakken zie ik niet zo zitten eigenlijk, temeer omdat ik niks weet over PID (of PD) regelingen, behalve dan de basics zoals ze in het elektuurartikel "volledig gewichtsloos!" staan. Erg begrijpelijk is de elektuurcode niet.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 28 november 2008 22:23:17 schreef klein is fijn:
Maar ook simpele dingen als X = X / 8, dat is hetzelfde als Shift X , Right , 3. De laatste verbruikt alleen 5% minder geheugen en gaat drie keer zo snel.
Dat is nu de lol van AVR. AVR gebruik GCC als compiler, en GCC herkent dat gegarandeerd!
x = x + 1; <-> x++;
x = x / 8; <-> x = x >> 3;wordt gewoon door de compiler (VOORDAT er assembly gemaakt wordt) omgeschreven.
Even getest. -Os had ik voor mijn AVR projectjes ergens vandaan gecopieerd, die blijft helaas gewoon de deling doen. -O2 maakt er gewoon de shift van. Sterker nog, de loop wordt unrolled voor wie die term begrijpt.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Ik ben nu bezig met een testprogrammatje om PWM werkend te krijgen, ik heb inmiddels mijn attiny zo ver dat 'ie op 16mhz loopt. De internal calibrated RC osc. gaat maar tot 8 zou je denken. Ja, maar de interne PLL gaat op... 64 Mhz! Door dat door 4 te delen -> 16mhz.
Fuses:
SUT zo laten als standaard
PLLCK programmed (=1)
cksel3...0 = 0001
van de lockbits afblijven
hiermee werkt mijn PWM nog niet, maar heb ik wel mijn attiny even snel gemaakt als elektor's atmega!
Misschien kennen jullie dit trucje allang, maar ik wilde het toch even delen. Ik ben nog niet zo lang met AVR bezig, en die attiny26 is een leuk ding! Heeft zelfs interne Ctjes voor het kristal (CKOPT fuse)!
@ Rew: Ik gebruik bascom. Maarja, met een domme compiler kan ik alsnog slim gaan doen, en ik leer tenminste bij (mijn compiler niet, die heeft geen CO account).
EDIT: Bascom wil echt geen hardware PWM op de attiny26. Ik weet niet of dit in de nieuwere demoversie wel kan, ik heb nog de oude 1.11.8.7 Ik zou wel PWM werkend kunnen krijgen door de registers direct in te stellen, dus ik duik even in de datasheet. Zie ook:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=8333 (duits)
edit2:
en PWM werkt, hier volgen de toverformules:
$regfile = "attiny26.dat"
$crystal = 16000000
' lees datasheet: dit kan met pllck = 0 en cksel3...0 = 0001 en sut op standaard laten
' Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
' maar dan handmatig
Tccr1a = &B01011111 'zie datasheet blz 72 en 77
Tccr1b = &B11000001 'prescale = 1, clearen bij compare, zie datasheet blz 73 en 74
Ocr1a = 28 ' output compare, zeg pwm1a =
Ocr1b = 128 ' idem, voor b
Ocr1c = 255 ' top waarde
Pllcsr.1 = 1 ' enable pll (was al enabled, als het goed is
Wait 1 'pll ruim de tijd geven te locken
Retry:
If Pllcsr.0 = 1 Then ' pas als pll gelocked is is het veilig ' m aan timer1 te hangen
Pllcsr.2 = 1 ' hang pll aan timer1
Else
Goto Retry
End If
Ddrb.1 = 1 ' output
Ddra.3 = 1
Do
Porta.3 = 1
Wait 1
Porta.3 = 0
Wait 1
Loop
' pwm werkt nu! als ik OCR1A verrander gaat de led op de uitgan zwakker/sterker branden!
[Bericht gewijzigd door Lucky Luke op (38%)]
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Hey Luke,
zo'n Hall sensor detecteert magnetisch veld. Die electuur jongens werkten met een magneet. Snap je al waarom?
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Ja, ik heb dat artikel gelezen
.
1) Als die spoel aan de onderkant de zuidpool heeft (linkerhandregel toepassen, etc) en de magneet aan de bovenkant de noorpool trekken ze elkaar naar zich toe, zo kun je met een zwakke spoel toch een groter/zwaarder voorwerp optillen, omdat het magnetisch is.
2) die hallsensor 'ziet' de afstand tot de magneet, aan de hand hiervan (met PWM) de stroom door de spoel aanpassen, zodat deze afstand stabiel word. De hallsensor ziet de spoel ook, maar dit stoort niet, want de spoel zit zodanig ver weg dat de het magnetisch veld ervan ten opzichte van dat van de magneet te verwaarlozen is. Bovendien zit er een stukje alluminum tussen.
EDIT:
Ondanks dat je niet binnen 24 uur opnieuw mag posten ga ik dat straks toch doen
Met een filmpje van een zwevende magneet.
De regeling is nog te instabiel om echt goed te werken, maar een minuutje zweven is te doen. Na de D factor van 60 naar 40 te hebben gehaald is het al stabieler dan in het filmpje, maar er is nog wat finetuning nodig. En mijn proefopstelling is ook niet helemaal stabiel (zeg maar gerust gammel) , het geheel word bijeengehouden door een datasheet, een balpen, een tyrip, triplex, lijm, in elkaar gedraaide draadjes, en natuurlijk een breadbord. maar het werkt!
[Bericht gewijzigd door Lucky Luke op (31%)]
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Hij zweeft!
* Lucky Luke heeft een youtube account aangemaakt, en er 2 filmpjes voor jullie neergezet:
filmpje 1. De eerste test, maar wel de zoveelste keer dat ik het film (camera houdt het 3 minuten vol, magneet laten zweven duurt soms langer).
en een bonusfilmpje als je op de
klikt. De test nadat de PD regelaar een lagere D factor heeft gekregen en dus wat stabieler is. In dit 2e filmpje zie je de magneet ook echt goed zweven
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
ivar92
Vroeger maakte het niet uit welk bier je dronk, maar toen dacht je ook dat alle meisjes hetzelfde waren... © grolsch
Aaaahhh! Wat stom. Ik zocht op die Youtube pagina naar een smiley, iets van "volgend filmpje" of "related subject" ofzo... Grinnik.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Ik heb de magneet weer een eindje hoger weten laten te zweven door de spoel wat beter af te stellen. Het word tijd dat ik er een definitieve opstelling van ga maken (netjes op gaatjesprint zetten, behuizingkje, etc), want dat het werkt is nu wel aangetoond.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
En nu ook de regeling verbeterd: lagere D factor (nu 25), en de truc van kif toegepast. Enkele singles konden zonder problemen een integer worden, en met dat laatste de ingenomen codespace van 91% naar 74% laten verkleinen. Alles als int zelfs tot 34%, maar dan werkt het niet meer...
Goed, hier komt de code:
' Atm18 PD regulator -> aangepast voor attiny26, en een andere magneet.
' D factor is lager, software is efficienter
' pwm is anders geregeld, etc. En oja: ook wel belangrijk: het werkt
' S1 At Pb3 = Up
' S2 At Pb4 = Down
$regfile = "attiny26.dat"
$crystal = 16000000
Dim N As Byte
Dim Adc_meting As Integer
Dim Uitsturen As Integer
Dim Xold As Integer
Dim Xp As Single
Dim Xd As Integer
Dim P As Single
Dim D As Integer
Config Adc = Single , Prescaler = 32 , Reference = AVCC ' AD-Wandler starten
Start Adc
'Config Timer1 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
' maar dan handmatig
Tccr1a = &B01011111 'zie datasheet blz 72 en 77
Tccr1b = &B11000001 'prescale = 1, clearen bij compare, zie datasheet blz 73 en 74
Ocr1a = 28 ' output compare, zeg pwm1a =
Ocr1b = 128 ' idem, voor b
Ocr1c = 255 ' top waarde
Pllcsr.1 = 1 ' enable pll (was al enabled, als het goed is
Wait 1 'pll ruim de tijd geven te locken
Retry:
If Pllcsr.0 = 1 Then ' pas als pll gelocked is is het veilig ' m aan timer1 te hangen
Pllcsr.2 = 1 ' hang pll aan timer1
Else
Goto Retry
End If
Ddrb.1 = 1 ' output
Ddrb.3 = 0 ' input
Ddrb.4 = 0
Portb.3 = 1 'pull-up
Portb.4 = 1
P = 0.1
D = 25
Do
If Pinb.3 = 0 Then P = P + 0.0002
If Pinb.4 = 0 Then P = P - 0.0002
Adc_meting = 0
For N = 1 To 8
Adc_meting = Adc_meting + Getadc(6)
Next N
Shift Adc_meting , Right , 3 ' delen door 8, maar dan snel
If Adc_meting < 512 Then Adc_meting = 512
Xp = Adc_meting - 512
Xp = Xp * P
Xd = Adc_meting - Xold
Xold = Adc_meting
Xd = Xd * D
Uitsturen = Xp + Xd
Uitsturen = Uitsturen / 2
If Uitsturen > 255 Then Uitsturen = 255
If Uitsturen < 0 Then Uitsturen = 0
Ocr1a = Uitsturen
Loop
Een definitieve opstelling moet ik nog bouwen, maar als die af is ga ik een artikeltje schrijven voor op mijn homepage.
O, en uitsturen / 2 kan natuurlijk ook door naar rechts te schuivenmet 1 plaats... Maar dat laat ik zitten, mijn programmer viel al een paar keer uit (eerst eens kijken waar dat aan ligt).
Hierbij geen filmpje op Youtube. Ik maak wel een filmpje met de definitieve opstelling.
EDIT:
code gewijzigd. reference = off werkt gek genoeg niet (meer). Avcc werkt wel. Vraag me niet waarom, 3 dagen lopen zoeken, zie hier: http://www.circuitsonline.net/forum/view/message/1035756#1035756 (en de posts daaronder). Het werkte eerst wel (IIRC).
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Uitsturen = Xp + Xd
Uitsturen = Uitsturen / 2
If Uitsturen > 255 Then Uitsturen = 255
If Uitsturen < 0 Then Uitsturen = 0
Ocr1a = Uitsturen
Integer Uitsturen kan vervallen als je hier Adc_meting gebruikt ipv Uitsturen. Leesbaarheid van de code wordt minder, maar je hebt ook een integer minder nodig.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Ik heb verder niet meer aan de code geprutst, het past en het werkt, dus is het wel goed.
Ik heb wel de boel op een stukje gaatjesprint gezet en het standaardje waar de spoel aan hangt geverfd. Verder geen verrandeingen.
Maar hoewel ik niets verranderd heb werkt het nu niet meer. Nu zijn de draden wel een flink stukje langer geworden, dus daar kan het aan liggen. Of (vrij bizar):
De verf waarmee ik het (houten) standaardje geverfd heb is magnetisch (echt waar, een magneet blijft nu op dat hout plakken en als ik 'm in de verf doop heb je ook het effect van een magnetische vloeistof. Helaas niet met van die mooie pieken, maar wel dat het van stroperig vloeibaar naar hoe-beschrijf-je-dat niet meer zo vloeibaar ging.). 'k snap nu dus wel hoe magnetische schokdempers werken, maargoed, dat was de bedoeling niet echt...
Dus misschien gooit die verf ook nog roet in het eten.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Oke, weer een update (het begint meer op "show your progress" te lijken. Zouden we eigenlijk ook moete hebben: een show your progress topic...
Ik bleek de ontkoppelcondensators van de voeding vergeten te zijn... Die dan ook vrolijk meestuitert met mijn spoel... <schaam>
Verder staat er weer een filmpje op youtube. En de verf gooit inderdaad root in het eten.
Whahaha ik lig alleen al vlak bij de tekst (en de toon waarop!) in het filmpje "goh zou ik het toch maar niet verven want de verf kan magnetisch zijn" hilarisch 
En "nee ik heb zelfs nog film, fantastisch" etc 
Toch een leuk project!