Hoe om twee lineêre aandrywers te sinkroniseer met behulp van 'n Arduino

Synchrone beweging tussen lineaire aandrywers van meer as drie kan noodsaaklik wees vir die sukses van sommige kliënttoepassings, waarvan een gereeld twee lineêre aandrywers is wat 'n valdeur oopmaak. Om dit te bereik, beveel ons aan om die toegewyde Firgelli te gebruik sinchrone 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 hul eie sinchrone beheerprogram te skryf. Hierdie handleiding het ten doel om 'n oorsig te gee van hoe u dit kan bereik met behulp van die Optiese reeks lineêre aandrywer.

Voorwoord

Hierdie handleiding is nie 'n noukeurige behandeling van die stappe wat benodig word om sinchroniese beheer met Arduino te bewerkstellig nie, maar 'n breë oorsig om u te help om u eie program te skryf. Hierdie tutoriaal is gevorderd en veronderstel dat u al vertroud is met Arduino-hardeware, sagteware en ideaal is met ervaring met pulsbreedte-modulasie (PWM) -seine, onderbrekingsdiensroetine (ISR), afbreek van sensors en motor-enkodeerders. Die voorbeeld in hierdie handleiding is 'n primitiewe proporsionele beheerder. Baie verbeterings kan op die volgende voorbeeld geïmplementeer word, insluitend, maar nie beperk nie tot: implementering van 'n PID-beheerlus en afskaling na meer as twee lineêre aandrywers. Let daarop dat ons nie oor die hulpbronne beskik om tegniese ondersteuning vir Arduino-toepassings te bied nie, en dat ons nie foute kan kry, of wysig, kode of bedradingsdiagramme sal verskaf buite hierdie openbaar beskikbare tutoriale nie.

Oorsig Sinchroniese beheer

Synchrone beheer word bereik deur die lengte van twee lineêre aandrywers te vergelyk en die snelheid proporsioneel aan te pas; as die een aandrywer vinniger begin beweeg as die ander, sal ons dit vertraag. Ons kan die posisie van die lineêre aandrywer lees via die ingeboude optiese kodeerder. Die optiese kodeerder is 'n klein plastiekskyfie met tien gate in wat aan die GS-motor gekoppel is, sodat die plastiekskyf ook as die motor draai. 'N Infrarooi LED word op die plastiekskyf gerig sodat 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 kan opspoor wanneer die lig deur die gat word gestuur en voer 'n vierkantgolf sein uit. Deur die aantal pulse te tel wat die ontvanger opspoor, kan ons die toerental van die motor bereken en die afstand wat die lineêre aandrywer afgelê het. Die optiese lineêre aandrywer van 35 lb het 50 (+/- 5) optiese pulse per duim van beweging, terwyl die aandrywers van 200 lb en 400 lb albei 100 (+/- 5) pulse per duim het. Deur te vergelyk hoe ver elke lineaire aandrywer verleng het, kan ons die spoed van die twee aandrywers proporsioneel aanpas sodat hulle altyd op dieselfde lengte bly terwyl hulle uitstrek.

Vereiste komponente

Bedradingsdiagram

Hoe om twee lineêre aandrywers met 'n Arduino te sinkroniseer

