TÀI LIỆU HƯỚNG DẪN MẠCH ĐO DÒNG ACMạch điện giới thiệu cho Biến dòng Current transformer viết tắt là CT.. Cấu tạo Biến dòng CT: gồm 2 bên sơ cấp và thứ cấp.. Bên sơ cấp nhận 1 pha của đi
Trang 1TÀI LIỆU HƯỚNG DẪN MẠCH ĐO DÒNG AC
Mạch điện giới thiệu cho Biến dòng (Current transformer) viết tắt là CT.
Cấu tạo Biến dòng CT: gồm 2 bên sơ cấp và thứ cấp Bên sơ cấp nhận
1 pha của điện lưới qua tải
Bên thứ cấp là 1 vài vòng dây được quấn tỷ lệ với bên sơ cấp
Dựa vào tỷ lệ này ta có thể tính được điện áp biến đổi bên thứ cấp (Điện áp AC) Cần phải chỉnh lưu bằng Opamp sang Điện áp DC
Lý do dùng Opamp là do điện áp bên cuôn thứ cấp rất bé, tầm mV, do
đó cần dùng đến Opamp thì mới chỉnh lưu sang DC được Từ đó suy ngược ra dòng điện cần đo qua tải theo tỷ lệ của CT dùng ở đây là 1:10, nghĩa là cứ đo áp ra sau chỉnh lưu 1mV, thì dòng qua tải tương ứng là 1x10=10 mA
Từ ngõ ra của Opamp sau khi chỉnh lưu được áp DC, ta đưa vào bộ đọc ADC 10 bit của Vi điều khiển MSP430G2452 của Texas
Instrument.
Trang 2Đây là sơ đồ mạch chỉnh lưu áp áp AC tầm mV sang áp DC mV
Trang 3Phần tiếp theo là sơ đồ mạch điều khiển:
Mạch gồm có các phần:
1 Module nguồn hạ áp từ 5V xuống 3.3VDC cấp cho vi điều khiển MSP430G2452
2 Module LCD 16x2 giao tiếp MSP430G2452 theo giao thức 4 bit ( có 2 cách giao tiếp là mode 8 bit và mode 4 bit), 4 bit thì tiết kiệm chân cho vi điều khiển hơn.
3 Module nạp code cho MSP430G2452 thông qua đế nạp
4 Module ACS712T-20A (Vẽ thừa).
Trang 4Phần tiếp theo là code điều khiển :
Giải thích trong code
Code chính :
#include "msp430g2452.h"
#include "TVLCD.c"
float ketqua;
int
ch,dv,dong=0,ketqua1,ketqua2,ketqua3,ketqua4,ketqua5,ketqua6,ketqua7,ketqua8,ket qua9;
long adc,adc1,ti=0,tong=0;
int vr[3]; //Store adc values in this array
void hienthi();
void ok_lcd();
void chuyendoi(int m,float heso1,int heso2);
void main()
{
// Cau hinh ban dau
Trang 5//-stop watchdog timer
//-chay bang giao dong noi 1Mhz
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
// Dinh nghia cac chan P1.3->P1.7 la OUTPUT
P1DIR|=( BIT3+ BIT4+ BIT5+ BIT6 + BIT7);
// Dinh nghia cac chan P2 la OUTPUT
P2DIR=0XFF; P2SEL=0X00;
// Cau hinh ADC cho 3 chan P1.0->P1.2
ADC10CTL1 = INCH_2 + CONSEQ_3; // A2/A1/A0, repeat multi channel ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON;
ADC10AE0 = 0x07; // P1.0,1,2 ADC option select
ADC10DTC1 = 0x20; // 16 conversions
CCTL0 |= CCIE; // CCR0 interrupt disabled
CCR0 = 50000;
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode
TACTL|=TAIE;
_BIS_SR( GIE); // Enter interrupt
lcd_init();
put_cmd(clr_scr);
delay_cycles(50);
for(int i=0;i<10;i++)
{
put_cmd(line_1);
Trang 6lcd_putsf("Mach do dong AC,");
put_cmd(line_2);
lcd_putsf(" Xin chao ban ");
put_cmd(0x10);
delay_cycles(1000000);
}
while (1)
{
// Doc ADC cac chan P1.0->P1.3 O day chi su dung P1.0
//P1.0 la vr[2]; P1.1 la vr[1]; P1.2 la vr[0];
// Doc P1.0 luu gia tri vao bien : vr[2]
ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active ADC10SA = (unsigned int)vr; // Data buffer start
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion ready _NOP(); // space for debugger
_NOP(); // space for debugger
if (ti<1000)
{
tong=tong+vr[2];
ti++;
}
else
{
Trang 7tong=tong/1000;
dong = tong*10;
tong=0;
ti=0;
}
ok_lcd();
}
}
void ok_lcd()
{
chuyendoi(tong,3.3,1000);//P1.0 tai put_cmd(line_1);
lcd_putsf("Dong tai do duoc:");
put_cmd(line_2);
chuyendoi(dong,3.3,1000);//P1.0 tai lcd_putsf(" ");
lcd_putchar(ketqua1+48);
lcd_putchar(ketqua4+48);
Trang 8lcd_putchar(ketqua7+48);
lcd_putchar(ketqua9+48);
lcd_putsf("mA");
lcd_putsf(" ");
put_cmd(0x10);
delay_cycles(5000);
}
void chuyendoi(int m, float heso1, int heso2)
{
adc=m ;
adc1=adc*heso2;
ketqua=adc1*heso1/1023;
// ketqua1=ketqua/1000;//PHAN NGAN 1
ketqua1=(int) (ketqua/1000);//PHAN NGAN 1 //Uart_Array[6] = (int) (1000*( sen_data.accel_x ));
ketqua2=ketqua1*1000;
// ketqua3=ketqua-ketqua2;
ketqua3=(int) (ketqua-ketqua2);
ketqua4=ketqua3/100;//PHAN TRAM 4
ketqua5=ketqua4*100;
Trang 9ketqua6=ketqua3-ketqua5;
ketqua7=ketqua6/10;//PHAN CHUC 7
ketqua8=ketqua7*10;
ketqua9=ketqua6-ketqua8;//PHAN DON VI 9
}
Code Phụ (Thư viện LCD) :
File : TVLCD.h
//*******************dinh nghia bit************************ typedef unsigned char uchar;
union reg
{ unsigned char _byte; //khai bao 1byte
struct bit
{ //dinh nghia bit trong byte vua khai bao
unsigned char b0:1; //bit 0 trong byte
unsigned char b1:1; //bit 1 trong byte
unsigned char b2:1; //bit 2 trong byte
unsigned char b3:1; //bit 3 trong byte
unsigned char b4:1; //bit 4 trong byte
unsigned char b5:1; //bit 5 trong byte
unsigned char b6:1; //bit 6 trong byte
unsigned char b7:1; //bit 7 trong byte
} _bit;
};
union reg* P2_dir=(union reg*)0x2a; //khai bao dia chi o nho
Trang 10union reg* P2_out=(union reg*)0x29;
union reg* P2_sel=(union reg*)0x2e;
union reg* P2_in=(union reg*)0x28;
union reg* P1_sel=(union reg*)0x26;
union reg* P1_dir=(union reg*)0x22; //khai bao dia chi o nho
union reg* P1_out=(union reg*)0x21;
union reg* P1_in=(union reg*)0x20;
//**************************define
Pin_LCD*******************
#define RS P2_out->_bit.b0 //0 >thanh ghi lenh lenh;1 >thanh ghi data
#define EN P2_out->_bit.b1 //phan biet giua 2lan gui data
#define DATA_4 P2_out->_bit.b2
#define DATA_5 P2_out->_bit.b3
#define DATA_6 P2_out->_bit.b4
#define DATA_7 P2_out->_bit.b5
#define line_1 0x80
#define line_2 0xC0
#define clr_scr 0x01
//********************delay************************
void delay(unsigned long int t);
Trang 11//********************LCD Funtion*********************** //********************tao
xung*******************************************
void enable();
//**********convert data >send to Pin of
microcontrol****************************
void set_data_lsb(unsigned char data); //ham gui byte data thap
void set_data_msb(unsigned char data); //ham gui byte data cao
//************************HAM GUI
LENH******************************************
void put_cmd(unsigned char cmd);
//**************************ham gui
data*************************************
void lcd_putchar(unsigned char data);
void lcd_putsf(uchar *s);
//****************HTLCD********************************
****************
Trang 12//****************************ham khoi tao
lcd*************************
void lcd_init();
//************************************************
TVLCD.c
#include "TVLCD.h"
//********************delay************************
void delay(unsigned long int t)
{
unsigned long int i=0;
for(i=0;i<t;i++);
}
//********************LCD Funtion*********************** //********************tao
xung*******************************************
void enable()
{
EN=1;
delay(10);
EN=0;
delay(20);
}
//**********convert data >send to Pin of
microcontrol****************************
void set_data_lsb(unsigned char data) //ham gui byte data thap
Trang 13unsigned char convert=0;
convert=data&0x01;
if(convert==0x01)DATA_4=1;
else DATA_4=0;
convert=data&0x02;
if(convert==0x02)DATA_5=1;
else DATA_5=0;
convert=data&0x04;
if(convert==0x04)DATA_6=1;
else DATA_6=0;
convert=data&0x08;
if(convert==0x08)DATA_7=1;
else DATA_7=0;
}
void set_data_msb(unsigned char data) //ham gui byte data cao {
unsigned char convert=0;
convert=data&0x10;
if(convert==0x10)DATA_4=1;
else DATA_4=0;
convert=data&0x20;
Trang 14if(convert==0x20)DATA_5=1;
else DATA_5=0;
convert=data&0x40;
if(convert==0x40)DATA_6=1;
else DATA_6=0;
convert=data&0x80;
if(convert==0x80)DATA_7=1;
else DATA_7=0;
}
//************************HAM GUI
LENH****************************************** void put_cmd(unsigned char cmd)
{
RS=0; //chon thanh ghi lenh
set_data_msb(cmd);
enable();
set_data_lsb(cmd);
enable();
}
//**************************ham gui
data*************************************
void lcd_putchar(unsigned char data)
{
RS=1;
Trang 15set_data_msb(data);
enable();
set_data_lsb(data);
enable();
}
void lcd_putsf(uchar *s)
{
while(*s)
{
lcd_putchar(*s);
s++;
};
}
//****************HTLCD********************************
****************
//****************************ham khoi tao
lcd*************************
void lcd_init()
{
delay(100);
RS=0; // che do gui lenh
set_data_lsb(0x03);
Trang 16enable();
enable();
enable();
set_data_lsb(0x02);
enable();
put_cmd ( 0x28 ); //cd 4bit,2dong,5x7
put_cmd ( 0x0C); //bat hien thi,tat con tro
put_cmd ( 0x06 ); //* entry mode set, increment & scroll left put_cmd ( 0x01 ); //* clear display
}
//************************************************
Chúc bạn thành công !