Show your projects! Part 31

Dit topic is gesloten

Lambiek

Special Member

Op 5 augustus 2017 14:26:13 schreef fotoopa:
Nee, de software doet dit voor je. Een element is al een ganse blok logica die intern configureerbaar is.

Dat kan dus ook, ik ging er vanuit dat je het grafisch moest tekenen.

Hoe zet je dat softwarematig neer dan, in tekst of anders?

Als je haar maar goed zit, GROETEN LAMBIEK.

Dat is juist de verilog taal, net zoals de C taal. Compiler doet de rest. Maar het zou ons hier te ver afleiden. Alle software is gratis (Quartus). Voor mij is C veel moeilijker vanwege de zeer uitgebreide bibliotheken. Ik kan maar 2 lijnen ver onthouden!

Lambiek

Special Member

Op 5 augustus 2017 16:17:17 schreef fotoopa:
Dat is juist de verilog taal, net zoals de C taal.

Zal er eens naar kijken.

Ik kan maar 2 lijnen ver onthouden!

Ja, daar krijgen we allemaal last van.

Als je haar maar goed zit, GROETEN LAMBIEK.
fred101

Golden Member

Ik heb via Ginny een scheidingstrafo gekocht. Hiervoor heb ik een bedienings paneel gemaakt met electronische traploos instelbare zekering, serie gloeilamp en inschakelvertraging.

Meer : http://www.pa4tim.nl/?p=5956

www.pa4tim.nl, www.schneiderelectronicsrepair.nl, Reparatie van meet- en calibratie apparatuur en maritieme en industriele PCBs

We doen verder ons ons groot knikkerbaan project!
Oplossingen worden verkregen door het opsplitsen van taken. Zo hou je het geheel nog wat overzichtelijk. Het project is veel groter geworden dan eerst gedacht, je weet wel een knikkerbaantje maken. Maar het groeit en groeit.

Omdat ik heel veel servo motoren gebruik heb ik een flow getekend hoe de data van al die servos gestuurd wordt. Het ontwerp is voorzien tot 64 servos maar ik heb de aansluitingen voorlopig beperkt tot 32. De andere 32 uitgangen kunnen ook voor leds gebruikt worden. Iedere uitgang heeft een 5V level met een 330 ohm weerstand in serie. Een led mag je zondermeer dus aansluiten per uitgang, ook zevensegment displays mogen aangesloten worden.

Hier het blockdiagram:

https://farm5.staticflickr.com/4437/35669534193_bbd5fda7a1_c.jpg
Fischertechnik FPGA flow for the servo. by Frans, on Flickr

Rechts is de uitgangs module te zien, dit is een lowcost pcb met 8 stuks 74HCT573 latches (20 cent). Gewone DIL versie, eenvoudig te solderen. 32 van de 64 uitgangen gaan naar de rugwand waar 3 polige connectors staan voor de servos.

De linkerkant is het stukje uit de FPGA, een blokje code die niets anders doet dan de pwm pulsen naar de hardware module te brengen. Zoals te zien is dit met 8 pulsen parallel gelijktijdig en gemultiplexed. Iedere 74HCT573 krijgt een time slot van 2400 usec waarin een pwm puls kan actief zijn. Omdat de periode normaal 20 msec is voor een servo passen er 8 slots in deze periode. 8x8 = max 64 servos.

De servo data wordt uit de FPGA dpram gelezen samen met de mode van iedere servo. Een servo kan tot 4 vooraf ingestelde posities hebben. Welke gebruikt wordt staat in de mode info. De applicatie routine zorgt dat die mode overeenkomt met de knikkerbaan. De servo multiplexer moet niets anders doen dan de pwm data aanleveren. Hierdoor is er ook geen belasting op de andere taken die ter zelfde tijd lopen. Alle code is in verilog geschreven.

Het hardware printje voor de servos zie je hier:

https://farm5.staticflickr.com/4164/34353238111_ed444e001c_c.jpg
servo 64 channels P5076995 by Frans, on Flickr

Het bovenste kleine aansluitprintje is ondertussen vervangen door een versie met 3 polige pluggen zodat je niet verkeerd kunt aansluiten.
Grotere versie's zijn op Flickr te zien via de links.

Je hebt tijd of je hebt geen tijd ! als je geen tijd hebt, waar is die dan gebleven ? https://ledverlichtingsoest.com/

