Tải bản đầy đủ (.docx) (20 trang)

BaoCao bài tập lớn VĐK dùng PIC16F877A

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (421.4 KB, 20 trang )

MỤC LỤC

Lời mơ đầu………………………………………………………………………...2
Chương 1 : 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…………………………….............3
1.2. Sơ đồ nguyên lý và tính toán tham số...………….…………………….......4
Chươ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………………………………………………...10
Chươ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……………………………………………………13
Chương 4 : 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

1


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 năng
được coi là một vấn đề thiết thực đối với các nhà máy công nghiệp, cơ 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ăng ổ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
trong nhà ơ, cơ quan, xí nghiệp,… từ đó,giảm thiệt hại về mặt kinh tế do sự cố
cung cấp điện năng gây ra.
Vì vậy,được sự hướng dẫn của thầy Võ Duy Thành, trong 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 năng.
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 4

2


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 duy trì điện
áp biến động đó rồi hiển thị lên đồ thị để đánh giá chất lượng điện năng.
-Thông số : +) Udm = 220 VAC+2%
+) ∆t min = 0.5s
-Sơ đồ khối tổng quan :

Hình 1.1. Sơ đồ khối tổng quan của đề 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ị trên đồ thị giao
diện được xây dựng bằng phần mềm trên máy tính để đánh giá chất lượng điện
năng.

3



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 chuyể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 đi qua trơ phân áp để thu được điện áp mong muốn, sau
cho đi 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 ra 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.

4


1.2.2.Khối đo lường và truyền thông :

Hình 1.3. Sơ đồ mạch đo lường và 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 cơ bản của vi điều khiển PIC16F877A:
+Bộ nhớ : 8K x 14 words of Flash Program Memory, 368 x 8 bytes RAM, 256 x 8
bytes EEPROM.
+5 PORT I/O với 33 chân I/O.
+Cung cấp 3 bộ Timer/Counter : Timer 0 : 8 bit, Timer 1 : 16 bit, Timer 2 : 8 bit.
+Hỗ trợ các chuẩn giao tiếp : USART, I2C, SPI,
+Chuyển đổi từ Analog sang Digital : 8 kênh ADC 10 bit.
+Cung cấp 2 bộ so sánh tương tự, 2 bộ capture 16 bit, 2 bộ compare 16 bit, module
PWM với độ phân giải là 10 bit.


5


-Trên PIC16F877A, ta cần cấp nguồn cho cả 2 chân 12,31 (5V) và 2 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
hơn. Ở đây, ta sử dụng thạch anh 20Mhz và 2 tụ lọc 33pF.
-Như đã giới thiệu, PIC16F877A cung cấp bộ ADC 10 bit, 8 kênh ngõ vào từ AN0AN7.Nếu sử dụng điện áp tham chiếu nội = 5V thì ra 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 ơ trên 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 2 chân Tx, Rx trên PL2303 với 2
chân Tx, Rx trên PIC16F877A.

1.2.3.Tính toán tham số : điện áp chuyển đổi từ AC sang DC

6


-Dựa trên mạch nguyên lý chuyển đổi điện áp, ta có tính toán như sau :
-Tổng trơ trên 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 trên R2 là :
U2max = R2*Imax = 7500*0,0015 = 11,25 (V)
-Qua cầu chỉnh lưu thì mỗi 1 chu kỳ sẽ có 2 diode tham gia dẫn dòng nên lượng

điện áp sụt đi 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 nhau 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
7


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 ra (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 như sau:
-Ở đây 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 trong
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 căn 2
để ra 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 1 chu kì làm việc. Lặp đi 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

8


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 trên phần mềm MicroC for PIC :
while(1) {

9

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<200;i++)

//Vòng lặp tìm giá trị Max

{
ADC = ADC_get_sample(0);
delay_us(50);

//Đọc giá trị ADC từ kênh số 0
// Tạm dừng 50us để đảm bảo ADC đọc hết

if(ADC > 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 ra

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 3 : 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ế trên 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à trong 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 trong 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ế như hình sau :

Hình 3.1. Giao diện thiết kế trên C#

Chức năng 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 trê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{
k[i] = 225;
z[i] = i;

15


g[i] = 215;
}
else
{
k[i] = 225;
z[i] = dem*0.3;
g[i] = 215;
}
zeda.GraphPane.AddCurve("", z, k, Color.Blue, SymbolType.None);
zeda.GraphPane.AddCurve("", z, g, Color.Blue, SymbolType.None);
zeda.AxisChange();
zeda.Invalidate();
}

private void timer1_Tick(object sender, EventArgs e)
{
if (giatritrc == tthat) dem++ ;
if (giatritrc != tthat)
{
tinhtoan();
giatritrc = tthat;
dem = 0;
}
}
private void Form1_Load(object sender, EventArgs e)
{
zeda.IsShowPointValues = true;
zeda.GraphPane.Title = "Đồ thị đo điện áp";
dem = 0;

16


giatritrc = 0;
}
private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
string a = serialPort1.ReadExisting();
if (a.Length==0) return ;
this.BeginInvoke(new Action(() =>
{
//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 4 : KẾT QUẢ THỰC NGHIỆM
17


Sau khi xây dựng sơ đồ lý thuyết và mô phỏng trên phần mềm proteus, chúng em
tiến hành vẽ mạch in trên Altium và thu được kết quả như sau:

Hình 4.1. Mạch in sau khi vẽ trên 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 như 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 như sau:

18


Hình 4.4. Đồ thị thu được khi 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 trong 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 :
/>[2] MikroC & Proteus & PIC16F887A Tutorial :
/>[3] />[4] />%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] />
Nhận Xét Của Giáo Viên

20




×