De PA-12 is een actuator met hoge precisie die met Arduino kan worden aangestuurd. Deze PA-12 introduction-handleiding behandelt aansturingsmethoden en implementaties met de PA-12 Arduino API.
Er zijn twee versies van de PA-12. De PA-12-R heeft een kernloze DC-servomotor en RS‑485‑communicatieprotocol. De PA-12-T heeft een DC-servomotor met kern en TTL/PWM‑communicatieprotocol.
De start met de PA-12 en Arduino hangt af van de versie van de PA-12 die wordt geïmplementeerd. In deze tutorial wordt de PA-12-10645012R gebruikt – 1,06” Slaglengte, 4.50LBS kracht, 12VDC kernloze DC‑motor. De kernloze motor betekent dat het communicatieprotocol voor deze actuator RS‑485 is.
De Arduino Leonardo/Uno heeft geen RS‑485‑communicatieprotocol, maar wel TTL. We gebruiken een TTL‑naar‑RS‑485‑module om in deze tutorial met de lineaire actuator via Arduino te communiceren.

Figuur 1 - RS-485 naar TTL Arduino‑module
PA-12-bedieningswerking
De PA-12 wordt direct aangestuurd met datapakketten die via TTL of RS‑485‑communicatie worden verzonden. Elk datapakket bevat informatie die wordt gebruikt om een bepaalde functie van de PA-12 uit te voeren of om de huidige status van het apparaat te ontvangen. De huidige status van het apparaat kan bijvoorbeeld de servo‑ID, spanningswaarde, positie van de stang van de actuator, enz. zijn.
Apparatuur en software
- Arduino Leonardo
- TTL‑naar‑RS‑485‑module
- PA-12-10645012R Actuator
- +12VDC‑voeding
- Jumperdraden
- Arduino IDE
- PA-12 Arduino API
PA-12 API
De PA-12 API kan hier. worden gedownload. Deze API bevat de volgende bestanden en mappen:
- PA12.ino
- Bevat de PA-12‑opbouw van commando’s en functies die data naar/van de PA-12 verzenden en ontvangen
- Alle functies die in de voorbeeldcodes worden gebruikt of in uw code zullen worden geïmplementeerd, zijn in dit bestand opgeslagen
- PA12.h
- Het headerbestand bevat het communicatieprotocol en headers voor seriële communicatie
- Bevat functie‑ en variabeledeclaraties voor alle PA12‑functies en functionaliteit
- setPosition, ServoID, presentSpeed, forceEnable
- Hulpprogrammabestanden
- Voorbeeldcodes
- De voorbeeldcode kan worden gebruikt om de PA‑12‑besturing eenvoudig in uw eigen systeem te implementeren
- Alle voorbeeldcodes zijn geprogrammeerd voor gebruik met Arduino Leonardo, maar de variabelen voor de zend‑ en ontvangstpinnen kunnen worden aangepast om compatibel te zijn met de microcontroller/Arduino die u al hebt
PA12‑bibliotheek importeren
Selecteer ‘Sketch’ --> Include Library --> Add .ZIP Library. Alle bestanden in de PA12‑map worden rechtstreeks geïmporteerd in de Arduino‑bibliotheek voor de lineaire actuator. Hierdoor kunt u de PA12‑functies gebruiken om de actuator aan te sturen.

