Báo cáo Đo và điều khiển tốc độ động cơ một chiều loại nhỏ

Ngày nay trong mọi lĩnh vực khoa học kỹ thuật luôn xuất hiện khái niệm Kỹ thuật số vi xử lý và điều khiển, với sự trợ giúp của máy tính kỹ thuật vi xử lý và điều khiển đã có sự phát triển ạnh mẽ đặc biệt là sự phát triển nhanh chóng của các họ vi xử lý và điều khiển với những tính năng mới. Để phục vụ tốt cho môn học “Đo lường vµ ®iÒu khiÓn tự động” chúng em thực hiện đề tài: Đo và Điều khiển Tốc Độ Động Cơ với mục đích tích luỹ kiến thức đặc biệt là những kinh nghiệm trong quá trình lắp mạch thực tế song do thời gian và kiến thức có hạn, nên mạch thiết kế còn nhiều thiếu sót. Chúng em rất mong nhận được sự góp ý của các thầy cô để có thể nâng cao chất lượng của bài thiết kế, chúng em xin chân thành cảm ơn !

doc44 trang | Chia sẻ: oanh_nt | Lượt xem: 1122 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Báo cáo Đo và điều khiển tốc độ động cơ một chiều loại nhỏ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Mục Lục I. Giới thiệu chung 1. Mở Đầu ………………………………………………………………….. 2 . Giớithiệu đề tài ,môc dÝch……………………………………………... 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 ……………………………………………………… 6. M« pháng ………………………………………………………… II . Lý thuyết thực hiện Cơ sơ lý thuyết ……………………………………………………………. Sơđồ nguyên lý ……………………………………………………………. Phân tích chức năng từng khối ……………………………………………. 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……………………………………………………………… V.§¸nh gi¸ sai sè ………………………………………………………… VI.Xu h­íng ph¸t triÓn ………………………………………………………… VII. Kết Luận…………………………………………………………………. VIII. Tài liệu tham khảo……………………………………………………….. B¸O C¸O BµI TËP LíN Đo và điều khiển tốc độ động cơ dùng vi điều khiển 8051 I.Giới thiệu chung: 1.Mở ®ầu: Ngày nay trong mọi lĩnh vực khoa học kỹ thuật luôn xuất hiện khái niệm Kỹ thuật số vi xử lý và điều khiển, với sự trợ giúp của máy tính kỹ thuật vi xử lý và điều khiển đã có sự phát triển ạnh mẽ đặc biệt là sự phát triển nhanh chóng của các họ vi xử lý và điều khiển với những tính năng mới. Để phục vụ tốt cho môn học “Đo lường vµ ®iÒu khiÓn tự động” chúng em thực hiện đề tài: Đo và Điều khiển Tốc Độ Động Cơ với mục đích tích luỹ kiến thức đặc biệt là những kinh nghiệm trong quá trình lắp mạch thực tế song do thời gian và kiến thức có hạn, nên mạch thiết kế còn nhiều thiếu sót. Chúng em rất mong nhận được sự góp ý của các thầy cô để có thể nâng cao chất lượng của bài thiết kế, chúng em xin chân thành cảm ơn ! 2. Đề tài : §o vµ ®iÒu khiÓn tèc ®é ®éng c¬ mét chiÒu lo¹i nhá 3. Nhóm sinh viên thực hiện: Nhãm thùc hiÖn: Gåm 3 thµnh viªn chÝnh ®­îc ph©n c«ng c«ng viÖc cô thÓ 4.§Þnh h­íng thiÕt kÕ: ThiÕt kÕ mét hÖ vi xö lý bao gåm c¶ viÖc thiÕt kÕ tæ chøc phÇn cøng vµ viÕt phÇn mÒm cho nÒn phÇn cøng mµ ta thiÕt kÕ. ViÖc xem xÐt gi÷a tæ chøc phÇn cøng vµ ch­¬ng tr×nh phÇn mÒm cho mét thiÕt kÕ lµ mét vÊn ®Ò cÇn ph¶i c©n nh¾c. V× khi tæ chøc phÇn cøng cµng phøc t¹p, cµng cã nhiÒu chøc n¨ng hç trî cho yªu cÇu thiÕt kÕ th× phÇn mÒm cµng ®­îc gi¶m bít vµ dÔ dµng thùc hiÖn nh­ng l¹i ®Èy cao gi¸ thµnh chi phÝ cho phÇn cøng, còng nh­ chi phÝ b¶o tr×. Ng­îc l¹i víi mét phÇn cøng tèi thiÓu l¹i yªu cÇu mét ch­¬ng tr×nh phÇn mÒm phøc t¹p h¬n, hoµn thiÖn h¬n; nh­ng l¹i cho phÐp b¶o tr× hÖ thèng dÔ dµng h¬n còng nh­ viÖc ph¸t triÓn tÝnh n¨ng cña hÖ thèng tõ ®ã cã thÓ ®­a ra gi¸ c¹nh tranh ®­îc. Tõ yªu cÇu vµ nhËn ®Þnh trªn ta cã nh÷ng ®Þnh h­íng s¬ bé cho thiÕt kÕ nh­ sau: Chän bé vi xö lý. Tõ yªu cÇu dïng VXL 8 bit ta dù kiÕn dïng c¸c chip vi ®iÒu khiÓn thuéc hä MCS-51 cña Intel, mµ cô thÓ ë ®©y lµ dïng chip 8051 v× nh÷ng lý do sau: + Thø nhÊt 8051 thuéc hä MCS-51, lµ chip vi ®iÒu khiÓn. §Æc ®iÓm cña c¸c chip vi ®iÒu khiÓn nãi chung lµ nã ®­îc tÝch hîp víi ®Çy ®ñ chøc n¨ng cña mét hÖ VXL nhá, rÊt thÝch hîp víi nh÷ng thiÕt kÕ h­íng ®iÒu khiÓn. Tøc lµ trong nã bao gåm: m¹ch VXL, bé nhí ch­¬ng tr×nh vµ d÷ liÖu, bé ®Õm, bé t¹o xung, c¸c cæng vµo/ra nèi tiÕp vµ song song, m¹ch ®iÒu khiÓn ng¾t¼ + Thø hai lµ, vi ®iÒu khiÓn 8051 cïng víi c¸c hä vi ®iÒu khiÓn kh¸c nãi chung trong nh÷ng n¨m gÇn ®©y ®­îc ph¸t triÓn theo c¸c h­íng sau: Gi¶m nhá dßng tiªu thô. T¨ng tèc ®é lµm viÖc hay tÇn sè xung nhÞp cña CPU . Gi¶m ®iÖp ¸p nguån nu«i. Cã thÓ më réng nhiÒu chøc n¨ng trªn chip, më réng cho c¸c thiÕt kÕ lín. Nh÷ng ®Æc ®iÓm ®ã dÉn ®Õn ®¹t ®­îc hai tÝnh n¨ng quan träng lµ: gi¶m c«ng suÊt tiªu thô vµ cho phÐp ®iÒu khiÓn thêi gian thùc nªn vÒ mÆt øng dông nã rÊt thÝch hîp víi c¸c thiÕt kÕ h­íng ®iÒu khiÓn. + Thø ba lµ, vi ®iÒu khiÓn thuéc hä MCS-51 ®­îc hç trî mét tËp lÖnh phong phó nªn cho phÐp nhiÒu kh¶ n¨ng mÒm dÎo trong vÊn ®Ò viÕt ch­¬ng tr×nh phÇn mÒm ®iÒu khiÓn. + Cuèi cïng lµ, c¸c chip thuéc hä MCS-51 hiÖn ®­îc sö dông phæ biÕn vµ ®­îc coi lµ chuÈn c«ng nghiÖp cho c¸c thiÕt kÕ kh¶ dông. MÆt kh¸c, qua viÖc kh¶o s¸t thÞ tr­êng linh kiÖn viÖc cã ®­îc chip 8051 lµ dÔ dµng nªn më ra kh¶ n¨ng thiÕt kÕ thùc tÕ. V× nh÷ng lý do trªn mµ viÖc lùa chän vi ®iÒu khiÓn 8051 lµ mét gi¶i ph¸p hoµn toµn phï hîp cho thiÕt kÕ. 4 .Phương án thực hiện : 4.1. Dùng cặp cảm biến thu phát đặt đối diện để xác định số vòng quay trong một khoảng thời gian nhất định . Động cơ có gắn một đĩa quay có một khe thủng trên đĩa ,mỗI khi khe này quay qua cặp cảm biến hồng ngoạt thu phát sẽ tạo ra một đột biến xung trong một vòng quay. 4.2. Sử dụng cảm biến phát và đồng thời thu tín hiệu phản xạ ngược trở bằng cách vạch một số điểm trên trục của động cơ . 4.3. Họ vi điều khiển AT89C51 có 32 đường xuất nhập dữ liệu : P0 ,P1 , P2, P3 mỗI Port 8 bit vì vậy phương án đặt ra sử dụng toàn bộ 8 bit P*.0 - P*.7 để xuất ra LED 7 thanh CA hoặc chỉ sử dụng mỗI Port 4bit sau đó giảI mã bằng 74LS47.Như vậy sẽ phảI sử dụng LCD để hiển thị tốc độ động cơ . 4.4. Sử dụng màn hình LCD để hiển thị . 5. Các bước thực hiện : Sau khi nhận đồ án nhóm em đã đưa ra một số bước sau để thực hiện công việc: 1.Nhập số vào LCD theo đúng trình tự hàng trăm hàng chục hàng đơn vị .Đo tốc độ của các động cơ loại nhỏ (loại một chiều hoặc xoay chiều),có gắn cánh quạt (số lượng cánh là xác định ). 2. Thực hiện việc đo tốc độ thông qua số vòng quay của cánh quạt bằng cách sử dụng mạch sensor thu phát hồng ngoại. 3.Việc hiển thị thực hiện thông qua LCD (đo tốc độ trong một khoảng thời gian phù hợp).Có một khoảng thời gian để quan sát giá trị của tốc độ. 4.ViÖc ®o ®éng c¬ ta ®iÒu chØnh sao cho tèc ®é cña ®éng c¬ lu«n æn ®Þnh ë mét ng­ìng nhÊt ®Þnh .NghÜa lµ tèc ®é cña ®éng c¬ lu«n cã mét sai sè trong giíi h¹n .trong bµi nµy chóng em ®iÒu chØnh cho sai sè cña ®éng c¬ trong kho¶ng 2%. 6.M« pháng a.PhÇn code // Mo PhongDlg.cpp : implementation file // #include "stdafx.h" #include "Mo Phong.h" #include "Mo PhongDlg.h" #include"math.h" #include "stdlib.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMoPhongDlg dialog CMoPhongDlg::CMoPhongDlg(CWnd* pParent /*=NULL*/) : CDialog(CMoPhongDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMoPhongDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMoPhongDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMoPhongDlg) DDX_Control(pDX, IDC_LED1, m_led1); DDX_Control(pDX, IDC_LED10, m_led10); DDX_Control(pDX, IDC_LED2, m_led2); DDX_Control(pDX, IDC_LED3, m_led3); DDX_Control(pDX, IDC_LED4, m_led4); DDX_Control(pDX, IDC_LED5, m_led5); DDX_Control(pDX, IDC_LED6, m_led6); DDX_Control(pDX, IDC_LED7, m_led7); DDX_Control(pDX, IDC_LED8, m_led8); DDX_Control(pDX, IDC_LED9, m_led9); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMoPhongDlg, CDialog) //{{AFX_MSG_MAP(CMoPhongDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_HANGCHUC, OnHangchuc) ON_BN_CLICKED(IDC_HANGDONVI, OnHangdonvi) ON_BN_CLICKED(IDC_HANGNGHIN, OnHangnghin) ON_BN_CLICKED(IDC_HANGTRAM, OnHangtram) ON_BN_CLICKED(IDC_HANGVAN, OnHangvan) ON_BN_CLICKED(IDC_PAUSE, OnPause) ON_BN_CLICKED(IDC_RESET, OnReset) ON_BN_CLICKED(IDC_REVERSE, OnReverse) ON_WM_TIMER() ON_BN_CLICKED(IDC_START, OnStart) ON_WM_DESTROY() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMoPhongDlg message handlers BOOL CMoPhongDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_1=0; m_2=m_3=m_4=m_5=m_6=m_7=m_8=m_9=m_10=0; 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"); m_degree=0; temp=TRUE; t=0; // m_vong=0; return TRUE; // return TRUE unless you set the focus to a control } void CMoPhongDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CMoPhongDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CClientDC pDC(this); OnDraw(&pDC); CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CMoPhongDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CMoPhongDlg::OnHangchuc() { if(m_4==9) m_4=0; else m_4++; CString s; s.Format("%d",m_4); m_led4.SetWindowText(s); m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5; } 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ác file đính kèm theo tài liệu này:

  • docdo luong va tu dong dieu khien.doc