Maak bogenoemde bedradingaansluitings. Kyk altyd na die draadkleure wat uit die lineêre aandrywer kom, want die kleurkonvensie kan verander van wat in die diagram hierbo getoon word.

    Vinnige handleiding

    Volg hierdie stappe as u net u twee lineêre aandrywers wil laat sinkroniseer.

    • Maak die verbindings soos getoon in die bedradingsdiagram.
    • Laai en voer die eerste program hieronder uit.
    • Kopieer die twee waardes wat deur hierdie program uitgevoer word, in lyn 23 van die tweede program hieronder.
    • Laai die tweede program op en voer dit uit.
    • Pas u stelsel aan deur die veranderlike K_p (reël 37, tweede program) te varieer. Dit word maklik gedoen deur 'n potensiometer aan die analoogpen A0 te heg en die kode te wysig om die potensiometer te lees en die map () -funksie te gebruik: K_p = map (analogRead (A0), 0, 1023, 0, 20000);

    In die res van hierdie handleiding word enkele kernfunksies van die programme in meer detail bespreek. Weereens herhaal ons dat dit nie 'n volledige handleiding is nie, maar eerder 'n oorsig van dinge wat u moet oorweeg wanneer u u eie program skep.

    Oorsig van die kalibrasieprogram

    Voordat sinchroniese beheer bereik kan word, moet die stelsel eers gekalibreer word. Dit behels die aantal pulse per bedryfsiklus, want soos aangedui in die produkspesifikasies is daar 'n toleransie van (+/- 5) pulse per duim beweeg. Laai die program hieronder op en voer dit uit. Hierdie program sal die aandrywers (lyn 53) volledig intrek en die optiese polsteller veranderlike op nul stel, dan sal dit volledig verleng en volledig terugtrek (lyn 63 en 74, onderskeidelik). Gedurende hierdie bedryfsiklus sal die aantal pulse getel word deur die onderbrekingsdiensroetine (ISR), lyn 153 en 166. Sodra die bedryfsiklus voltooi is, sal die gemiddelde aantal pulse uitgevoer word, lyn 88, let op hierdie waardes vir later.

    https://gist.github.com/Will-Firgelli/89978da2585a747ef5ff988b2fa53904

    Oorsig van sinkroniese program

    Voordat u die sinchrone beheerprogram oplaai, moet u eers die waardes wat deur die kalibrasieprogram uitgevoer word, in lyn 23 kopieer en die huidige skikking: {908, 906} deur u eie waardes vervang. Verder, as u die 35 lb-aktuator gebruik, moet u die waarde van die veranderlike in reël 29 verander van 20 millisekondes na 8 millisekondes.

    Nadat u een keer volledig ingetrek het (om die oorsprong te identifiseer), kan u albei lineêre aandrywers sinchronies beweeg deur op die drie knoppies te druk wat ooreenstem met die opdragte vir verlenging, intrek en stop. Die aandrywers sal selfs onder ongelyke belastings sinkronies bly deur hul relatiewe pols tellers te vergelyk en die spoed tussen hulle aan te pas sodat dit altyd sinkronies sal bly. Let daarop dat die huidige program 'n eenvoudige proporsionele beheerder, lyn 93, implementeer, aangesien dit onderhewig is aan oorskiet en ossillasie rondom die ewewig. U kan dit afstel deur die veranderlike K_p, gedefinieerd in reël 37, te varieer. Dit word maklik gedoen deur 'n potensiometer aan die analoogpen A0 te heg en die kode te wysig om die potensiometer te lees en die map () -funksie te gebruik: K_p = map (analogRead (A0), 0, 1023, 0, 20000);

    Vir die beste resultate raai ons sterk aan om die proporsionele beheerder te verwyder en 'n PID-beheerlus te implementeer; dit val egter buite die bestek van hierdie inleidende tutoriaal en is doelbewus weggelaat.

    https://gist.github.com/Will-Firgelli/44a14a4f3cac3209164efe8abe3285b6

    Gebruik Bullet 36 en Bullet 50 Actuators in Synchronous

    Benewens ons optiese reeks lineêre aandrywer, bied ons ook twee aanbiedings lineêre aandrywers met ingeboude kodeerders: die Bullet 36 Cal. en die Bullet 50 Cal, wat albei 'n interne kwadratuur Hall Effect-kodeerder het. Die Hall Effect-kodeerder werk op dieselfde beginsel as die optiese kodeerder, maar in plaas van lig gebruik dit magnetisme. Dit is ook 'n kwadratuur-kodeerder en het twee seinuitgange wat elk 90 grade buite fase is. As sodanig moet u 'n Arduino-bord met 4 of meer onderbrekingspennetjies gebruik (die Arduino Uno het net twee) en die kode verander om die invoer van twee seine per aandrywer te verwerk. Verder moet die afskeepstydveranderlike, falsepulseDelay, saam met K_p ingestel word.

    Wenke vir die skryf van u eie program

    Meer as twee lineêre aandrywers

    As u twee of meer lineêre aandrywers gebruik, werk die Arduino Uno nie meer nie, want daar is slegs twee onderbrekingspennetjies beskikbaar. U moet 'n Arduino-bord gebruik met die toepaslike aantal onderbrekingspennetjies beskikbaar, meer inligting: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

    Tweedens, is dit raadsaam om u programmering te vektoriseer deur skikkings te gebruik en om () lusse oor elke aandrywer te herhaal.

    Debonsering

    Soos met baie sensors, is dit belangrik om op die hoogte te wees van weerkaatsende seine. Soos met meganiese skakelaars, kan enkodeerders ook weerkaats. In die bostaande voorbeeld is die afbreekproses deur 'n eenvoudige vertraging hanteer (gedefinieer deur die falsepulseDelay-veranderlike), dit is belangrik om dit te hanteer in enige sagtewareveranderings wat u aanbring of met fisiese stroombane om die weerkaats te filter.

    Hantering rol om

    As u die kode wysig, moet u kennis dra van die omrol wanneer u met die millis () -funksie werk. Beide millis () en die lastDebounceTime-skikking word as ongetekende lang veranderlikes verklaar, wat beteken dat hulle waardes tot 4 294 967 295 (32 ^ 2-1) kan stoor. Dit kom neer op ongeveer 'n omlooptydperk van 49,7 dae. Die huidige program is ontwerp om die rollover in die ISR-funksies (onderbrekingsdiensroetine) te hanteer: count_0 & count_1, maar as u hierdie program wysig, moet u die veranderlike rollover korrek hanteer, anders val u program na ~ 49,7 dae se deurlopende gebruik. Vir meer inligting, verwys na: https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/

     

    Share This Article
    Tags:

    Het u hulp nodig om die regte aktuator te vind?

    Ons presisie -ingenieur en vervaardig ons produkte, sodat u direkte vervaardigers pry. Ons bied dieselfde dag gestuur en kundige kliëntediens. Probeer ons aktuatorrekenaar gebruik om hulp te kry om die regte aktuator vir u aansoek te kies.