digital control system - hanyangccrs.hanyang.ac.kr/webpage_limdj/rt_lab/rtsim.pdf · digital...
TRANSCRIPT
Digital Control System
+Controller Plant
Sensor
ControlSignal
Command
Digital Computer
D/A
A/DT
Sampler
Digital Controller Design
• Design by Emulation-Approximation–Euler’s Method–Tustin’s Method
• Discrete Design (Direct Digital Design)–Root Locus–Bode Plot
Design by Emulation
Design by Emulation
0 0
( ) 1( )( )
( ) ( ) ( ) ( )
( ) ( )
kT kT T kT
kT TkT
kT T
U s D sE s s
u kT e t dt e t dt e t dt
u kT T e t dt
−
−
−
= =
= = +
= − +
∫ ∫ ∫∫
Backward Rectangular Rule (Euler’s Method)
1
1 1
1
1
( ) ( 1) ( )( ) ( ) ( )( ) 1( ) 1 1
( ) , ( )1
1
u k u k T e kU z z U z T E zU z TE z z z
T
a aD s D zzs a a
Tzs
T
−
− −
−
−
= − + ⋅
= + ⋅
= =− ⎛ ⎞−
⎜ ⎟⎝ ⎠
= =−+ +
−←
Backward Rectangular Rule(Euler’s Method)
( ) ( )( ) ( )
( ) ( )( )
( ) ( ) ( )( ) ( ) ( )
E s sU se t u t
u t u t Te tT
u t u t T T e tu kT u kT T T e kT
==
− −≈
≈ − + ⋅≈ − + ⋅
Forward Rectangular Rule (Euler’s Method)
1 1
1
1
( ) ( 1) ( 1)( ) ( ) ( )( ) 1
1( ) 1 1
( ) , ( ) 1
1
u k u k T e kU z z U z T z E zU z Tz T
zE z z zT
a aD s D z zs a aT
zsT
− −
−
−
= − + ⋅ −
= + ⋅
= = =−− − ⎛ ⎞
⎜ ⎟⎝ ⎠
= =−+ +
−←
Forward Rectangular Rule(Euler’s Method)
( ) ( )( ) ( )
( ) ( )( )
( ) ( ) ( )( 1) ( ) ( )
( ) ( ) ( )( )( ) 1
E s sU se t u t
u t T u te tT
u t T u t T e tu k u k T e kzU z U z TE zU z TE z z
==
+ −≈
+ ≈ + ⋅+ ≈ + ⋅
= +
=−
Tustin’s Method (Trapezoidal Rule, Bilinear Transform)
1 1
1
1 1
1
1
1
1
1
( ) ( 1) [ ( 1) ( )]2
( ) ( ) [ ( ) ( )]2
( ) 1 1( ) 2 1 1
2 1
( ) , ( )1
2 1
12 1
Tu k u k e k e k
TU z z U z z E z E z
U z T zE z z T z
za aD s D z
s a T z az
T zsz
− −
−
− −
−
−
−
−
−
= − + − +
= + +
⎛ ⎞+= =⎜ ⎟− ⎛ ⎞−⎝ ⎠
⎜ ⎟+⎝ ⎠
= =+ ⎛ ⎞−
+⎜ ⎟+⎝ ⎠⎛ ⎞−
← ⎜ ⎟+⎝ ⎠
1st Order Digital Filter
1 1
( ) 1( )( ) 1 /( ) 1( )
1( ) 11
c
c
c
c
Y sG sU s s
TY zG zzU z T z
T
ωω
ωω
− −
= =+
= = =− + −+
1st Order Digital Filter
[ ]
1
1
1
( 1 ) ( ) ( )
( 1) ( ) ( ) ( )1( ) ( ) ( )
( 1)1( ) ( 1) ( )
( 1)
c c
c c
cc
cc
T z Y z T U z
T Y z z Y z T U z
Y z z Y z T U zT
y k y k T u kT
ω ω
ω ω
ωω
ωω
−
−
−
+ − =
+ − =
⎡ ⎤= +⎣ ⎦+
= − ++
2nd Order Dynamic System
2
2 2
( )( ) 2
n
n n
Y sU s s s
ωζω ω
=+ +
22 2
2 2 n n nd y dy y udt dy
ζω ω ω+ + =
1 22 2
2 1 2
1
( ) ( )
( ) ( ) 2 ( ) ( )( ) ( )
n n n
x t x t
x t x t x t u ty t x t
ω ζω ω
=
= − − +=
2nd Order Dynamic System
1 2 0 2 2
2 1 2 0
( ) ( )
( ) ( ) 2 ( ) ( )
t
t
n n n
x t x d
x t x x u d
τ τ
ω τ ζω τ ω τ τ
=
⎡ ⎤= − − +⎣ ⎦
∫∫
1 1 2
2 22 2 1 2
( ) ( ) ( )
( ) ( ) ( ) 2 ( ) ( )n n n
x t x t T T x t T
x t x t T T x t T x t T u t Tω ζω ω
= − + ⋅ −
⎡ ⎤= − + ⋅ − − − − + −⎣ ⎦
2nd Order Dynamic System
2 10,2 20nω π π= × ×
0.2 , 1ζ =
Interrupt
Main ProgramInterruptServiceRoutine
PC Interrupt
PC Interrupt
PC Interrupt
AD Converter TimerIRQ5
PC bus AD board
Timer
AD Converter
IRQ
AD conversion start
AD conversion end
Interrupt Request
T(Sampling Period)
AD Conver Board PCI-1711
AD Conver Board PCI-1711
AD Conver Board PCI-1711
AD Conver Board PCI-1711
DA Converter Board PCI-1720
DA Converter Board PCI-1720
DA Converter Board PCI-1720
PCI Devices
sine.c#include "C:\Tornado\target\h\fppLib.h“#include "math.h"
#define AD_BASE 0x1800#define AD_LOW_BYTE AD_BASE#define AD_HIGH_BYTE AD_BASE+1#define AD_RANGE AD_BASE+2#define AD_START_CHANNEL AD_BASE+4#define AD_STOP_CHANNEL AD_BASE+5#define AD_CONTROL AD_BASE+6#define AD_STATUS AD_BASE+7#define AD_CLEAR_INTERRUPTAD_BASE+8#define AD_CLEAR_FIFO AD_BASE+9#define DIO1 AD_BASE+16#define DIO2 AD_BASE+17
#define COUNTER0 AD_BASE+24#define COUNTER1 AD_BASE+26#define COUNTER2 AD_BASE+28#define COUNTER_CONTROL AD_BASE+30
#define DA_BASE 0x1840#define DA_CHANNEL0_LOW DA_BASE#define DA_CHANNEL0_HIGH DA_BASE+1#define DA_RANGE DA_BASE+8
sine.c#define ONMASK 0xdf /* 1101 1111 Turn IRQ5 On */#define OFFMASK 0x20 /* 0010 0000 Turn IRQ5 Off */#define ONMASK2 0xfb /* 1111 1011 Turn IRQ10 On */#define OFFMASK2 0x04 /* 0000 0100 Turn IRQ10 Off */#define PICMASK 0x21 /* 8259 Mask Register */#define PICEOI 0x20 /* 8259 EOI Instruction */#define IRQ5 0x25 /* IRQ5 interrupt number */#define PIC2MASK 0xA1 /* 8259 Mask Register */#define PIC2EOI 0xA0 /* 8259 EOI Instruction */#define IRQ10 0x2A /* IRQ10 interrupt number *//* VxWorks 5.4 Programmer's Guide page 444 *//* By default, vector number 0x20 to 0x2f are mapped to IRQlevel 0 to 15 */
sine.cvoid initialize_timer_interrupt(void){
unsigned short count;
/* Initilize the timer */count=100;sysOutByte(COUNTER_CONTROL,0x74); /* 0111 0100 */sysOutByte(COUNTER1,(count & 0xff));sysOutByte(COUNTER1,((count >> 8) & 0xff));count=50;sysOutByte(COUNTER_CONTROL,0xB4); /* 1011 0100 */sysOutByte(COUNTER2,(count & 0xff));sysOutByte(COUNTER2,((count >> 8) & 0xff));/* count=100,count=50 : 2KHz for 10MHz clock input : PCI-1711 */
sysOutByte(PICMASK,(sysInByte(PICMASK) & (ONMASK))); /* enable IRQ5 interrupt */
} /* initialize_timer_interrupt */
sine.cvoid interrupt_service_routine(void){
fppSave(pFpContext);
int_counter++;x=sysInWord(AD_LOW_BYTE);x=x-2048;
y=204.8*2*sin(2.0*3.141592654*100.0*(float)int_counter/2000.0);
y=y+2048;sysOutWord(DA_CHANNEL0_LOW,y);
sysOutByte(AD_CLEAR_INTERRUPT,0); /* clears interrupt */sysOutByte(AD_CLEAR_FIFO,0); /* clears FIFO */fppRestore(pFpContext);sysOutByte(PIC2EOI,0x20); /* end of interrupt */
} /* interrupt_service_routine */
sine.cvoid initialize_ad_converter(void){
sysOutByte(AD_START_CHANNEL,0); sysOutByte(AD_STOP_CHANNEL,0); sysOutByte(AD_RANGE,0x0); /* single-ended bipolar -10+10 */
sysOutByte(AD_CONTROL,0x12); /* AD conversion mode : Timer Trigger, Interrupt *//*sysOutByte(AD_CONTROL,0x01);*/ /* AD conversion mode : Software Trigger, No Interrupt */sysOutByte(DA_RANGE,0xff);
} /* initialize_ad_converter */
sine.cvoid app( void ){
int i;initialize_ad_converter();connect_interrupt_service_routine();initialize_timer_interrupt();sysOutByte(AD_CLEAR_INTERRUPT,0); /* clears interrupt */sysOutByte(AD_CLEAR_FIFO,0); /* clears FIFO */
} /* application main */
Two’s complement
0xfffff8000x0-10
………
0xffffffff0x7ff-10*(1/2048)
00x8000
0x000000010x80110*(1/2048)
………
0x000007ff0xfff10*(2047/2048)
Two’s complement(long integer: 4
bytes)
입력값입력전압