Servon liikeradan mittaus - Tekninen Dokumentaatio

Sisällysluettelo

1. Yhteenveto

Servon liikeradan mittaus on Raspberry Pi Pico -mikrokontrollerille kehitetty ohjelma, joka mittaa servomoottorin liikeradan kolmiakselisella kiihtyvyysanturilla (ADXL335). Ohjelma ohjaa servoa 0-180 asteen kulmavälillä ja kerää kiihtyvyysdataa servon liikkeen aikana.

Normaalitoiminta: Servo liikkuu osana laitteen normaalia toimintaa ja suorittaa sille kuuluvan käyttösyklin.

Ennakoiva kunnonvalvonta: Servon liikkeen aikana mitataan kiihtyvyyttä mittaussyklin muodostamiseksi ja data välitetään jatkokäsittelyä varten.

Tärkeimmät ominaisuudet:

Normaalitoiminta

  • Servo toimii osana laitteen normaalia toimintaa (PWM-ohjaus, SG5010)
  • Servo liikkuu 0-180-0 osana käyttösykliä

Ennakoiva kunnonvalvonta

  • Kiihtyvyysanturi mittaa servon liikkeen aikaisen mittaussyklin (ADXL335)
  • Mittausdata kerätään puskuriin ja lähetetään mittausjakson lopuksi
  • JSON-muotoinen datan lähetys, jossa 4 tavun pituusetuliite
  • Mittausjakso käynnistyy tietyssä tilanteessa (demossa painikkeella)

2. Arkkitehtuuri

Ohjelma on rakennettu modulaariseksi seuraavien komponenttien avulla:

Moduulit

Tilakone

Servon ohjaus käyttää tilakonetta seuraavilla tiloilla:

3. Määritykset

UART-asetukset

Määritys Arvo Kuvaus
UART_ID uart0 Käytettävä UART-kanava
BAUD_RATE 115200 Nopeus bps
UART_TX_PIN 0 Lähetyspin
UART_RX_PIN 1 Vastaanottopin

GPIO-pinnit

Määritys Arvo Kuvaus
SERVO_PIN 16 Servon PWM-ohjauspin
SWITCH_PIN 15 Painikkeen tulo

ADXL335 Kiihtyvyysanturi

Määritys Arvo Kuvaus
X_AXIS_PIN 26 X-akselin analogitulo
Y_AXIS_PIN 27 Y-akselin analogitulo
Z_AXIS_PIN 28 Z-akselin analogitulo
ADC_VOLTAGE 3.3f Käyttöjännite (V)
ADC_RESOLUTION 4095.0f 12-bittinen AD-muunnin
Mittaustyyppi: Koodissa käytetään AD-muuntimen raakaarvoja (0..4095). Jännitteen ja g-arvon laskenta on valmiina kommentoituna, mutta ei käytössä.

SG5010 Servo

Määritys Arvo Kuvaus
PWM_WRAP 12500 20ms jakso (50Hz)
SERVO_MIN 400 0.8ms pulssi (0°)
SERVO_NEUTRAL 1500 1.5ms pulssi (90°)
SERVO_MAX 2600 2.0ms pulssi (180°)
SERVO_UPDATE_MS 15 Päivitysväli (ms)

Puskuri

Määritys Arvo Kuvaus
MAX_MEASUREMENTS 1000 Mittausten enimmäismäärä yhdessä mittausjaksossa

4. Tietueet

accel_data_t

Kiihtyvyysmittauksen tietue

typedef struct {
                    int angle;              // Servon kulma mittauksen hetkellä
                    uint16_t x, y, z;       // Raaka ADC-arvo per akseli
                    uint32_t total;         // Yhdistetty suuruus
                    absolute_time_t timestamp; // Aikaleima
                } accel_data_t;
        

ServoState

Servon tilakoneen tilat

typedef enum {
                SERVO_IDLE,          // Odotetaan painiketta
                SERVO_MOVING_TO_MAX, // Liikutaan kohti maksimikulmaa
                SERVO_MOVING_TO_MIN, // Palataan takaisin nollakulmaan
                SERVO_CYCLE_DONE     // Yksi sykli suoritettu
            } ServoState;
        

5. Pääfunktio

main()

Ohjelman pääsilmukka suorittaa seuraavat toimenpiteet:

  1. Alustaa järjestelmän ja UART-yhteyden
  2. Alustaa painikkeen, servon ja kiihtyvyysanturin
  3. Suorittaa jatkuvaa silmukkaa:
    • Käsittelee painikkeen painallukset
    • Päivittää servon asentoa
    • Tee mittauksia servon liikkeen aikana
    • Lähettää datan kun mittausjakso on valmis
Mittaustiheys: Noin 50 Hz (20ms välein)
Servon päivitys: 5 astetta per 15ms
Paluu nollaan: Paluuliike päättyy, kun kulma on ≤ 10°, jonka jälkeen asetetaan 0° ja lähetetään JSON

6. Käyttöohje

Laitteistovaatimukset

Virtalähde: Servo syötetään erillisestä 5V virtalähteestä.
Maadoitus: GND on yhteinen kaikille (Pico, servo ja anturi).

Kytkentä

Laite Pico Pin Kuvaus
Servo signaali GPIO 16 PWM-ohjaus
Painike GPIO 15 Active LOW
ADXL335 X GPIO 26 ADC0
ADXL335 Y GPIO 27 ADC1
ADXL335 Z GPIO 28 ADC2
UART TX GPIO 0 Datan lähetys
UART RX GPIO 1 Datan vastaanotto
Anturin kiinnitys: ADXL335 on kiinnitetty servoon.

Käyttö

  1. Kytke laitteisto Picoon
  2. Käännä ja lataa ohjelma Picoon
  3. Avaa sarjamonitori (115200 baud)
  4. Paina painiketta käynnistääksesi mittauksen
  5. Servo liikkuu automaattisesti 0-180 astetta ja takaisin
  6. Data lähetetään JSON-muodossa kun mittaus on valmis
Debounce: Painallus rekisteröidään vain, jos edellisestä painalluksesta on kulunut yli 200 ms.

JSON-datan muoto

Mittausjakson lopuksi laite lähettää ensin 4 tavun pituuskentän (big-endian), jonka jälkeen itse JSON-datan. Tämä helpottaa vastaanottavaa päätä lukemaan koko viestin yhtenä kokonaisuutena.

{
  "measurements": [
    {
      "time_ms": 0,
      "angle": 0,
      "acceleration": {
        "x": 2048,
        "y": 2048,
        "z": 2048,
        "total": 3547
      }
    },
    // ... lisää mittauksia
  ],
  "total_measurements": 1000,
  "duration_ms": 5400
}

7. Vianhaku

Yleiset ongelmat

Servo ei liiku

Ei dataa UART-liitännästä

Kiihtyvyysanturi ei lue arvoja

Painike ei toimi

Debug-vinkkejä

Tunnusmerkit