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

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

• ADC3

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

– Để đo các sự kiện đầu vào

• VD: đo tốc độ xe

• Dựa trên việc đếm xung đồng hồ

• 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ộ đếm 16-bit sẽ đếm tới 65,535*10 ns = 655.35

microsec., độ phân giải = 10 ns

• Top: biểu thị đạt đến số đếm cực đại, quay lại

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 trang 1

Trang 1

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 trang 2

Trang 2

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 trang 3

Trang 3

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 trang 4

Trang 4

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 trang 5

Trang 5

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 trang 6

Trang 6

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 trang 7

Trang 7

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 trang 8

Trang 8

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 trang 9

Trang 9

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 trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 17 trang xuanhieu 1100
Bạn đang xem 10 trang mẫu của 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

Tóm tắt nội dung 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

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ƢƠNGEmbedded 2: Systems CẤU TRÚC Design: PHẦN A Unified CỨNG 
 Hardware/SoftwareHỆ THỐNG NHÚNG Introduction 
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 
 Clk 16 Cnt
 • VD: đo tốc độ xe counter
• Dựa trên việc đếm xung đồng hồ Top
 • VD: giả sử chu kỳ Clk là 10 ns Reset
 • Và chúng ta đếm đƣợc 20,000 Clk
 • Nhƣ vậy, 200 microsec đã trôi qua
 • Bộ đếm 16-bit sẽ đếm tới 65,535*10 ns = 655.35 
 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 Clk
 2x1 16-bit up 16 Cnt
 thay vì xung clk mux counter
 – VD: đếm số ôtô chạy qua một cảm biến Cnt_in Top
 – Đôi khi ta có thể cấu hình thiết bị nhƣ Reset
 một timer hoặc counter Mode
 4
 Cấu trúc timer khác
• Timer theo khoảng 16/32-bit timer
 Bộ đếm tiến 16-
 – Biểu thị khi khoảng thời gian Clk Cnt1
 Timer với một giá trị bit 16
 yêu cầu trôi qua đếm đặt trước
 Top1
 – Chúng ta đặt giá trị đếm cuối Bộ đếm tiến 16-
 Clk Cnt
 cùng cho giá trị yêu cầu bit 16
 Bộ đếm tiến 16- Cnt2
 • Số xung clk = khoảng bit 16
 thời gian yêu cầu / chu 
 Reset Top2
 kỳ đồng hồ
 =
• Bộ đếm ghép Top Timer với bộ chia
 Clk Bộ chia Bộ đếm tiến 16-
• Bộ chia bit
 – Chia xung đồng hồ Giá trị đặt trƣớc
 – 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 
 Đàn hiển /* main.c */
 thị động
 #define MS_INIT 63535
 LCD time: 100 ms void main(void){
 int count_milliseconds = 0; 
 configure timer mode
• Đo khoảng thời gian giữa trạng thái đèn set Cnt to MS_INIT
 sáng và ngƣời dùng bấm nút wait a random amount of time
 turn on indicator light
 – Timer 16-bit, chu kỳ clk là 83.33 ns, counter start timer
 tăng sau mỗi 6 chu kỳ đồng hồ while (user has not pushed reaction button){
 if(Top) {
 – Độ phân giải = 6*83.33=0.5 microsec. stop timer
 set Cnt to MS_INIT
 start timer
 – Khoảng tg = 65535*0.5 microsec = 32.77 reset Top 
 millisec count_milliseconds++;
 }
 }
 – Muốn chƣơng trình đếm millisec., vì vậy turn light off
 khởi đầu bộ đếm 65535 – 1000/0.5 = 63535 printf(“time: %i ms“, count_milliseconds);
 }
 6
 Watchdog timer
• Phải reset timer sau 
 mỗi khoảng thời gian osc clk overflow overflow to system reset
 prescaler scalereg timereg
 X, nếu không timer sẽ or
 phát ra một tín hiệu interrupt