Op 11 augustus 2017 01:32:25 schreef Gadget_inc:
Ook iets met knikkers :-)

Ja veel knikkers, maar geen Fischertechnik bouwstenen. Voor een Fischerfan maakt dit een groot verschil. Het is echter wel een super mooie realisatie!

Lambiek

Special Member

Op 11 augustus 2017 01:32:25 schreef Gadget_inc:
Ook iets met knikkers :-)
https://www.youtube.com/watch?v=IvUU8joBb1Q

Dat is ook een gaaf ding, maar ik wordt steeds benieuwder naar de knikkerbaan van fotoopa.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 11 augustus 2017 09:07:02 schreef Lambiek:
Dat is ook een gaaf ding, maar ik wordt steeds benieuwder naar de knikkerbaan van fotoopa.

Dat komt, beetje bij beetje. Ik heb veel kleine software deeltjes die afzonderlijk moeten getest worden omdat ik ze nog nooit gebruikt heb in een FPGA. Zo moet ik een dual ported ram hebben die toelaat zowel lezen als schrijven gelijktijdig vanuit 2 verschillende taken zonder onderlinge synchronisatie. Infeite is dit via de MegaWizard Plug-In Manager van Quartus zomaar automatisch te maken. Vandaag heb ik die aangemaakt en getest via het LCD scherm. Dus een volledige menu moeten maken waar ik data kan invoeren en de uitgang bekijken. En ja, na wat stomme type fouten blijkt dit perfect te werken. De oplossing was gevonden door tussendoor een uurtje te gaan fietsen met mijn vrouw. Onderweg was het blijkbaar haar opgevallen dat mijn gedachten precies niet op de fietstocht lagen...
Maar eens thuis gekomen was het probleem toch vrij snel opgelost. En zo komt er weer dagje bij de timing van het project.

Hierbij de dpram:

Jinny

Golden Member

Mooi Fred, maar pas mijn naam even aan, het is Jinny IPV Ginny.

Hoe doen vrouwen op TV dat toch? Wakker worden met prachtig glanzend haar en mooi gestifte lippen..... Wanneer ik wakker word heb ik een coupe 'Leeg geroofd vogelnest' en een incidenteel straaltje kwijl.. Gaat ook door voor 'Wilt wief' naar horen zeggen

Jinny, onder de Nederlandse bevolking komt dyslexie ongeveer 10% voor. Hier op CO is het precentage wat hoger. Volgens mijn schatting tussen de 50-80%...

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Wauw, fotoopa! Dat DualPort RAM design is precies wat ik zoek voor mijn LCD controller! Scheelt me weer heel veel slapeloze nachten!
Ik zou het alleen nog moeten combineren met de aansturing van een extern DDR (GDDR?) geheugen?!

