null

KMM
•
•
•
•
•
•
•
Enchipsdatorn AVR
Kommunikation
Sensorer
Reglerteknik
Avbrott
Beagleboard
Raspberry Pi
www.atmel.com
www.avrfreaks.net
1
Enchipsdator = allt på ett chip,
CPU, RAM, ROM,
I/O (parallell, seriell, A/D, timer/counter, PWM, I2C, SPI, ...)
clk
8
8
8
8
I/O A
I/O B
I/O C
I/O D
Flash
Prog
CPU
RAM
Data
EE
Data
rst
irq
AVR-familjen. 8-bits RISC-dator +
AVR = Alf Vegard Risc
I/O
2
1
ATmega1284 <-> ATmega16<-> ATmega168
Egenskap
1284
Instruktioner
16
168
131 kraftfulla!
Register
32 generella 8-bits
Flash
(program,konstanter)
128 kB
16 kB
16 kB
EEPROM
(konstanter)
4 kB
512 B
512 B
SRAM (variabler)
16 kB
1 kB
1 kB
I/O (pinnar)
32 (40)
32 (40)
Avbrott (antal)
36
20
26
I2C
1
1
1
SPI
3
1
1
UART
2
1
1
8-bit timers
2
2
2
16-bit timers
2
1
1
PWM (kanaler)
6
4
6
A/D (kanaler)
8
8
6
klocka
0-20 MHz 0-16 MHz 0-20 MHz
23 (28)
168
1284, 16
3
Principschema
2-stegs pipeline
clk
rst
Motor,
Servo,
Sensor,
Bluetooth,
...
4
2
Hur fort går det?
Med 20 MHz klocka gör AVR 20 MIPS (miljoner instruktioner per sekund)
Hämta 1
Hämta 2
add
Verkställ 1 Verkställ 2
brpl
xxx
yyy
add
brpl
nop
yyy
20000 instruktioner per millisekund!
OBS, en FPGA på samma frekvens är klart snabbare!
sekvensnät
processor
5
20 MHz
20 MHz
Programmerarmodell
Program space
Data space
32
8k
64
1024
8
16
3
• Stora AVR-en har 4 portar
(A,B,C,D) à 8 bitar.
• Varje port kan vara en parallellport eller något annat.
• Till porten hör ett antal
I/O-register.
9
Ett litet exempel
AVR
ddrB
r0
r1
portB
pinB
r31
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
bar LED
DIP switch
8
10
4
En pinne/bit i port B
DDRBn
Här är pinnen!
PORTBn
PINBn
Alltså
* 3 register
* skriv till PORT
* läs från PIN
11
Vanlig digital in/ut-matning - asm
.include "m16def.inc"
.org 0
; Skriv 00001111 i datariktningsregistret
ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)
out DDRB,r17
TILLBAKA:
; Läs av pinnarna
in r16,PINB ; kolla tryckknappar 7,6,5,4
; Skifta ner r16 fyra gånger
swap r16
; Skriv ut på LEDarna
out PORTB,r16
jmp TILLBAKA
12
5
Vanlig digital in/ut-matning - C
#include <avr/io.h>
int main(void) {
uint8_t i;
...
/* Define directions for port pins */
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
while (1) {
/* Läs av DIP-switchen */
i = PINB;
/* kolla tryckknappar */
/* Skifta 4 steg höger,
skriv ut på LEDarna */
PORTB = i>>4;
}
}
Kommentar:
1) I/O-programmering likadan som i asm!
2) Nytt är variabeln i. Var bor den? Hur stor är den?
asm
<->
13
C
Manualen har exempel
för båda
CPU registren r0-r31
försvinner
I/O-programmeringen likadan.
64 I/O-register
Struktur, if-satser, forloopar ..., datatyper ...
Tidskritisk kod?
Mer ”känsla” för maskinen ?
Det går att blanda,
fast gör inte det
Kompilatorn fixar
kod för avbrottsvektorer
14
6
Utvecklingsmiljö för Atmel
•Windows – Atmel Studio (asm, avr-gcc)
JTAG-kabel
USB-kabel
I labbet: Med ICE, exekvering i AVR
1)
2)
3)
4)
1)
2)
3)
4)
Upload + Programmering
Läsa/skriva register (vrida på huvudet ...)
Singlesteppa
Köra med brytpunkt adress/data
Hemma: Utan ICE, simulering i PCn
Läsa/skriva register
Singlesteppa
Köra med brytpunkt program/data
Stimuli (mata in 0/1 på pinnarna)
15
17
7
18
Kommunikation
- UART
- Parallell
- I2C
- SPI
19
8
Hur kommunicerar processorerna
med varandra och med omvärlden?
servon
Modul 1
Atmel
sensorer
Modul 2
Atmel
Modul 3
Atmel
20
1) UART (Universal Asynchronous Receiver/Transmitter)
Protokoll: startbit
databitar
1 stoppbit
......
AVR1
UART1
Firefly
Dongle
Bluetooth
modul
Bluetooth
pinne
USB
term
UART2
AVR2
UART1
• Max 115200 BAUD (databitar per sekund)
• Full duplex
• Flaggor signallerar sänt/mottaget data klart
UART2
9
2) Parallellport
AVR1
AVR2
+ Enkelt (?)
- Många pinnar
- Eget protokoll
- Dubbelriktad (?)
- Egen handskakning
Data
Handskakning
22
3) I2C – Inter Integrated Circuit
TWI -Two Wire Interface
• Enkel 2-trådsbuss (+ jord)
• AVR kan vara Master/Slave
• AVR kan vara Sändare/Mottagare
• 7-bits adress => 128 slavar
• Multimaster arbitration supported
• Upp till 400 kHz (200 kHz i praktiken)
IRQ0
AVR1
master
AVR2
master
IRQ1
AVR1
master
AVR3
master
AVR2
slave
AVR3
slave
SDA
SCL
SDA
SCL
Multimaster
Coolt men svårt!
Master / Slaves
Vanligare, lättare!
23
10
3) I2C – Two wire interface Inter-integrated-circuit
master
AVR1
bit rate
control
status
data
slave address
TWBR
TWCR
TWSR
TWDR
TWAR
slave
slave
AVR2
AVR2
TWBR
TWCR
TWSR
TWDR
TWAR
TWBR
TWCR
TWSR
TWDR
TWAR
+
10 kohm
SDA
24
SCL
4) SPI
fmax = 8/4 MHz
AVR1 (master)
AVR2 (slave)
25
11
Sensorer
- A/D-omvandling
- Reglering
- Telemetri
-Tidsmätning
26
Sensor 1: IR-avståndsmätare
spänning
Features
• Less influence on the color of reflected objects, reflectivity
• Analog voltage corresponding to distance
• Detecting distance: 4 to 30 cm, 10 to 80 cm, 20 to 150 cm
• External control circuit unnecessary
• Low cost
27
avstånd
12
Sensordata
Ett exempel ur verkligheten:
IR-avståndsmätare ger 25 mätvärden/s i form av analog spänning
0->3V. Vi kopplar den direkt till en AVR, som har A/D-omvandlare.
Vid närmare studium av
sensordatas kvalitet på
oscilloskop upptäcks
störningar på mätvärdena!
Bäst är att bli av med
dessa, med ett
lågpassfilter, innan
signalen går in i A/Domvandlaren.
28
Sensor 2: Tejpsensorn
mäter tejpens läge
+5
R1
analog spänning
[0 - 5] V
R2
IR-lysdiod
29
13
Sensor 3: Linjesensor
Vårt sensorpaket,
11 sensorer (LED + fototransistor),
• Läses av med A/D
• Varje sensor kontrollerad
ljust = 0, mörkt 1023
En bit tejp,
Ojämn, varierande
belysning
30
Att mäta analog spänning:
A/D-omvandling
+5
R1
omvandlare
R2
analog
mux
Värde 10 bitar
Kontroll/Status
8 kanaler
0->5 V => 0->1023
Start .... (gör nåt annat)
Färdig
31
14
Sensordata
1
2
3
4
5
6
k
Enkel tyngdpunktsberäkning:
k T   mk k
k
m
k
k
Felet
e  3,5  kT
32
Lite reglerteknik
Hur gör man egentligen för att
1) gå mitt i en korridor?
2) följa en linje?
trots att
1) 4-beningen haltar lite grann
2) linjen böjer av
3) golvet lutar
lägessensor
styrdon
33
15
Lite reglerteknik
Vi måste konstruera en enkel linjär tidsdiskret regulator.
1) Vi bestämmer oss för ett lämpligt T, dvs tiden mellan
två sensoravläsningar.
2) För roboten i korridoren bildar vi felet e[n] = xh[n] – xv[n]
För linjeföljaren får vi felet direkt ur sensorn.
3) En regulator bildar en lämpligt styrsignal u[n]
mha av felet e[n].
styrsignal
felsignal
e[n]
Regulator
u[n]
Vi antar att u[n] = 0 rakt fram
u[n] > 0 sväng höger
u[n] < 0 sväng vänster
och att e[n] = 0 mitt på linjen
e[n] > 0 vänster om linjen
34
e[n] < 0 höger om linjen
Lite reglerteknik
Enklaste regulatorn: P-reglering
u[n] = KP*e[n]
Rattutslaget proportionellt mot
felet
35
16
Lite reglerteknik
P
Näst enklaste regulatorn: PD-reglering
u[n] = KP*e[n] + KD*(e[n] –e[n-1])
Alla bilarna har samma e[n]
=> samma positiva P-del
1) Neg D-del => minskat rattutslag
2) Pos D-del => ökat rattutslag
3) Mycket neg D-del =>
styr åt andra hållet
I-del behövs ej, kvarstående reglerfel
finns ej här! e=0 => u=0
36
Lite reglerteknik
OBS:
1) Det är viktigt att känna till T.
PD-formeln ska ju egentligen se ut så här:
u[n]  K P  e[n]  K D
 K P  e[n] 
