Sinchroniese beweging tussen mutliple lineêre aktuators kan noodsaaklik wees vir die sukses van sommige klante -toepassings, waarvan die een twee lineêre aktuators is wat 'n Trapdoor open. Om dit te bereik, beveel ons aan dat u die toegewyde gebruik Firgelli Sinchroniese beheerkas FA-SYNC-2 en FA-SYNC-4. Sommige Diyers en hackers verkies egter die vryheid wat 'n mikrobeheerder soos die Arduino bied, en verkies om eerder hul eie sinchroniese beheerprogram te skryf. Hierdie tutoriaal het ten doel om 'n oorsig te gee oor hoe om dit te bereik met behulp van die Optiese reekse lineêre aktuator.
Voorwoord
Hierdie tutoriaal is nie 'n streng behandeling van die stappe wat benodig word om sinchrone beheer met Arduino te bewerkstellig nie, eerder 'n breë oorsig om u te help om u eie program te skryf. Hierdie tutoriaal is gevorderd en aanvaar dat u reeds vertroud is met Arduino -hardeware, sagteware en ideaal het ervaring met Pulse Width Modulation (PWM) seine, onderbrekingsdiensroetine (ISR), ontknoping van sensors en motorkode. Die voorbeeld wat in hierdie tutoriaal voorsien word, is 'n primitiewe proporsionele beheerder. Baie verbeterings kan op die volgende voorbeeld geïmplementeer word, insluitend, maar nie beperk nie tot: die implementering van 'n PID -beheerlus en skaal tot meer as twee lineêre aktuators. Let daarop dat ons nie die hulpbronne het om tegniese ondersteuning vir Arduino -toepassings te bied nie, en dat ons nie buite hierdie openbaar beskikbare tutoriale sal ontfout, kode of bedradingsdiagramme sal ontfout, kode of bedrading nie.
Oorsig sinchrone beheer
Sinchroniese beheer word bewerkstellig deur die lengte van twee lineêre aktuators te vergelyk en die snelheid proporsioneel aan te pas; As een aktuator vinniger as die ander begin beweeg, sal ons dit vertraag. Ons kan die posisie van die lineêre aktuator via die ingeboude optiese enkodeerder lees. Die optiese enkodeerder is 'n klein plastiese skyf met 10 gate daarin wat aan die GS -motor gekoppel is, sodat dit ook die plastiekskyf doen as die motor draai. 'N Infrarooi LED word na die plastiese skyf gerig, sodat dit die lig deur die gate in die optiese skyf oorgedra word, of deur die plastiek van die skyf geblokkeer word. 'N Infrarooi sensor aan die ander kant van die skyf bespeur wanneer die lig deur die gat oordra en 'n vierkantige golfsein uit lewer. Deur die aantal pulse wat die ontvanger opspoor, te tel, kan ons beide die RPM van die motor bereken en die afstand wat die lineêre aktuator gereis het. Die optiese lineêre aktuator van 35 pond het 50 (+/- 5) optiese pulse per duim van die reis, terwyl die aktuators van 200 pond en 400lb albei 100 (+/- 5) pulse per duim het. Deur te vergelyk hoe ver elke lineêre aktuator verleng het, kan ons die snelheid van die twee aktuators proporsioneel verstel, sodat hulle altyd op dieselfde lengte bly terwyl dit strek.
Vereiste komponente
- Twee optiese lineêre aktuators
- Twee IBT-2 motorbestuurders
- Arduino Uno
- 12V Kragbron
- 3 oombliklike knoppies (nie verkoop deur Firgelli)
- Bykomende bedrading
Bedradingsdiagram
Maak bogenoemde bedradingverbindings. Kyk altyd na die draadkleure wat uit die lineêre aktuator kom, aangesien die kleurkonvensie kan verander van wat in die bogenoemde diagram getoon word.
Vinnige tutoriaal
Volg hierdie stappe as u net u twee lineêre aktuators wil laat beweeg: volg hierdie stappe:
- Maak die verbindings soos aangetoon in die bedradingsdiagram.
- Laai en voer die eerste program hieronder op.
- Kopieer die twee waardes -uitsette deur hierdie program in lyn 23 van die tweede program hieronder.
- Laai en voer die tweede program op.
- Stel u stelsel af deur die veranderlike K_P (reël 37, tweede program) te verander. Dit word die maklikste gedoen deur 'n potensiometer aan die analoog PIN A0 aan te heg en die kode te verander om die potensiometer te lees en die Map () -funksie te gebruik: K_P = MAP (AnalogRead (A0), 0, 1023, 0, 20000);
Die res van hierdie tutoriaal gaan in meer besonderhede oor die belangrikste kenmerke van die programme. Weereens herhaal ons dat dit nie 'n uitputtende tutoriaal is nie, eerder 'n oorsig van dinge wat u moet oorweeg wanneer u u eie program skep.
Oorsig van die kalibrasieprogram
Voordat sinchrone beheer verkry kan word, moet ons eers die stelsel kalibreer. Dit behels die tel van die aantal pulse per bedieningsiklus, want soos uiteengesit in die produkspesifikasies is daar 'n verdraagsaamheid van (+/- 5) pulse per duim reis. Laai en voer die program hieronder op. Hierdie program sal die aktuators (reël 53) volledig intrek en die optiese pols -tellerveranderlike op nul stel. Dit sal dan volledig uitgebrei en volledig terugtrek (onderskeidelik reël 63 en 74). Tydens hierdie bedieningsiklus word die aantal pulse deur die Interrupt Service Routine (ISR), reël 153 en 166 getel. Sodra die bedieningsiklus voltooi is, sal die gemiddelde aantal pulse uitgevoer word, reël 88, let op hierdie waardes vir later.
https://gist.github.com/Will-Firgelli/89978DA2585A747EF5FF988B2FA53904
Oorsig van die sinchrone program
Voordat u die sinchrone beheerprogram oplaai, moet u eers die waardesuitset met die kalibrasieprogram in reël 23 kopieer en die huidige skikking vervang: {908, 906} met u eie waardes. As u die 35LB -lineêre aktuator gebruik, moet u die waarde van die veranderlike in reël 29 van 20 millisekondes na 8 millisekondes verander.
Nadat u een keer volledig teruggetrek het (om die oorsprong te identifiseer), kan u beide lineêre aktueerders sinchroon beweeg deur op die drie knoppies te druk wat ooreenstem met die opdragte vir uitbreiding, terugtrekking en stop. Die aktueerders sal in sinchrone bly, selfs onder ongelyke vragte deur hul relatiewe polsbanke te vergelyk en die snelheid tussen hulle aan te pas om altyd sinchroon te bly. Let daarop dat die huidige program 'n eenvoudige proporsionele beheerder, reël 93, as sodanig onderhewig is aan oorskiet en ossillasie rondom die ewewig. U kan dit instel deur die veranderlike K_P, gedefinieër in reël 37. Dit word die maklikste gedoen deur 'n potensiometer aan die analoog PIN A0 aan te heg en die kode te verander om die potensiometer te lees en die Map () -funksie te gebruik: K_P = MAP (AnalogRead (A0), 0, 1023, 0, 20000);
Vir die beste resultate stel ons ten sterkste voor dat die proporsionele beheerder verwyder word en 'n PID -kontrole -lus implementeer; Dit is egter buite die bestek van hierdie inleidende tutoriaal en is doelbewus weggelaat.
https://gist.github.com/Will-Firgelli/44A14A4F3CAC3209164EFE8ABE3285B6
Met behulp van Bullet 36 en Bullet 50 Actuators in Synchronous
Benewens ons optiese reeks lineêre aktuator, bied ons ook twee aanbiedings lineêre aktueerders met ingeboude enkodeerders: The Bullet 36 Cal. en die Bullet 50 Cal, wat albei 'n interne kwadratuursaal -effek -enkodeerder het. Die Hall Effect -enkodeerder werk op dieselfde beginsel as die optiese enkodeerder, maar in plaas daarvan om lig te gebruik, gebruik dit magnetisme. Aangesien dit 'n kwadratuurkodeerder is, het dit twee seinuitsette, elk uit die fase met 90 grade. As sodanig moet u 'n Arduino -bord met 4 of meer onderbrekingspenne gebruik (die Arduino Uno het slegs twee) en verander die kode om insette van twee seine per aktuator te verwerk. Verder sal die ontketingstydveranderlike, FalsePulsedelay, saam met K_P ingestel moet word.
Wenke vir die skryf van u eie program
Meer as twee lineêre aktuators
As u twee of meer lineêre aandrywers gebruik, sal die Arduino Uno nie meer werk nie, aangesien dit slegs twee onderbrekingspennetjies beskikbaar het. U moet 'n Arduino -bord gebruik met die toepaslike aantal beskikbare onderbrekings, meer inligting: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
Tweedens, in belang van doeltreffendheid, is dit raadsaam om u programmering met behulp van skikkings te vektoriseer en vir () lusse om elke aktuator te herhaal.
Ontknoping
Soos met baie sensors, is dit belangrik om bewus te wees van die bonsende seine. Soos met meganiese skakelaars, kan enkodeerders ook aan bons. In die bogenoemde voorbeeld is die ontknopingproses hanteer deur 'n eenvoudige vertraging (gedefinieër deur die FalsePulsedelay -veranderlike), is dit belangrik om dit te hanteer in enige sagteware -veranderinge wat u aanbring of met fisies stroombane om die bonsende geluid uit te filter.
Hanteringrol oor
As u die kode verander, moet u bewus wees van die oorrol wanneer u die millis () -funksie hanteer. Beide millis () en die laaste reeks-reeks word verklaar as ongetekende lang veranderlikes, wat beteken dat hulle waardes tot 4,294,967,295 (32^2-1) kan stoor. Dit beteken ongeveer 'n oorrolperiode van 49,7 dae. Die huidige program is ontwerp om die oorrol in die ISR (onderbrekingsdiensroetine) funksies te hanteer: Count_0 & Count_1, maar as u hierdie program verander, moet u die veranderlike oorrol korrek hanteer, anders sal u program na ~ 49,7 dae van deurlopende gebruik ineenstort. Verwys na: https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/