[Bericht gewijzigd door MNM(tm) op vrijdag 11 augustus 2017 19:27:15 (27%)

Fan van Samsung (en repareer ook TV's). :)

Op 11 augustus 2017 19:24:24 schreef MNM(tm):Ik zou het alleen nog moeten combineren met de aansturing van een extern DDR (GDDR?) geheugen?!

Ik heb het vroeger gedaan door synchroon te maken, een ram acces opdelen in 4 time slots en zo kun je ook voor iedere acces veilig toegang krijgen. De timing van de ram acces moet wel 4x sneller zijn dan een enkele acces. Maar technisch is dit tegenwoordig weinig probleem.
Hier wou ik het eenvoudiger omdat 2 verschillende taken gebruik maken van dezelfde mode bits ram. Mijn servo pwm taak heeft mode bits en die bits mode worden ook gebruikt voor de kleur van de NeoLeds. Dit zijn 2 afzonderlijk lopende taken eentje voor 32 servo's en eentje voor 64 kleur leds. De timing is totaal verschillend van beide taken.

Ik denk om binnenkort een afzonderlijk topic te maken over mijn ontwerp van de Fischertechnik kogelbaan. Er zijn zovele items in het ontwerp die ook voor anderen kunnen gebruikt worden. Maar ook bepaalde feedback kan mijn ontwerp vereenvoudigen. In dit "show your project" is dit minder geschikt.

Lambiek

Special Member

Op 11 augustus 2017 20:18:57 schreef fotoopa:
Ik denk om binnenkort een afzonderlijk topic te maken over mijn ontwerp van de Fischertechnik kogelbaan.

Dat zou een leuk idee zijn. :) Ik ga het volgen in ieder geval.

Als je haar maar goed zit, GROETEN LAMBIEK.
Wasluis1971

Golden Member

Onlangs ben ik weer aan het knutselen geslagen, het resultaat was een elektronische dobbelsteen met "uitrolfunctie". De schakeling werkt op basis van de "gouwe ouwe" chips NE555 en CD4017. De uitrolfunctie is geebaseerd op het ontladen van een condensator via twee hoogohmige weerstanden. Deze weerstanden regelen de basisstroom door een PNP-transistor die op zijn beurt de NE555 aanstuurt.

Vlak na het loslaten van de schakelaar is de ontlaadstroom (en de spanning over de condensator) hoog: de patronen volgen elkaar in hoog tempo op. Hoe verder de condensator zich over de weerstanden ontlaadt, hoe langzamer de patronen elkaar zullen opvolgen. Op een gegeven moment is de stroom door de weerstanden zo gering dat de transistor spert: de dobbelsteen "ligt stil".

https://www.youtube.com/watch?v=aiVyUVVyAso

Leve het transistortijdperk!

Bij het zelf etsen van printplaten blijven er soms kleine kortsluitingen zitten. Om die eruit te blazen/branden is een zware voeding handig. Daarom heb ik dit project gemaakt:
https://image.elektronicastynus.be/85/1414618490.jpg
In feite is het een 5V 30A voeding (met instelbare stroom). Deze kan de stroom wel maar een beperkte tijd aan.

De basis van dit project was een oude atx voeding, met daarachter een aantal power torren op een actief gekoelde koelplaat:
https://image.elektronicastynus.be/85/1414616483.jpg
https://image.elektronicastynus.be/85/1414618479.jpg

Voor meer info zie: https://www.elektronicastynus.be/2017/08/28/current-pusher/

Met vriendelijke groet, Stynus ||| http://www.elektronicastynus.be ||| http://e-stynus.com ||| --> Automatische trapverlichting <--

Mooi! :)

Mijn "current pusher" (6x HP ESP120 parallel) leverde 350A op max 52V. Maar deze heeft maar een paar maanden geleefd en vier dagen arbeid moeten verrichten (waarbij de stroom niet over de 100A is geweest):

https://ic.tweakimg.net/ext/i/2001591353.jpeg

Kom eens langs bij RevSpace of één van de andere spaces!

had je dat ding niet gebouwd voor een centraal voedingsysteem op SHA2017?

waar rook was, werkt nu iets niet meer

Ja, (klik maar op de foto) een 42V (+/- 15%) DC grid heb ik daar uitgerold en samen met de gebruikers grondig getest. Conclusie: Het werkt prima, maar er is nog wel wat te verbeteren. De voeding is zodoende al ontmanteld en er zijn 240 Lithium cellen aangeschaft. Ook worden er volledig configureerbare betaalbare bi-directionele buck-boost DCDC converters ontwikkeld (10-60V, 16A beide kanten) om grids te kunnen koppelen. :)

Zo bouw je thuis een nanogrid, bijvoorbeeld op 12V in de camper, of op 24V voor in huis, die je ook op (hacker-)evenementen kunt meenemen en koppelen met andere grids. Zo wordt energie delen en besparen veel leuker dan alleen op 42V DC. :)

Kom eens langs bij RevSpace of één van de andere spaces!

Op 5 augustus 2017 20:17:31 schreef fred101:
Ik heb via Jinny een scheidingstrafo gekocht. Hiervoor heb ik een bedienings paneel gemaakt met electronische traploos instelbare zekering, serie gloeilamp en inschakelvertraging.

Ha Fred,
Die elektronisch traploos instelbare zekering, kan je daar wat meer info over geven?
Ik heb zelf een 300VA scheidingstransfo die ik nog moet aansluiten

Shock6805

Golden Member

Van mij krijgen jullie eens geen foto's van een printplaatje of een leuk kastje. Enkel een lap python code.

Ik was voor de zoveelste keer een RC-netwerkje aan het uitzoeken en was het beu om steeds opzoek te gaan naar de ideale combinatie van weerstand en condensator. Daarom heb ik een scriptje geschreven dat die job voor mij doet. Het heeft volgende mogelijkheden;

  • Je kan kiezen uit welke E-reeks weerstand en condensator moeten komen. Voor beide kan een andere reeks gekozen worden.
  • Je kan de maximale afwijking t.o.v. de te zoeken tijd opgeven.
  • Je kan een onder- en bovengrens opgeven voor de grootte van de weerstand
  • Je kan kiezen hoeveel resultaten je wilt weergeven.

