Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
0,95 MB
Nội dung
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA ĐIỆN BÀI TẬP LỚN MÔN: VI XỬ LÝ TRONG ĐO LƯỜNG VÀ ĐIỀU KHIỂN Đề tài: Đo tốc độ điều khiển tốc độ động chiều, hiển thị lên LCD Hà Nội - 2018 Lời mở đầu Ngày việc ứng dụng vi điều khiển, vi xử lý ngày phát triển rộng rãi thâm nhập ngày nhiều vào lĩnh vực kỹ thuật đời sống xã hội Với xu hướng tất yếu với phát triển mạnh mẽ công nghệ chế tạo, người ta tạo vi điều khiển có cấu trúc mạnh hơn, đáp ứng thời gian thực tốt hơn, chuẩn hóa so với vi điều khiển bit trước Với phát triển mạnh mẽ khoa học, đặc biệt ngành điện, điện tử, phát minh linh kiện điện tử ngày đáp ứng yêu cầu hệ thống Ưu điểm việc sử dụng linh kiện điện tử làm cho hệ thống linh hoạt đa dạng hơn, giá thành thấp độ xác cao Sau thời gian học tập tìm hiểu, chúng em làm quen với môn học vi xử lý đo lường điều khiển Để áp dụng lý thuyết với thực tế mơn học chúng em xin hồn thành tập lớn: “ Sử dụng VĐK 8051 đo tốc độ động chiều, dải đo [0 300*N] v/p hiển thị kết LCD 16x2 Encoder 100 xung, hai đèn CB1 CB2 để cảnh báo tốc độ ngưỡng cao ngưỡng thấp Hai nút án Start Stop để bắt đầu dừng trình đo Khi ấn Stop, hệ thống lưu lại giá trị đo cuối Hai nút TĐ1 TĐ2 để điều khiển động chạy tốc độ 100*N(v/p) 200*N(v/p) Chu kỳ cập nhật giá trị đo lên LCD 5s Với N số dư phép chia tổng số cuối mã sinh viên cho Tuy nhiên kiến thức hạn chế nên q trình làm có sai sót Chúng em mong cô giáo thông cảm giúp đỡ chúng em hoàn thiện tốt tập lớn sau Chúng em xin chân thành cảm ơn! CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Nguyên lý đo tốc độ động dung Encoder 1.1.1 Khái niệm Encoder thiết bị đo lường dịch chuyển thẳng góc Đồng thời chuyển đổi vị trí góc vị trí thẳng thành tín hiệu nhị phân nhờ tính hiệu xác định vị trí trục bàn máy Tín hiệu Encoder cho dạng tín hiệu số Encoder sử dụng làm phần tử chuyển đổi tín hiệu phản hồi máy CNC robot 1.1.2 Phân loại 2|Page - Có loại Encoder chính: Encoder tuyệt đối (absolute encoder): Sử dụng đĩa theo mã nhị phân mã - Gray Encoder tương đối (incremental encoder): có tín hiệu tang dần theo chu kỳ Với tốn nhóm chúng em sử dụng phương pháp đo Encoder tương đối 1.1.3 Chi tiết nguyên lý hoạt động Nguyên lý encoder, đĩa tròn xoay quay quanh trục Trên đĩa có lỗ (rãnh) Người ta dung đèn led để chiếu lên mặt đĩa Khi đĩa quay, chỗ khơng có lỗ, đèn led khơng chiếu xun qua Chỗ có lỗ, đèn led chiếu xuyên qua Khi đó, phía mặt bên đĩa, người ta đặt mắt thu (photosensor) Với tín hiệu có khơng có ánh sang chiếu qua, người ta ghi nhận được đèn led có chiếu qua lỗ hay không Khi trục quay, giả sử đĩa có lỗ nhất, lần mắt thu nhận tín hiệu đèn led, có nghĩa đĩa quay vòng Đây nguyên lý encoder Tuy nhiên, vấn đề đặt để xác định xác vị trí đĩa quay (mịn hơn) làm để xác định đĩa quay theo chiều nào? Đó vấn đề để tìm hiểu encoder 1.1.4 Encoder tuyệt đối (absolute encoder) Sơ đồ nguyên lý, kết cấu: Encoder kiểu tuyệt đối, kết cấu gồm phần sau: phát ánh sang (LED phát), đĩa mã hóa (chứa dải bang mang tín hiệu) thu ánh sang nhạy với ánh sang từ phát (bộ thu thường photosensor) 3|Page Đĩa mã hóa encoder tuyệt đối chế tạo từ vật liệu suốt, người ta chia mặt đĩa thành góc đường tròn đồng tâm Các đường tròn đồng tâm bán kính giới hạn góc hình thành phân tố diện tích Tập hợp phân tố diện tích giới hạn vòng tròn đồng tâm gọi dải băng Số dải băng tùy thuộc vào công nghệ sản xuất (chủng loại sản phẩm), ứng với dải băng ta có đèn LED thu 1.1.5 Encoder kiểu tương đối Cấu tạo Encoder tương đối bao gồm nguồn phát quang, cảm biến quang đọc tín hiệu từ nguồn phát đĩa tròn xoay có chia rãnh quay quanh trục Khi đĩa quay, ánh sáng chiếu xuyên qua phần có rãnh, phần khơng có rãnh ánh sáng bị cản lại Mỗi lần ánh sáng xuyên qua lỗ, ta thu tín hiệu(1 xung) từ cảm biến quang Khi đếm số xung thu số rãnh đĩa quay, tức đĩa quay vòng 4|Page Nguyên lý đo tốc độ động - Gọi số xung đĩa quay là: Ne (xung/vòng) - Gọi số xung xuất từ cảm biến quang 1s : n (xung/s) Tốc độ động v = (n*60)/Ne (vòng/phút) 1.2 Phương pháp điều khiển động chiều 1.2.1 Các phương pháp điều khiển động chiều - Điều chỉnh điện trở phần ứng Điều chỉnh từ thông Điều chỉnh điện áp phần ứng 1.2.2 Phương pháp điều khiển sử dụng toán Phương pháp sử dụng để đo tốc độ động toán phương pháp điều chế độ rộng xung PWM a Khái niệm 5|Page Phương pháp điều xung PWM (Pulse Width Modulation) phương pháp điều chỉnh điện áp tải, hay nói cách khác, phương pháp điều chế dựa thay đổi độ rộng chuỗi xung vuông, dẫn đến thay đổi điện áp Các PWM biến đổi có tần số khác độ rộng sườn dương hay sườn âm b Ứng dụng PWM điều khiển PWM ứng dụng nhiều điều khiển Điển hình mà thường hay gặp điều khiển động xung áp, điều áp Sử dụng PWM điều khiển độ nhanh chậm động hay cao nữa, dùng để điều khiển ổn định tốc độ động Ngoài lĩnh vực điều khiển hay ổn định tải PWM tham gia điều chế mạch nguồn : boot, buck, nghịch lưu pha pha PWM gặp nhiều thực tế mạch điện điều khiển Điều đặc biệt PWM chuyên dùng để điều khiển phần tử điện tử cơng suất có đường đặc tính tuyến tính có sẵn nguồn chiều cố định Như PWM ứng dụng nhiều thiết bị điện- điện tử PWM nhân tố mà đội Robocon sử dụng để điều khiển động hay ổn định tốc độ động c Nguyên lý hoạt động PWM 6|Page Nguyên tắc phương pháp điều khiển PWM giữ nguyên giá trị điện áp thay đổi thời gian đặt điện áp vào động Điều có nghĩa, với tần số đóng ngắt cơng tắc đủ lớn, thời gian cấp điện áp vào động lâu điện áp trung bình cao, ngược lại thời gian cấp điện vào động ngắn điện áp trung bình giảm Như vậy, PWM kỹ thuật so sánh tỷ lệ phần trăm điện áp nguồn cách đóng ngắt nhanh nguồn điện cấp vào động tạo tín hiệu xung, với độ rộng xung (thời gian cấp điện áp) xác định tạo điện áp trung bình xác định (được minh họa hình 1) Khi tần số đóng ngắt đủ lớn (thường từ ÷ 20 kHz), động chạy với tốc độ ổn định nhờ moment quay CHƯƠNG 2: XỬ LÝ BÀI TỐN 2.1 Phân tích xây dựng mạch nguyên lý 2.1.1 Phân tích mạch Với yêu cầu toán đo điều khiển tốc độ động cơ, hiển thị LCD Các thiết bị cần để thiết kế hệ thống là: Tên thiết bị Tác dụng VĐK 8051 (AT89C52) Làm điều khiển cho mạch, thực tính tốn xung từ encoder để đưa tốc độ thị lên hình LCD Số lượng 7|Page Màn hình LCD(LM016L) Làm hình để thị thơng tin, tốc độ động Động chiều Encoder Thạch anh Dùng để mô cho động chiều Gắn vào trục động để đo tốc độ Dùng để tạo tần số dao động cho điều khiển với tần số dao động 12MHz Cùng với thạch anh làm mạch tạo dao động Tạo mạch reset Giảm dòng điện mạch mà lắp đặt Dùng để tang dòng xuất vi điều khiển từ port 1 Dùng để điều chỉnh độ sang tối hình LCD Dùng để tác động vào vi điều khiển Dùng đảo tín hiệu đầu cảu vi điều khiển Dùng để điều chỉnh tốc độ động Dùng để điều khiển sáng tối đèn báo Dùng để báo tốc độ thấp, tốc độ cao Dùng để lấy tín hiệu đưa vào chân ngắt vi điều khiển Hiển thị xung từ đầu DC xung PWM tạo 2 Tụ điện thường Tụ điện phân cực Điện trở thường Điện trở treo(RESPACK-8) Biến trở (POT - HG) Nút bấm Bộ tín hiệu đảo IC cầu điều khiển động (L293D) Transistor (NPN) Led Bộ AND Bộ đo xung 1 2.1.2 Xây dựng mạch nguyên lý 8|Page 2.1.3 Thuyết minh mạch Quá trình đo điều khiển tốc độ động Sau khởi động chương trình mơ phỏng, timer ngắt khởi tạo, ta nhấn nút START, tín hiệu điều khiển gửi đến chương trình ngắt vi điều khiển Ngay timer hoạt động làm đếm nhận xung đếm vào chân T0 Timer làm đình thời, sử dụng để lấy mẫu giá trị đếm vi điều khiển tính tốn tốc độ Đồng thời động DC cấp điện xung điều khiển qua IC cầu H L293D Động DC hoạt động tốc độ MAX, thời gian cập nhật giá trị đo lên LCD 5s Hoạt động chế độ cấp Sau động hoạt động, để điều khiển động chạy cấp ta nhấn nút CAP1 Vi điều khiển điều chế độ rộng xung PWM đầu tương ứng với cấp tốc 9|Page độ 300v/p Động sau hoạt động ổn định quanh mức 300v/p, kết đo hiển thị lên LCD Hoạt động chế độ cấp Muốn động chuyển sang hoạt động cấp 2, ta nhấn nút CAP2 Vi điều khiển tiếp tục thay đổi xung PWM đầu để động hoạt động cấp tốc độ thứ 600v/p, kết đo hiển thị LCD Dừng hệ thống đo điều khiển Khi hệ thống hoạt động, ta muốn dừng nhấn nút STOP Vi điều khiển sau dừng không cho timer tiếp tục làm việc, động DC bị ngừng cấp điện vào tốc độ giảm dần Màn hình LCD hiển thị tốc độ cuối trước nhấn nút STOP 2.1.4 Xây dựng thuật tốn Chương trình (Main) Begin Timer/Counter init Interrupt init LCD init Control (Interrupt) Speed control Measure speed Display Khởi tạo Timer Counter đếm xung Khởi tạo ngắt, cho phép ngắt hoạt động Khởi tạo hình LCD 16x2 Hàm điều khiển: START, STOP, CAP1, CAP2 Hàm điều khiển tốc độ động DC Hàm tính toán tốc độ Hàm hiển thị tốc độ End 10 | P a g e 11 | P a g e Các chương trình – hàm chức Thuật toán điều khiển hệ thống Timer/Counter init Control S LCD init Turn on LCD TMOD = 0x25 = 16bit, (T0Start – Counter T1 – Timer 8bit) Bật chương trình đo điều khiển Chọn giao tiếp bit Nạp giá Đ trị đếm TH0 = TL0 = Bật động TH1cơ= (DC TL1 == -100 0) Dem = TR1 = TR0 =1 Returnn Xóa hình Returnn Chọn cấp tốc độ cho động Đ Cap1 = S Cap2 = S Interrupt init Đ Xung PWM cấp Đ Xung PWM Cho phép ngắt T1 cấp Cho phép ngắt INT0 Ngắt theo mức Đ Xung PWM = (Tốc độ Max) Returnn Stop = S Dừng hệ thống Đ Tắt động (DC = 1) Dem = TR1 = TR0 = Returnn 12 | P a g e Thuật toán đo tốc độ động Measure speed Dem>=10000 S Thời gian lấy mẫu 1s Đ - Dừng Timer/Counter TR1 = TR0 = Tocdo = (TH0*256+TL0)*0,6 Tocdo=500 Led1 = S Đèn báo tốc độ cao Thuật toán thị lên LCD Đ Led2 = Display Led2 = Returnn Measure speed Time=11,3 ms Nếu biến đếm S thời gian mà >=11,3 ms đẩy tín hiệu lên mức cao Đ PWM = Time>= Timexung Đ Nếu biến đếm Sthời gian mà >= chu kỳ tạo xung đẩy tín hiệu xuống mức thấp đặt lại biến đếm thời gian PWM = Time = Returnn 14 | P a g e 2.1.5 Viết chương trình điều khển #include #include #include #define LCD_RS P0_0 #define LCD_RW P0_1 #define LCD_EN P0_2 #define LCD_D4 P0_3 #define LCD_D5 P0_4 #define LCD_D6 P0_5 #define LCD_D7 P0_6 sbit Start = P2^0; sbit Stop = P2^1; sbit Cap_1 = P2^2; sbit Cap_2 = P2^3; sbit DC = P2^4; sbit Led_1 = P2^5; //Canh bao toc nguong thap sbit Led_2 = P2^6; //Canh bao toc nguong cao sbit PWM = P2^7; 15 | P a g e int Dien_ap = 24; //Dien ap dat vao dong co int Toc_do_max = 900; //Toc lon nhat cua dong co int Toc_do_1 = 300; //Toc cap int Toc_do_2 = 600; //Toc cap int Encoder = 100; //Do phan giai cua Encoder int Time_update = 5; //Thoi gian cap nhat toc len man hinh unsigned int Dem = 0; unsigned int Dem_xung = 0; int Cap = 1; int Time; float Toc_do; float Time_xung; unsigned char str[32]; //Ham delay US void delay_us(unsigned int t) { unsigned int i; for(i=0; i>2)&1; LCD_D7 = (Data>>3)&1; } //Ham gui lenh cho LCD void LCD_sendcmd(unsigned char cmd) { LCD_send4bit(cmd>>4); //Gui bt cao - dich bit LCD_enable(); //Kich hoat bit cao LCD_send4bit(cmd); //Gui bit thap LCD_enable(); } void LCD_clear()//Ham xoa man hinh LCD { LCD_sendcmd(0x01); //Xoa man hinh delay_us(10); } 17 | P a g e //Ham khoi tao LCD void LCD_init() { LCD_send4bit(0x00); //Bat LCD delay_ms(20); LCD_RS=0; LCD_RW=0; LCD_send4bit(0x03); LCD_enable(); delay_us(5); LCD_enable(); delay_us(100); LCD_enable(); LCD_send4bit(0x02); //Di chuyen tro ve dau man hinh LCD_enable(); //Kich hoat xung LCD_sendcmd(0x28); // Lua chon che bit LCD_sendcmd(0x0c); //Bat hien thi va tat tro LCD_sendcmd(0x06); //Tu dong di chuyen tro sang vi tri ke tiep LCD_sendcmd(0x01); //Xoa man hinh } void LCD_gotoxy(unsigned char x, unsigned char y) //x la cot, y la hang { unsigned char address; if(!y)address=(0x80 +x); else address= (0xc0 + x); delay_us(1000); LCD_sendcmd(address); 18 | P a g e delay_us(50); } void LCD_putchar(unsigned char Data) { LCD_RS = 1; //che ghi LCD_sendcmd(Data); //Gui chuoi LCD_RS = 0; } //Ham viet len chuoi ki tu theo tro void LCD_puts(char *s) { while(*s) { LCD_putchar(*s); s++; } } void LCD_number(unsigned int number) { LCD_putchar((number/1000) + 48); LCD_putchar((number%1000/100)+48); LCD_putchar((number%100/10)+48); LCD_putchar((number%10) + 48); } // Tinh chu ky float Tinh_chu_ky(int Toc_do) { float U_toc_do; float G; 19 | P a g e U_toc_do = ((Dien_ap * Toc_do) / Toc_do_max); G = (1 - (U_toc_do/Dien_ap)); return 113/G; } //Tao xung PWM void Tao_xung() { if(Dem_xung >= 113) PWM = 1; if(Dem_xung >= Time_xung) { PWM = 0; Dem_xung = 0; } } //Khoi tao timer void Timer_init() { TMOD = 0x25; // Timer lam bo dem che 1, timer dinh thoi che TH1 = TL1 = -100; // Nap gia tri dau cho timer dem 100 xung TH0 = TL0 = 0; } //Khoi ta cac ngat void Interrupt_init() { IE = 0x89; IP = 0x01; IT0 = 1; } void Ngat_T1 () interrupt 20 | P a g e { Dem++; Dem_xung++; TF1 = 0; } //Ham dieu khien void Do_toc_do() { if(DC == 0&&Dem >= 10000) { TR1 = TR0 = 0; Toc_do =((TH0*256 + TL0)*0.6); if(Toc_do >= 500) Led_2 = 0; else Led_2 = 1; if(Toc_do