Ingo Electronics

  • Home                                                                                                                                    


                                                                                                                     Projekto Archyvas  Download this Project
                                                                                                                                                                                           

 MAX9611 testavimas ir programos kodas   

MAX9611 pasižymi tuom , kad į jos analoginį iėjimą (RS+) galima tiesiogiai paduoti iki 60V įtampą (ground atžvilgiu) ,
nenaudojant jokių įtampos daliklių. 

Pilna įtampos matavimo skalė yra 57,33V su 14mV rezoliucija. 

MAX9611 turi trijų programuojamų diapazonų srovės sensorių. 

Srovės šunto pilna matavimo skalė programuojant gali būti nustatoma 440mV, 110mV ir 55mV. 

Srovės sensorius yra jautrus aukšto dažnio trugžiams, einantiems per maitinimo grandines, todėl jei schemoje yra impulsinis
maitinimo šaltinis, reikia imtis priemonių šiems trukdžiams pašalinti. 
Tai gali buti tinkamas maitinimo “graund” suformavimas,blokuojančių kondensatorių ir induktyvumų įvedimas į schemą. 

I2C interfeisas ir 12bit ADC 

Gali buti naudojama įvairiuose kontrolės, matavimo ir valdymo įrenginiuose. 

MAX9611 yra valdoma įrašant atitinkamą 8bitų kodą į jos Control Registrą . 

MAX9611 turi penkis 12bitų AD konvertavimo duomenų nuskaitymo registrus, t.y gali būti nuskaitomi penki parametrai. 

SET įėjimas, be kitų funkcijų, gali tarnauti kaip pagalbinis analoginis įėjimas. 

SET įėjimo matavimo skalė yra 1,1V. MAX9611 taip pat turi kitų papildomų funkcijų, kurios yra pateiktos šios mikroschemos aprašyme. 

Patogu parinkti šuntą , kad tekant 1A srovei, įtampos kritimas ant šunto būtų 0,1075V, matom kad reikalinga šunto varža 0,1075 om. 

Šuntą galimą padaryti įvairiais būdais, šiuom atveju galima paimti standartine 0,15om varža ir jai lygiagrečiai prijungti dar dvi varžas po 1om, paskaičiavus gautume 0,1153, įvertinus šių varžų tikslumą, realiai gautume pakankamai artimą 0,1075 om rezultatą. Pilna srovės matavimo skalė tuomet būtų 4,095V


MAX9611 testavimo schema


Žemiau yra pateikiami mikrovaldiklio programavimo kodai, kurie yra išbandyti ir veikiantis, juos

galima naudoti savo nuožiūra, arba kaip pavyzdį  išeities kodo programavimui.

Programos kodas parašytas naudojant mikroC PRO for PIC v.4.64 . Kodas nesunkiai gali buti

pritaikomas visiems mikrovaldikliams.

pagrindinė main funkcija


#include  "MAX9611_LIB.c"

#include  "LCD_display_MAX9611.c"

// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections

#define  led    RA0_bit

unsigned int temp_data;




////////////////////////////////////////////////////////////////////////////////
void main() {
ADCON0 = 0;                 // A/D CONTROL REGISTER 0 - Turn off ADC
ADCON1 = 0b00001111;        // A/D Port Configuration Control bits: All analog inputs disenabled

CMCON = 0b00000111;         //COMPARATOR CONTROL REGISTER - Disbale comparators
RCSTA = 0;                  //Serial RECEIVE STATUS AND CONTROL REGISTER
UCON  = 0;                  //USB CONTROL REGISTER
UCFG  = 0b00001000;         //USB CONFIGURATION REGISTER

TRISA = 0b000000000;
TRISB = 0b000000000;
TRISC = 0b000000000;
TRISD = 0b000000000;
TRISE = 0b000000000;

PORTA = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;
PORTE=  0;
//---------------------------------

I2C1_Init(100000);

//---------------------------------
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);               // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
//---------------------------------
 
Lcd_Out(1, 5, "MAX9611");

delay_ms(1000);



Lcd_Out(2, 6, "READY");

delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR);


while(1){

led = ~led;
delay_ms(500);

MAX9611_setup(control_reg_1,MAX9611_temperature);
delay_ms(4);
temp_data =  MAX9611_read(temperature);
temp_data =  MAX9611_temperature_converter(temp_data) ;
display_MAX96111_temperature(2,1,temp_data);


MAX9611_setup(control_reg_1,MAX9611_RS);
delay_ms(4);
temp_data =  MAX9611_read(rs_voltage);
temp_data =  MAX9611_RS_converter(temp_data) ;
display_MAX96111_RS(1,2,temp_data);

MAX9611_setup(control_reg_1,MAX9611_sensor_1x);
delay_ms(4);
temp_data =  MAX9611_read(current_sensor);
temp_data =  MAX9611_sense_converter(temp_data);
display_MAX96111_amps(1,10,temp_data);



} //end while


} //end main