PA-12 on korkean tarkkuuden toimilaite, jota voidaan ohjata Arduinolla. Tämä PA-12 introduction -opas esittelee ohjaustavat ja toteutuksen PA-12 Arduino API:lla.
PA-12:sta on kaksi versiota. PA-12-R käyttää kelatonta DC‑servomoottoria ja RS‑485‑viestintäprotokollaa. PA-12‑T käyttää kela‑DC‑servomoottoria ja TTL/PWM‑viestintäprotokollaa.
PA-12:n ja Arduinon käyttöönotto riippuu käytettävästä PA-12‑versiosta. Tässä ohjeessa käytetään PA-12-10645012R – 1,06” iskun pituus, 4.50LBS voimaa, 12VDC kelaton DC‑moottori. Kelaton moottori tarkoittaa, että tämän toimilaitteen viestintäprotokolla on RS‑485.
Arduino Leonardo/Uno ei tue RS‑485‑viestintää, mutta siinä on TTL. Käytämme TTL–RS‑485‑moduulia viestiäksemme tässä ohjeessa Arduinon ja lineaarisen toimilaitteen välillä.

Kuva 1 – RS‑485–TTL Arduino ‑moduuli
PA-12:n ohjaustoiminta
PA‑12:ta ohjataan suoraan lähettämällä datapaketteja TTL‑ tai RS‑485‑viestinnän kautta. Jokainen datapaketti sisältää tiedot, joita käytetään jonkin PA‑12:n toiminnon suorittamiseen tai laitteen nykytilan vastaanottamiseen. Nykytila voi olla esimerkiksi servon ID, jännitearvo, toimilaitteen varren sijainti jne.
Laitteisto ja ohjelmisto
- Arduino Leonardo
- TTL–RS‑485‑moduuli
- PA-12-10645012R‑toimilaite
- +12VDC virtalähde
- Hyppyjohtimet
- Arduino IDE
- PA‑12 Arduino API
PA-12 API
PA‑12 API voidaan ladata täältä. Tämä API sisältää seuraavat tiedostot ja kansiot:
- PA12.ino
- Sisältää PA‑12:n komentorakenteet ja toiminnot, jotka siirtävät ja vastaanottavat dataa PA‑12:lta/PA‑12:lle
- Kaikki esimerkkikoodeissa käytettävät tai omaan koodiisi toteutettavat toiminnot sijaitsevat tässä tiedostossa
- PA12.h
- Otsikkotiedosto sisältää viestintäprotokollan ja sarjaviestinnän otsikkotiedostot
- Sisältää kaikkien PA12‑ominaisuuksien funktio‑ ja muuttujamääritykset
- setPosition, ServoID, presentSpeed, forceEnable
- Aputiedostot
- Esimerkkikoodit
- Esimerkkikoodilla voit helposti toteuttaa PA‑12‑ohjauksen omaan järjestelmääsi
- Kaikki esimerkkikoodit on ohjelmoitu käytettäväksi Arduino Leonardon kanssa; lähetys‑ ja vastaanottopinnejä varten käytetyt muuttujat voidaan kuitenkin muuttaa vastaamaan mikrokontrolleria/Arduinoa, joka sinulla on
PA12‑kirjaston tuonti
Valitse ‘Sketch’ --> Include Library --> Add.ZIP Library. Kaikki PA12‑kansiossa olevat tiedostot tuodaan suoraan lineaarisen toimilaitteen Arduino‑kirjastoon. Tämän jälkeen voit käyttää PA12‑toimintoja toimilaitteen ohjaukseen.