Het hele ding is geschreven voor python 3.6
En dan krijg je dit:

code:


"""
@author: Sander Janssens
"""
import collections

E3 = [1.0, 2.2, 4.7]
E6 = [1.00, 1.50, 2.20, 3.30, 4.70, 6.80]
E12 = [1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2]
E24 = [1.00, 1.10, 1.20, 1.30, 1.50, 1.60, 1.80, 2.00, 2.20, 2.40, 2.70, 3.00, 3.30, 3.60, 3.90, 4.30, 4.70, 5.10, 5.60, 6.20, 6.80, 7.50, 8.20, 9.10]
E48 = [1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53]
E96 = [1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76]
E192 = [1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09, 1.10, 1.11, 1.13, 1.14, 1.15, 1.17, 1.18, 1.20, 1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32, 1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45, 1.47, 1.49, 1.50, 1.52, 1.54, 1.56, 1.58, 1.60, 1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76, 1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93, 1.96, 1.98, 2.00, 2.03, 2.05, 2.08, 2.10, 2.13, 2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34, 2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58, 2.61, 2.64, 2.67, 2.71, 2.74, 2.77, 2.80, 2.84, 2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12, 3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44, 3.48, 3.52, 3.57, 3.61, 3.65, 3.70, 3.74, 3.79, 3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17, 4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59, 4.64, 4.70, 4.75, 4.81, 4.87, 4.93, 4.99, 5.05, 5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56, 5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12, 6.19, 6.26, 6.34, 6.42, 6.49, 6.57, 6.65, 6.73, 6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41, 7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16, 8.25, 8.35, 8.45, 8.56, 8.66, 8.76, 8.87, 8.98, 9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88]

exponent = range(0,9)

def serieMenu(onderdeel):
    reeksen = { "E3": ">20", "E6": "20", "E12": "10", "E24": "5", "E48": "2", "E96": "1", "E192": "<=0.5" }
    reeksenLijst = { "E3": E3, "E6": E6, "E12": E12, "E24": E24, "E48": E48, "E96": E96, "E192": E192 }
    
    print("volgende menu-items kunnen ingegeven worden om een E-reeks te kiezen voor " + onderdeel + " :")
    
    for reeks, tolerantie in reeksen.items():
        print(reeks + " voor onderdelen met een tolerantie van " + tolerantie + "%")
        
    print("letop! de reeksen E48, E96, en E192 zijn niet voorzien van de missende waarden uit de E24 reeks")
    
    keuze = input("uw keuze: ")
    
    while not keuze in reeksen.keys():
        print("Het lijkt er op dat u een onbestaand menu-item heeft ingevoerd. Probeer opnieuw a.u.b.")
        keuze = input("uw keuze:")
    
    return reeksenLijst[keuze]

def limietMenu(upDown):
    print("geef de " + upDown + " op voor de weerstanden. Enkel weerstanden die in dit gebied vallen, kunnen in het resultaat gebruikt worden.")
    print("geef dit getal volledig uitgeschreven weer. Wetenschappelijke notatie is niet toegestaan.")
    
    while True:
        try:
            limiet = int(input(upDown + ": "))
        except ValueError:
            print("Dit is geen geldige " + upDown + ". Probeer opnieuw.")
            continue
        else:
            return limiet
        
def rcMenu():
    print("noteer hier de gewenste RC-tijd. Ook hier geldt dat geen wetenschappelijke notatie gebruikt kan worden.")
    
    while True:
        try:
            rcTijd = float(input("RC-tijd: "))
        except ValueError:
            print("Dit is geen geldige RC-tijd. Probeer opnieuw.")
            continue
        else:
            return rcTijd    

def aantalResultatenMenu():
    print("Het aantal resultaten dat maximaal weergegeven wordt.")
                                 
    while True:
        try:
            aantal = int(input("aantal: "))
        except ValueError:
            print("Dit is geen geldig aantal. Probeer opnieuw.")
            continue
        else:
            return aantal
                                 
def foutMenu():
    print("De maximale afwijking die de theoretische waarde met de werkelijke mag hebben. In vullen in procent zonder '%'.")
    
    while True:
        try:
            tolerantie = int(input("tolerantie: "))
        except ValueError:
            print("Dit is geen geldige tolerantie. Probeer opnieuw.")
            continue
        else:
            return tolerantie
                                 