Figuur 2 - Arduino‑bibliotheek importeren
Beschikbare commando’s voor PA-12
Hieronder staat een tabel met commando’s. Voor meer informatie over de commando’s, bekijk PA12.ino voor code‑informatie. In deze tutorial behandelen we de basiscommando’s. Toekomstige tutorials zullen geavanceerdere functies en besturingstechnieken omvatten.
Leesfuncties
De functies in de tabel hieronder zijn alleen-lezen en geven een waarde terug.
|
Leesfunctie |
Variabele |
Beschrijving |
|---|---|---|
|
myServo.getModelNumber(ID_NUM) |
ID_NUM |
PA‑12 modelnummer |
|
myServo.Version(ID_NUM) |
ID_NUM |
PA‑12 moterversienummer |
|
myServo.CalStroke (ID_NUM, *Length*) |
ID_NUM, Lengte = Kort, Lang of Midden |
Kalibratiecontrole van de slaglengtepositie |
|
myServo.presentVolt((ID_NUM)/10) |
ID_NUM |
Controle van de ingangsspanning |
|
myServo.presentTemperature(ID_NUM) |
ID_NUM |
Huidige temperatuur van de motor |
|
myServo.MaxTemperature(ID_NUM) |
ID_NUM |
Lees de maximale temperatuurgrens |
|
myServo.presentPosition(ID_NUM) |
ID_NUM |
Huidige positie van de actuator |
|
myServo.moving(ID_NUM) |
ID_NUM |
Geretourneerde waarde van motorstatus. 1 = In beweging, 0 = Gestopt |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*) |
ID_NUM, Hoog spanningsniveau = Hoogste of Laag spanningsniveau = Laagste |
Lees de hoog- of laagspanninginstelling |
|
myServo.alarmLed(ID_NUM) |
ID_NUM |
Leest de status van de alarm‑LED. 1 = AAN, 0 = Uit |
|
myServo.alarmShutdown(ID_NUM) |
ID_NUM |
Leest de status van de alarm‑uitschakelmodus |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*) |
ID_NUM, Uitschuiflimiet = Lang of Inschuiflimiet = Kort |
Leest de maximale en minimale slaglengte‑limieten |
|
myServo.ResolutionFactor(ID_NUM) |
ID_NUM |
Leest de resolutiefactor van de servomotor |
|
myServo.movingSpeed(ID_NUM) |
ID_NUM |
Leest de waarde van de servomotor‑snelheid |
|
myServo.forceLimit(ID_NUM) |
ID_NUM |
Leest de maximale kracht van de servomotor (vluchtige instelling) |
|
myServo.maxForce(ID_NUM) |
ID_NUM |
Leest de maximale kracht van de servomotor (niet‑vluchtige instelling) |
Schrijffuncties
|
Schrijffunctie |
Variabele |
Beschrijving |
|---|---|---|
|
myServo(&Serial, enable_pin, Tx Level) |
Seriële poortnummer, enable‑pin, zendpin |
Instelling van de communicatiepoort |
|
myServo.begin(*Baud Setting Value*) |
Baud‑instelwaarde (zie tabel) |
Baudrate van seriële communicatie |
|
myServo.ServoID(ID_NUM, ID_Sel) |
ID_NUM, ID_Sel |
Wijzig servo‑ID‑waarde |
|
myServo.ledOn(ID_NUM, *LED RGB Value*) |
ID_NUM, LED‑RGB‑waarde (zie tabel) |
Schakelt een opgegeven LED in |
|
myServo.MaxTemperature(ID_NUM, Temperature) |
ID_NUM, Temperature |
Schrijf de maximale temperatuurgrens |
|
myServo.goalPosition(ID_NUM, *Position Value*) |
ID_NUM, Positiewaarde (zie tabel) |
Stel een gewenste slaglengtepositie in |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*, LimitVolt) |
ID_NUM, Hogere waarde = Hoogste of Lagere waarde = Laagste, LimitVolt |
Stel de hoog- of laagspanninginstelling in |
|
myServo.alarmLed(ID_NUM, *Alarm Variable*) |
ID_NUM, Alarmbit |
Instelling voor alarm‑LED. Zie tabel voor meer info. |
|
myServo.alarmShutdown(ID_NUM, *enable*) |
ID_NUM, Enable: 0 = uit, 1 = aan |
Instelling voor motor‑alarmuitschakeling. Als het alarm is geactiveerd, kan de motor worden uitgeschakeld |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*, *Position Value*) |
ID_NUM, Uitschuiflimiet = Lang of Inschuiflimiet = Kort, Positiewaarde (zie tabel) |
Schrijft de maximale en minimale slaglengte‑limieten |
|
myServo.ResolutionFactor(ID_NUM, *Resolution Factor*) |
ID_NUM, Resolutiefactor (zie tabel) |
Stelt de resolutiewaarde in voor positionering van de slaglengte van de actuator. |
|
myServo.movingSpeed(ID_NUM, *Moving Speed Value*) |
ID_NUM, Waarde bewegingssnelheid (zie tabel) |
Stelt de snelheid van de servomotor in |
|
myServo.forceLimit(ID_NUM, *Force Value*) |
ID_NUM, Krachtwaarde (zie tabel) |
Stelt de maximale kracht van de servomotor in (vluchtige instelling) |
|
myServo.maxForce(ID_NUM, *Force Value*) |
ID_NUM, Krachtwaarde (zie tabel) |
Stelt de maximale kracht van de servomotor in (niet‑vluchtige instelling) |
Variabele instellingen
De tabellen hieronder bevatten de variabele waarde die in de functies wordt ingevoerd.
Baudrate
|
Waarde van de baudvariabele |
Baudrate |
|
16 |
115200 |
|
32 |
57600 |
|
64 |
19200 |
|
128 |
9600 |
LED‑waarde
|
LED‑RGB‑waarde |
|
ROOD |
|
GROEN |
|
BLAUW |
Servo‑ID
|
Servo‑ID‑waarde |
|
0 |
|
1 - 253 |
|
254 |
Voor servo‑motor‑ID‑variabele ID_NUM: Er zijn in totaal 255 opties beschikbaar. De waarde 0 is de standaardinstelling. U kunt voor een individuele ID een waarde van 1 tot 253 selecteren. De waarde 254 is gereserveerd voor een broadcast‑ID en activeert daarmee alle PA‑12’s binnen een netwerk.
Alarminstellingen
|
Alarminstelling |
Waarde van alarminstelling |
|
Ingangsspanningsfout |
0 |
|
Slaglengtebegrenzingsfout |
1 |
|
Bereikfout |
3 |
|
Controlesomfout |
4 |
|
Overbelastingsfout |
5 |
|
Instructiefout |
6 |
|
*Gereserveerd* |
7 |
Slaglengte‑resolutiefactor
|
Waarde van de resolutiefactor |
Resolutie |
|
1 |
4096 |
|
2 |
2048 |
|
3 |
1024 |
|
4 |
512 |
Hoe hoger de resolutiewaarde, hoe hoger de positioneringsnauwkeurigheid.
Bewegingssnelheid
|
Waarde bewegingssnelheid |
Snelheidsinstelling |
|
0 |
Maximale snelheid |
|
1 - 1023 |
1 = Laagste, 1023 = Hoogste |
Krachtwaarde
|
Krachtwaarde |
Krachtinstelling |
|
0 - 1023 |
1 = Laagste, 1023 = Hoogste |
Positiewaarde
|
Positiewaarde |
Positie |
|
0 - 4095 |
0 = Volledig ingetrokken, 4095 = Volledig uitgeschoven |
Bedradingsgids
De PA-12 is verbonden met de RS‑485‑module, die vervolgens direct met de Arduino is verbonden. Deze versie van de PA-12 vereist een 12VDC‑voeding voor de servomotor.

