Đề tài Đo và điều khiển tốc độ động cơ dùng vi điều khiển 8051

Mục Lục

I. Giới thiệu chung

1. Mở Đầu .

2 . Giới thiệu đề tài

3. Giới thiệu thành viên trong nhóm .

4. §Þnh h­íng thiÕt kÕ .

5. Các bước thực hiện

II . Lý thuyết thực hiện

1. Cơ sơ lý thuyết .

2. Sơđồ nguyên lý .

3. Phân tích chức năng từng khối .

4. Giới thiệu linh kiện chính

Vi điều kiển AT89C51 .

III. Phần mềm thực hiện hệ thống

IV. Thiết kế mạch

VII. Kết Luận .

VIII. Tài liệu tham khảo .

 

doc44 trang | Chia sẻ: lethao | Lượt xem: 6402 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Đo và điều khiển tốc độ động cơ dùng vi điều khiển 8051, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
} void CMoPhongDlg::OnHangdonvi() { if(m_5==9) m_5=0; else m_5++; CString s; s.Format("%d",m_5); m_led5.SetWindowText(s); m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5; } void CMoPhongDlg::OnHangnghin() { if(m_2==9) m_2=0; else m_2++; CString s; s.Format("%d",m_2); m_led2.SetWindowText(s); m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5; } void CMoPhongDlg::OnHangtram() { if(m_3==9) m_3=0; else m_3++; CString s; s.Format("%d",m_3); m_led3.SetWindowText(s); m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5; } void CMoPhongDlg::OnHangvan() { if(m_1==9) m_1=0; else m_1++; CString s; s.Format("%d",m_1); m_led1.SetWindowText(s); m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5; } void CMoPhongDlg::OnPause() { KillTimer(1); } void CMoPhongDlg::OnReset() { m_1=m_2=m_3=m_4=m_5=m_6=m_7=m_8=m_9=m_10=0; // thiet lap ve khong m_led1.SetWindowText("0"); m_led2.SetWindowText("0"); m_led3.SetWindowText("0"); m_led4.SetWindowText("0"); m_led5.SetWindowText("0"); m_led6.SetWindowText("0"); m_led7.SetWindowText("0"); m_led8.SetWindowText("0"); m_led9.SetWindowText("0"); m_led10.SetWindowText("0"); KillTimer(1); } void CMoPhongDlg::OnReverse() { if(temp==TRUE) temp=FALSE; else { temp=TRUE; } } void CMoPhongDlg::OnDraw(CDC *pDC) { CRect rectWin; GetWindowRect(rectWin); rectWin.top+=32; CWnd*pWnd=GetDlgItem(IDC_DISPLAY); CRect rectD; pWnd->GetWindowRect(rectD); int cx,cy; cx=rectD.CenterPoint().x; cy=rectD.CenterPoint().y; cx-=rectWin.left; cy-=rectWin.top; CBrush brush(RGB(0,255,0)); CBrush * oldBrush=pDC->SelectObject(&brush); CPen *pen=new CPen(PS_SOLID,1,RGB(0,0,255)); CPen*oldPen =pDC->SelectObject(pen); pDC->Ellipse(cx-50,cy-50,cx+50,cy+50); CPen*pen1=new CPen(PS_SOLID,3,RGB(255,0,0)); CPen*oldPen1 =pDC->SelectObject(pen1); double angle; angle =m_degree*3*3.14/180; pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); angle+=3.14/3; pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); angle+=3.14/3; pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); angle+=3.14/3; pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); angle+=3.14/3; pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); angle+=3.14/3; pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); pDC->MoveTo(cx,cy); pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle))); pDC->SelectObject(oldBrush); pDC->SelectObject(oldPen); pDC->SelectObject(oldPen1); } void CMoPhongDlg::OnTimer(UINT nIDEvent) { if(temp==TRUE) { m_degree++; if(m_degree>=120) m_degree=0; } else { m_degree--; if(m_degree<=0) m_degree=120; } if(m_10<9) m_10++; else { m_10=0; if(m_9<9) m_9++; else { m_9=0; if(m_8<9) m_8++; else { m_8=0; if(m_7<9) m_7++; else { m_7=0; if(m_6<9) m_6++; else MessageBox("Tran So","Warning",MB_OK); } } } } t++; if(t==100) { t=0; CString s6,s7,s8,s9,s10; s6.Format("%d",m_1); s7.Format("%d",m_2); s8.Format("%d",m_3); s9.Format("%d",m_4); if(m_5<=2) s10.Format("%d",m_5+1); else if((m_5>2)&&(m_5<5)) s10.Format("%d",m_5-1); else if(m_5==5||m_5==7) s10.Format("%d",m_5); else if((m_5>5)&&m_5<7) s10.Format("%d",m_5+1); else s10.Format("%d",m_5-1); m_led6.SetWindowText(s6); m_led7.SetWindowText(s7); m_led8.SetWindowText(s8); m_led9.SetWindowText(s9); m_led10.SetWindowText(s10); } CClientDC pDC(this); OnDraw(&pDC); CDialog::OnTimer(nIDEvent); } void CMoPhongDlg::OnStart() { UpdateData(TRUE); SetTimer(1,(int)(1000/m_vong),NULL); } CScrollBar* CMoPhongDlg::GetScrollBarCtrl(int nBar) const { // TODO: Add your specialized code here and/or call the base class return CDialog::GetScrollBarCtrl(nBar); } void CMoPhongDlg::OnDestroy() { CDialog::OnDestroy(); KillTimer(1); } void CMoPhongDlg::OnButton1() { OnOK(); } b. PhÇn giao diÖn II. Lý Thuyết thực hiện. Cơ sở lý thuyết. Sơ đồ khối Khối nhập dữ liệu Khối nguồn Khối khuếch đại Khối xử lý trung tâm Khối thu phát Động cơ Khối hiển thị (LCD) Khối mạch động lực Sơ đồ nguyên lý. III.Phân tích chức năng từng khối. a .Khối vi xử lý b. Khối hiển thị. c.Khối nhập giá trị tốc độ. d.Khối đo tốc độ động cơ. e.Khối động lực g.Khèi nguån h.Khèi ®éng c¬ IV.Giới thiệu linh kiện sử dụng trong mạch: 1 - IC khuếch đại LM324 2 - Vi điều khiển 80c52 3 – LCD. ,74HC14,®iÖn trë quang…. 4 - Một số linh kiện phụ khc: thạch anh 12 Mhz, sensor thu phát hồng ngoại, tụ 33p, tụ 10 uF, trở... 5 - Môtơ điện một chiều DC 12V V .Mô tả các modul 1.Khối vi xử lý Điều khiển tốc độ động cơ: Giới thiệu: Mục đích của điều khiển tốc độ động cơ là đưa ra tín hiệu biểu diễn tốc độ yêu cầu, và điều khiển động cơ theo tốc độ đấy. Bộ điều khiển có thể có hoặc không thật sự đo tốc độ động cơ. Nếu có thì goi là điều khiển tốc độ có phản hồi hoặc điều khiển tốc độ vòng kín, nếu không thì gọi là điều khiển tốc độ vòng mở. Điều khiển tốc độ có phản hồi tốt hơn nhưng phức tạp hơn. Động cơ có rất nhiều kiểu, và đầu ra của bộ điều khiển tốc độ của động cơ với các dạng khác nhau là khác nhau. Lý thuyết điều khiển tốc độ động cơ một chiều: Tốc độ của động cơ một chiều tỉ lệ trực tiếp với nguồn cấp, vì vậy nếu ta giảm điện áp cung cấp từ 12V xuống 6V, động cơ sẽ chạy với tốc độ bằng một nửa trước đó. Bộ điều khiển tốc độ động cơ làm việc trên nguyên lý biến đổi điện áp trung bình cấp cho động cơ. Có thể đơn giản chỉ bằng cách điều chỉnh điện áp cung cấp, nhưng như thế sẽ không hiệu quả. Cách tốt hơn là tắt nguồn cấp cho động cơ thật nhanh. Nếu động tác tắt này đủ nhanh thì động cơ không kịp nhận ra sự thay đổi đó mà chỉ nhận ra được hiệu ứng trung bình thôi. Khi bật, nguồn có giá trị 12V; khi tắt, nguồn có giá trị 0V. Nếu ta tắt nguồn với một lượng thời gian bằng với khi nó được bật thì động cơ sẽ nhận được giá trị trung bình là 6V, và sẽ chạy chậm đi theo tỉ lệ đó. Chuyển mạch để bật tắt nguồn này gọi là on-off switching, được chế tạo bằng MOSFET. Ta dùng vi xử lý 8051. Nh÷ng tÝnh chÊt ®Æc tr­ng cña hä vi ®iÒu khiÓn MCS-51: * §¬n vÞ xö lý trung t©m (CPU) 8 bit ®· ®­îc tèi ­u ho¸ ®Ó ®¸p øng c¸c chøc n¨ng ®iÒu khiÓn . * Khèi l«gic (ALU) xö lý theo bit nªn thuËn tiÖn cho c¸c phÐp to¸n logic Boolean. * Bé t¹o dao ®éng gi÷ nhÞp ®­îc tÝch hîp bªn trong víi tÇn sè 12MHz. * Giao diÖn nèi tiÕp cã kh¶ n¨ng ho¹t ®éng song song, ®ång bé. * C¸c cæng vµo/ra hai h­íng vµ tõng ®­êng dÉn cã thÓ ®­îc ®Þnh ®Þa chØ mét c¸ch t¸ch biÖt. * Cã n¨m hay s¸u nguån ng¾t víi hai møc ­u tiªn . * Hai hoÆc ba bé ®Õm ®Þnh thêi 16 bit. * Bus vµ khèi ®Þnh thêi t­¬ng thÝch víi c¸c khèi ngo¹i vi cña bé vi xö lý 8085/8088. * Dung l­îng cña bé nhí ch­¬ng tr×nh (ROM) bªn ngoµi cã thÓ lªn tíi 64 kbyte. * Dung l­îng cña bé nhí d÷ liÖu (RAM) bªn ngoµi cã thÓ lªn tíi 64 kbyte. * Dung l­îng cña bé nhí ROM bªn trong cã thÓ lªn ®Õn 8 kbyte. * Dung l­îng bé nhí RAM bªn trong cã thÓ ®¹t ®Õn 256 byte. * TËp lÖnh phong phó. 2.1. CÊu tróc chung : 2.1.1. S¬ ®å khèi : S¬ ®å khèi tæng qu¸t cña mét vi ®iÒu khiÓn 8051 cã thÓ ®­îc m« t¶ nh­ sau: CÊu tróc cña vi ®iÒu khiÓn 8051. Bé t¹o dao ®éng CPU §iÒu khiÓn ng¾t. Nguån ng¾t trong. 4Kbyte Bé nhí ch­¬ng tr×nh trong. 128byte Bé nhí RAM trong 2bé ®Õm / ®Þnh thêi Khèi ®.khiÓn qu¶n lý Bus. Port 0 Port 1 Port 2 Port 3 Giao diÖn nèi tiÐp. XTAL 1.2 |PSEN/ALE Cæng I/O 8 bit Cæng I/O §chØ cao D÷ liÖu 8 bit Cæng I/O §chØ thÊp D÷ liÖu 8 bit Cæng I/O C¸c chøc n¨ng ®¾c biÖt D÷ liÖu 8 bit Nguån ng¾t ngoµi §Õm sù kiÖn. Chøc n¨ng cña tõng khèi : * Khèi xö lý trung t©m CPU: PhÇn chÝnh cña bé vi xö lý lµ khèi xö lý trung t©m (CPU=Central Processing Unit ), khèi nµy cã chøa c¸c thµnh phÇn chÝnh : +Thanh ghi tÝch luü (ký hiÖu lµ A ); +Thanh ghi tÝch luü phô (ký hiÖu lµ B ) th­êng ®­îc dïng cho phÐp nh©n vµ phÐp chia ; +Khèi logic sè häc (ALU=Arithmetic Logical Unit) ; +Tõ tr¹ng th¸i ch­¬ng tr×nh (PSW= Program Status Word ); +Bèn b¨ng thanh ghi . +Con trá ng¨n xÕp (SP=Stack Point) còng nh­ con trá d÷ liÖu ®Ó ®Þnh ®Þa chØ cho bé nhí d÷ liÖu ë bªn ngoµi; Ngoµi ra, khèi xö lý trung t©m cßn chøa: -Thanh ghi ®Õm ch­¬ng tr×nh (PC= Progam Counter ); -Bé gi¶i m· lÖnh; -Bé ®iÒu khiÓn thêi gian vµ logic; Sau khi ®­îc Reset, CPU b¾t ®Çu lµm viÖc t¹i ®Þa chØ 0000h, lµ ®Þa chØ ®Çu ®­îc ghi trong thanh ghi chøa ch­¬ng tr×nh (PC) vµ sau ®ã, thanh ghi nµy sÏ t¨ng lªn 1 ®¬n vÞ vµ chØ ®Õn c¸c lÖnh tiÕp theo cña ch­¬ng tr×nh. *Bé t¹o dao ®éng: Khèi xö lý trung t©m nhËn trùc tiÕp xung nhÞp tõ bé t¹o dao ®éng ®­îc l¾p thªm vµo, linh kiÖn phô trî cã thÓ lµ mét khung dao ®éng lµm b»ng tô gèm hoÆc th¹ch anh. Ngoµi ra, cßn cã thÓ ®­a mét tÝn hiÖu gi÷ nhÞp tõ bªn ngoµi vµo. *Khèi ®iÒu khiÓn ng¾t: Ch­¬ng tr×nh ®ang ch¹y cã thÓ cho dõng l¹i nhê mét khèi logic ng¾t ë bªn trong. C¸c nguån ng¾t cã thÓ lµ: c¸c biÕn cè ë bªn ngoµi, sù trµn bé ®Õm/bé ®Þnh thêi hay cã thÓ lµ giao diÖn nèi tiÕp. TÊt c¶ c¸c ng¾t ®Òu cã thÓ ®­îc thiÕt lËp chÕ ®é lµm viÖc th«ng qua hai thanh ghi IE (Interrupt Enable) vµ IP (Interrupt Priority). *Khèi ®iÒu khiÓn vµ qu¶n lý Bus : C¸c khèi trong vi ®iÒu khiÓn liªn l¹c víi nhau th«ng qua hÖ thèng Bus néi bé ®­îc ®iÒu khiÓn bëi khèi ®iÒu khiÓn qu¶n lý Bus. *C¸c bé ®Õm/®Þnh thêi: Vi ®iÒu khiÓn 8051 cã chøa hai bé ®Õm tiÕn 16 bit cã thÓ ho¹t ®éng nh­ lµ bé ®Þnh thêi hay bé ®Õm sù kiÖn bªn ngoµi hoÆc nh­ bé ph¸t tèc ®é Baud dïng cho giao diÖn nèi tiÕp. Tr¹ng th¸i trµn bé ®Õm cã thÓ ®­îc kiÓm tra trùc tiÕp hoÆc ®­îc xo¸ ®i b»ng mét ng¾t. *C¸c cæng vµo/ra: Vi ®iÒu khiÓn 8051 cã bèn cæng vµo/ra (P0 .. P3), mçi cæng chøa 8 bit, ®éc lËp víi nhau. C¸c cæng nµy cã thÓ ®­îc sö dông cho nh÷ng môc ®Ých ®iÒu khiÓn rÊt ®a d¹ng. Ngoµi chøc n¨ng chung, mét sè cæng cßn ®¶m nhËn thªm mét sè chøc n¨ng ®Æc biÖt kh¸c. *Giao diÖn nèi tiÕp: Giao diÖn nèi tiÕp cã chøa mét bé truyÒn vµ mét bé nhËn kh«ng ®ång bé lµm viÖc ®éc lËp víi nhau. B»ng c¸ch ®Êu nèi c¸c bé ®Öm thÝch hîp, ta cã thÓ h×nh thµnh mét cæng nèi tiÕp RS-232 ®¬n gi¶n. Tèc ®é truyÒn qua cæng nèi tiÕp cã thÓ ®Æt ®­îc trong mét vïng réng phô thuéc vµo mét bé ®Þnh thêi vµ tÇn sè dao ®éng riªng cña th¹ch anh. *Bé nhí ch­¬ng tr×nh: Bé nhí ch­¬ng tr×nh th­êng lµ bé nhí ROM (Read Only Memory), bé nhí ch­¬ng tr×nh ®­îc sö dông ®Ó cÊt gi÷ ch­¬ng tr×nh ®iÒu khiÓn ho¹t ®éng cña vi ®iÒu khiÓn. *Bé nhí sè liÖu: Bé nhí sè liÖu th­êng lµ bé nhí RAM (Ramdom Acces Memory), bé nhí sè liÖu dïng ®Ó cÊt gi÷ c¸c th«ng tin t¹m thêi trong qu¸ tr×nh vi ®iÒu khiÓn lµm viÖc. 2.1.2. Sù s¾p xÕp ch©n ra cña vi ®iÒu khiÓn 8051: PhÇn lín c¸c bé vi ®iÒu khiÓn 8051 ®­îc ®ãng vµo vá theo kiÓu hai hµng DIL(Dual In Line) víi tæng sè lµ 40 ch©n ra, mét sè Ýt cßn l¹i ®­îc ®ãng vá theo kiÓu h×nh vu«ng PLCC (Plastic Leaded Chip Carrier) víi 44 ch©n vµ lo¹i nµy th­êng ®­îc dïng cho nh÷ng hÖ thèng cÇn thiÕt ph¶i tiÕt kiÖm diÖn tÝch. 8051 P1.0 P1.1 P1.2 P1.4 P1.5 P1.3 P1.6 P1.7 RST (TxD) P3.1 ( |INT0) P3.2 (RxD) P3.0 ( |INT1) P3.3 (T0) P3.4 (T1) P3.5 ( |RD) P3.7 XTAL2 ( |WR) P3.6 XTAL2 GND VCC + 5V P0.0 (A/D 0) P0.1 (A/D 1) P0.3 (A/D 3) P0.4 (/D 4) P0.2 (A/D 2) P0.5 (A/D 5) P0.6 (A/D 6) P0.7 (A/D 7) ALE |PSEN |EA P2.7 (A15) P2.6 (A14) P2.5 (A13) P2.3 (A11) P2.2 (A10) P2.4 (A12) P2.1 (A9) P2.0 (A8) H×nh 2.2: S¬ ®å ch©n cña vi m¹ch 8051 DIL. B¶ng 2.1: Chøc n¨ng c¸c ch©n cña vi ®iÒu khiÓn 8051. Ch©n Ký hiÖu Chøc n¨ng 1-->8 P1.0-->P1.7 Cæng gi¶ hai h­íng P1, cã thÓ tù do sö dông 9 Reset Lèi vµo Reset, khi ho¹t ®éng ë møc High(1) 10-->17 P3.0-->P3.7 Cæng gi¶ hai h­íng P3, s¾p xÕp tÊt c¶ c¸c ®­êng dÉn víi chøc n¨ng ®Æc biÖt 18 XTAL2 Lèi ra cña bé dao ®éng th¹ch anh bªn trong 19 XTAL1 Lèi vµo cña bé dao ®éng th¹ch anh bªn trong 20 Vss Nèi m¸t ( 0V ) 21-->28 P2.0-->P2.7 Cæng gi¶ hai h­íng P2, chøc n¨ng ®Æc biÖt lµ c¸c ®­êng dÉn ®Þa chØ A8..A15 29 |PSEN Progam Strobe Enable, xuÊt ra c¸c xung ®äc dïng cho bé nhí ch­¬ng tr×nh bªn ngoµi 30 ALE Address Latch Enable, xuÊt ra c¸c xung ®iÒu khiÓn ®Ó l­u tr÷ trung gian c¸c ®Þa chØ 31 |EA External Access, khi ®­îc nèi víi m¸t lµ ®Ó lµm viÖc víi ROM ngo¹i vi 32-->39 P1.0-->P1.7 Cæng hai h­íng cùc m¸ng hë P0 hay Bus d÷ liÖu hai h­íng dïng cho ROM, RAM vµ thiÕt bÞ ngo¹i vi ®ång thêi còng chuyÓn giao 8 bit ®Þa chØ thÊp 40 Vdd Nguån nu«i d­¬ng ( +5V ) C¸c ch©n ra cña bé vi ®iÒu khiÓn 8051 gåm cã: *EA: §ãng vai trß quyÕt ®Þnh xem vi ®iÒu khiÓn lµm viÖc víi ch­¬ng tr×nh bªn trong hay bªn ngoµi. Víi lo¹i 8051 kh«ng cã ROM trong th× ch©n nµy ph¶i ®­îc nèi víi m¸t. Lo¹i th«ng th­êng cã thÓ lµm viÖc tuú theo c¸ch lùa chän gi÷a ROM trong hay ROM ngoµi, khi ®ang ë chÕ ®é lµm viÖc víi bé nhí ROM trong, lo¹i cã chøa bé nhí ROM cã thÓ truy nhËp tù ®éng lªn bé nhí ch­¬ng tr×nh bªn ngoµi. *Reset: Tr¹ng th¸i Reset ®­îc thiÕt lËp b»ng c¸ch gi÷ tÝn hiÖu Reset ë møc cao trong thêi gian Ýt nhÊt lµ 2 chu kú m¸y. *ALE: TÝn hiÖu chèt 8 bit ®Þa chØ thÊp trong suèt qu¸ tr×ng truy nhËp bé nhí më réng. Th«ng th­êng tÝn hiÖu ALE ®­îc ph¸t ra víi tÇn sè b»ng 1/6 tÇn sè dao ®éng th¹ch anh vµ cã thÓ sö dông víi môc ®Ých ®Þnh thêi gian hoÆc xung nhÞp ®ång hå ngoµi. Tuy nhiªn, tÝn hiÖu ALE sÏ bÞ bá qua trong mçi qu¸ tr×nh truy nhËp bé nhí d÷ liÖu ngoµi. *PSEN: TÝn hiÖu ®äc bé nhí ch­¬ng tr×nh ngoµi, khi vi ®iÒu khiÓn truy nhËp bé nhí ch­¬ng tr×nh néi th× PSEN ®­îc ®Æt ë møc cao. *XTAL1, XTAL2: Mét bé t¹o tÝn hiÖu gi÷ nhÞp víi tÇn sè ®­îc x¸c ®Þnh bëi bé céng h­ëng th¹ch anh ®­îc l¾p thªm vµo, tÇn sè nµy x¸c ®Þnh tèc ®é lµm cña bé vi ®iÒu khiÓn. Th«ng th­êng c¸c lÖnh ®­îc thùc hiÖn b»ng 1/12 tÇn sè dao ®éng cña th¹ch anh. C¸c bé ®Õm cè thÓ lµm viÖc trong nhiÒu chÕ ®é kh¸c nhau. Khi ho¹t ®éng nh­ lµ bé ®Þnh thêi, c¸c bé ®Õm nhËn ®­îc c¸c xung tõ mét bé chia tr­íc ë bªn trong, bé nµy chia tÇn sè riªng cña bé céng h­ëng th¹ch anh cho 12 . Thay cho mét bé ®Þnh thêi 16 bit, mét bé ®inh thêi 8 bit cã thÓ ®­îc t¹o ra b»ng viÖc n¹p tù ®éng sau khi cÊp nguån, c¸c xung dÉn tõ bªn ngoµi vµo qua T0 vµ T1 còng cã thÓ ®­îc ®Õm, c¸c xung nµy cã tÇn sè cùc ®¹i b»ng 1/24 gi¸ trÞ tÇn sè cña bé céng h­ëng th¹ch anh. *P0..P3: C¸c c«ng vµo/ra. Cæng P3 còng ®¶m nhËn mét sè chøc n¨ng ®Æc biÖt cña bé vi ®iÒu khiÓn : Ch©n Ký hiÖu Chøc n¨ng P3.0 RxD NhËn d÷ liÖu vµo bé nhí qua cæng nèi tiÕp P3.1 TxD TruyÒn d÷ liÖu vµo bé nhí qua cæng nèi tiÕp P3.2 |INT0 Ng¾t ngoµi 0 P3.3 |INT1 Ng¾t ngoµi 1 P3.4 T0 Lèi vµo cña Timer 0 P3.5 T1 Lèi vµo cña Timer 1 P3.6 |WR ViÕt vµo bé nhí P3.7 |RD §äc bé nhí 2.2 Tæ chøc bé nhí: CÊu tróc chung cña bé nhí: TÊt c¶ c¸c vi ®iÒu khiÓn thuéc hä MCS-51 ®Òu ph©n chia bé nhí thµnh hai vïng ®Þa chØ cho bé nhí d÷ liÖu vµ bé nhí ch­¬ng tr×nh. Sù ph©n chia logic gi÷a bé nhí d÷ liÖu vµ bé nhí ch­¬ng tr×nh cho phÐp truy nhËp bé nhí d÷ liÖu b»ng 8 bit ®Þa chØ gióp cho viÖc l­u tr÷ vµ thao t¸c d÷ liÖu nhanh h¬n.Tuy nhiªn, chóng ta cã thÓ sö dông ®Þa chØ bé nhí d÷ liÖu 16 bit th«ng qua thanh ghi DPTR. Bé nhí ch­¬ng tr×nh lµ lo¹i bé nhí chØ cho phÐp ®äc, kh«ng cho phÐp ghi. Mét sè vi ®iÒu khiÓn ®­îc tÝch hîp s½n bé nhí ch­¬ng tr×nh bªn trong víi dung l­îng kho¶ng 4kbyte hay 8 kbyte, sè cßn l¹i ph¶i sö dông bé ch­¬ng tr×nh më réng mµ qu¸ tr×nh truy nhËp ®­îc thùc hiÖn th«ng qua sù ®iÒu khiÓn b»ng tÝn hiÖu PSEN (Progam Strobe Enable). Tuy nhiªn, vi ®iÒu khiÓn 8051 cho phÐp ta sö dông ®Õn 64kbyte bé nhí ch­¬ng tr×nh b»ng c¸ch sö dông c¶ bé nhí ch­¬ng tr×nh bªn trong vµ bªn ngoµi. Bé nhí sè liÖu chiÕm gi÷ vïng ®Þa chØ ph©n chia cña bé nhí ch­¬ng tr×nh. Dung l­îng cña bé nhí d÷ liÖu cã thÓ më réng lªn tíi 64 kbyte. Trong qu¸ tr×nh truy nhËp bé nhí sè liÖu, CPU ph¸t ra c¸c tÝn hiÖu ®äc vµ tÝn hiÖu viÕt sè liÖu th«ng qua c¸c ch©n RD vµ WR. 00H 0000H Bé nhí Ch­¬ng tr×nh Bé nhí Sè liÖu Bé nhí më réng Bé nhí më réng |PSEN |WR |RD FFH |EA=1 Bé nhí trong |EA=0 Bé nhí ngoµi FFFFH H×nh 2.3: CÊu tróc bé nhí cña hä MCS-51. Chóng ta cã thÓ kÕt hîp bé nhí ch­¬ng tr×nh më réng víi bé nhí sè liÖu më réng b»ng c¸ch cho hai tÝn hiÖu RD vµ PSEN qua mét cæng logic AND, lèi ra cña cæng AND nµy sÏ t¹o tÝn hiÖu ®äc cho bé nhí më réng. Bé nhí ch­¬ng tr×nh: Sau khi Reset, CPU b¾t ®Çu thùc hiÖn ch­¬ng tr×nh tõ ®Þa chØ 0000H. Vïng ®Çu cña bé nhí ch­¬ng tr×nh lµ vïng chøa c¸c vector ng¾t, mçi ng¾t ®­îc ph©n chia mét vïng ®Þa chØ cè ®Þnh trong trong bé nhí ch­¬ng tr×nh. Khi xuÊt hiÖn ng¾t, CPU sÏ nh¶y tíi ®Þa chØ nµy, ®©y còng lµ ®Þa chØ ®Çu cña ch­¬ng tr×nh con phôc vô ng¾t. C¸c vector ng¾t c¸ch nhau 8 byte, v× vËy nÕu ch­¬ng tr×nh con phôc vô ng¾t qu¸ dµi (>8 byte) th× t¹i vector ng¾t ta ph¶i ®Æt mét lÖnh nh¶y kh«ng ®iÒu kiÖn tíi vïng ®Þa chØ kh¸c chøa ch­¬ng tr×nh con phôc vô ng¾t. Bé nhí sè liÖu: PhÝa bªn ph¶i cña H×nh 2.3 biÓu diÔn kh«ng gian bé nhí d÷ liÖu cña MCS-51. Chóng ta cã thÓ sö dông tíi 64 Kbyte bé nhí sè liÖu ngo¹i vi. §é réng bus ®Þa chØ cña bé nhí sè liÖu ngoµi cã thÓ lµ 8 bit hoÆc 16 bit. Bus ®Þa chØ réng 8 bit th­êng ®­îc sö dông ®Ó liªn kÕt víi mét hoÆc nhiÒu ®­êng vµo ra kh¸c ®Ó ®Þnh ®Þa chØ cho RAM theo trang. Trong tr­êng hîp bus ®Þa chØ réng 16 bit, cæng P2 sÏ ph¸t ra 8 bit ®Þa chØ cao cßn cæng P1 sÏ ph¸t ra 8 bit ®Þa chØ thÊp. B»ng c¸ch nµy, ta cã thÓ truy nhËp trùc tiÕp lªn bé nhí d÷ liÖu ngoµi víi ®é lín tèi ®a lµ 64 Kbyte. Bé nhí sè liÖu trong ®­îc chia ra lµm 3 vïng: +128 byte cao. +128 byte thÊp. +Vïng dµnh cho c¸c thanh ghi chøc n¨ng ®Æc biÖt (SFR). §Þa chØ cña bé nhí sè liÖu trong lu«n lµ 8 bit, vµ cã thÓ qu¶n lý ®­îc 256 byte bé nhí. Tuy nhiªn, trªn thùc tÕ c¸ch ®Þnh ®Þa chØ cña bé nhí RAM trong cã thÓ qu¶n lý tíi 384 byte. B¶n ®å bé nhí trªn chÝp: 7F FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B RAM ®a dông E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 B8 - - - BC BB BA B9 B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 Kh«ng ®­îc ®Þa chØ ho¸ bit SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D Kh«ng ®­îc ®Þa chØ ho¸ bit TH1 22 17 16 15 14 13 12 11 10 8C Kh«ng ®­îc ®Þa chØ ho¸ bit TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B Kh«ng ®­îc ®Þa chØ ho¸ bit TL1 20 07 06 05 04 03 02 01 00 8A Kh«ng ®­îc ®Þa chØ ho¸ bit TL0 1F Bank 3 89 Kh«ng ®­îc ®Þa chØ ho¸ bit TMOD 18 88 8F 8E 8D 8C 8B 8A 89 88 TCON 17 Bank 2 87 Kh«ng ®­îc ®Þa chØ ho¸ bit PCON 10 0F Bank 1 83 Kh«ng ®­îc ®Þa chØ ho¸ bit DPH 08 82 Kh«ng ®­îc ®Þa chØ ho¸ bit DPL 07 Bank thanh ghi 0 81 Kh«ng ®­îc ®Þa chØ ho¸ bit SP 00 (MÆc ®Þnh cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0 Thanh ghi ghi chøc n¨ng ®Æc biÖt (SFR= Special Function Registers): Vi ®iÒu khiÓn 8051 lµ mét bé vi ®iÒu khiÓn ®a n¨ng víi nhiÒu chÕ ®é ho¹t ®éng kh¸c nhau ®­îc thiÕt lËp th«ng qua c¸c thanh ghi chøc n¨ng ®Æc biÖt SFRs. C¸c thanh ghi chøc n¨ng ®Æc biÖt cña vi ®iÒu khiÓn 8051 gåm cã: +P0, P1, P2, P3: C¸c cæng vµo ra, mçi bÝt øng víi 1 ch©n cña vi ®iÒu khiÓn. C¸c ch©n nµy ho¹t ®éng ë møc logic ©m. +SP (Stack Pointer): §©y lµ con trá ng¨n xÕp cña vi ®iÒu khiÓn. Thanh ghi nµy cho biÕt ®Þa chØ truy nhËp tiÕp theo trong bé nhí RAM. +DPH, DPL (Data Pointer High, Data Pointer Low): T¹o thµnh 1 cÆp thanh ghi con trá d÷ liÖu DPTR 16 bit. +PCON (Power Control): Thanh ghi nµy ®­îc sö dông ®Ó ®iÒu khiÓn c«ng suÊt cña vi ®iÒu khiÓn. Ngoµi ra bit PCON.7 con cho phÐp sñ dông ®Ó t¨ng gÊp ®«i tèc ®é baud khi truyÒn qua cæng nèi tiÕp. +TCON (Timer Control): ThiÕt lËp cÊu h×nh lµm viÖc cho bé Timer/Counter. +TMOD (Timer Mode): X¸c ®Þnh chÕ ®é lµm viÖc cho tõng bé Timer/Counter. +TL0/TH0 (Timer 0 Low/High): CÆp thanh ghi t­¬ng øng víi Timer0. +TL1/TH1 (Timer 1 Low/High): CÆp thanh ghi t­¬ng øng víi Timer1. +SCON (Serial Control): ThiÕt lËp cÊu h×nh cho cæng nèi tiÕp. +SBUF (Serial Buffer): Bé ®Öm khi truyÒn hoÆc nhËn d÷ liÖu qua cæng nèi tiÕp. +IE (Interrupt Enable): Cho phÐp ng¾t hoÆc cÊm ng¾t. +IP (Interrupt Priority): ThiÕt lËp møc ­u tiªn cho c¸c ng¾t. +PSW (Program Status Word ): Thanh ghi tõ tr¹ng th¸i ch­¬ng tr×nh l­u tr÷ mét sè bit quan träng ®­îc ®Æt hoÆc xo¸ bëi c¸c lÖnh cña 8051: cê nhí, cê nhí phô, cê trµn vµ cê ch½n lÎ. Ngoµi ra, 2 bit RS0 vµ RS1 trong PSW cßn cho phÐp chän b¨ng thanh ghi ®Ó lµm viÖc trong bé nhí RAM trong. +ACC (Accumulator): Thanh ghi tÝch luü, ®©y lµ mét trong nh÷ng thanh ghi ®­îc sö dông nhiÒu nhÊt trong vi ®iÒu khiÓn 8051. Thanh ghi nµy cã ký hiÖu lµ A. +B (B Register): Thanh ghi B ®­îc sö dông khi thùc hiÖn c¸c phÐp to¸n nh©n, chia vµ còng cã thÓ ®­îc dïng nh­ thanh ghi phô hay thanh ghi l­u tr÷ sè liÖu t¹m thêi. C¸c thanh ghi chøc n¨ng ®Æc biÖt sÏ cã thÓ ®­îc nhËn mét tr¹ng th¸i nµo ®ã cè ®Þnh mçi khi vi ®iÒu khiÓn Reset (tuú thuéc vµo mçi thanh ghi). Sau ®©y lµ b¶ng tr¹ng th¸i cña c¸c thanh ghi ngay sau khi Reset: B¶ng 2.2: Tr¹ng th¸i khi reset cña c¸c thanh ghi. Register Reset to Register Reset to Register Reset to A 00H P2 FFH SCON 00H B 00H P3 FFH TCON 00H DPTR 00H PCON 0.......B TMOD 00H IE 0..00000B 0...0000B TH0 00H IP ...00000B PSW 00H TH1 00H P0 FFH SP 07H TL0 00H P1 FFH SBUF ..H TH1 00H 2.Khối hiÓn thÞ Nối ghép LCD với vi xử lý 8051: LCD gồm có hai hàng hàng đơn vị, hàng chục, hàng trăm. Hàng đầu là giá trị nhập vào ®Ó động cơ chạy, hàng thứ hai là giá trị mà thực chất động cơ chạy và được hiển thị trên LCD. Hoạt động của LCD: Trong những năm gần đây, màn hình tinh thể lỏng LCD (Liquid Crystal Display) ngày càng được sử dụng rộng rãi và đang dần thay thế các đèn LED (7 thanh và nhiều thanh). Đó là do các nguyên nhân sau: -Màn hình LCD có giá thành hạ -Khả năng hiển thị số, ký tự và đồ hoạ tốt hơn nhiều so với đèn LED (đèn LED chỉ hiển thị được số và một số ký tự). -Sử dụng thêm một bộ điều khiển làm tươi LCD và như vậy giải phóng CPU khỏi công việc này. Còn đối với đèn LED luôn cần CPU (hoặc bằng cách nào đó) để duy trì vieec hiển thị dữ liệu. -Dễ dàng lập trình các ký tự và đồ hoạ. Mô tả chân của LCD: LCD giới thiệu ở đây có 14 chân. Chức năng của các chân được trình bày trong bảng như sau: Chân Ký hiệu I/O Mô tả 1 VSS - Đất 2 VCC - Dương nguồn +5V 3 VEE - Nguồn điều khiển tương phản 4 RS I RS = 0 chọn thanh ghi lệnh RS = 1 chọn thanh ghi dữ liệu 5 R/W I R/W = 1 đọc dữ liệu R/W = 0 ghi 6 E I/O Cho phép 7 DB0 I/O Bus dữ liệu 8 bits 8 DB1 I/O Bus dữ liệu 8 bits 9 DB2 I/O Bus dữ liệu 8 bits 10 DB3 I/O Bus dữ liệu 8 bits 11 DB4 I/O Bus dữ liệu 8 bits 12 DB5 I/O Bus dữ liệu 8 bits 13 DB6 I/O Bus dữ liệu 8 bits 14 DB7 I/O Bus dữ liệu 8 bits RS (Register Select) - chọn thanh ghi: Có hai thanh ghi rất quan trọng bên trong LCD. Chân RS được dùng để chọn các thanh ghi này. Nếu RS = 0 thì thanh ghi mã lệnh được chọn, cho phép người dùng gửi một lệnh chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng v.v…Nếu RS = 1 thì thanh ghi dữ liệu được chọn và cho phép người dùng gửi dữ liệu cần hiển thị lên LCD. R/W (Read/Write) – chân đọc/ghi: Chân vào đọc/ghi cho phép người dùng đọc/ghi thông tin từ/lên LCD. R/W = 0 thì đọc, R/W = 1 thì ghi. E (Enable) – chân cho phép: Chân E được LCD sử dụng để chốt thông tin hiện có trên chân dữ liệu. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức Cao-xuống-thấp được áp đến chân E để LCD chốt dữ liệu trên chân dữ liệu. Xung này phải rộng tối thiểu 450ns. 6.D0 – D7: Đây la 8 chân dữ liệu 8 bits, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị chữ cái và con số, mã ASCII của các chữ cái từ A đến Z, a đến z, và các con số tự 0 – 9 được gửi đến các chân này khi RS = 1. Cũng có các mã lệnh được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ. Cũng có thể sử dụng RS = 0 để kiểm tra bit cờ bận xem LCD đã sẵn sàng nhận thông tin chưa. Khi R/W = 1 và RS = 0 thì cờ bận D7 thực hiện các chức năng như sau: Nếu D7 = 1 (cờ bận bằng 1) có nghĩa LCD đang bận các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào, còn nếu D7 = 0 thì LCD sẵn s

Các file đính kèm theo tài liệu này:

  • docĐo và điều khiển tốc độ động cơ dùng vi điều khiển 8051.doc