def findC(RC, series):
    resultaat = []
    for exp in exponent:
        for weerstand in series:
            resultaat.append([weerstand*10**exp, RC*(1/(weerstand*10**exp)), None])
            
    return resultaat

def compareC(resultaat, series):
    for exp in exponent:
        for combinatie in resultaat:
            for condensator in series:
                if combinatie[2] == None:
                    combinatie[2] = condensator*10**-exp

                elif abs(combinatie[1] - condensator*10**-exp) < abs(combinatie[1] - combinatie[2]):
                    combinatie[2] = condensator*10**-exp

def main():
    RC_waarde = rcMenu()
    bovengrens = limietMenu("bovengrens")
    ondergrens = limietMenu("ondergrens")
    C_series = serieMenu("de condensator")
    R_series = serieMenu("de weerstand")
    besteResultaten = aantalResultatenMenu()
    maxFout = foutMenu()
    iteratie = []
    
    resultaten = findC(RC_waarde, R_series)

    compareC(resultaten, C_series)

    tussenResultaten = []
    for index in range(len(resultaten)):        
        afwijking = abs(100*(resultaten[index][1] - resultaten[index][2])/resultaten[index][1])
        setje = resultaten[index]
        
        if  afwijking <= maxFout  and setje[0] in range(ondergrens, bovengrens):
            setje.append(afwijking)
            tussenResultaten.append(setje)
    
    resultaten = sorted(tussenResultaten, key=lambda x: x[3])
    
    for i in range(3):
        print("")
        
    for index in range(besteResultaten):
        print("Een weerstand van " +  '{:03.2e}'.format(float(resultaten[index][0])) + " ohm gecombineerd met een condensator van " + '{:03.2e}'.format(resultaten[index][2]) + " farad geeft een afwijking van " + '{:03.2e}'.format(resultaten[index][3]) + "%")

main()

Moest iemand hier op CO dit een nuttig programma vinden, het script zit bijgevoegd. Gebruik op eigen risco. :p

Als je maar genoeg geinteresseerd ben, verwondert heel de wereld.

Controller knikkerbaan project is nu afgewerkt en getest, klaar om de echte knikkerbaan te gaan bouwen.

https://farm5.staticflickr.com/4381/37167033395_6c9429c9aa_c.jpg
Test Fischertechnik controller P9127294 by Frans, on Flickr

Ik heb een oude IR bediening toegevoegd zodat de kinderen met de afstandsbediening de positie van de servo motoren kunnen wijzigen en hierdoor de loop van de knikkers zelf kunnen bepalen.

De IR bediening werkt op 38 Khz, ik gebruik een TSOP38 als detector. De chip in de bediening is een PT2222-001. Hiervoor is de datasheet eenvoudig te vinden op het web. Het protocol is de PPM (Pulse Position Modulation) methode met een 32 bit data stream. Is zeer eenvoudig te decoderen op de FPGA met een kleine verilog routine. Ook hiervoor is er geen belasting voor de andere program modules gezien de FPGA.

De servos kunnen nu zowel vanaf de frontplaat bediend worden als van de remote controller. Voor iedere servo is een kleur neoled voorzien. Je kunt zo van iedere servo zien hoe de positie is volgens de kleur. Er zijn 3 standen mogelijk per servo, ruim voldoende voor de kogelbaan te besturen. Als je een servo selecteerd gaat de neoled van die servo knipperen zodat je ziet waar die servo staat. Tevens is er een dual 7 segment display toegevoegd die ook de nummer van de servo weergeeft en waar de stand van de geselecteerde servo ook nog eens op een neoled aangeduid wordt. Dezelfde info staat ook nog op de LCD display.

Iedere servo kan getrimd worden om de juiste optimale positie van de kogel te bereiken. Er is nu voorzien voor 32 servos maar de interne hardware board gaat tot 64 servos. Een write protect switch zorgt ervoor dat de kinderen niet zomaar de fijninstellingen kunnen wijzigen als ze aan de knoppen draaien. Dit is zeer belangrijk voor onze kleinste van ruim 2 jaar! Voor de DC motoren zijn er 16 hardware matig klaar en die zijn 100% instelbaar, snelheid, richting, afremmen, uitlopen zonder remmen enz.

