Synchrone beheer van twee optiese lineêre aandrywers 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 die middele het om tegniese ondersteuning vir Arduino-toepassings te bied nie, en dat ons nie foutopsporings, wysigings, kode of bedradingsdiagramme buite hierdie openbaar tutoriale kan verskaf 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

Synchrone beheer van twee optiese lineêre aandrywers wat 'n Arduino gebruik

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. Wees versigtig om nie die drie kortstondige knoppies wat tussen digitale penne 7, 8, 9 en GND gekoppel is, oor die hoof te sien nie.

    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 bewus te wees van bons seine. Soos met meganiese skakelaars, kan enkoders ook ly aan bons. In die bogenoemde voorbeeld is die ontknoopproses hanteer deur 'n eenvoudige vertraging (gedefinieer deur die valspulseDelay veranderlike), is dit belangrik om dit te hanteer in enige sagteware veranderinge wat jy maak of met fisies kring om die bonsgeraas uit te filter.

    Hantering van rol oor

    As jy verander die kode bewus te wees van oorrol wanneer die hantering van die millis() funksie. Beide millis() en die laasteDebounceTime skikking word verklaar as ongetekende lang veranderlikes wat beteken dat hulle waardes kan stoor tot 4,294,967,295 (32^2-1). Dit kom neer op ongeveer 'n oorroltydperk van 49,7 dae. Die huidige program is ontwerp om oorrol in die ISR (onderbreek diens roetine) funksies te hanteer: count_0 & count_1, maar as jy hierdie program verander, maak seker dat jy die veranderlike oorrol korrek hanteer, anders sal jou program ineenstort na ~ 49.7 dae van 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

    Featured Collections

    Hulp nodig om die regte aandrywer te vind?

    Ons vervaardig en vervaardig ons produkte, sodat u die prys van direkte vervaardigers kry. Ons bied dieselfde dag aflewering en kundige kliëntediens. Probeer ons Aktuator Sakrekenaar gebruik om die regte aandrywer vir u toepassing te kies.