/*********************************************************
Project: 5AH MoveCharge Project
File name: adc.c
Write: TenPao.LTD
Time: 2012-10
*********************************************************/
#include <htc.h>
#include "main1936.h"
#include "adc.h"
#include "int_handle.h"
#include "temper.h"
#include "serchtab.h"
ADC_DIG Adc_Result;
ADC_DIG ADCANA_DATA;
uchar tmnum;
ushort tmbuf[10];
ushort tmcount;
uint avercounter;
ulong sumIout,sumIusb,sumIch,sumVout,sumVusb,sumVbat;
ushort averIout,averIusb,averIch,averVout,averVusb,averVbat;
/*********************************************************
//Function: InitParam_Adc
//
//
*********************************************************/
void InitParam_Adc(void)
{
sumIout=0;
sumIusb=0;
sumIch=0;
sumVout=0;
sumVusb=0;
sumVbat=0;
averIout=0;
averIusb=0;
averIch=0;
averVout=0;
averVusb=0;
averVbat=0;
avercounter=0;
tmnum=0;
tmcount=0;
}
/*********************************************************
//Function: InitVin2Adc
//设置RB1口为ADC输入
//
*********************************************************/
void InitVin2Adc(void)
{
TRISB1=1;
ANSB1=1;
WPUB1=0;
}
/*********************************************************
//Function: Adc_IO_Init
//
//
*********************************************************/
void Adc_IO_Init(void)
{
TRISA0=1; //输入
ANSA0=1; //模拟
TRISA1=1;
ANSA1=1;
TRISA2=1; //输入
ANSA2=1; //模拟
TRISA3=1;
ANSA3=1;
TRISA5=1; //输入
ANSA5=1; //模拟
TRISB3=1;
ANSB3=1;
WPUB3=0;
TRISB4=1;
ANSB4=1;
WPUB4=0;
TRISB5=1;
ANSB5=1;
WPUB5=0;
}
/*********************************************************
//Function: Adc_Config
//
//
*********************************************************/
void Adc_Config(void)
{
FVRCON=0x82; //使能固定参考电压,ADC 固定参考电压外设输出为2x (2.048V)
while(!FVRRDY); //等待固定参考电压输出就绪
//ADCON1 = 0XE3; //参考电压选择内部2.048V //0xe3---2us,实测稳定
ADCON1 = 0Xa3; //ADC转换周期为1us,参考电压选择内部2.048V
ADCON0 = 0X01; //使能ADC
ADIE = 0; //禁止ADC中断
}
/*********************************************************
//Function: Adc_Init
//
//
*********************************************************/
void Adc_Init(void)
{
InitParam_Adc();
Adc_IO_Init();
Adc_Config();
}
/*********************************************************
//Function: Adc_Sample
//
//
*********************************************************/
ushort Adc_Sample(uchar i)
{
ADCON0bits.CHS=i;
delayus(20); //延时10*2us
GO_nDONE = 1;
while(GO_nDONE);
return ((ADRESH<<8)+ADRESL);
}
/*********************************************************
//Function: Fillter
//
//
*********************************************************/
ushort Fillter(ushort buf[])
{
uchar i;
ushort tmp=0,max,min;
max=buf[0];
min=buf[0];
for(i=0;i<10;i++)
{
if(max<buf[i])
{
max=buf[i];
}
if(min>buf[i])
{
min=buf[i];
}
tmp+=buf[i];
}
tmp-=(max+min);
tmp>>=3;
return tmp;
}
/*********************************************************
//Function: Adc_Con
//
//
*********************************************************/
ushort Adc_Con(uchar n)
{
uchar i;
ushort temp=0;
ushort Adc_Data[10];
for(i=0;i<10;i++)
{
Adc_Data[i]=Adc_Sample(n);
delayms(10);
}
temp=Fillter(Adc_Data);
return temp;
}
/*********************************************************
//Function: Fifo/
//
//
*********************************************************/
#if 0
void Fifo(ushort *ptr)
{
uchar i;
for(i=5;i>0;i--)
{
ptr[i]=ptr[i-1];
}
}
#endif
/*********************************************************
//Function: CountSum
//
//
*********************************************************/
void CountSum(void)
{
sumIout += ADCANA_DATA.Viout;
sumIusb += ADCANA_DATA.Viusb;
sumIch += ADCANA_DATA.Vich;
sumVout += ADCANA_DATA.Vo;
sumVusb += ADCANA_DATA.Vusb;
sumVbat += ADCANA_DATA.Vbat;
avercounter++;
}
/*********************************************************
//Function: CountAver
//
//
*********************************************************/
void CountAver(void)
{
averIout = sumIout/avercounter;
averIusb = sumIusb/avercounter;
averIch = sumIch/avercounter;
averVout = sumVout/avercounter;
averVusb = sumVusb/avercounter;
averVbat = sumVbat/avercounter;
sumIout = 0x00;
sumIusb = 0x00;
sumIch = 0x00;
sumVout = 0x00;
sumVusb = 0x00;
sumVbat = 0x00;
avercounter = 0x00;
}
/*********************************************************
//Function: Adc_Do
//
//
*********************************************************/
void Adc_Do(void)
{
Adc_Result.Vbat = Adc_Sample(AinVbat);
Adc_Result.Vdsch = (Adc_Sample(AinVdsch))<<4; //*16
//升压输出实际电压 单位 mV
Adc_Result.Vo = (Adc_Sample(AinVo))<<4; //*16
//升压输出电流 数字量
Adc_Result.Viout = Adc_Sample(AinViout);
//USB 实际电流 单位 mA
Adc_Result.Viusb = (Adc_Sample(AinViusb))<<1; //*2
//USB 实际电压 单位 mV
Adc_Result.Vusb = (Adc_Sample(AinVusb))<<3;
//电池充电实际电流 单位 mA
Adc_Result.Vich = (Adc_Sample(AinVich))<<1;
//Adc_Result.Vtm=Adc_Sample(AinVtm);
#ifdef OUT12V
//升压输出实际电流 单位mA
ADCANA_DATA.Viout = Adc_Result.Viout<<2; // <<2 1A---0.5V
#endif
#ifdef OUT13V
ADCANA_DATA.Viout = Adc_Result.Viout<<1; //现在<<1 1A---1V
#endif
ADCANA_DATA.Viusb = Adc_Result.Viusb;
ADCANA_DATA.Vusb = Adc_Result.Vusb;
ADCANA_DATA.Vich = Adc_Result.Vich;
ADCANA_DATA.Vdsch = Adc_Result.Vdsch;
ADCANA_DATA.Vo = Adc_Result.Vo;
//实际电池电压单位mV
ADCANA_DATA.Vbat = (Adc_Result.Vbat<<3)-(ADCANA_DATA.Vich>>7)-(ADCANA_DATA.Vich>>8); //电压*8 10毫欧电阻补偿 //模拟电压
if(++tmcount>=100)//2ms每次
{
tmbuf[tmnum] = Adc_Sample(AinVtm)+250;
tmcount=0;
tmnum++;
if(tmnum>=10)//温度滤波2S一次
{
tmnum=0;
Adc_Result.Vtm=Fillter(tmbuf);
ADCANA_DATA.Vtm=serch_tab(Adc_Result.Vtm,temp_tab,TEMP_TAB_MAX,1);
}
}
InitVin2Adc();
Adc_Result.Vin = Adc_Sample(AinVin);
ADCANA_DATA.Vin = (Adc_Result.Vin<<2)+Adc_Result.Vin+(Adc_Result.Vin>>1)+(Adc_Result.Vin>>3)+(Adc_Result.Vin>>5);//Adc_Result.Vin<<3;/**/ *5.64375
InitVin2IOInterrupt();
CountSum();
}
adc.zip_PIC ADC_PIC单片机电源_pic 电源_单片机放电_移动电源PIC
版权申诉
48 浏览量
2022-09-14
22:09:10
上传
评论
收藏 2KB ZIP 举报
周楷雯
- 粉丝: 80
- 资源: 1万+
最新资源
- 012c3c44c465a099108e0d8570b86a70.zip
- 基于Java和JavaWeb的网上商城项目设计源码 - myshopping
- 基于Vue和JavaScript的书城项目设计源码 - Demo12.18
- wp2787778-map-wallpaper.jpg
- 基于Javascript的杜王町打工人仓库管理系统设计源码 - 杜王町打工人的仓库
- 基于C#的报销材料合并工具设计源码 - 报账材料合并
- 基于Java的驾校一点通后端服务设计源码 - jiaxiaoServer
- 基于Java的实验室仪器设备管理系统后端设计源码 - houduan
- Screenshot_2024-05-29-01-03-40-499_com.tencent.mm.jpg
- 素材(美女、自拍)-.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