Kysymys:
Kuinka tarkasti saan Arduinon käyttämällä kiertokoodereita?
Anonymous Penguin
2014-03-04 08:50:55 UTC
view on stackexchange narkive permalink

Askelmoottorit ovat usein kalliita suurelle moottorille. Tehokkaalla tavallisella tasavirtamoottorilla ja pyörivällä kooderilla voit kuitenkin "simuloida" askelmoottoria. Kuinka tarkkoja Arduinon pyörivät enkooderit ovat vain perussilmukalla, mutta ei paljon muuta koodia? Aikooko se "unohtaa pulssin" eikä tallentaa tarpeeksi kiertoa usein? Kuinka voin käsitellä tätä paljon enemmän koodilla? Onko olemassa parempi tapa tehdä tämä? Auttaisivatko keskeytykset? Onko olemassa jonkinlainen piiri, joka auttaisi tätä ongelmaa?

Huomaa: Se ei todennäköisesti ylitä 4 kierrosta sekunnissa ... (Se voi olla paljon, mutta jos teet lyijyruuvityyppinen mekanismi, joka olisi vain 24 tuumaa minuutissa, jos lineaarista liikettä on 10 kierrosta tuumaa kohti.)

Olen käyttänyt pyöriviä koodereita, jotka kieltäytyivät toimimasta kunnolla kehrättäessä. Luulen, että se vaihtelee hinnan mukaan.
Kaksi vastused:
#1
+10
Matt Clark
2014-03-04 09:26:24 UTC
view on stackexchange narkive permalink

Keskeytyksiä käytetään tässä tilanteessa.

Mainitsemasi hinnat ovat riittävän hitaita, jos todennäköisesti pystyt laskemaan sen silmukan sisällä, Tätä ei kuitenkaan suositella, koska tyypillisen silmukan suorittaminen vie useita kellojaksoja, ja riippuen instuktioiden lukumäärästä silmukkaa kohden, saatat jättää väliin joitain laskelmia.

Keskeytyksiä tehdään tähän tarkoitukseen, koska ne voidaan laukaista milloin tahansa silmukan tilasta riippumatta.

On funktio nimeltä attachInterrupt () , joka kestää kolme argumenttia.

  1. Keskeytysnasta
  2. Keskeytä palvelurutiini
  3. Tila

Alla on esimerkki keskeytyksen laskemisesta

  volatile int myCounter = 0; void setup () {attachInterrupt (0, count, RISING);} void count () {myCounter ++;}  

Tilat ovat seuraavat:

LOW, CHANGE, RISING, FALLING

Lisätietoja keskeytysten käytöstä on täällä.

Käyttämästäsi kooderista riippuen sinun on räätälöitävä koodi tarpeidesi mukaan ja tehtävä lisää laskelmia sijaintisi määrittämiseksi, mutta tämän pitäisi olla hyvä lähtökohta.

Muokkaa Tässä on esimerkki koodista Arduino Sandboxista kiertokooderin käyttämistä varten.

Duemilanoven keskeytyksellä ohjattava reuna-ilmaisin käsittelee helposti 100 reunaa sekunnissa (6500 rpm moottorilla).
@WayfaringStranger Joten silloin Unossa ei ole mitään ongelmaa. Kiitos!
@AnnonomusPerson - Kuinka paljon työtä olet valmis tekemään? Jos menet alastomaksi (`ISR_NAKED ()`), voit ohittaa automaattisen C-kontekstin säästämisen ja vetää 100-500 Khz: n keskeytysnopeuden ilman ongelmaa, mutta kirjoitat kokoonpanoa periaatteessa C: ssä.
Jos haluat täysin banannas-asiakirjan absoluuttisen paskaoptimoinnista keskeytysvastauksesta, katso [täällä] (http://raphnet.net/programmation/snes2md/index_en.php). Koodin sijoittaminen suoraan keskeytystaulukkoon keskeytyksen viiveen vähentämiseksi entisestään!
Huomaa myös, että jos aiot viivästyttää matalaa viivettä, arduino attachInterrup -toiminto ruiskuttaa kokonaisen lisätoiminnon kutsun yleiskustannuksen suoraan keskeytyksen `ISR () 'avulla.
Todellakin, jos haluat matalan viiveen mitä tahansa, sinun ei pitäisi kuitenkaan käyttää arduinoa mitään.
#2
+3
gwideman
2014-04-09 08:22:53 UTC
view on stackexchange narkive permalink

Lisää joitakin viitteitä jo kirjoitettuihin kirjastoihin ja esimerkkejä, jotta eri lähestymistapoja ja kokemuksia voidaan verrata nopeuteen verrattuna alttiuteen puuttuville vaiheille.

Pyörivien koodereiden lukeminen: http: // leikkikenttä .arduino.cc / Main / RotaryEncoders

Quadrature Encoder liian nopeasti Arduinolle (ratkaisulla): http://www.hessmer.org/blog/2011/01/30 / quadrature-encoder-too-fast-for-arduino /

Teensy Encoder -kirjasto: https://www.pjrc.com/teensy/td_libs_Encoder.html

Kiertokooderin lukeminen Arduinossa: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...