| RS-485 zijde A | Arduino |
| DI | Pin 1 |
| DE | Pin 2 |
| RE | Pin 2 |
| R0 | Pin 0 |
Pin 0 op de Arduino is de TTL‑ontvangst. Pin 1 op de Arduino Leonardo is de TTL‑zending. Pin 2 in de voorbeeldcodes is zo ingesteld dat deze wordt gebruikt als de enable‑pin.
|
PA-12 4‑pins connector |
Waarde |
|
Zwart |
GND |
|
Rood |
Servomotor +VDC |
|
Wit |
Communicatiepin A |
|
Geel |
Communicatiepin B |

Figuur 3- PA-12 poortaansluitingen
|
RS-485 zijde B |
Verbinding |
|
VCC1 |
+5VDC (Arduino) |
|
A |
PA-12 witte draad |
|
B |
PA-12 gele draad |
|
GND2 |
Voedings‑GND en PA‑12 GND |
1De RS‑485‑module ontvangt voeding van de +5VDC‑uitgang van de Arduino.
2De massa wordt gedeeld tussen de PA‑12, voeding en RS‑485‑module.
Voorbeeldcode
In deze tutorial laten we drie voorbeeldcodes zien die een eerste inzicht geven in enkele functies van de PA‑12 en hoe schrijf- en leesfuncties in uw eigen code kunnen worden geïmplementeerd.
- PA12_PresentPosition
- PA12_StrokeLimit
- PA12_ForceLimit
1. Huidige positie
In deze code voert de gebruiker de gewenste positiewaarde tussen 0 en 4095 in via de seriële monitor. Na invoer wordt de opdracht naar de PA‑12 gestuurd, die vervolgens de servomotor activeert om de stang naar de gewenste positie te bewegen. Terwijl de motor beweegt, wordt de huidige positie weergegeven totdat de eindpositie is bereikt.

2. Slaglengte‑limiet
In deze code doorloopt de PA‑12 elke 1000 ms de opgegeven parameters voor uitschuif- en inschuiflimiet. De aanduidingen Long en Short bevinden zich in de functie voor slaglimiet

3. Krachtlimiet
De hier getoonde krachtlimiet‑code is de vluchtige versie. Dit betekent dat telkens wanneer de PA‑12 de voeding verliest, de krachtlimietwaarde wordt teruggezet naar de standaardinstelling. De gebruiker voert de krachtlimietwaarde in via de seriële monitor. In dit geval duidt de maximale krachtwaarde van 0 op een lage krachtwaarde en 1023 op een maximale krachtwaarde.

Toekomstige tutorials
In toekomstige tutorials behandelen we:
- Implementatie van geavanceerde functies
- TTL‑ en PWM‑versie PA‑12 besturing
- Technieken voor probleemoplossing
- Externe besturingsmethoden
De PA‑12 is een veelzijdige en zeer nauwkeurige actuator waarmee de eindgebruiker directe controle over zijn toepassing kan krijgen. Met de juiste implementatie kan de PA‑12 precies voldoen aan uw systeemvereisten.
Voor aanvullende informatie kunt u ons een e‑mail sturen op sales@progressiveautomations.com, of ons team bellen op 1-800-676-6123.