Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
1
Systemy Wbudowane
mgr inż. Marek Wilkus http://home.agh.edu.pl/~mwilkusWydział Inżynierii Metali i Informatyki PrzemysłowejAGH Kraków
Raspberry Pi – Serwomechanizm, kamera, SPI(wersja 2020)
2
Serwomechanizm
• Możliwość dokładnego sterowania położenia (lub podobnej wartości) za pomocą układu ze sprzężeniem zwrotnym:– Zadajemy nowe położenie,– Układ zmierza ku położeniu,– Odbywa się ciągły pomiar położenia,– Gdy położenie osiągnie żądane, układ
zatrzymuje się.
• Problemy:– Bezwładność,– Niedokładność mechanizmu,– Oscylacje (zbyt wąska histereza)
3
Serwomechanizm z silnikiem krokowym
• Stosowany gdy pozycja wału silnika jest niewystarczająca do ustalenia położenia,
• Pomiar położenia odbywa się na ostatnim stadium (np. sterowanie kamerą – na samej obudowie kamery, nie wale silnika kilka przekładni wcześniej),
• Niezbędne układy pomiarowe, stały monitoring położenia (np. transoptor odbiciowy), nie tylko położeń krańcowych (wyłączniki krańcowe).
• Zastosowanie:– Aparatura produkcyjna wysokiej precyzji,– Profesjonalne skanery,– Urządzenia wielkiej skali.
4
Serwomechanizm na silniku klasycznym
• Dodatkowe pomiary położenia za pomocą tarczy magnesów trwałych i czujnika (hallotron lub kontaktron), rzadziej stosowany jest pomiar wartości ciągłej (potencjometr).
• Często dostępne jako "wszystko w jednym",
• Możliwość użycia gotowych układów aparaturowych i modelarskich
Potencjometr:
5
Nie tylko położenie...
• Jakkolwiek większość serwomechanizmów służy do regulacji położenia, możliwe jest zastosowanie regulatorów o sprzężeniu zwrotnym do regulacji i stabilizacji innych wielkości.
• Fotografia: Detektor prędkości silnika napędu taśmowego. Pomiar służy do stabilizacji prędkości i kompensacji niedokładnościszybkości silnika.
• Problemy:– Konieczna dokładność pomiarów– Szybki układ obsługi sprzężenia
zwrotnego.
6
Regulator PID: Sprzężenie zwrotne, ale jak?
• Zapamiętujemy poprzednie wskazania i wyciągamy wnioski,
• Przewidujemy do przodu,• Cały czas mamy aktualną pozycję i
korygujemy ją,• Poprawki nanosimy iteracyjnie, małymi
krokami,
7
Regulator PID
u(t) – zmiany które trzeba uwzględnićr(t) – cel do osiągnięciae(t) – błąd w danym momenciey(t) – efekt wprowadzanych zmian
8
Skład PID:
Człon proporcjonalny
Człon całkujący
Człon różniczkujący
e(t) = r(t) – y(t)
u(t) – zmiany które trzeba uwzględnićr(t) – cel do osiągnięciae(t) – błąd w danym momenciey(t) – efekt wprowadzanych zmian
9
… i efekt (w zależności od K):
Kp Ki
Kd 10
Serwomechanizm – podłączenie do RPi
• Sterowany dedykowanym układem konwertującym ws. wypełnienia PWM na położenie,
• Niezbędne 3 linie na każdy serwomechanizm: Zasilanie (z reguły 5V), GND, sygnał sterujący,
• Niektóre serwomechanizmy o dużym momencie wymagają osobnego zasilania silników.
11
Podłączenie servo do RPi
Ground
PWM
5V
12
Konwersja PWM->Położenie
0.45/20*100%=2.25%
1.5/20*100%=7.5%
2.5/20*100%=12.5%
0o
90o
180o
13
Oprogramowanie
14
Oprogramowanie
0% → 0o → 0.45/20*100% = 2.25%
50% → 90o → 1.5/20*100% = 7.5%
100% → 180o → 2.5/20*100% = 12.5%
PWM
15
Magistrala SPI
16
Magistrala SPI
• Szeregowa magistrala służąca do komunikacji między elementami układu,
• Linie:– SCK – Zegar– MISO – Master In, Slave Out– MOSI – Master Out, Slave In– /Select
• Wiele urządzeń – wiele linii /SELECT.– /SELECT – Active LOW (urządzenie jest wybrane gdy stan niski)
• Zaproponowana przez firmę Philips, zaadaptowana do przetworników pomiarowych, pamięci, a nawet programowania mikrokontrolerów (AVR!)
17
SPI vs I2C
• SPI: Dwie linie dla dwóch kierunków• I2C: Jedna linia dwukierunkowa.
• SPI: Wybór układu kolejnymi liniami adresów• I2C: wybór układu przez jego zdres, inne układy ignorują
komunikat.
• I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli nic temu nie przeszkadza,
• SPI: Jedno urządzenie Master.
• I2C: Urządzenie slave może spowolnić komunikację.• SPI: Zegar jest zawsze nadawany przez urządzenie Master.
18
Wiele urządzeń SPI
19
Konfiguracja CPOL i CPHA
20
Przykład
21
Przykładowe podłączenie
• Przetwornik Analogowo-cyfrowy (ADC) MCP3008
21 22
MCP3008 - Komunikacja
MOSI
MISO
SS
SCK
23
Oprogramowanie
#include <iostream>#include <stdint.h>
// some code here ...
int main() { // some code here ...
uint8_t buffer[ 3 ]; buffer[ 0 ] = 1; buffer[ 1 ] = ( differential ? 0 : ( 1 << 7 ) ) | ( channel << 4 ); buffer[ 2 ] = 0;
if( transfer( buffer, 3 ) ) { uint16_t hi = ( buffer[ 1 ] << 8 ) & 0x0300; uint16_t lo = ( buffer[ 2 ] << 0 ) & 0x00FF; uint16_t value = hi | lo;
cout << 100.0 * ( (double)value / 1023.0 ); }
return 0;}
24
Oprogramowanie (2)
uint8_t mode = SPI_MODE_0;uint8_t bpw = 8; // bits per worduint32_t speed = 500000;
int handle = -1;
bool open() { handle = ::open( "/dev/spidev0.0", O_RDWR );
if( handle < 0 ) return false;
if( ::ioctl( handle, SPI_IOC_WR_MODE, &mode ) < 0 || ::ioctl( handle, SPI_IOC_RD_MODE, &mode ) < 0 || ::ioctl( handle, SPI_IOC_WR_BITS_PER_WORD, &bpw ) < 0 || ::ioctl( handle, SPI_IOC_RD_BITS_PER_WORD, &bpw ) < 0 || ::ioctl( handle, SPI_IOC_WR_MAX_SPEED_HZ, &speed ) < 0 || ::ioctl( handle, SPI_IOC_RD_MAX_SPEED_HZ, &speed ) < 0 ) { ::close( handle ); return false; } return true;}
25
Oprogramowanie (3)
bool transfer( uint8_t *data, uint16_t length ){ struct ::spi_ioc_transfer pack;
pack.tx_buf = (unsigned long)data; // transmit from "data" pack.tx_nbits = 8; pack.rx_buf = (unsigned long)data; // receive into "data" pack.rx_nbits = 8; pack.len = length; pack.delay_usecs = 0; pack.speed_hz = speed; // 500000 pack.bits_per_word = bpw; // 8 pack.cs_change = 0; // 0 or 1 for RPi
// data transmission if( ::ioctl( handle, SPI_IOC_MESSAGE( 1 ), &pack ) < 0 ) return false;
return true;}
26
Systemy Wbudowane
mgr inż. Marek Wilkus http://home.agh.edu.pl/~mwilkusWydział Inżynierii Metali i Informatyki PrzemysłowejAGH Kraków
Raspberry Pi – Kamera(wersja 2019)
27
Kamera
• Połączona szybkim różnicowym złączem szeregowym,• Pełne wsparcie systemu oraz bibliotek.
27
8MPx
5MPx NoIR
5MPx Szerokokątna
5MPx Szerokokątna (175o)+LED Board
5MPx
28
Interfejs
DP/DN – Data positive/negativeD[p,n]0/1 – Lane 0, 1CN/CP – Clock negative/positive (z kamery).GPIO/CLK – optional GPIO and CLK (lub SDA/SCL)
29
Na co SDA/SCL?
• Sterowanie kamerą• Ekspandery GPIO• Multipleksery kamer• Dodatkowe urządzenia• Sterowanie kamerami o
szczególnych właściwościach (np. IR)
30
Włączanie modułu kamery
31
Obsługa z poziomu konsoli
• Przechwytywanie obrazu• Strumień wideo (Full HD, 10s)
raspivid -w 1092 -h 1080 -t 10000 -o ~/Desktop/test.h264raspivid -p 0,0,1920,1080 -t 10000 # podgląd – wymagany monitor!raspivid -w 1092 -h 1080 -t 10000 –o - > ~/Desktop/test.h264raspivid -w 640 -h 480 -t 10000 -o - | nc -l 6000 # strumieniowanie przez sieć
• Zdjęcia JPEG
raspistill -w 1092 -h 1080 -n -o image.jpgraspistill -w 1092 -h 1080 -n -o - > image.jpg
• Zdjęcia YUV
raspiyuv -w 1092 -h 1080 -o image.imgraspiyuv -w 1092 -h 1080 –o - > image.img
32
Raspistill – szybsze zrobienie zdjęcia
• Zmniejszenie rozdzielczości:
parametry: -w [szerokość] -h [wysokość]
• Skrócenie czasu pomiaru światła do 500ms:
parametr: -t 500
• Czyli np.:
• raspistill -w 800 -h 600 -t 500 -n -o image.jpg
33
C++ - biblioteka
• Pobieranie biblioteki:
$ wget http://sourceforge.net/projects/raspicam/files/raspicam-0.1.3.zip/download $ unzip download$ cd raspicam-0.1.3$ mkdir build$ cd build$ cmake ..$ make$ sudo make install
Kompilacja kodu ze wsparciem dla kamery:$ g++ camera.cpp -o camera -I/usr/local/include -L"/opt/vc/lib/" -lraspicam -lmmal -lmmal_core -lmmal_util$ chmod +x camera$ ./camera
34
Format PPM
• Prymitywny format obrazu dla tekstowych platform Uniksowych,
• Pliki ASCII opisujący wartości R, G, B.
- Duże pliki- Toporny sposób zapisu,- maksimum 256 kolorów, paletyzowane+ Brak metadanych.+ Niskie wymagania (przeglądarki na MC68000)+ Łatwy do przesyłu pocztą, a nawet teleksem / radioteleksem (RTTY).
35
Kamera i pobieranie do PPMa
unsigned char *data = … // dane w postaci bajtów:R G B R G B R G B R G B R G B …
36
Programy do strumieniowania z kamery
raspivid -vf -t 0 -fps 25 -b 2000000 -o - \ | ffmpeg -i - -vcodec copy -an -r 25 -f flv rtmp://x220/myapp/mystream
lub
raspivid -t 9999999 -w 960 -h 540 -fps 25 -b 500000 -vf -o - \ | ffmpeg -i - -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:1818
lub
ffmpeg -i "source.h264" -c:v copy -f mp4 "myOutputFile.mp4"
raspivid ffmpeg netcat
Lub (prosty streaming):
37
v4l – Video for Linux
• Uniwersalna warstwa abstrakcji dla kamer, skanerów, tunerów, kolorymetrów, urządzeń pozyskiwania obrazu.
• Przykład użycia:
modprobe bcm2835-v4l2
/dev/video0 # video 4 linux device
# Capture a JPEG image v4l2-ctl --set-fmt-video=width=2592,height=1944,pixelformat=3 v4l2-ctl --stream-mmap=3 --stream-count=1 --stream-to=somefile.jpg
38
Konwersja formatów
• Program convert:
convert plik1.ppm plik1.png
• Inne opcje, m.in.:-resize 800x600 – skalowanie-resize 50% - zmniejsz o połowę-thumbnail 200x200 – miniaturka-quality – jakość dla JPEG
• Pomoc: https://imagemagick.org/script/command-line-options.php