|
发表于 2019-7-12 17:28:29
|
显示全部楼层
|
电池单节设定2.9v~3.70v超范围关mos 管,双节电压5.8v~7.4v超范围关mos 管。
电压采集比较费劲,差分放大分别测量单体电池电压,最后串联采集电压。
芯片用pic16f676 10位ad转换。
c程序
/*
**********/
#include
__config(0x3bb1);
#define uchar unsigned char
#define uint unsigned int
void delay_ms(uint xms);
//void compare(int x);
void timer1_init();
void port_init();
void caiji (void );
void didi_n(uint k);
#define led rc3
#define k rc4
//int sdz=96;//382 //设定值
//uchar fw =24;// 96 //范围
uchar counter=0;
uchar con1=0;
uchar con2=0;
uchar con3=0;
char f=0;
char w1=0;
char w2=0;
char w3=0;
char a1=0;
char a2=0;
char a3=0;
//uchar a4=0;
//uchar const seg_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳极
/************短延时函数******************/
/*******didi*******/
void didi_n(uint k)
{
trisc&=0xfe;
char m;
for(m=k;m>0;m--)
{
rc1=1;
delay_ms(300);
rc1=0;
delay_ms(200);
}
}
/****************************/
/************延时函数******************/
void delay_ms(uint xms)
{
int i,j;
for(i=0;i
{
for(j=0;j<71;j );}
}
/**********数制转换函数*********/
void conv(int x)
{
float temp;
//temp=x*5.0/255;
temp=(x*5.0/1023);
}
/*********显示函数**********/
void timer1_init()
{
gie=1;
peie=1;
t1ckps0=1;t1ckps1=1; //1:8
tmr1cs=0;
tmr1ie=1;
tmr1on=1;
tmr1ge=0;
t1oscen=1;
tmr1h=0xfb;
tmr1l=0x1e;
}
/************t0**********/
void interrupt isr(void)
{
if(tmr1if==1)
{
//tmr1ge=0;
tmr1if=0;
tmr1h=0xfb;
tmr1l=0x1e;
if( counter>=200)
{
// led=~led;
f=1;
counter=0;
}
}
}
/************port_init**********/
void port_init()
{
porta=0xf0;
trisa=0xff;
ansel=0x07;
trisc=0x00;
portc=0x00;
// adcon0=0x41;
}
/*************主函数***********/
void main()
{
port_init();
led=1;
k=0;
delay_ms(500);
led=0;
delay_ms(500);
didi_n(5);
timer1_init();
//caiji ( );
while(1)
{
caiji ( );
if(f==1)
{
f=0;
led=1;
delay_ms(100);
if( con1>=2)
{
// led=~led;
w1=1;
con1=0;
}
if( con2>=4)
{
// led=~led;
w2=1;
con2=0;
w1=0;
}
}
if( con3>=6)
{
// led=~led;
w3=1;
con3=0;
w1=0;
w2=0;
}
else led=0;
if(((a1==1)&&(a2==1))&&(a3==1))
{ k=1;rc2=1;}
else
{
k=0;
rc2=0;
}
/**************
if(k==0)
{
delay_ms(20);
if( a4>200)
didi_n(2);
}
*****************/
}
}
/******************************/
void caiji (void )
{
if(w1==1)
{
int result=0x00;
w1=0;
adcon1=0x10;//8分频
adcon0=0x81;//a0通道,右对齐,内部参考电压
char i;
result=0x00; //转换结果清零
for(i=3;i>0;i--)
{
go_done=1; //开启转换
while(go_done); //等待转换完成
result=result adresl adresh*256;//累计转换结果
}
result=result/3; //求5次结果平均值
if((result<757)&&(result>590))
{
a1=1;
}
else
{
// k=1;
a1=0;
}
}
if(w2==1)
{
int result=0x00;
w2=0;
adcon1=0x10;//8分频
adcon0=0x85;//a1通道,右对齐,内部参考电压
char i;
result=0x00; //转换结果清零
for(i=3;i>0;i--)
{
go_done=1; //开启转换
while(go_done); //等待转换完成
result=result adresl adresh*256;//累计转换结果
}
result=result/3; //求5次结果平均值
if((result<757)&&(result>590))
{
a2=1;
}
else
{
//k=1;
a2=0;
}
}
//////
if(w3==1)
{
int result=0x00;
w3=0;
adcon1=0x10;//8分频
adcon0=0x89;//a2通道,右对齐,内部参考电压
char i;
result=0x00; //转换结果清零
for(i=3;i>0;i--)
{
go_done=1; //开启转换
while(go_done); //等待转换完成
result=result adresl adresh*256;//累计转换结果
}
result=result/3; //求5次结果平均值
if((result<606)&&(result>475))
{
a3=1;
}
else
{
// k=1;
a3=0;
didi_n(2);
}
}
}
|
-
动手绘制原理图
-
打印电路板准备热转印
-
贴片插件焊接
-
调试
-
第一次做热转印没有效果
-
两片mos式管dtp4503
-
拿两个26650调试
打赏
-
| 家元 50 |
理由
|
邓穿石
| 20 |
謝謝分享 |
| 30 |
以資鼓勵 |
|