• Sử dụng thông thƣờng: checkreg
 xác định lỗi, hoặc tự 
 reset /* main.c */ watchdog_reset_routine(){
• Sử dụng khác: /* checkreg is set so we can load value into 
 main(){ timereg. Zero is loaded into scalereg and 
 timeouts wait until card inserted 11070 is loaded into timereg */
 call watchdog_reset_routine
 – VD: máy ATM checkreg = 1
 – 16-bit timer, độ phân while(transaction in progress){ scalereg = 0
 giải 2 ms if(button pressed){ timereg = 11070 
 perform corresponding action }
 – Giá trị timereg = call watchdog_reset_routine
 2*(216-1)–X = 131070– } void interrupt_service_routine(){
 X eject card
 /* if watchdog_reset_routine not called every reset screen
 – Nếu 2 phút, X = < 2 minutes, interrupt_service_routine is }
 120,000 ms. called */
 }
 7
 Truyền thông nối tiếp dùng UARTs
• UART: Universal 
 embedded 
 Asynchronous Receiver device
 1 1 0 1
 0 1
 Transmitter 0 1
 – Lấy dữ liệu song song và 
 truyền nối tiếp
 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 1
 – Nhận dữ liệu nối tiếp và 
 truyền song song Sending UART Receiving UART
 start bit end bit
• Chẵn lẻ: Thêm bít cho các data
 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
 – Tốc độ bit thƣờng cao hơn 1 0 0 1 1 0 1 1
 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
• Sử dụng thông thƣờng: điều 25% duty cycle – average pwm_o is 1.25V
 khiển điện áp trung bình cấp 
 cho thiết bị điện pwm_o
 – Đơn giản hơn bộ biến đổi clk
 DC-DC hoặc ADC
 – Điều khiển tốc độ động cơ 50% duty cycle – average pwm_o is 2.5V.
 DC, đèn
• Sử dụng khác: lệnh đƣợc mã pwm_o
 hóa, phía thu sử dụng timer để clk
 giải mã
 75% duty cycle – average pwm_o is 3.75V. 
 9
 Điều khiển động cơ DC với PWM
 % of Maximum
 Input Voltage RPM of DC Motor
 clk clk_div counter Voltage Applied
 ( 0 – 254)
 Điều khiển 0 0 0
 độ nhanh 
 chậm của 2 .5 50 1840
 8-bit counter < 
 xung đếm pwm_o
 comparator cycle_high,
 3 .7 5 75 6900
 pwm_o = 1
 counter >= 
 5 .0 100 9200
 cycle_high cycle_high, 
 pwm_o = 0 Mối quan hệ giữa điện áp đặ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 5V
 /* controls period */ hiện đƣợc chỉ ra dƣới đây sử dụng 
 PWMP = 0xff; một transistor MJE3055T.
 /* controls duty cycle */
 PWM1 = 0x7f; 5V Từ bộ xử DC 
 lý MOTOR
 while(1){};
 } A
 B
 10
 Bộ điều khiển LCD
 void WriteChar(char c){
 E Bus thông tin
 R/W
 RS = 1; /* indicate data being sent */
 RS
 DATA_BUS = c; /* send data to LCD */
 DB7–DB0 EnableLCD(45); /* toggle the LCD with appropriate delay */
 8 }
 Vi điều khiển Bộ đk 
 LCD
 CODES
 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Description
I/D = 1 cursor moves left DL = 1 8-bit
 0 0 0 0 0 0 0 0 0 1 Clears all display, return cursor hom e
I/D = 0 cursor moves right DL = 0 4-bit
S = 1 with display shift N = 1 2 rows 0 0 0 0 0 0 0 0 1 * Returns cursor home
S/C =1 display shift N = 0 1 row
 Sets cursor m ove direction and/or
 0 0 0 0 0 0 0 1 I/D S
S/C = 0 cursor movement F = 1 5x10 dots specifies not to shift display
 ON/OFF of all display(D), cursor
R/L = 1 shift to right F = 0 5x7 dots 0 0 0 0 0 0 1 D C B
 ON/OFF (C), and blink position (B)
R/L = 0 shift to left
 0 0 0 0 0 1 S/C R/L * * M ove cursor and shifts display
 Sets interface data length, num ber of
 0 0 0 0 1 DL N F * *
 display lines, and character font
 1 0 W R IT E D A T A W rites Data
 11
Bộ điều khiển phím bấm
 N1
 N2
 N3 k_pressed
 N4
 M1
 M2
 M3
 M4 4
 key_code key_code
 Bộ điều khiển phím 
 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ố 1 + + - -
 định khi cung cấp một tín hiệu 2 - + + -
 3 - - + +
 “bƣớc” 4 + - - +
 – Ngƣợc lại, động cơ DC chỉ quay 5 + + - -
 khi có công suất đặt vào Vd 1 16 Vm
 A’ 2 MC3479P 15 B
 A 3 14 B’
• Hoạt động quay đạt đƣợc bằng 4 13
 GND GND
 5 12
 cách cung cấp một tuần tự điện Bias’/Set 6 11 Phase A’
 Clk 7 10 CW’/CCW
 áp cho các cuộn dây O|C 8 9 Full’/Half Step