Het aantal voorziene neoleds is nu 128. Bij iedere leds kan een 24 bit kleur ingegeven worden. Deze neoleds zijn enorm eenvoudig omdat ze bijna geen bedrading nodig hebben en met een heel eenvoudige driver in de FPGA aangestuurd worden. Ook deze belasting heeft geen invloed op de andere programma's.

Ook de verschillende Rotary encoders zijn getest. Die staan op verschillende motoren. Op de frontplaat staan er ook 2 van deze encoders. Keypad frontplaat is een 5x8 = 40 toetsen keyboard. Daarnaast zijn nog een aantal extra switchen voor diverse functies.

Nu kan de echte opbouw beginnen met mijn 5000 stukjes Fischertechnik.

De meest over-engineerd knikkerbaan ooit wordt dit, heerlijk!
Ik kan niet wachten op het eindresultaat!

If you want to succeed, double your failure rate.

Op 12 september 2017 11:47:11 schreef Jochem:
De meest over-engineerd knikkerbaan ooit wordt dit, heerlijk!

Ja dat klopt! Ik had iets nodig om mij minstens een jaar bezig te houden, moest iets zijn met elektronica en mechanica en bruikbaar voor de kleinkinderen zodat er geen excuus was over de kostprijs.
Fishertechnik gebruikte ik al 40 jaar, het is ook technisch en de kleinkinderen bouwen nu al zeer graag met lego technic, een alternatief.

Je kunt nu eenmaal moeilijk steeds maar iets programmeren in verilog voor een FPGA als je geen echt doel hebt. Het project bevat zoveel verschillende onderdelen dat het uiteindelijk als beschrijving toch zou passen voor veel CO gebruikers. Iedere module heeft een bepaalde functie en kan voor totaal andere toepassingen deels gebruikt worden. Zo ontstaan nieuwe ideeën. Vandaar dat er later wel een afzonderlijke topic zal komen die niet als doelstelling geeft zomaar het geheel na te bouwen maar wel delen te gebruiken.

Ook de test methodes met 2 uitgangen voor de scoop of LA zijn enorm belangrijk tijdens de ontwikkeling. Normaal zou ik meer uitgangen voorzien voor een LA maar ik heb alle uitgangen nodig voor mijn project zodat er geen overschot meer is ( er zijn maar 81 I/O echt vrij te kiezen, 8 analoge inputs en nog een 8 tal enkel input ingangen ). Toch heb ik al heel veel moeilijkheden opgelost met deze 2 scoop uitgangen. Om het even welk signaal kan hierop via de FPGA geplaatst worden. Dit is echt een FPGA project en zou heel wat moeilijker zijn met een heel snelle microcomputer. Ik doe natuurlijk hier een aanbeveling voor CPLD of FPGA modules want dit is zo snel en eenvoudig!

Ik heb nu ongeveer 3600 LE (logic elements) gebruikt van de 22.000 die beschikbaar zijn in deze kleine FPGA module. Alles werkt synchroon op de 1 MHz clock, de Neoleds werken op een 20 Mhz clock. Ik gebruik 5 verschillende dualported ram's uit de FPGA, dat is amper 4 % van de beschikbare ram. En een LE element is een krachtig stuk hardware in de FPGA waarvoor je zeker meerdere IC's uit de 74 reeks zou nodig hebben om slechts 1 LE te maken!

Vandaag even een detector getest om de stalen knikkers tijdens hun loop te detecteren en zo verder hun baan te controleren.

https://farm5.staticflickr.com/4435/37157840966_b06ba77573_c.jpg
Detector for Fischertechnik part 37468. by Frans, on Flickr

Een kleine neodymium magneet D3x2mm is gebruikt om in een bestaan Fischertechnik blokje nr: 37468 te schuiven. Dit blokje is als een wip gemonteerd waardoor het omklapt als de stalen knikker er over rolt.

Ik heb 2 andere detectoren op IR basis getest maar in vol zonlicht worden die te gevoelig voor het omgevingslicht zonder echt grondig af te schermen. Nu gebruik ik nog enkel deze magneet detectoren omdat die heel bedrijfszeker werken in alle omgevingen en zeer lowcost zijn. Het chipje is de AH3184, behuizing zoals een kleine transistor.

Ik kan tot 24 van deze detectors via een SPI lijntje naar de controller sturen. SPI werkt met 2 usec clock (500 Khz).

Dit topic is gesloten