Transcript

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/