• Bộ điều khiển sẽ thực hiện chức Red A
 White A’
 năng này Yellow 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 sbit clk=P1^1;
 */turn the motor forward */
 MC3479P sbit cw=P1^0;
 cw=0; /* set direction */
 8051
 void delay(void){ clk=0; /* pulse clock */
 CW’/CCW delay();
 P1.0 int i, j;
 10 CLK clk=1;
 P1.1 for (i=0; i<1000; i++)
 7 for ( j=0; j<50; j++)
 i = i + 0; /*turn the motor backwards */
 2 A’ B 15 } cw=1; /* set direction */
 3 A B’ 14 clk=0; /* pulse clock */
 delay();
 clk=1;
 }
 Các chân đầu ra của bộ điều khiển động cơ bƣớc
 Động cơ không cung cấp đủ dòng để điều khiển động cơ. +V
 bƣớc Để khuêchs đại dong, cần có một bộ đệm. Một 1K
 Q1
 cách thực hiện đƣợc chỉ ra trên hình bên phải. Q1
 là một transitor NPN MJE3055T và Q2 là một A B
 transistor PNP MJE2955T. A kết nối tới VĐK Q2
 8051 và B kết nối tới động cơ bƣớc.
 1K
 14
 Động cơ bƣớc không bộ điều khiển (driver)
 8051 /*main.c*/ /* counter clockwise movement */
 sbit notA=P2^0; if(dir==0){
 P2.4 GND/ +V
 sbit isA=P2^1; for(y=0; y<=step; y++){
 sbit notB=P2^2; for(z=19; z>=0; z - 4){
 P2.3
 sbit isB=P2^3; isA=lookup[z];
 P2.2
 sbit dir=P2^4; isB=lookup[z-1];
 P2.1
 notA=lookup[z -2];
 P2.0
 void delay(){ notB=lookup[z-3];
 int a, b; delay( );
 for(a=0; a<5000; a++) }
 Động for(b=0; b<10000; b++) }
 cơ bƣớc a=a+0; }
 } }
 void main( ){
 void move(int dir, int steps) { int z;
Một cách để thực hiện bộ đệm nhƣ chỉ ra bên dƣới. Bản int y, z; int lookup[20] = {
thân 8051 không thể điều khiển động cơ bƣớc, vì vậy một /* clockwise movement */ 1, 1, 0, 0,
vài transistors đƣợc thêm vào để tăng dòng cho động cơ if(dir == 1){ 0, 1, 1, 0,
bƣớc. Q1 là MJE3055T NPN Q3 là MJE2955T PNP. A for(y=0; y<=steps; y++){ 0, 0, 1, 1,
kết nối với 8051 và B kết nối với động cơ bƣớc. for(z=0; z<=19; z+4){ 1, 0, 0, 1,
 isA=lookup[z]; 1, 1, 0, 0 };
 +V isB=lookup[z+1]; while(1){
 1K notA=lookup[z+2]; /*move forward, 15 degrees (2 steps) */
 Q1 notB=lookup[z+3]; move(1, 2);
 +V B delay(); /* move backwards, 7.5 degrees (1step)*/
 1K
 } move(0, 1);
 A
 Q2 } }
 330 } }
 15
 ADC
Vmax = 7.5V 1111 4 4
 7.0V 1110
 6.5V 1101 3 3
 6.0V 1100
 5.5V 1011
 2 2
 5.0V 1010
 4.5V 1001
 1 1
 4.0V analog input(V) 
 1000 analog output(V) 
 3.5V 0111
 3.0V 0110 time time
 t1 t2 t3 t1 t2 t3 t4
 2.5V 0101 t4
 2.0V 0100 0100 1000 0110 0101 0100 1000 0110 0101
 1.5V 0011 Digital output Digital input
 1.0V 0010
 0.5V 0001
 0V 0000
 Tỷ lệ Tương tự sang số Số sang tương tự
 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 0 0 0 0 0 0 0 0 ½(5.63 + 4.69) = 5.16 volts 0 1 0 1 0 0 0 0
 Vmax = 7.5 volts. Vmax = 5.16 volts.
 ½(7.5 + 0) = 3.75 volts 0 1 0 0 0 0 0 0 ½(5.16 + 4.69) = 4.93 volts 0 1 0 1 0 1 0 0
 Vmin = 3.75 volts. Vmin = 4.93 volts.
 ½(7.5 + 3.75) = 5.63 volts 0 1 0 0 0 0 0 0 ½(5.16 + 4.93) = 5.05 volts 0 1 0 1 0 1 0 0
 Vmax = 5.63 volts Vmax = 5.05 volts.
 ½(5.63 + 3.75) = 4.69 volts 0 1 0 1 0 0 0 0 ½(5.05 + 4.93) = 4.99 volts 0 1 0 1 0 1 0 1
 Vmin = 4.69 volts.
 17

File đính kèm:

  • pdfbai_giang_thiet_ke_he_thong_nhung_chuong_2_cau_truc_phan_cun.pdf