MỤC LỤCLời mở đầu………………………………………………………………………...2Chương 1 : Sơ đồ nguyên lý và tính toán các tham số trong mạch1.1.Sơ đồ khối tổng quan và yêu cầu đề tài…………………………….............31.2. Sơ đồ nguyên lý và tính toán tham số...………….…………………….......4Chương 2 : Lập trình đo điện áp sử dụng vi điều khiển PIC16F877A trên phần mềm MicroC for PIC 2.1.Ý tưởng lập trình……………………………………………………………8 2.2.Lưu đồ thuật toán…………………………………………………………...9 2.3.Code lập trình trên MicroC………………………………………………...10Chương 3 : Thiết kế giao diện hiển thị đồ thị điện áp bằng phần mềm Visual Studio 3.1.Giao diện thiết kế trên Visual Studio……………………………………....12 3.2.Code lập trình giao diện……………………………………………………13Chương 4 : Kết quả thực nghiệm …………………………………………………18Tài liệu tham khảo………………….......…………………………………………20Nhận xét của giáo viên…………..………………………………………………..21
MỤC LỤC Lời mơ đầu……………………………………………………………………… Chương : Sơ đồ nguyên lý và tính toán các tham số mạch 1.1.Sơ đồ khối tổng quan và yêu cầu đề tài…………………………… 1.2 Sơ đồ nguyên lý và tính toán tham số ………….…………………… .4 Chương : Lập trình đo điện áp sử dụng vi điều khiển PIC16F877A phần mềm MicroC for PIC 2.1.Ý tương lập trình……………………………………………………………8 2.2.Lưu đồ thuật toán………………………………………………………… 2.3.Code lập trình MicroC……………………………………………… 10 Chương : Thiết kế giao diện hiển thị đồ thị điện áp bằng phần mềm Visual Studio 3.1.Giao diện thiết kế Visual Studio…………………………………… 12 3.2.Code lập trình giao diện……………………………………………………13 Chương : Kết quả thực nghiệm …………………………………………………18 Tài liệu tham khảo………………… .…………………………………………20 Nhận xét của giáo viên………… ……………………………………………… 21 Lời Mở Đầu Trong thời đại công nghiệp hóa – hiện đại hóa , nhu cầu về sử dụng điện được coi là một vấn đề thiết thực đối với các nhà máy công nghiệp, quan,xí nghiệp, bệnh viện, trường học,… và nhu cầu sinh hoạt của người dân Muốn chất lượng điện ổn định thì cần phải có các thiết bị giám sát, đo lường để kịp thời phát hiện sự cố (điện áp quá cao hoặc quá thấp , tín hiệu xoay chiều bị biến dạng, ) và khắc phục để tránh gây thiệt hại đến trang thiết bị, máy móc sử dụng nhà ơ, quan, xí nghiệp,… từ đó,giảm thiệt hại về mặt kinh tế sự cố cung cấp điện gây Vì vậy,được sự hướng dẫn của thầy Võ Duy Thành, nội dung bài tập lớn môn Vi Điều Khiển và Ứng Dụng, chúng em xin trình bày về mạch đo điện áp sử dụng vi điều khiển PIC16F887A , hiển thị đồ thị điện áp lên giao diện máy tính để đánh giá chất lượng điện Do kiến thức còn hạn chế nên phần tìm hiểu không thể tránh khỏi sai sót,mong thầy thông cảm và giúp đỡ Chúng em xin cảm ơn thầy rất nhiều! Nhóm sinh viên thực hiện, Nhóm CHƯƠNG I : SƠ ĐỒ NGUYÊN LÝ VÀ TÍNH TOÁN CÁC THAM SỚ TRONG MẠCH 1.1.Sơ đờ khới tởng quan và yêu cầu đề tài : -Yêu cầu đề tài : đo biến động điện áp xoay chiều và khoảng thời gian trì điện áp biến động đó rồi hiển thị lên đồ thị để đánh giá chất lượng điện -Thông số : +) Udm = 220 VAC+2% +) ∆t = 0.5s -Sơ đồ khối tổng quan : Hình 1.1 Sơ đồ khối tổng quan đề tài -Mô tả sơ đồ : Đầu tiên, ta chuyển đổi từ điện áp xoay chiều về điện áp một chiều để đưa vào chân ADC (0-5VDC) của vi điều khiển PIC16F877A ( MCU) Sau đó, ta tiến hành đo lường, xử lý dữ liệu và gửi dữ liệu điện áp đo được từ PIC lên máy tính (PC) Cuối cùng, giá trị nhận được từ PIC sẽ được hiển thị đồ thị giao diện được xây dựng bằng phần mềm máy tính để đánh giá chất lượng điện 1.2.Sơ đồ nguyên lý mạch đo điện áp và tính toán điện áp chuyển đổi : 1.2.1 Khới chủn đởi điện áp : Hình 1.2 Sơ đồ mạch cầu diode chuyển đổi điện áp -Mạch sử dụng một công tắc để cấp / ngắt nguồn xoay chiều AC vào mạch đo -Điện áp vào xoay chiều qua trơ phân áp để thu được điện áp mong muốn, sau cho qua cầu chỉnh lưu diode để thu được điện áp một chiều, khép mạch điên áp đầu từ cầu diode bằng một điên trơ Ta thu được điện áp chuyển đổi từ AC sang DC, đưa vào chân ADC của vi điều khiển phục vụ việc đo lường 1.2.2.Khối đo lường và truyền thông : Hình 1.3 Sơ đồ mạch đo lường truyền thông -Ta sử dụng chân ADC của PIC16F877A (loại 40DP) để đo lường giá trị điện áp được cấp từ khổi chuyển đổi điện áp -Đặc điểm bản của vi điều khiển PIC16F877A: +Bộ nhớ : 8K x 14 words of Flash Program Memory, 368 x bytes RAM, 256 x bytes EEPROM +5 PORT I/O với 33 chân I/O +Cung cấp bộ Timer/Counter : Timer : bit, Timer : 16 bit, Timer : bit +Hỗ trợ các chuẩn giao tiếp : USART, I2C, SPI, +Chuyển đổi từ Analog sang Digital : kênh ADC 10 bit +Cung cấp bộ so sánh tương tự, bộ capture 16 bit, bộ compare 16 bit, module PWM với độ phân giải là 10 bit -Trên PIC16F877A, ta cần cấp nguồn cho cả chân 12,31 (5V) và chân 11, 32 (0V) thì vi điều khiển mới hoạt động Ngoài ra, ta còn phải cấp xung hoạt động cho PIC bằng việc sử dụng thạch anh và gắn thêm tụ lọc để xung dao động ổn định Ở đây, ta sử dụng thạch anh 20Mhz và tụ lọc 33pF -Như đã giới thiệu, PIC16F877A cung cấp bộ ADC 10 bit, kênh ngõ vào từ AN0AN7.Nếu sử dụng điện áp tham chiếu nội = 5V thì có điện áp đo được sẽ là : Vin = ADCvalue * -Phần truyền, nhận dữ liệu sẽ được thực hiện thông qua chân TX, RX PIC Ở đây, ta sử dụng mạch chuyển đổi từ RS232 sang cổng COM để giao tiếp với máy tính, đó là mạch chuyển đởi sử dụng chíp PL2303 : Hình 1.4 Chíp PL2303 thực tế -Ta cần cấp nguồn 5V cho mạch hoạt động và nối chân Tx, Rx PL2303 với chân Tx, Rx PIC16F877A 1.2.3.Tính toán tham số : điện áp chuyển đổi từ AC sang DC -Dựa mạch nguyên lý chuyển đổi điện áp, ta có tính toán sau : -Tổng trơ cầu phân áp là : R = R1+R2+R3 = 100000+7500+100000 = 207500 (Ω) -Dòng điện qua cầu phân áp là : Imax = = = 1,5 (mA) -Điện áp rơi R2 là : U2max = R2*Imax = 7500*0,0015 = 11,25 (V) -Qua cầu chỉnh lưu thì mỗi chu kỳ sẽ có diode tham gia dẫn dòng nên lượng điện áp sụt sẽ là : 0,7*2 = 1,4 (V) =>Điện áp qua chỉnh lưu còn lại là : U2’max = 11,25 – 1,4 = 9,85 (V) -Lúc này, ta có R2 và R4 mắc song song với nên điện áp qua R4 là : U4max = = = 1,16 (V) -U4max = 1,16 (V) được đưa vào chân AN0 của PIC16F877A được tiến hành đo lường điện áp CHƯƠNG II : LẬP TRÌNH ĐO ĐIỆN ÁP SỬ DỤNG VI ĐIỀU KHIỂN PIC16F877A TRÊN PHẦN MỀM MICROC FOR PIC 2.1.Ý tưởng lập trình : - Sử dụng chuyển đổi ADC tại chân AN0 của vi điều khiển để chuyển đổi tín hiệu điện áp đầu vào Vin (tín hiệu tương tự) có dạng nửa sin dương sau chỉnh lưu, thành tín hiệu đầu (tín hiệu số) có dải từ 0-1023 (ADC 10 bit) -Sau đó áp dụng công thức, từ giá trị ADC đọc được ta có thể suy ngược lại giá trị Vin đầu vào sau: -Ở sử dụng điện áp tham chiếu nội nên Vref+ = VDD và Vref- = VSS hay chính bằng điện áp nguồn cấp cho vi điều khiển: 0-5 (V) Vin = ADC -Ta sẽ sử dụng biến Max để lưu trữ giá trị ADC lớn nhất mà ta đọc được vòng lặp for -Kết thúc vòng lặp for ta có được giá trị ADC lớn nhất, tiến hành chuyển đổi về Vin lớn nhất, rồi chuyển về giá trị điện áp tức thời lớn nhất Xong chia cho để giá trị hiệu dụng -Tiếp tới, nhiệm vụ của ta là gửi giá trị vừa tính toán được lên máy tính và hiển thị -Kết thúc chu kì làm việc Lặp lặp lại chu kì đó để kiểm tra chất lượng lưới điện 2.2.Lưu đồ thuật toán : Start trsC=0x00; trsA=0xFF; ADC_Init(); UART1_Init(9600); char i; char x[15]; float ADC,U,b,c, Max=0; i=0; ADC=ADC_get_sample(0); Delay_us(50); N ADC > Max Delay_ms(900) Y Max = ADC; U= Max.; b=U.2202/1.22; i++ c=b/2; intToStr(c,x); N Y i = 200 2.3.Code lập trình phần mềm MicroC for PIC : while(1) { UART_Write_Text(x); read_adc(); //Vòng lặp đọc giá trị adc liên tục Delay_ms(900); void read_adc() { char i; char x[15]; // Mảng x chứa 15 ký tự float ADC,U,b,c,Max=0; //Khai báo các biến for(i=0;i Max){Max = ADC;} //Tìm giá trị Max } U=Max*5/1023; //Chuyển đổi điện áp b=U*311.127/1.22; c = b/1.4142; intToStr(c, x); //Gắn C vao mảng x UART1_Write_Text(x); //Gửi dữ liệu lên máy tính } void main() 10 { trisC = 0x00; //Khai bao cổng C là cổng trisA = 0xff; //Khai báo cổng A là cổng vào ADC_Init(); //Khơi tạo ADC UART1_Init(9600); //Khơi tạo UART1 với tốc độ baud = 9600 } } CHƯƠNG : THIẾT KẾ GIAO DIỆN HIỂN THỊ ĐỒ THỊ ĐIỆN ÁP BẰNG PHẦN MỀM VISUAL STUDIO 11 3.1.Giao diện thiết kế Visual Studio : -Giới thiệu sơ lược về Visual Studio : Visual Studio là phần mềm hỗ trợ lập trình bằng nhiều ngôn ngữ C, C++, C#, VB Đây là phần mềm rất hay được ứng dụng để lập trình Ngôn ngữ lập trình C# là ngôn ngữ phổ biến được dùng, nhất là lập trình giao diện thì dùng C# thì rất tiện lợi và dễ sử dụng Vì vậy phần thiết kế giao diện cho mạch đo điện áp chúng em sử dụng lập trình C# -Giao diện thiết kế hình sau : Hình 3.1 Giao diện thiết kế C# Chức các nút : - Connect : kết nối với cổng COM 12 - Disconnect : ngắt kết nối với cổng COM - Cổng : Tên cổng COM - Baurd : tốc độ truyền - Exit : thoát khỏi chương trình - Trạng thái : thể hiện đã kết nối hay ngắt kết nối - Dữ liệu nhân được : dữ liệu truyền từ cổng COM lên - Chất lượng của lưới : hiển thị lưới đạt chuẩn hay không đạt chuẩn - Đồ thị đo điện áp : vẽ đồ thi điện áp 3.2 Code lập trình giao diện Visual Studio : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ZedGraph; using System.IO; using System.IO.Ports; using System.Xml; namespace dothi { public partial class Form1 : Form 13 { private ZedGraph.ZedGraphControl zeda; int dem,giatritrc; int t = 0; int tthat = 0; double[] z = new double[1000]; double[] k = new double[1000]; double[] g = new double[1000]; public Form1() { InitializeComponent(); } private void btnexit_Click(object sender, EventArgs e) { Application.Exit(); } private void btnconnect_Click(object sender, EventArgs e) { timer1.Enabled = true; if (!serialPort1.IsOpen) { serialPort1.PortName = txtcong.Text; serialPort1.Open(); serialPort1.BaudRate = Convert.ToInt32(txtbaurd.Text); txttrangthai.Text = "Đã kết nối"; } } 14 private void btndisconnect_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Close(); txttrangthai.Text = "Ngắt kết nối"; } } private void xuli() { txtcl.Text = "Lưới không đạt chuẩn"; } private void tinhtoan() { double[] x = new double[10]; double[] y = new double[10]; int i; if (giatritrc == 0) return; for (i = 0; i < 10; i++) { y[i] = giatritrc; x[i] = dem * 0.3; } zeda.GraphPane.AddCurve("", x, y, Color.Red, SymbolType.Square); for (i = 0; i < 1000; i++) if (i { //txtkq.Text = a.ToString(); try { t = Convert.ToInt32(a); } catch { return; } if (t < 100) return; if (t > 350) return; txtkq.Text = a.ToString(); tthat = t; if ((tthat > 225) || (tthat < 215)) xuli(); })); } CHƯƠNG : KẾT QUẢ THỰC NGHIỆM 17 Sau xây dựng sơ đồ lý thuyết và mô phỏng phần mềm proteus, chúng em tiến hành vẽ mạch in Altium và thu được kết quả sau: Hình 4.1 Mạch in sau vẽ altium Hình 4.2 Mạch in dạng 3D Sau đó chúng em tiến hành làm mạch và kết nối các phần tử với nhau, kết quả thu được sau: Hình 4.3 Mạch thực tế Kết nối với máy tính và kết quả thu được sau: 18 Hình 4.4 Đồ thị thu kết nối với máy tính Nhận xét: Kết quả thu được có dạng các hình vuông màu đỏ, biểu thị theo trục y là giá trị điện áp và trục x là khoảng thời gian lưới đạt giá trị theo trục y Nếu chấm đỏ nằm ngoài khu vực có vạch xanh thì chứng tỏ điện áp không nằm khoảng giá trị cho phép là 2% Vì vậy , ta có thể khảo sát được mức độ ổn định của điện áp Tài Liệu Tham Khảo 19 ************ [1] Datasheet PIC16F887A : http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf [2] MikroC & Proteus & PIC16F887A Tutorial : https://www.youtube.com/playlist?list=PLhFjtzzUovr_22rUHg566bYU5s8LDKk7f [3] https://www.youtube.com/watch?v=710T47wG_cI [4] http://www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi %E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t %C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/t%E1%BB%AB-pic-t%E1%BB %9Bi-dspic/67463-%C4%91o-%C4%91i%E1%BB%87n-%C3%A1p-xoay-chi%E1%BB %81u-d%C3%B9ng-vdk [5] http://mualinhkien.vn/chi-tiet-bv/huong-dan-ve-mach-bang-altium-designer.html Nhận Xét Của Giáo Viên 20 ... -Ta sử dụng chân ADC của PIC16F877A (loại 40DP) để đo lường giá trị điện áp được cấp từ khổi chuyển đổi điện áp -Đặc điểm bản của vi điều khiển PIC16F877A: +Bộ nhớ : 8K... = 1,16 (V) được đưa vào chân AN0 của PIC16F877A được tiến hành đo lường điện áp CHƯƠNG II : LẬP TRÌNH ĐO ĐIỆN ÁP SỬ DỤNG VI ĐIỀU KHIỂN PIC16F877A TRÊN PHẦN MỀM MICROC FOR PIC... tương tự, bộ capture 16 bit, bộ compare 16 bit, module PWM với độ phân giải là 10 bit -Trên PIC16F877A, ta cần cấp nguồn cho cả chân 12,31 (5V) và chân 11, 32 (0V) thì vi điều khiển