Lêi Nãi §Çu Ngµy nay,c¸c vi ®iÒu khiÓn ®• th©m nhËp vµo mäi lÜnh vùc vña ®êi sèng tõ d©n sù ,qu©n sù ®Õn an ninh quèc phßng,cã mÆt trong hÇu hÕt c¸c øng dông hµng ngµy tõ nh÷ng thiÕt bÞ nhá nh ®iÖn tho¹i di ®éng,m¸y nh¾n tin,trß ch¬i ®iÖn tö,c¸c thiÕt bÞ gia dông(m¸y giÆt,®iÒu hßa,tñ l¹nh….) ®Õn nh÷ng thiÕt bÞ lín nh «t«,tµu thñy,xe löa,m¸y bay,hÖ thèng m¹ng ®iÖn tho¹i,c¸c bé ®iÒu khiÓn tù ®éng trong nhµ m¸y,c¸c bé ®iÒu chØnh trong nhµ m¸y ®iÖn h¹t nh©n,trong c¸c hÖ thèng ®iÒu khiÓn ¸nh s¸ng… Víi mét lo¹t c¸c øng dông thó vÞ trªn,ë ®©y chóng em xin giíi thiÖu mét øng dông nhá dïng vi ®iÒu khiÓn 8051(cô thÓ lµ vi ®iÒu khiÓn AT89S52) ®Ó thiÕt kÕ v«n mÐt ®iÖn tö ®o ®iÖn ¸p mét chiÒu.§©y lµ mét øng dông nhá cña vi ®iÒu khiÓn nhng thùc tÕ sö dông rÊt nhiÒu trong c¸c hÖ thèng ®o lêng ®iÖn,®iÖn tö nh v«n mÐt, ampe mÐt ®iÖn tö…vv
Lời Nói Đầu Ngày nay,các vi điều khiển đã thâm nhập vào mọi lĩnh vực vủa đời sống từ dân sự ,quân sự đến an ninh quốc phòng,có mặt trong hầu hết các ứng dụng hàng ngày từ những thiết bị nhỏ nh điện thoại di động,máy nhắn tin,trò chơi điện tử,các thiết bị gia dụng(máy giặt,điều hòa,tủ lạnh.) đến những thiết bị lớn nh ôtô,tàu thủy,xe lửa,máy bay,hệ thống mạng điện thoại,các bộ điều khiển tự động trong nhà máy,các bộ điều chỉnh trong nhà máy điện hạt nhân,trong các hệ thống điều khiển ánh sáng Với một loạt các ứng dụng thú vị trên,ở đây chúng em xin giới thiệu một ứng dụng nhỏ dùng vi điều khiển 8051(cụ thể là vi điều khiển AT89S52) để thiết kế vôn mét điện tử đo điện áp một chiều.Đây là một ứng dụng nhỏ của vi điều khiển nhng thực tế sử dụng rất nhiều trong các hệ thống đo lờng điện,điện tử nh vôn mét, ampe mét điện tửvv Đề tài gồm 2 phần: Phần 1:Cấu trúc vi điều khiển 8051 Phần 2: Thiết kế vôn mét điện tử dùng AT89S52 1 phần 1 cấu trúc vi điều khiển 8051 I-Giới thiệu tổng quan về họ 8051( AT 89S52) Họ vi điều khiển 8051(còn gọi là C51) là một trong những họ vi điều khiển thông dụng nhất .Đây là các bộ vi điều khiển 8 bít đợc sản xuất theo công nghệ CMOS .Một số loại vi điều khiển thuộc họ 8051 thông dụng nhất: AT89C2051,AT89C4051,AT89C51,AT89S52 Trong đó AT89S52 là một bộ vi điều khiển thông dụng giá rẻ có nhiều chức năng và đặc biệt có tích hợp sẵn bộ nạp trên chíp. Bộ vi điều khiển AT89S52 gồm các khối chức năng chính sau đây: CPU( Central Processing Unit) bao gồm: - Thanh ghi tích luỹ A - Thanh ghi tích luỹ phụ B, dùng cho phép nhân và phép chia - Đơn vị logic học( ALU: Arithmetic Logical Unit) - Từ trạng thái chơng trình( PSW: Progam Status Word) - Bốn băng thanh ghi - Con trỏ ngăn xếp Bộ nhớ chơng trình( Bộ nhớ ROM) gồm 8Kb Flash. Bộ nhớ dữ liệu( Bôn nhớ RAM) gồm 256 bytes. Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức năng truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với máy tính qua cổng COM. 3 bộ Timer /Counter 16 bít thực hiện các chức năng định thời và đếm sự kiện. WDM( Watch Dog Timer) đợc dùng để phục hồi lại hoạt động của CPU khi nó bị treo bởi một nguyên nhân nào đó. WDM ở AT89S52 gồm một bộ Timer 14 bít, một bộ Timer 7 bít, thanh ghi WDTPRG( WDT programable) điều khiển Timer 7 bit và một thanh ghi chớc năng WDTRST( WDM register). Bình thờng WDT không hoạt động( bị cấm), để cho phép WDT, các giá trị 1EH và E1H cần phải đợc ghi liên tiếp vào thanh ghi WDTRST. Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kỳ đồng hồ cho đến giá trị 16383 thì xảy ra tràn. Khi xảy ra tràn, chân RTS sẽ đợc đặt ở mức cao trong thời gian 96.Tosc (Tossc=1/Fosc) và AT89S52 sẽ đợc reset. Khi WDT hoạt động, ngoại trừ reset phần cứng và reset do WDT tràn thì không có cách nào cấm đợc WDT, vì vậy khi sử dụng WDT thì các đoạn mã chơng trình phải đợc đặt trong các khe thời gian từ khi giữa các lần WDT đợc khởi tạo lại. 2 II- Sơ đồ các chân và chức năng 1.Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm 8 chân, ngoài chức năng xuất nhập ra, Port 0 còn là Bus đa hợp dữ liệu và địa chỉ( AD0-AD7), chức năng này sẽ đợc sử dụng khi AT89S52 giao tiếp với thiết bị ngoài có kiến trúc Bus 2.Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) : Có chức năng xuất nhập theo bit và byte. Ngoài ra, 3 chân P1.5, P1.6, P1.7 đợc dùng để nạp ROM theo chuẩn ISP, 2 chân P1.0 và P1.1 đợc dùng cho bộ Timer 2 3 3.Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): Là một port có công dụng kép: là đờng xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng. 4.Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân trên port 3 ngoài chức năng xuất nhập ra còn có một chức năng riêng: Bit Tên Chức năng P3.0 RXD Dữ liệu nhận cho port nối tiếp P3.1 TXD Dữ liệu phát cho port nối tiếp P3.2 INT0 Ngắt 0 bên ngoài P3.3 INT1 Ngắt 1 bên ngoài P3.4 T 0 Ngõ vào của Timer/Counter 0 P3.5 T 1 Ngõ vào của Timer/Counter 1 P3.6 WR Xung ghi bộ nhớ dữ liệu bên ngoài P3.7 RD Xung đọc bộ nhớ dữ liệu bên ngoài 4 5. RST( Reset- chân 9): Mức tích cực của chân này là mức 1, để reset ta phải đa mức 1(5V) đến chân này với thời gian tối thiểu 2 chu kỳ máy( tơng đơng 2uS đối với thạch anh 12MHz. 6.XTAL1, XTAL2: AT89S52 có một bộ dao động trên chip, nó thờng đợc nồi với một bộ dao động thạch anh có tần số lớn nhất là 33MHz, thông thờng là 12MHz. 7. EA( External Access): EA thờng đợc mắc lên mức cao(+5V) hoặc mức thấp( GND). Nếu ở mức cao, bộ vi điều khiển thi hành chơng trình từ ROM nội. Nếu ở mức thấp, chơng trinh chỉ đợc thi hành từ bộ nhớ mở rộng. 8.ALE( Address Latch Enable): ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ. Sau đó các đờng port 0 dùng để xuất hoặc nhập dữ liệu trong nửa chu kỳ sau của bộ nhớ. 9.PSEN( Program Store Enable): PSEN là điều khiển để cho phép bộ nhớ chơng trình mở rộng và trờng đ- ợc nối đến chân /OE ( Output Enable) của một EPROM để cho phép đọc các bytes mã lệnh. PSEN sẽ ở mức thấp trong thừi gian đọc lệnh. Các mã nhị phân của chơng trình đợc đọc từ EPROM qua Bus và đợc chốt vào thanh ghi lệnh của bộ vi điều khiển để giải mã lệnh. Khi thi hành chơng trình trong ROM nội, PSEN sẽ ở mức thụ động( mức cao) 10.Vcc, GND: AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V đợc cấp qua chân 40(+) và chân 20(-) 5 Phần 2 THIT K MCH O P I. Giới thiệu về ADC0804: 1- Các thiết bị ADC.: Các bộ chuyển đổi ADC thuộc trong những thiết bị đợc sử dụng rộng rãi nhất để thu dữ liệu. Các máy tính số sử dụng các giá trị nhị phân, nhng trong thế giới vật lý thì mọi đại lợng ở dạng tơng tự (liên tục). Nhiệt độ, áp suất (khí hoặc chất lỏng), độ ẩm và vận tốc và một số ít trọng những đại lợng vật lý của thế giới thực mà ta gặp hàng ngày. Một đại lợng vật lý đợc chuyển về dòng điện hoặc điện áp qua một thiết bị đợc gọi là các bộ biến đổi. Các bộ biến đổi cũng có thể đợc coi nh các bộ cảm biến. Mặc dù chỉ có các bộ cảm biến nhiệt, tốc độ, áp suất, ánh sáng và nhiều đại lợng tự nhiên khác nh- ng chúng đều cho ra các tín hiệu dạng dòng điện hoặc điện áp ở dạng liên tục. Do vậy, ta cần một bộ chuyển đổi tơng tự số sao cho bộ vi điều khiển có thể đọc đợc chúng. Một chíp ADC đợc sử dụng rộng rãi là ADC0804. 2- Chíp ADC0804. Chíp ADC0804 là bộ chuyển đổi tơng tự số trong họ các loạt ADC800 từ hãng National Semiconductor. Nó cũng đợc nhiều hãng khác sản xuất, nó làm việc với +5v và có độ phân giải là 8 bít. Ngoài độ phân giải thì thời gian chuyển đổi cũng là một yếu tố quan trọng khác khi đánh giá một bộ ADC. Thời gian chuyển đổi đợc định nghĩa nh là thời gian mà bộ ADC cần để chuyển một đầu vào tơng tự thành một số nhị phân. Trong ADC0804 thời gian chuyển đổi thay đổi phụ thuộc vào tần số đồng hồ đ- ợc cấp tới chân CLK R và CLK IN nhng không thể nhanh hơn 110às. Các chân của ADC0804 đợc mô tả nh sau: 1. Chân CS - chọn chíp: Là một đầu vào tích cực mức thấp đợc sử dụng để kích hoạt chíp ADC0804. Để truy cập ADC0804 thì chân này phải ở mức thấp. 2. Chân RD (cho phép vi điều khiển đọc): Đây là một tín hiệu đầu vào đợc tích cực mức thấp. Các bộ ADC chuyển đổi đầu vào tơng tự thành số nhị phân tơng đơng với nó và giữ nó trong một thanh ghi trong. RD đợc sử dụng để nhận dữ liệu đợc chuyển đổi ở đầu ra của ADC0804. Khi CS = 0 nếu một xung cao - xuống - thấp đ- ợc áp đến chân RD thì đầu ra số 8 bít đợc hiển diện ở các chân dữ liệu D0 - D7. Chân RD cũng đợc coi nh cho phép đầu ra. 3. Chân ghi WR (thực ra tên chính xác là Bắt đầu chuyển đổi). Đây là chân đầu vào tích cực mức thấp đợc dùng để báo cho ADC0804 bắt đầu quá trình chuyển đổi. Nếu CS = 0 khi WR tạo ra xung thấp - lên - cao thì bộ ADC0804 bắt đầu chuyển đổi giá trị đầu vào tơng tự V in về số nhị phân 8 bít. Lợng thời gian cần thiết để chuyển đổi thay đổi phụ thuộc vào tần số đa đến chân CLK IN và CLK R. Khi việc chuyển đổi dữ liệu đợc hoàn tất thì chân INTR đợc ép xuống thấp bởi ADC 0804. 4. Chân CLK IN và CLK R. 6 Chân CLK IN là một chân đầu vào đợc nối tới một nguồn đồng hồ ngoài khi đồng hồ ngoài đợc sử dụng để tạo ra thời gian. Tuy nhiên ADC0804 cũng có một máy tạo xung đồng hồ. Để sử dụng máy tạo xung đồng hồ trong (cũng còn đợc gọi là máy tạo đồng hồ riêng) của ADC0804 thì các chân CLK IN và CLK R đợc nối tới một tụ điện và một điện trở nh chỉ ra trên hình 3. Trong trờng hợp này tần số đồng hồ đợc xác định bằng biểu thức: RC1,1 1 f = giá trị tiêu biểu của các đại lợng trên là R = 10k và C= 150pF và tần số nhận đợc là f = 606kHz và thời gian chuyển đổi sẽ mất là 110às. Hình 3: Kiểm tra ADC0804 ở chế độ chạy tự do. 5. Chân ngắt INTR (ngắt hay gọi chính xác hơn là kết thúc chuyển đổi). Đây là chân đầu ra tích cực mức thấp. Bình thờng nó ở trạng thái cao và khi việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho CPU biết là dữ liệu đợc chuyển đổi sẵn sàng để lấy đi. Sau khi INTR xuống thấp, ta đặt CS = 0 và gửi một xung cao - xuống - thấp tới chân RD lấy dữ liệu ra của ADC0804. 6. Chân V in (+) và V in (-). 7 ADC0804 +5V 1 1 1 4 1 2 10 9 19 10k 150p F 11 12 13 14 15 16 17 18 3 5 to LE Ds Nomally Open STAR T D0 D1 D2 D3 D4 D5 D6 D7 WR INTR D GND RD CS CLK in CLK R A GND Vref/2 Vin(-) Vin(+) 20 Vcc 10k PO T Đây là các đầu vào tơng tự vi sai mà V in = V in (+) - V in (-). Thông thờng V in (-) đợc nối xuống đất và V in (+) đợc dùng nh đầu vào tơng tự đợc chuyển đổi về dạng số. 7. Chân V CC . Đây là chân nguồn nuối +5v, nó cũng đợc dùng nh điện áp tham chiếu khi đầu vào V ref/2 (chân 9) để hở. 8. Chân V ref/2 . Chân 9 là một điện áp đầu vào đợc dùng cho điện áp tham chiếu. Nếu chân này hở (không đợc nối) thì điện áp đầu vào tơng tự cho ADC0804 nằm trong dải 0 đến +5v (giống nh chân V CC ). Tuy nhiên, có nhiều ứng dụng mà đầu vào tơng tự áp đến V in cần phải khác ngoài dải 0 đến 5v. Chân V ref/2 đợcdùng để thực thi các điện áp đầu vào khác ngoài dải 0 - 5v. Ví dụ, nếu dải đầu vào tơng tự cần phải là 0 đến 4v thì V ref/2 đợc nối với +2v. Bảng 12.5 biểu diễn dải điện áp V in đối với các đầu vào V ref/2 khác nhau. Bảng 12.5: Điện áp V ref/2 liên hệ với dải V in . V ref / 2(V) V in (V) Step Size (mV) Hở * 0 đến 5 5/256 = 19.53 2.0 0 đến 4 4/255 = 15.62 1.5 0 đến 3 3/256 = 11.71 1.28 0 đến 2.56 2.56/256 = 10 1.0 0 đến 2 2/256 = 7.81 0.5 0 đến 1 1/256 = 3.90 Ghi chú: - V CC = 5V - * Khi V ref /2 hở thì đo đợc ở đó khoảng 2,5V - Kích thớc bớc (độ phân dải) là sự thay đổi nhỏ nhất mà ADC có thể phân biệt đợc. 9. Các chân dữ liệu D0 - D7. Các chân dữ liệu D0 - D7 (D7 là bít cao nhất MSB và D0 là bít thấp nhất LSB) là các chân đầu ra dữ liệu số. Đây là những chân đợc đệm ba trạng thái và dữ liệu đợc chuyển đổi chỉ đợc truy cập khi chân CS = 0 và chân RD bị đa xuống thấp. Để tính điện áp đầu ra ta có thể sử dụng công thức sau: buocthuockich V D in out = Với D out là đầu ra dữ liệu số (dạng thập phân). V in là điện áp đầu vào tơng tự và độ phân dải là sự thay đổi nhỏ nhất đợc tính nh là (2 ì V ref /2) chia cho 255 đối với ADC 8 bít. 10.Chân đất t ơng tự và chân đất số. Đây là những chân đầu vào cấp đất chung cho cả tín hiệu số và tơng tự. Đất t- ơng tự đợc nối tới đất của chân V in tơng tự, còn đất số đợc nối tới đất của chân V cc . Lý do mà ta phải có hai đất là để cách ly tín hiệu tơng tự V in từ các điện áp ký sinh tạo ra 8 việc chuyển mạch số đợc chính xác. Trong phần trình bày của chúng ta thì các chân này đợc nối chung với một đất. Tuy nhiên, trong thực tế thu đo dữ liệu các chân đất này đợc nối tách biệt. Từ những điều trên ta kết luận rằng các bớc cần phải thực hiện khi chuyển đổi dữ liệu bởi ADC0804 là: a) Bật CS = 0 và gửi một xung thấp lên cao tới chân WR để bắt đầu chuyển đổi. b) Duy trì hiển thị chân INTR . Nếu INTR xuống thấp thì việc chuyển đổi đợc hoàn tất và ta có thể sang bớc kế tiếp. Nếu INTR cao tiếp tục thăm dò cho đến khi nó xuống thấp. c) Sau khi chân INTR xuống thấp, ta bật CS = 0 và gửi một xung cao - xuống - thấp đến chân RD để lấy dữ liệu ra khỏi chíp ADC0804. Phân chia thời gian cho quá trình này đợc trình bày trên hình 4. Hình 4: Phân chia thời gian đọc và ghi của ADC0804. II. Thiết kế phần cứng: 9 CS D0 D7 Data out Read it End conversion Start conversion WR INTR RD 1.Lu đồ thuật toán : 2.Khối nguồn và khối chọn thang đo: Bắt đầu Kiểm tra thang đo Chuyển đổi A-D Tát led Thang đo x đợc chọn (x ứng với thang đo 1,2,3) Không có thang đo nào đơc chọn Tính giá trị đo đợc Hiển thị led 7 thanh 10 [...]... phan1=phan_phan /10 0; for(i=0;i =10 )&&(phan_nguyen . khien led 7 thanh sbit led1 =P2^4; //hien thi dien ap do duoc bang 4 led 7 thanh, sbit led2 =P2^5; / /led1 noi voi P2.4 ;led2 noi voi P2.5 sbit led3 =P2^6; / /led3 noi voi P2.6 sbit led4 =P2 ^7; / /led4 . dp delay_us(100); led3 =1; led1 =led2 =led4 =0; P0=font1[donvi];//font khong co dau dp delay_us(100); led4 =1; led1 =led2 =led3 =0; P0=font[phan1]; delay_us(100); } } } //ham tat led void tat _led( void) { led1 =led2 =led3 =led4 =0; P0=0xff; } /*ham. { donvi=phan_nguyen; phan1=phan_phan/100; phan2=(phan_phan%100)/10; phan3=(phan_phan%100)%10; //hien thi tren led7 for(i=0;i<50;i++) { led1 =1; led2 =led3 =led4 =0; P0=font1[donvi];//font co dau cham dp delay_us(100); led2 =1; led1 =led3 =led4 =0; P0=font[phan1];//font