Sunteți pe pagina 1din 6

Senzori de curent cu efect Hall.

Senzorul ACS755xCB-050

Senzorul este constituit dintr-un circuit Hall liniar de precizie, cu decalaj redus, cu o
cale de conducție de cupru situată în apropierea chip-ului. Curentul aplicat care curge prin
această cale de conducție de cupru generează un câmp magnetic pe care circuitul Hall IC
transformă într-o tensiune proporțională. Precizia senzorului este optimizată prin
apropierea semnalului magnetic de traductorul Hall. O tensiune precisă, proporțională este
furnizată de IC-ul BiCMOS Hall cu offset scăzut, stabilizat cu chopper, care este programat
pentru precizie din fabrică. Ieșirea senzorului va fi activată atunci când un curent trece prin
calea de conducție primară de cupru de la borna 4 la borna 5, care este calea utilizată
pentru eșantionarea curentului. Rezistența internă a acestei căi conductive este tipică de
100 μΩ, determinând pierderi de putere reduse. [1]

Figura 1 Schema de aplicaţie pentru circuitul ACS755xCB-050

1
Circuitul de condiţionare

Figura 2 Circuitul de condiţionare al senzorului ACS755xCB-050

Figura 3 Configuraţia pinilor senzorului ACS755xCB-050

2
Figura 4 Caracteristica senzorului ACS755xCB-050

Figure 5 schema Proteus pentru testarea senzorului ACS755xCB-050

OBS: de analizat funcţionarea senzorului în regim dinamic

3
De verificat cu osciloscopul parametrii dinamici din fisa tehnică;

#include <xc.h>
#include <string.h>
__PROG_CONFIG(1,0x3FE4); // config. uC (WDT=dis|OSC=int)
__PROG_CONFIG(2,0x3EFF); // config. uC (PLL (OSC*4)=off) pag. 130 pdf. PIC16LF1937
unsigned char a, b=0, rec_var;
unsigned char v[10] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
char *logo = (char *) "\r\n Counter = ";
void init (void);
void interrupt ia2(void); // interrupts function
void send_string(const char *buffer, int size);
unsigned int read_adc(void);
void send_char (char);

char rez_ADC;
char rez_ADC_H, rez_ADC_L;

void main(void)
{
init();
while (1) // infinite loop
{

if(a >= 2) // period = 2*50ms=0.1sec.


{
a = 0; //
rez_ADC = read_adc();
if(b>9) b=0; //

send_char(rez_ADC);
}

}
}
void init (void)
{
OSCCON=0x73; //
ANSELA = 0xF0; // RA0-RA3=output; RA3-RA7 = analog
TRISA = 0x00; //
PORTA = 0x00; //
ANSELB = 0x00; //
TRISB = 0x00; //
PORTB = 0x00; //
TRISC = 0b10111111; // RC7=RX=in || RC6=TX=out
PORTC = 0x00; //
/*start UART initialization, without INTERRUPT*/
SPBRG = 12; // Baud Rate

4
TXEN = 1; // Serial Trasmit Enable
BRGH = 0; // High Baud Rate Transmission
SPEN = 1; // Serial Port Enabled
CREN = 1; // Continuous Receive Enable bit
BRG16 = 0; // 16-bit Baud Rate Generator bit
SYNC = 0; // EUSART Mode Select bit [0=Asynchronous mode]
/*end UART initialization*/
T1CON = 0x11; // initializarea Timer T1
// (Fosc/4); prescaler 1:2 => Fosc_timer1=1MHz(T=1us)

ADCON0 = 0x11; // AN4, Enable ADC


ADCON1 = 0x60; // Fosc/64; result Left justified

TMR1IE = 1; //
PEIE = 1; //
GIE = 1; //
}
void interrupt ia2(void) // every 50ms !!!
{ //
if(TMR1IF) // timerul T1 a generat intreruperea ?
{
TMR1IF = 0; //
TMR1H = 0x3C; // 65535us-50000us=15535us=3CAF
TMR1L = 0xAF; // (50000us=50ms)
a++; //
}
}

unsigned int read_adc(void)


{
GO_nDONE = 1; // START ADC conversion ADC
while(GO_nDONE); // wait until ADC conversion is done (pdf pag. 137)
return ADRESH; // read (return) high byte ADRESH only
}

void send_char (char Tx_char)


{

char char_H, char_L;

char_H= (Tx_char & 0xF0)>>4;

if(char_H <= 9)
char_H|=0x30;
else
char_H=(char_H-9)|0x40;

char_L= (Tx_char & 0x0F);


if(char_L <= 9)
char_L|=0x30;

5
else
char_L=(char_L-9)|0x40;

TXREG = char_H;
while(!TXIF);
TXREG = char_L;
while(!TXIF);
TXREG = 0x0D;
while(!TXIF);

REFERINŢE

1. http://www.allegromicro.com/~/media/Files/Datasheets/ACS755-050-Datasheet.ashx

S-ar putea să vă placă și