C
chanchal.chauhan
Guest
Hej,
Jeg bruger PIC 18F1330 microcontroller til min batteriopladning ansøgning.
Her er jeg kontrollerende Batteri strøm i CC mode & Batterispænding i CV-tilstand i lukket kredsløb.
Men her i CV-mode mit batteri nuværende & Pulse er varierende.
Nedenfor er nærmere oplysninger om min kode.
# include <htc.h>
void osc_init ();
void delay (unsigned int k);
void adc_init ();
void read_volt ();
void read_current ();
void pwm_init ();
lang Multiplication16bit (int Mutiplicand, int Multiplier);
const unsigned int ref_voltage = 2867; / / 14.0v
const unsigned int ref_voltage1 = 2847; / / 13.9V
const unsigned int ref_current = 1332; / / 6.5Amps
unsigned int duty_cycle = 9.280, duty_cycle1 = 960;
void main ()
(
lang vinde, gain2;
unsigned int gain1, gain3;
TRISB = 0b00000000;
TRISA = 0b01010011;
osc_init (); / / 16MHz indre ocillator
adc_init (); / / ADC init
while (1)
(
read_volt (); / / Vs
gevinst = Multiplication16bit (adc_voltage, 666);
gevinst = vinde * 5;
gain1 = få>> 10; / / Batterispænding
read_current ();// Is
gain2 = Multiplication16bit (adc_current, 360);
gain2 = gain2 * 5;
gain3 = gain2>> 10; / / Batteri nuværende
if (gain1> = ref_voltage) / /
(
flag = 1;
if (gain1 == ref_voltage)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
else / / CC Mode
(
if (gain3> = ref_current)
(
flag = 0;
if (gain3 == ref_current)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
anden
(
if (flag == 1)
(
duty_cycle;
duty_cycle1;
if (gain1 <ref_voltage1) / / ref_voltage1
(
- duty_cycle;
duty_cycle1;
)
)
anden
(
- duty_cycle;
duty_cycle1;
)
)
)
if (duty_cycle> = 9728)
(
duty_cycle = 9.728;
duty_cycle1 = 512 / / 480
)
if (duty_cycle <= 6400)
(
duty_cycle = 6.400; / / 6.399
duty_cycle1 = 3.840;
)
pwm_init (); / / PWM initilisation
)
)
void adc_init ()
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000;
)
void read_volt ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000; / / AN0 spænding
Adon = 1;
GODONE = 1;
while (GODONE) continue;
/ / GODONE = 0;
ADIF = 0;
adc_voltage = 0;
adc_voltage = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" />
ADRESL;
result_temp = adc_voltage result_temp;
)
adc_voltage = result_temp/16;
result_temp = 0;
)
void read_current ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000100; / / AN1 nuværende
Adon = 1;
GODONE = 1;
while (GODONE) continue;
ADIF = 0;
adc_current = 0;
adc_current = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" />
ADRESL;
result_temp1 = adc_current result_temp1;
)
adc_current = result_temp1/16;
result_temp1 = 0;
/ / Flag = 1;
)Enhver hjælp er meget anerkendende.
Hilsen
ChanchalLagt efter 2 minutter:chanchal.chauhan skrev:
Hej,Jeg bruger PIC 18F1330 microcontroller til min batteriopladning ansøgning.
Her er jeg kontrollerende Batteri strøm i CC mode & Batterispænding i CV-tilstand i lukket kredsløb.
Men her i CV-mode mit batteri nuværende & Pulse er varierende.Nedenfor er nærmere oplysninger om min kode.# include <htc.h>void osc_init ();
void delay (unsigned int k);
void adc_init ();
void read_volt ();
void read_current ();
void pwm_init ();
lang Multiplication16bit (int Mutiplicand, int Multiplier);const unsigned int ref_voltage = 2867; / / 14.0v
const unsigned int ref_voltage1 = 2847; / / 13.9V
const unsigned int ref_current = 1332; / / 6.5Amps
unsigned int duty_cycle = 9.280, duty_cycle1 = 960;
void main ()
(
lang vinde, gain2;
unsigned int gain1, gain3;
TRISB = 0b00000000;
TRISA = 0b01010011;
osc_init (); / / 16MHz indre ocillator
adc_init (); / / ADC init
while (1)
(
read_volt (); / / Vs
gevinst = Multiplication16bit (adc_voltage, 666);
gevinst = vinde * 5;
gain1 = få>> 10; / / Batterispænding
read_current ();// Is
gain2 = Multiplication16bit (adc_current, 360);
gain2 = gain2 * 5;
gain3 = gain2>> 10; / / Batteri nuværende
if (gain1> = ref_voltage) / /
(
flag = 1;
if (gain1 == ref_voltage)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
else / / CC Mode
(
if (gain3> = ref_current)
(
flag = 0;
if (gain3 == ref_current)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
anden
(
if (flag == 1)
(
duty_cycle;
duty_cycle1;
if (gain1 <ref_voltage1) / / ref_voltage1
(
- duty_cycle;
duty_cycle1;
)
)
anden
(
- duty_cycle;
duty_cycle1;
)
)
)if (duty_cycle> = 9728)
(
duty_cycle = 9.728;
duty_cycle1 = 512 / / 480
)
if (duty_cycle <= 6400)
(
duty_cycle = 6.400; / / 6.399
duty_cycle1 = 3.840;
)
pwm_init (); / / PWM initilisation
)
)void adc_init ()
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000![Wink ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
void read_volt ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000; / / AN0 spænding
Adon = 1;
GODONE = 1;
while (GODONE) continue;
/ / GODONE = 0;
ADIF = 0;
adc_voltage = 0;
adc_voltage = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" /> ADRESL;
result_temp = adc_voltage result_temp;
)
adc_voltage = result_temp/16;
result_temp = 0![Wink ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
void read_current ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000100; / / AN1 nuværende
Adon = 1;
GODONE = 1;
while (GODONE) continue;
ADIF = 0;
adc_current = 0;
adc_current = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" /> ADRESL;
result_temp1 = adc_current result_temp1;
)
adc_current = result_temp1/16;
result_temp1 = 0;
/ / Flag = 1;
)Enhver hjælp er meget anerkendende.Hilsen
Chanchal
Jeg bruger PIC 18F1330 microcontroller til min batteriopladning ansøgning.
Her er jeg kontrollerende Batteri strøm i CC mode & Batterispænding i CV-tilstand i lukket kredsløb.
Men her i CV-mode mit batteri nuværende & Pulse er varierende.
Nedenfor er nærmere oplysninger om min kode.
# include <htc.h>
void osc_init ();
void delay (unsigned int k);
void adc_init ();
void read_volt ();
void read_current ();
void pwm_init ();
lang Multiplication16bit (int Mutiplicand, int Multiplier);
const unsigned int ref_voltage = 2867; / / 14.0v
const unsigned int ref_voltage1 = 2847; / / 13.9V
const unsigned int ref_current = 1332; / / 6.5Amps
unsigned int duty_cycle = 9.280, duty_cycle1 = 960;
void main ()
(
lang vinde, gain2;
unsigned int gain1, gain3;
TRISB = 0b00000000;
TRISA = 0b01010011;
osc_init (); / / 16MHz indre ocillator
adc_init (); / / ADC init
while (1)
(
read_volt (); / / Vs
gevinst = Multiplication16bit (adc_voltage, 666);
gevinst = vinde * 5;
gain1 = få>> 10; / / Batterispænding
read_current ();// Is
gain2 = Multiplication16bit (adc_current, 360);
gain2 = gain2 * 5;
gain3 = gain2>> 10; / / Batteri nuværende
if (gain1> = ref_voltage) / /
(
flag = 1;
if (gain1 == ref_voltage)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
else / / CC Mode
(
if (gain3> = ref_current)
(
flag = 0;
if (gain3 == ref_current)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
anden
(
if (flag == 1)
(
duty_cycle;
duty_cycle1;
if (gain1 <ref_voltage1) / / ref_voltage1
(
- duty_cycle;
duty_cycle1;
)
)
anden
(
- duty_cycle;
duty_cycle1;
)
)
)
if (duty_cycle> = 9728)
(
duty_cycle = 9.728;
duty_cycle1 = 512 / / 480
)
if (duty_cycle <= 6400)
(
duty_cycle = 6.400; / / 6.399
duty_cycle1 = 3.840;
)
pwm_init (); / / PWM initilisation
)
)
void adc_init ()
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000;
)
void read_volt ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000; / / AN0 spænding
Adon = 1;
GODONE = 1;
while (GODONE) continue;
/ / GODONE = 0;
ADIF = 0;
adc_voltage = 0;
adc_voltage = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" />
ADRESL;
result_temp = adc_voltage result_temp;
)
adc_voltage = result_temp/16;
result_temp = 0;
)
void read_current ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000100; / / AN1 nuværende
Adon = 1;
GODONE = 1;
while (GODONE) continue;
ADIF = 0;
adc_current = 0;
adc_current = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" />
ADRESL;
result_temp1 = adc_current result_temp1;
)
adc_current = result_temp1/16;
result_temp1 = 0;
/ / Flag = 1;
)Enhver hjælp er meget anerkendende.
Hilsen
ChanchalLagt efter 2 minutter:chanchal.chauhan skrev:
Hej,Jeg bruger PIC 18F1330 microcontroller til min batteriopladning ansøgning.
Her er jeg kontrollerende Batteri strøm i CC mode & Batterispænding i CV-tilstand i lukket kredsløb.
Men her i CV-mode mit batteri nuværende & Pulse er varierende.Nedenfor er nærmere oplysninger om min kode.# include <htc.h>void osc_init ();
void delay (unsigned int k);
void adc_init ();
void read_volt ();
void read_current ();
void pwm_init ();
lang Multiplication16bit (int Mutiplicand, int Multiplier);const unsigned int ref_voltage = 2867; / / 14.0v
const unsigned int ref_voltage1 = 2847; / / 13.9V
const unsigned int ref_current = 1332; / / 6.5Amps
unsigned int duty_cycle = 9.280, duty_cycle1 = 960;
void main ()
(
lang vinde, gain2;
unsigned int gain1, gain3;
TRISB = 0b00000000;
TRISA = 0b01010011;
osc_init (); / / 16MHz indre ocillator
adc_init (); / / ADC init
while (1)
(
read_volt (); / / Vs
gevinst = Multiplication16bit (adc_voltage, 666);
gevinst = vinde * 5;
gain1 = få>> 10; / / Batterispænding
read_current ();// Is
gain2 = Multiplication16bit (adc_current, 360);
gain2 = gain2 * 5;
gain3 = gain2>> 10; / / Batteri nuværende
if (gain1> = ref_voltage) / /
(
flag = 1;
if (gain1 == ref_voltage)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
else / / CC Mode
(
if (gain3> = ref_current)
(
flag = 0;
if (gain3 == ref_current)
(
duty_cycle;
duty_cycle1;
)
anden
(
duty_cycle; / / Gåned
- duty_cycle1;
)
)
anden
(
if (flag == 1)
(
duty_cycle;
duty_cycle1;
if (gain1 <ref_voltage1) / / ref_voltage1
(
- duty_cycle;
duty_cycle1;
)
)
anden
(
- duty_cycle;
duty_cycle1;
)
)
)if (duty_cycle> = 9728)
(
duty_cycle = 9.728;
duty_cycle1 = 512 / / 480
)
if (duty_cycle <= 6400)
(
duty_cycle = 6.400; / / 6.399
duty_cycle1 = 3.840;
)
pwm_init (); / / PWM initilisation
)
)void adc_init ()
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000
void read_volt ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000000; / / AN0 spænding
Adon = 1;
GODONE = 1;
while (GODONE) continue;
/ / GODONE = 0;
ADIF = 0;
adc_voltage = 0;
adc_voltage = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" /> ADRESL;
result_temp = adc_voltage result_temp;
)
adc_voltage = result_temp/16;
result_temp = 0
void read_current ()
(
i = 0;
for (i = 0; i <16; i ) / / Gennemsnitsberegnings 16 gange
(
ADCON1 = 0b00001100;
ADCON2 = 0b10001010; / / Tacq = 1.2usec
ADCON0 = 0b00000100; / / AN1 nuværende
Adon = 1;
GODONE = 1;
while (GODONE) continue;
ADIF = 0;
adc_current = 0;
adc_current = (ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" /> ADRESL;
result_temp1 = adc_current result_temp1;
)
adc_current = result_temp1/16;
result_temp1 = 0;
/ / Flag = 1;
)Enhver hjælp er meget anerkendende.Hilsen
Chanchal