e[n]  e[ n  1]
T
KD
(e[ n]  e[ n  1])
T
Det är ju felderivatan vi ska reagera på!!!
Styregenskaperna ska inte ändras om T ändras!
Variant: om vinkeln kan mätas
u[n]  K P  e[n]  K 2  
Var försiktig
med talområdet!
Använd C,
int16_t u,e, …;
Styrstopp?
if u>MAX
u=max; …
37
17
Telemetri
Det är bra! Men varför då?
• Lätt att se inre tillståndet i systemet,
när det är i drift och rörelse!
T ex varför gjorde den så?
• Lätt att ställa in reglerparametrar,
i realtid!
tx
Inbyggt
system
Firefly
fel
styr
USB
rx
38
trigger
out
Sensor 4: Ultraljud
1
1
Voltage
5v
Frequency
40KHz
Max Range
3m
Min Range
3 cm
Sensitivity
Detect a 3cm diameter stick at >
2m
Input Trigger
10uS Min. TTL level pulse
Echo Pulse
Positive TTL level signal, width
proportional to range.
39
18
Timer/Counter
AVR har 3 timer/counters (ATMega 16)
Detta är timer/counter1.
”Simplified block diagram”!
16-bits räknare
jämförelseregister
tidregister
kontrollregister
40
Att mäta tid
Polling
1)
2)
3)
4)
5)
Vänta på att pinnen går hög
Läs av räknaren TCNT1
Vänta på att pinnen går låg
Läs av räknaren TCNT1
Subtrahera
Avbrott
1) Sätt upp ICR1 för att ta
en timestamp på positiv flank
på pinnen
I avbrottsrutinen
Läs av TCNT1, lägg i en variabel
och ställ om polariteten
på flanken
Variabeln innehåller ”avståndet”!
41
19
Pulsbreddsmodulering (PWM)
- ”D/A-omvandling”
avbrott
period
komp
S
räknare
R
T ex motor
komp
Duty cycle
Kontrollera om motorn/servot reagerar på pulskvot eller
pulsbredd!
42
Ännu ett exempel
Styrning av servon, som reagerar på pulsbredd.
Gäller bara s k hobbyservon.
1-2 ms
I2C
Kommandon
* sväng x vänster
*
Superstressad
AVR?
8 st
20 ms
43
20
De flesta servon reagerar på pulsbredd
1-2 ms
1-2 ms
20 ms
PWM
44
Avbrottskällor i ATmega16
Vanlig avbrottsingång
Vanlig avbrottsingång
47
21
Avbrott i AVR mega 16
.org 0x0
; hopptabell
jmp RESET
;
jmp EXT_INT0 ; yttre avbrott
…
.org 0x1c
jmp ADC
; A/D omvandlaren klar
1) En händelse sätter en
2) Om avbrottet är aktiverat
så fås hopp till avbrottsrutin
RESET: …
…
jmp RESET
; här börjar
; mitt huvudprogram
EXT_INT0:
reti
; yttre avbrott
ADC:
; A/D-omvandlaren
reti
3) Spara undan SREG
Ta ner
Betjäning
Ta tillbaka SREG
reti
; klar
48
Sensor 5: RFID
RFID Tags
RFID Card Reader
RS232 (UART)
2400 BAUD 49
22
Sensor 6: LIDAR-lite v2
Laseravståndssensor
• Upp till 40 m (1 cm upplösning)
• I2C-interface
Finns i ett fåtal ex, 4-5 st
Ny version på gång …
50
Sensor 7: Färgsensor
+
R
G
B
-
3x
A/D
51
23
Sensor 8:
3-axlig
accelerometer
..
..
..
x, y , z
52
Sensor 9: Angular rate sensor
(”Gyro”)
24
Sensor 10 : IMU
Inertia Measuring Unit - Tröghetsnavigering
•
•
•
•
Accel &
Gyro
6 axlar
Rörelseprocessor
Datablad
57 sidor!!
54
Sensor 11 : Wii IR Camera
Ryktet säger :
• Ger (X,Y)-koordinater för
dom 4 starkaste
IR-källorna inom synfältet
• Kommunicerar med I2C
• 3.3V I/O
• Datablad saknas,
googla på ”wii ir camera”
och hoppas på tur
55
25
Sensor 12 : LSM9DS0
Adafruit 9-DOF Accel/Mag/Gyro+Temp
•
•
•
•
•
•
•
Accelerometer
Magnetometer (kompass)
Gyro
Temperatur
5V-kompatibel
I2C-interface
SPI-interface
Kan anskaffas på begäran (endast test-ex finns hemma)
56
Sensor 13 : LSM303DLHC
Adafruit 10-DOF IMU Breakout - L3GD20H +
LSM303 + BMP180
•
•
•
•
•
•
•
•
Accelerometer
Magnetometer (kompass)
Gyro
Temperatur
Barometer
5V-kompatibel
I2C-interface
SPI-interface
Kan anskaffas på begäran (endast test-ex finns hemma)
57
26
Beagleboard
58
Beagleboard
27
Beagleboard
Mer kraft – Mer makt
men ...
”Ett tyngre svärd att svinga”
•Super-scalar ARM Cortex TM-A8
•512-MB LPDDR RAM
•High-speed USB 2.0 OTG port optionally powers the board
•On-board four-port high-speed USB 2.0 hub with 10/100 Ethernet
•DVI-D (digital computer monitors and HDTVs)
•S-video (TV out)
•Stereo audio out/in
•High-capacity microSD slot and 4-GB microSD card
•JTAG
•Camera port
Processorn
PDF-datablad finns, 3500 sidor!
28
Beagleboard
”The good ... and the bad”
PLUS
MINUS
• Ett operativsystem
-Linux (Ångström, Ubuntu)
-Windows CE
-RTOS
• Stort arbetsminne, 512MB
• Kraftfull processor
• Många olika portar
-USB, DVI, ETH
-Serieport, PS/2
-Audio in/ut
• I/O-portar och I2C: (1.8V)
• Ej 5V-kompatibel
(ansl. till AVR bara via UART)
• Skrymmande storlek
(relativt AVR)
• ”Ett tungt svärd att svinga”
(krävande att använda)
Kopplingsförslag 1
WiFi
USB
USB
BT
USB
USB-Serie
RS232 (UART)
styr
mät
AVR1
AVR2
AVR3
styr
mät
I2C
29
Kopplingsförslag 2
USB
USB USB
USB-Serie
RS232
styr
mät
AVR1
USB-Serie
RS232
AVR2
BT
USB
USB-Serie
RS232
AVR3
styr
mät
styr mät
Raspberry Pi
68
30
Raspberry Pi 3
•
•
•
•
•
•
•
•
•
•
•
•
•
A 1.2GHz quad-core 64-bit ARMv8 CPU
Bluetooth 4.1 BLE
WLAN 802.11n
1GB RAM
4 USB ports
Ethernet port
40 GPIO pins
Full HDMI port
Micro SD card slot
Camera interface (CSI)
Display interface (DSI)
VideoCore IV 3D graphics core
Combined 3.5mm audio jack and composite video
Kan anskaffas på begäran (endast test-ex finns hemma)
Raspberry Pi
69
(raspberrypi.org)
”The good ... and the bad”
PLUS
MINUS
• Ett operativsystem
-Linux (Raspian, Ubuntu)
• Stort arbetsminne, 1GB
• Kraftfull processor
• Många olika portar
-USB, HDMI, ETH
-Audio
• I/O-portar (3.3V)
• Ej 5V-kompatibel
• Skrymmande storlek
(relativt AVR)
• Krävande att använda
31
Kan man göra ett eget PCB?
Ja, om det inte blir för många grupper
samt
Man bör ha viss tidigare erfarenhet
71
The End
Vad göra nu?
-Fundera och planera
-Kolla datablad
vanheden.isy.liu.se
-Prata med handledaren
4/10 : Designföreläsning
72
32