Bài giảng Thiết kế hệ thống nhúng - Chương 2: Cấu trúc phần cứng hệ thống nhúng - Bài 3: Bộ xử lý chức năng đơn tiêu chuẩn - Thiết bị ngoại vi

CHƢƠNG 2: CẤU TRÚC PHẦN CỨNG  
HỆ THỐNG NHÚNG  
Bài 3: Bộ xử lý chức năng đơn tiêu chuẩn  
- Thiết bị ngoại vi  
1
Giới thiệu  
• Bộ xử lý chức năng đơn  
– Thực hiện các nhiệm vụ tính toán nhất định  
– Bộ xử lý chức năng đơn chuyên biệt  
• Thiết kế cho một nhiệm vụ duy nhất  
Bộ xử lý chức năng đơn “tiêu chuẩn"  
• “Off-the-shelf” -- Thiết kế trƣớc cho một nhiệm vụ chung  
• VD: ngoại vi  
• Truyền thông nối tiếp  
ADC  
2
Timers, counters, watchdog timers  
• Bộ định thời - Timer: dùng đo khoảng thời  
gian  
– Để phát ra các sự kiện đầu ra định thời  
• VD: giữ cho đèn xanh sáng 10 s  
timer  
– Để đo các sự kiện đầu vào  
16-bit up  
Cnt  
Top  
16  
counter  
• VD: đo tốc độ xe  
• Dựa trên việc đếm xung đồng hồ  
Reset  
• VD: giả sử chu kỳ Clk là 10 ns  
• Và chúng ta đếm đƣợc 20,000 Clk  
• Nhƣ vậy, 200 microsec đã trôi qua  
• Bộ đ
microsec., độ phân giải = 10 ns  
• Top: biểu thị đạt đến số đếm cực đại, quay lại  
3
Bộ đếm - Counters  
• Counter: giống một timer, nhƣng  
Timer/counter  
đếm xung trên một tín hiệu đầu vào  
thay vì xu
– VD: đếm số ôtô chạy qua một cảm biến  
Clk  
2x1  
16-bit up  
counter  
Cnt  
Top  
16  
Cnt_in  
Reset  
– Đôi khi ta có thể cấu hình thiết bị nhƣ  
một timer hoặc counter  
Mode  
4
Cấu trúc timer khác  
16/32-bit timer  
• Timer theo khoảng  
Bộ đếm tiến 16-  
Clk  
– Biểu thị khi khoảng thời gian  
yêu cầu trôi qua  
Cnt1  
16  
bit  
Timer với một giá trị  
đếm đặt trước  
Top1  
– Chúng ta đặt giá trị đếm cuối  
cùng cho giá trị yêu cầu  
Bộ đếm tiến 16-  
Clk  
Cnt  
16  
bit  
đếm tiến 16-  
Cnt2  
Top2  
16  
Số xu
thời gian yêu cầu / chu  
kỳ đồng hồ  
bit  
Reset  
Top  
=
Timer với bộ chia  
• Bộ đếm ghép  
• Bộ chia  
Bộ chia  
Bộ đếm tiến 16-  
Clk  
bit  
– Chia xung
– Tăng khoảng thời gian, giảm  
độ phân giải  
Mode  
5
Ví dụ: Timer tác động  
Nút tác  
/* main.c */  
động  
Đàn hiển  
thị  
#define MS_INIT  
void main(void){  
int count_milliseconds = 0;  
63535  
LCD  
time: 100 ms  
configure timer mode  
set Cnt to MS_INIT  
• Đo khoảng thời gian giữa trạng thái đèn  
sáng và ngƣ
ount of time  
turn on indicator light  
start timer  
Timer 16-bit, chu kỳ clk là 83.33 ns, counter  
while (user has not pushed reaction button){  
tăng sau mỗi 6 chu kỳ đồng hồ  
if(Top) {  
stop timer  
set Cnt to MS_INIT  
start timer  
reset Top  
– Độ phân giải = 6*83.33=0.5 microsec.  
– Khoảng tg = 65535*0.5 microsec = 32.77  
nds++;  
millisec  
}
}
– Muốn chƣơng trình đếm millisec., vì vậy  
turn light off  
printf(“time: %i ms“, count_milliseconds);  
khởi đầu bộ đếm 65535 1000/0.5 = 63535  
}
6
Watchdog timer  
• Phải reset timer sau  
mỗi khoảng thời gian  
X, nếu không timer sẽ  
phát ra một tín hiệu  
• Sử dụng thông thƣờng:  
xác định lỗi, hoặc tự  
reset  
osc  
clk  
overflow  
overflow  
to system reset  
or  
prescaler  
scalereg  
timereg  
interrupt  
checkreg  
main(){  
wait until card inserted  
call watchdog_reset_routine  
utine(){  
/* checkreg is set so we can load value into  
timereg. Zero is loaded into scalereg and  
11070 is loaded into timereg */  
• Sử dụng khác:  
timeouts  
VD: máy ATM  
checkreg = 1  
scalereg = 0  
timereg = 11070  
}
while(transaction in progress){  
if(button pressed){  
16-bit timer, độ phân  
giải 2 ms  
perform corresponding action  
call watchdog_reset_routine  
Giá trị timereg =  
2*(216-1)X
X
ce_routine(){  
reset screen  
}
/* if watchdog_reset_routine not called every  
< 2 minutes, interrupt_service_routine is  
called */  
}
– Nếu 2 phút, X =  
120,000 ms.  
7
Truyền thông nối tiếp dùng UARTs  
UART: Universal  
embedded  
device  
Asynchronous Receiver  
Transmitter  
0
1
1
1
0
1
1
0
– Lấy dữ liệu song song và  
truyền nối tiếp  
0 1 1 0 1 1  
– Nhận dữ liệ
truyền song song  
Sending UART  
start bit  
Receiving UART  
end bit  
data  
• Chẵn lẻ: Thêm bít cho các  
kiểm tra đơn giản  
• Bit bắt đầu, bit kết thúc  
Baud rate  
– Độ thay đổi tín hiệu trên giây  
1
0
0
1
1
0
1
1
– Tốc độ bit thƣờng cao hơn  
Baud rate  
8
Điều xung PWM  
• Phát xung với thời gian  
cao/thấp nhất định  
pwm_o  
• Duty cycle: % thời gian cao  
clk  
Xung vuông: 50% duty cycle  
25% duty cycle average pwm_o is 1.25V  
50% duty cycle average pwm_o is 2.5V.  
75% duty cycle average pwm_o is 3.75V.  
• Sử dụng thông thƣờng: điều  
khiển điện áp t
cho thiết bị điện  
pwm_o  
clk  
– Đơn giản hơn bộ biến đổi  
DC-DC hoặc ADC  
– Điều khiển tốc độ động cơ  
DC, đèn  
clk  
• Sử dụng khác: 
hóa, phía thu sử dụng timer để  
giải mã  
9
Điều khiển động cơ DC với PWM  
% o f M a x im u m  
In p u t V o lta g e  
R P M o f D C M o to r  
counter  
( 0 254)  
clk_div  
clk  
V o lta g e A p p lie d  
Điều khiển  
độ nhanh  
chậm của  
xung đếm  
0
0
0
2 .5  
3 .7 5  
5 .0  
5 0  
7 5  
1 8 4 0  
6 9 0 0  
9 2 0 0  
8-bit  
comparator  
counter <  
pwm_o  
cycle_high,  
pwm_o = 1  
counter >=  
cycle_high,  
1 0 0  
đặt và tốc độ động cơ DC  
Cấu trúc bên trong của PWM  
void main(void){  
Chỉ với PWM không thể điều  
khiển động cơ DC, một cách thực  
hiện đƣợc chỉ ra dƣới đây sử dụng  
một transistor MJE3055T.  
5V  
/* controls period */  
PWMP = 0xff;  
/* controls duty cycle */  
PWM1 = 0x7f;  
DC  
lý  
MOTOR  
while(1){};  
}
A
B
10  
Bộ điều khiển LCD  
void WriteChar(char c){  
Bus thông tin  
E
R/W  
RS  
RS = 1;  
DATA_BUS = c;  
EnableLCD(45);  
/* indicate data being sent */  
/* send data to LCD */  
/* toggle the LCD with appropriate delay */  
DB7DB0  
}
8
Vi điều khiển  
Bộ đk  
LCD  
C O D E S  
R S  
R /W  
D B 7  
D B 6  
D B 5  
D B 4  
D B 3  
D B 2  
D B 1  
D B 0  
D e sc r ip tion  
I/D = 1 c u rso r m o v e s le ft  
I/D = 0 c u rso r m o v e s r ig h t  
S = 1 w ith d isp la y s h ift  
S /C = 1 d isp la y s h ift  
D L = 1 8 -b it  
D L = 0 4 -b it  
N = 1 2 ro w s  
N = 0 1 ro w  
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
*
S
*
*
C le a r s a ll d isp la y, r e tu rn c u r so r h o m e  
R e tu rn s c u r so r h o m e  
0
0
0
0
1
0
0
0
1
S e ts c u r so r m o v e d ir e c tion a n d /or  
sp e c ifie s n o t to sh ift d isp la y  
0
0
1
I/D  
*
S /C = 0 c u rso r m o v e m e n t  
R /L = 1 sh ift to rig h t  
F = 1 5 x 1 0 d o ts  
F =
O N /O F F o f a ll d isp la y(D ), c u r so r  
O N /O F F (C ), a n d b lin k p o sitio n (B )  
R /L = 0 sh ift to le ft  
1
S /C  
N
R /L  
F
M o v e c u r so r a n d sh ifts d isp la y  
S e ts in ter fa c e d a ta le n g th , n u m b e r o f  
d isp la y lin e s, a n d ch a ra c ter fo n t  
D L  
*
W R IT E D A T A  
W r ite s D a ta  
11  
Bộ điều khiển phím bấm  
N1  
N2  
N3  
N4  
k_pressed  
M3  
M4  
4
key_code  
key_code  
bấm  
N=4, M=4  
12  
Bộ điều khiển động cơ bƣớc  
S e q u e n c e  
A
+
-
B
+
+
-
A ’  
-
B ’  
-
• Động cơ bƣớc: quay một góc cố  
định khi cung cấp một tín hiệu  
“bƣớc”  
1
2
3
4
5
+
+
-
-
-
+
+
-
+
+
-
+
-
– Ngƣợc lại, động cơ DC chỉ quay  
khi có
A’  
A
2
3
4
5
6
7
8
16  
15  
14  
13  
12  
11  
10  
9
Vm  
B
MC3479P  
B’  
• Hoạt động quay đạt đƣợc bằng  
cách cung cấp một tuần tự điện  
áp cho các cuộn dây  
GND  
GND  
Bias’/Set  
Clk  
Phase A’  
CW’/CCW  
Full’/Half Step  
O|C  
• Bộ điều
năng này  
Red  
White  
Yellow  
A
A’  
B
Black  
B’  
13  
Động cơ bƣớc với bộ điều khiển (driver)  
/* main.c */  
void main(void){  
Bộ điều khiển  
MC3479P  
sbit clk=P1^1;  
sbit cw=P1^0;  
*/turn the motor forward */  
cw=0;  
clk=0;  
delay();  
clk=1;  
/* set direction */  
/* pulse clock */  
8051  
void delay(void){  
int i, j;  
for (i=0; i<1000; i++)  
for ( j=0; j<50; j++)  
CW’/CCW  
P1.0  
P1.1  
10  
7
CLK  
rn the motor backwards */  
1;  
clk=0;  
delay();  
clk=1;  
/* set direction */  
/* pulse clock */  
B 15  
2 A’  
B’ 14  
3 A  
}
Các chân đầu ra của bộ điều khiển động cơ bƣớc  
cách thực hiện đƣợc chỉ ra trên hình bên phải. Q1  
một transitor NPN MJE3055T và Q2 là một  
transistor PNP MJE2955T. A kết nối tới VĐK  
8051 và B kết nối tới động cơ bƣớc.  
Động cơ  
bƣớc  
+ V  
1 K  
Q 1  
Q 2  
A
B
1 K  
14  
Động cơ bƣớc không bộ điều khiển (driver)  
8051  
/*main.c*/  
/* counter clockwise movement */  
if(dir==0){  
sbit notA=P2^0;  
sbit isA=P2^1;  
sbit notB=P2^2;  
sbit isB=P2^3;  
sbit dir=P2^4;  
P2.4  
GND/ +V  
for(y=0; y<=step; y++){  
for(z=19; z>=0; z - 4){  
P2.3  
P2.2  
P2.1  
P2.0  
isA=lookup[z];  
isB=lookup[z-1];  
notA=lookup[z -2];  
notB=lookup[z-3];  
void delay(){  
int a, b;  
delay( );  
for(a=0; a<5000; a++)  
}
}
}
void main( ){  
void move(int dir, int steps) {  
int y, z;  
/* clockwise movement */  
if(dir == 1){  
int z;  
int lookup[20] = {  
1, 1, 0, 0,  
0, 1, 1, 0,  
0, 0, 1, 1,  
1, 0, 0, 1,  
1, 1, 0, 0 };  
orward, 15 degrees (2 steps) */  
move(1, 2);  
/* move backwards, 7.5 degrees (1step)*/  
move(0, 1);  
Một cách để thực hiện bộ đệm nhƣ chỉ ra bên dƣới. Bản  
thân 8051 không thể điều khiển động cơ bƣớc, vì vậy một  
vài transistors đƣợc thêm vào để tăng dòng cho động cơ  
bƣớc. Q1 là MJE3055T NPN Q3 là MJE2955T PNP. A  
kết nối với 8051 và B kết nối với động cơ bƣớc.  
for(y=0; y<=steps; y++){  
for(z=0; z<=19; z+4){  
isA=lookup[z];  
notB=lookup[z+3];  
delay();  
1K  
Q1  
B
+V  
1K  
}
A
Q2  
}
}
}
330  
}
15  
ADC  
Vmax = 7.5V  
7.0V  
1111  
1110  
1101  
1100  
1011  
1010  
100
1000  
0111  
0110  
0101  
0100  
0011  
0010  
000
0000  
4
3
2
1
4
3
2
1
6.5V  
6.0V  
5.5V  
5.0V  
4.5V  
4.0V  
3.5V  
time  
time  
3.0V  
2.5V  
2.0V  
1.5V  
1.0V  
0.5V  
0V  
t1  
t2  
t3  
t1  
t2  
t3  
t4  
t4  
0100 1000 0110 0101  
Digital output  
0100 1000 0110 0101  
Digital input  
Tương tự sang số  
Số sang tương tự  
Tỷ lệ  
16  
DAC dùng xấp xỉ nối tiếp  
Cho một tín hiệu tƣơng tự đầu vào điện áp từ 0 đến 15 volts, và một bộ mã hóa số 8-bit, tính toán mã cho giá trị 5 volts.  
5/15 = d/(28-1)  
d= 85  
Encoding: 01010101  
Phương pháp xấp xỉ nối tiếp  
½(Vmax Vmin) = 7.5 volts  
Vmax = 7.5 volts.  
0
0
0
1
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
1
1
1
1
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
1
½(7.5 + 0) = 3.75 volts  
Vmin = 3.75 volts.  
½(5.16 + 4.69) = 4.93 volts  
Vmin = 4.93 volts.  
½(7.5 + 3.75) = 5.63 volts  
Vmax = 5.63 volts  
½(5.16 + 4.93) = 5.05 volts  
½(5.63 + 3.75) = 4.69 volts  
Vmin = 4.69 volts.  
½(5.05 + 4.93) = 4.99 volts  
17  
pdf 17 trang yennguyen 19/04/2022 1320
Bạn đang xem tài liệu "Bài giảng Thiết kế hệ thống nhúng - Chương 2: Cấu trúc phần cứng hệ thống nhúng - Bài 3: Bộ xử lý chức năng đơn tiêu chuẩn - Thiết bị ngoại vi", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_thiet_ke_he_thong_nhung_chuong_2_cau_truc_phan_cun.pdf