Kuva 2 – Arduino‑kirjaston tuonti
Käytettävissä olevat komennot PA‑12:lle
Komennot on koottu alla olevaan taulukkoon. Saat lisätietoa komentoihin liittyvästä koodauksesta tarkastelemalla PA12.ino‑tiedostoa. Tässä ohjeessa käsittelemme peruskomennot. Tulevissa ohjeissa käsitellään edistyneempiä toimintoja ja ohjaustekniikoita.
Lukutoiminnot
Alla olevan taulukon toiminnot ovat vain luku ‑tilassa ja palauttavat arvon.
|
Lukutoiminto |
Muuttuja |
Kuvaus |
|---|---|---|
|
myServo.getModelNumber(ID_NUM) |
ID_NUM |
PA‑12‑mallinumero |
|
myServo.Version(ID_NUM) |
ID_NUM |
PA‑12‑moottorin versionumero |
|
myServo.CalStroke (ID_NUM, *Length*) |
ID_NUM, Length = Short, Long tai Center |
Iskun pituuden kalibroinnin tarkistus |
|
myServo.presentVolt((ID_NUM)/10) |
ID_NUM |
Tulojännitetarkistus |
|
myServo.presentTemperature(ID_NUM) |
ID_NUM |
Moottorin tämänhetkinen lämpötila |
|
myServo.MaxTemperature(ID_NUM) |
ID_NUM |
Lue suurin lämpötilaraja |
|
myServo.presentPosition(ID_NUM) |
ID_NUM |
Toimilaitteen nykyinen sijainti |
|
myServo.moving(ID_NUM) |
ID_NUM |
Moottorin tilan palautettu arvo. 1 = Liikkeessä, 0 = Pysähtynyt |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*) |
ID_NUM, High Voltage Level = Highest tai Low Voltage Level = Lowest |
Lue korkean tai matalan jännitteen asetus |
|
myServo.alarmLed(ID_NUM) |
ID_NUM |
Lukee hälytys‑LEDin tilan. 1 = Päällä, 0 = Pois |
|
myServo.alarmShutdown(ID_NUM) |
ID_NUM |
Lukee hälytystilassa tapahtuvan sammutuksen tilan |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*) |
ID_NUM, Extend Limit = Long tai Retract Limit = Short |
Lukee iskun pituuden maksimi‑ ja minimirajat |
|
myServo.ResolutionFactor(ID_NUM) |
ID_NUM |
Lukee servomoottorin resoluutiokertoimen |
|
myServo.movingSpeed(ID_NUM) |
ID_NUM |
Lukee servomoottorin nopeuden arvon |
|
myServo.forceLimit(ID_NUM) |
ID_NUM |
Lukee servomoottorin enimmäisvoiman (haihtuva asetus) |
|
myServo.maxForce(ID_NUM) |
ID_NUM |
Lukee servomoottorin enimmäisvoiman (pysyvä asetus) |
Kirjoitustoiminnot
|
Kirjoitustoiminto |
Muuttuja |
Kuvaus |
|---|---|---|
|
myServo(&Serial, enable_pin, Tx Level) |
Sarjaportin numero, enable‑pinni, lähetyspinni |
Viestintäportin asetus |
|
myServo.begin(*Baud Setting Value*) |
Baud‑asetusarvo (ks. taulukko) |
Sarjaviestinnän siirtonopeus (baud) |
|
myServo.ServoID(ID_NUM, ID_Sel) |
ID_NUM, ID_Sel |
Vaihda servon ID‑arvo |
|
myServo.ledOn(ID_NUM, *LED RGB Value*) |
ID_NUM, LED RBB ‑arvo (ks. taulukko) |
Kytkee määritetyn LEDin päälle |
|
myServo.MaxTemperature(ID_NUM, Temperature) |
ID_NUM, Temperature |
Kirjoita suurin lämpötilaraja |
|
myServo.goalPosition(ID_NUM, *Position Value*) |
ID_NUM, Position Value (ks. taulukko) |
Aseta haluttu iskun pituuden sijainti |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*, LimitVolt) |
ID_NUM, Higher Value = Highest tai Lower Value = Lowest, LimitVolt |
Aseta korkean tai matalan jännitteen asetus |
|
myServo.alarmLed(ID_NUM, *Alarm Variable*) |
ID_NUM, Alarm Bit |
Hälytys‑LEDin asetus. Katso lisätiedot taulukosta. |
|
myServo.alarmShutdown(ID_NUM, *enable*) |
ID_NUM, Enable: 0 = off, 1 = on |
Moottorin hälytyssammutuksen asetus. Jos hälytys aktivoituu, moottori voidaan sammuttaa |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*, *Position Value*) |
ID_NUM, Extend Limit = Long tai Retract Limit = Short, Position Value (ks. taulukko) |
Kirjoittaa iskun pituuden maksimi‑ ja minimirajat |
|
myServo.ResolutionFactor(ID_NUM, *Resolution Factor*) |
ID_NUM, Resolution Factor (ks. taulukko) |
Asettaa resoluutioarvon toimilaitteen iskun pituuden asemoinnille. |
|
myServo.movingSpeed(ID_NUM, *Moving Speed Value*) |
ID_NUM, Moving Speed Value (ks. taulukko) |
Asettaa servomoottorin nopeuden |
|
myServo.forceLimit(ID_NUM, *Force Value*) |
ID_NUM, Force Value (ks. taulukko) |
Asettaa servomoottorin enimmäisvoiman (haihtuva asetus) |
|
myServo.maxForce(ID_NUM, *Force Value*) |
ID_NUM, Force Value (ks. taulukko) |
Asettaa servomoottorin enimmäisvoiman (pysyvä asetus) |
Muuttuja‑asetukset
Alla olevissa taulukoissa on funktioihin syötettävät muuttuja‑arvot.
Baud‑nopeus
|
Baud‑muuttujan arvo |
Siirtonopeus (baud) |
|
16 |
115200 |
|
32 |
57600 |
|
64 |
19200 |
|
128 |
9600 |
LED‑arvo
|
LED RGB ‑arvo |
|
RED |
|
GREEN |
|
BLUE |
Servo‑ID
|
Servon ID ‑arvo |
|
0 |
|
1 - 253 |
|
254 |
Servomoottorin ID‑muuttuja ID_NUM: vaihtoehtoja on yhteensä 255. Arvo 0 on oletus. Voit valita yksittäiselle ID:lle arvon 1–253. Arvo 254 on varattu lähetys‑ID:ksi, jolloin kaikki verkossa olevat PA‑12‑yksiköt aktivoidaan.
Hälytysasetukset
|
Hälytysasetus |
Hälytysasetuksen arvo |
|
Tulojännitevirhe |
0 |
|
Iskun pituuden rajan virhe |
1 |
|
Aluevirhe |
3 |
|
Tarkistussumma‑virhe |
4 |
|
Ylikuormitusvirhe |
5 |
|
Ohjauskomento‑virhe |
6 |
|
*Reserved* |
7 |
Iskun pituuden resoluutiokerroin
|
Resoluutiokertoimen arvo |
Resoluutio |
|
1 |
4096 |
|
2 |
2048 |
|
3 |
1024 |
|
4 |
512 |
Mitä suurempi resoluutioarvo, sitä parempi paikannustarkkuus.
Liikenopeus
|
Liikenopeuden arvo |
Nopeusasetus |
|
0 |
Maksiminopeus |
|
1 - 1023 |
1 = Hitaimmin, 1023 = Nopeimmin |
Voima‑arvo
|
Voima‑arvo |
Voima‑asetus |
|
0 - 1023 |
1 = Pienin, 1023 = Suurin |
Sijaintiarvo
|
Sijaintiarvo |
Sijainti |
|
0 - 4095 |
0 = Täysin sisällä, 4095 = Täysin ulkona |
Kytkentäohje
PA‑12 kytketään RS‑485‑moduuliin, joka on suoraan kytketty Arduinoon. Tämä PA‑12‑versio vaatii 12VDC virtalähteen servomoottorin syöttöä varten.

