Upload
nguyen-ha-thanh-long
View
230
Download
4
Embed Size (px)
DESCRIPTION
mạch đo công suất & tần số có giao tiếp với máy tính
Citation preview
LI NI U
LI NI U
Ngy nay nhng ng dng ca vi iu khin i su vo i sng sinh hot v sn xut ca con ngi, l mt phn tt yu khng th thiu trong i sng hin i. Th k 21 c xem l th k ca khoa hc cng ngh, l th k m my mc c thit k v iu khin mt cch t ng thay th cc hot ng ca con ngi trong sn xut, cng nh phc v cc cng vic trong sinh hot. Trong t ng ha th cc mch vi x l nh l mt cng c c lc, quan trng, h tr con ngi thc hin nhng nhu cu ca mnh.
ang l sinh vin ang ngi trn gh nh trng, c hi tip cn, hc tp vi nhng cng ngh tin tin, hin i cha nhiu, nn trong qu trnh t hc v tm ti, nhm chng em tm hiu v PIC16F877A cng nh cc ng dng ca n trong cc h VXL. Vi nhng g tm hiu c, nhm chng em thc hnh thit k ng dng s dng VXL thit k mch o tn s v cng sut ca li in 220VAC. y l c hi tt cho chng em trau di kin thc thc t, p dng nhng l thuyt hc v rn luyn bn thn trong mi trng lm vic theo nhm.
Em xin chn thnh cm n thy gio Nguyn Hng Quang nhit tnh hng dn v cho nhng ghp kp thi n chng em trong sut qu trnh hc VXL nng cao v lm sn phm tht ny.
GII THIU CHUNG
ti: Thit k mch o tn s v cng sut ca li in 220VAC
Thi gian nhn ti : tun 6.
Thi gian np sn phm: tun 17.
Cc thnh vin trong nhm:
L Tin S
Nguyn H Thnh Long
Nguyn Thnh Trung
L Quang Hiu
Bi Vit Phng
Yu cu: o cng sut thit b v tn s ca li in 220Vdc
C IM K THUT
S dng Vi iu khin PIC16F877A.
S dng LCD 16x2 hin th kt qu o c.
Giao tip vi my tnh qua cng COM vi chun truyn thng RS232.
CC BC THC HIN
Trn tinh thn lm vic theo nhm, bn em phn chia cng vic v tin hnh nghin cu, thc hin phn cng vic m mnh c nhm giao.
a, Thit k mch nguyn l:
Vn :
thit k mt mch nguyn l cho ti ta t ra cc bc thc hin nh sau:
Thit k mch nguyn l gm cc khi no?
Phng n ti u cho thit k theo nguyn l?
Thit k cc khi cho mch nguyn l:
Khi ngun:
Vic s dng in p xoay chiu ly tn hiu vo nn ta ng thi lm b ngun cho mch s t ti u ha in nng s dng.
ly ngun t ngun xoay chiu ta dng b bin p nhiu u ra vi cc mc:
in p u vo l in p xoay chiu 220Vac
in p u ra ta ly cc mc in p xoay chiu 0Vdc, 6Vdc, 15Vdc.
Mch iu khin v mch to tn s yu cu cp ngun 5Vdc v 9Vdc. Nh vy to in p mt chiu t cc mc xoay chiu ta thc hin chnh lu hai na chu k v s dng IC 7809 v 7805 n p in p u ra cp cho mch.
S nguyn l cho khi ngun:
Khi vi iu khin v to tn hiu o tn s:
Khi vi iu khin gm chip PIC16f877a, b giao ng thch anh 20MHz, b reset v cng ISCP s dng np cho chip.
Khi to tn hiu o tn s gm LM324, cc tr, Transistor NPN.
S nguyn l cho khi vi iu khin v tn hiu o tn s:
Khi hin th LCD 16x2:
S dng LCD 4bits vi cc chn t D4-D7, hai chn RS v EN c ni vi chip PIC16F877A cho php LCD v reset LCD bin tr tinh chnh cho nt ca ch.
S nguyn l cho khi LCD 16x2: Khi truyn tin RS232:
Khi truyn tin s dng 4 t ha 1uF v IC Max232 cng cng Com Female 9 chn.
S nguyn l cho khi RS232:
Khi chun ha tn hiu u vo cho AD7755 v ly tn hiu ra:
S dng mt cap 8 chn ni mch AD7755 v cc chun u vo cng tn hiu ra, s dng bin dng CT100P ly tn hiu dng cho AD7755.
S nguyn l cho khi chun ha tn hiu u vo cho AD7755 v ly tn hiu ra:
Khi AD7755:
Khi AD7755 bao gm mt IC AD7755, b reset, b to dao ng, cap ni v cc t gm, t ha.
S nguyn l cho khi AD7755:
b, Thit k mch in (PCB)
Ta tch hai mch ring bit gm mt mch in dnh cho AD7755 s dng chip dn 24 chn v mt mch in cho khi cn li.
c, Lp trnh cho PIC 16F877A b Capture
CCP (Capture/Compare/PWM) bao gm cc thao tc trn cc xung m cung cp bi cc b m Timer1 v Timer2. PIC16F877A c tch hp sn hai khi CCP : CCP1 v CCP2.Mi CCP c mt thanh ghi 16 bit (CCPR1H:CCPR1L v CCPR2H:CCPR2L), pin iu khin dng cho khi CCPx l RC2/CCP1 v CCPy l RC1/T1OSI/CCP2.
C CCP1 v CCP2 v nguyn tc hot ng u ging nhau v chc nng ca tng khi l kh c lp. Tuy nhin trong mt s trng hp ngoi l CCP1 v CCP2 c kh nng phi hp vi nhau to ra cc hin tng c bit (Special event trigger) hoc cc tc ng ln Timer1 v Timer2. Cc trng hp ny c lit k trong bng sau:
Timer1:
Timer1 l b nh thi 16 bit, gi tr ca Timer1 s c lu trong hai thanh ghi (TMR1H:TMR1L). C ngt ca Timer1 l bit TMR1IF (PIR1).Bit iu khin ca Timer1 s l TMR1IE (PIE).
Cc thanh ghi lin quan n Timer1 bao gm:
- INTCON (a ch 0Bh, 8Bh, 10Bh, 18Bh): cho php ngt hot ng (GIE
v PEIE).
- PIR1 (a ch 0Ch): cha c ngt Timer1 (TMR1IF).
- PIE1( a ch 8Ch): cho php ngt Timer1 (TMR1IE).
- TMR1L (a ch 0Eh): cha gi tr 8 bit thp ca b m Timer1.
- TMR1H (a ch 0Eh): cha gi tr 8 bit cao ca b m Timer1.
- T1CON (a ch 10h): xc lp cc thng s cho Timer1.
S dng ngn ng CCS ta lp trnh cho b Capture nh sau:
#bit TMR1IF = 0x0C.0
int16 CCP1Value; // Gia tri CCP1 hien tai
int16 CCP1OldValue;// Gia tri CCP1 truoc do
int16 CCP2Value;//Gia tri CCP2 hien tai
int16 CCP2OldValue;// Gia tri CCP2 truoc do
BOOLEAN CCP1Captured;
BOOLEAN CCP2Captured;
float Capac,Freq;
int8 char1,char2,char3,char4,char5,char6,char7,char8;
#int_CCP1
void CCP1_isr()
{
if(TMR1IF)
{
CCP1Value = CCP_1 +(65535-CCP1OldValue);
CCP1OldValue = CCP_1;
TMR1IF=0;
}
else
{
CCP1Value = CCP_1 - CCP1OldValue;
CCP1OldValue = CCP_1;
}
CCP1Captured = TRUE;
}
#int_CCP2
void CCP2_isr()
{
if(TMR1IF)
{
CCP2Value = CCP_2 +(65535-CCP2OldValue);
CCP2OldValue = CCP_2;
TMR1IF=0;
}
else
{
CCP2Value = CCP_2 - CCP2OldValue;
CCP2OldValue = CCP_2;
}
CCP2Captured = TRUE;
}
//--------------------------------------------------------------------------
#int_TIMER1
void Timer1_isr()
{
if (RB0==1)
RB0=0;
else
RB0=1;
}
void Init_ccp(void)
{
SETUP_CCP1(CCP_CAPTURE_RE);
SETUP_CCP2(CCP_CAPTURE_RE);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8);
CCP1Value = 0;
CCP1OldValue = 0;
CCP2Value = 0;
CCP2OldValue = 0;
CCP1Captured = 1;
CCP2Captured = 1;
ENABLE_INTERRUPTS(INT_CCP1);//enable_interrupts(INT_TIMER1);
ENABLE_INTERRUPTS(INT_CCP2);//enable_interrupts(INT_TIMER1);
ENABLE_INTERRUPTS(GLOBAL);
}
void Convert_CCP1()
{
long temp;
int16 temp1,temp2;
Capac = 1.0/((float)CCP1Value*1.6e-6);
// F = 1/T
// Timer1 prescaler DIV_BY_8
// Pic16F877A 4MHz -> 0.000001 * 8 = 1uS * 8
// PIC16f877a 20MHz -> 0.0000002 * 8
temp = (long)Capac;
char1 = ((temp / 1000) + 0x30);
temp1 = (temp % 1000);
char2 = ((temp1 / 100) + 0x30);
temp2 = (temp1 % 100);
char3 = ((temp2 / 10) + 0x30);
char4 = ((temp2 % 10)+ 0x30);
}
void Convert_CCP2()
{
long temp3;
int16 temp4,temp5;
Freq = 1.0/((float)CCP2Value*1.6e-6);
temp3 = (long)Freq;
char5 = ((temp3 / 1000) + 0x30);
temp4 = (temp3 % 1000);
char6 = ((temp4 / 100) + 0x30);
temp5 = (temp4 % 100);
char7 = ((temp5 / 10) + 0x30);
char8 = ((temp5 % 10)+ 0x30);
}
d, Phn giao tip RS232 gia PIC16F877A vi my tnh nh giao din USARTYu cu ca giao din l gip giao tip trao i thng tin gia ngi dng vi pic. V l giao tip qua giao din UART nn phi thng nht gia my tnh v vi iu khin: tc baud(9600), khung truyn(s bit=8, khng c parity bit v stop bits =1). cho tin dng giao din ngi dng s c y cc thng s ci t cho ngi dng tha mi la chn.
V cch thc s dng giao din sau khi ci t cc tham s ph hp vi UART v kt ni th khi mun bit thng tin v tr s ca cng sut hay tn s ca dng in th nhn vo cc nt tng ng th k t tng ng vi cc nt s c gi xung(tn s l f,cng sut lp)vi x l, khi s nhn c cc gi tr tng ng hin th trn giao din .
y l 1 phn lp trnh trn vi iu khin thc hin chc nng ny:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)/* y l khai bo ci t cc thng s cho RS232 ni trn*/
#int_RDA
void Receive_Send_isr()
{
char c;
c=getc();
if(c=='p')
{
printf("%c%c%c%c",char1,char2,char3,char4);
}
if(c=='f')
{
printf("%c%c%c%c",char5,char6,char7,char8);
}
}
e, Giao din giao tip my tnh bng C#
hnh nh giao din
m ngun chng trnh:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Xml;
namespace VDK
{
public partial class Form1 : Form
{
SerialPort P = new SerialPort();
int a = 0;
int q = 0;
int p = 0;
int b = 0;
int k = 0;
int l = 0;
string InputData = String.Empty;
string InputData1 = String.Empty;
delegate void SetTextCallback(string text);
public Form1()
{
InitializeComponent();
string[] ports = SerialPort.GetPortNames();
comboBox1.Items.AddRange(ports);
P.ReadTimeout = 1000;
P.DataReceived += new SerialDataReceivedEventHandler(DataReceive);
string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };
comboBox2.Items.AddRange(BaudRate);
string[] Databits = { "6", "7", "8" };
comboBox3.Items.AddRange(Databits);
string[] Parity = { "None", "Odd", "Even" };
comboBox4.Items.AddRange(Parity);
string[] stopbit = { "1", "1.5", "2" };
comboBox5.Items.AddRange(stopbit);
}
private void Form1_Load(object sender, EventArgs e)
{
// button2.Enabled = false;
comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 3; // 9600
comboBox3.SelectedIndex = 2; // 8
comboBox4.SelectedIndex = 0; // None
comboBox5.SelectedIndex = 0; // None
status.Text = "Hy chn 1 cng COM kt ni.";
}
private void button3_Click(object sender, EventArgs e)
{
textBox1.Text = "";
textBox2.Text = "";
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (P.IsOpen)
{
P.Close();
}
P.BaudRate = Convert.ToInt32(comboBox2.Text);
}
private void comboBox4_SelectedIndexChanged(object sender, EventArgs e)
{
if (P.IsOpen)
{
P.Close();
}
switch (comboBox4.SelectedItem.ToString())
{
case "Odd":
P.Parity = Parity.Odd;
break;
case "None":
P.Parity = Parity.None;
break;
case "Even":
P.Parity = Parity.Even;
break;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (P.IsOpen)
{
P.Close();
}
P.PortName = comboBox1.SelectedItem.ToString();
}
private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
if (P.IsOpen)
{
P.Close();
}
P.DataBits = Convert.ToInt32(comboBox3.Text);
}
private void button1_Click(object sender, EventArgs e)
{
try
{
P.Open();
button2.Enabled = true;
button1.Enabled = false;
// Hin th Status
status.Text = "ang kt ni vi cng " + comboBox1.SelectedItem.ToString();
}
catch (Exception ex)
{
MessageBox.Show("Khng kt ni c.", "Th li", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button2_Click(object sender, EventArgs e)
{
P.Close();
button1.Enabled = true;
button2.Enabled = false;
status.Text = " Ngt Kt Ni";
}
private void textBox1_TextChanged_1(object sender, EventArgs e)
{
}
private void comboBox5_SelectedIndexChanged(object sender, EventArgs e)
{
if (P.IsOpen)
{
P.Close();
}
switch (comboBox5.SelectedItem.ToString())
{
case "1":
P.StopBits = StopBits.One;
break;
case "1.5":
P.StopBits = StopBits.OnePointFive;
break;
case "2":
P.StopBits = StopBits.Two;
break;
}
}
private void button4_Click(object sender, EventArgs e)
{
DialogResult kq = MessageBox.Show("Bn thc s mun thot", "VDK", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (kq == DialogResult.Yes)
{
MessageBox.Show("Cm n bn s dng chng trnh", "VDK");
this.Close();
}
}
private void toolStripStatusLabel1_Click(object sender, EventArgs e)
{
}
private void button6_Click(object sender, EventArgs e)
{
p = 0;
if (P.IsOpen)
{
P.Write("p");
a = 1;
b = 0;
textBox1.Text = "";
p = 0;
}
else MessageBox.Show("COM cha m.", "Thng bo", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private void DataReceive(object obj, SerialDataReceivedEventArgs e)
{
InputData = P.ReadExisting();
if (InputData != String.Empty)
{
SetText(InputData);
}
}
private void SetText(string text)
{
here:
if (a==1&&b==0)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text += text;
}
}
if(b==1&&a==0)
{
for (int i = 1; i < 100; i++) ;
if (this.textBox2.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox2.Text += text;
}
}
}
private void button5_Click(object sender, EventArgs e)
{
q = 0;
if (P.IsOpen)
{
P.Write("f");
a = 0;
b = 1;
textBox2.Text = "";
q = 0;
}
else MessageBox.Show("COM cha m.", "Thng bo", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private void label2_Click(object sender, EventArgs e)
{
}
private void label7_Click(object sender, EventArgs e)
{
}
}
}
KT QU T C
Qua thi gian nghin cu, tm ti v c s hng dn nhit tnh ca thy gio mn hc, nhm hon thnh c sn phm tht v cho chy.
( xem sn phm )
KT LUN
Sau thi gian di c gng tm hiu v nghin cu, nhm thu c nhng kt qu tt v tip thu c thm nhiu kin thc v kinh nghim v lm vic vi vi iu khin, vi x l, ng thi bit cch phn chia cng vic theo nhm v pht huy sc mnh lm vic chung. Hon thnh tt BTL l mt bc quan trng gip cc sinh vin p dng c nhng l thuyt trn ging ng vo thc t lm vic v sn xut.
TI LIU THAM KHO
Datasheet PIC16F877A.
Datasheet AD7755
Datasheet MAX232.
Datasheet LM324
Website: http://www.dientuvietnam.net/ Website: http://www.picvietnam.com/ Website: http://dtvt.org/