| RS‑485 puoli A | Arduino |
| DI | Pin 1 |
| DE | Pin 2 |
| RE | Pin 2 |
| R0 | Pin 0 |
Arduinon pinni 0 on TTL‑vastaanotto. Arduino Leonardon pinni 1 on TTL‑lähetys. Esimerkkikoodeissa pinni 2 on asetettu enable‑pinniksi.
|
PA‑12 4‑napainen liitin |
Arvo |
|
Black |
GND |
|
Red |
Servo Motor +VDC |
|
White |
Communication Pin A |
|
Yellow |
Communication Pin B |

Kuva 3 – PA‑12‑porttikytkennät
|
RS‑485 puoli B |
Kytkentä |
|
VCC1 |
+5VDC (Arduino) |
|
A |
PA‑12 White Wire |
|
B |
PA‑12 Yellow Wire |
|
GND2 |
Virtalähteen GND ja PA‑12 GND |
1RS‑485‑moduuli saa virran Arduinon +5VDC‑lähdöstä.
2Maadoitus on yhteinen PA‑12:n, virtalähteen ja RS‑485‑moduulin välillä.
Esimerkkikoodi
Tässä ohjeessa esittelemme kolme esimerkkikoodia, jotka antavat alustavan käsityksen joistakin PA‑12:n ominaisuuksista ja siitä, miten kirjoitus‑ ja lukutoimintoja voi toteuttaa omaan koodiisi.
- PA12_PresentPosition
- PA12_StrokeLimit
- PA12_ForceLimit
1. Nykyinen sijainti
Tässä koodissa käyttäjä syöttää halutun sijaintiarvon väliltä 0–4095 sarjavalvontaan. Kun arvo on syötetty, komento lähetetään PA‑12:lle, joka aktivoi servomoottorin liikuttamaan vartta haluttuun asentoon. Moottorin liikkuessa nykyinen sijainti näytetään, kunnes lopullinen sijainti on saavutettu.

2. Iskun pituuden rajat
Tässä koodissa PA‑12 käy sykliä 1000 ms välein annettujen ulos‑ ja sisäänvedon rajojen sisällä. Long ja Short ‑määreet sijaitsevat stroke limit ‑toiminnossa

3. Voimaraja
Tässä esitettävä voimarajaa koskeva koodi on haihtuva versio. Tämä tarkoittaa, että aina kun PA‑12 menettää virran, voimarajan arvo palautuu oletusasetukseen. Käyttäjä syöttää voimarajan arvon sarjavalvonnasta. Tässä tapauksessa voima‑arvo 0 tarkoittaa pientä voimaa ja 1023 suurinta voimaa.

Tulevat ohjeet
Tulevissa ohjeissa käsittelemme:
- Edistyneiden toimintojen toteutus
- PA‑12:n TTL‑ ja PWM‑version ohjaus
- Vianetsintätekniikat
- Ulkoiset ohjaustavat
PA‑12 on monipuolinen ja erittäin tarkka toimilaite, jonka avulla loppukäyttäjä voi hallita sovellustaan suoraan. Oikein toteutettuna PA‑12 pystyy täyttämään tarkalleen järjestelmäsi vaatimukset.
Lisätietoja saat lähettämällä sähköpostia osoitteeseen sales@progressiveautomations.com tai soittamalla tiimillemme numeroon 1‑800‑676‑6123.