📄 cs5463.c
字号:
Calibration(0xce, IGN, &pADCoefTemp->dwIACGain, iIndex); //0xce=IAC gain
Print("标定成功...");
Print("\r\n 如果要保存以上的标定参数,请键入 'y';否则复位系统:");
while (GetChar() != 'y') OSTimeDly(10);
SaveParam((DWORD)&p_gcSysParam->sADCoef[3],(BYTE*)pADCoefTemp,sizeof(SADCoef));
break;
case 'x':
break;
default:
break;
}
if(i == 'x')
{
break;
}
}
break;
case '3':
InitAdc_cs5460();
while(1)
{
Print("\r\n << 直流量的标定 >>");
Print("\r\n 1 0V的标定");
Print("\r\n 2. 5V的标定");
Print("\r\n x. 退出标定");
// pADCoefTemp = pADCoef +3;;
i = GetChar();
iIndex =3;
switch(i)
{
case '1':
Print("\r\n 0V的标定");
Print("\r\n直流电压输入为0.00V,就绪后键入'g':");
while (GetChar() != 'g') OSTimeDly(10);
Print("\r\n 请等待几秒钟...");
GetAdcValue_cs5460(dwValue);
iValue = dwValue[0] & 0x00ffffff;
if(dwValue[0] & 0x00800000 ) //AD的原始数据为负数
iValue |= 0xff000000; //符号位扩展
SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw0Value,(BYTE*)&iValue,sizeof(DWORD));
Print("标定成功...");
break;
case '2':
Print("\r\5V的标定 ");
Print("\r\n直流电压输入为5.00V,就绪后键入'g':");
while (GetChar() != 'g') OSTimeDly(10);
Print("\r\n 请等待几秒钟...");
GetAdcValue_cs5460(dwValue);
iValue = dwValue[0] & 0x00ffffff;
if(dwValue[0] & 0x00800000 ) //AD的原始数据为负数
iValue |= 0xff000000; //符号位扩展
SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw5Value,(BYTE*)&iValue,sizeof(DWORD));
Print("标定成功...");
break;
case 'x':
break;
default:
break;
}
if(i == 'x')
{
break;
}
}
break;
case '4':
InitAdc_cs5460();
while(1)
{
Print("\r\n << PT100温度传感器的标定 >>");
Print("\r\n 1 100欧姆的标定");
Print("\r\n 2. 200欧姆的标定");
Print("\r\n x. 退出标定");
// pADCoefTemp = pADCoef +3;;
i = GetChar();
iIndex =3;
switch(i)
{
case '1':
Print("\r\n 100欧姆的标定");
Print("\r\n接入电阻约为100欧姆,就绪后键入'g':");
while (GetChar() != 'g') OSTimeDly(10);
Print("\r\n 请等待几秒钟...");
GetAdcValue_cs5460(dwValue);
iValue = dwValue[1] & 0x00ffffff;
if(dwValue[1] & 0x00800000 ) //AD的原始数据为负数
iValue |= 0xff000000; //符号位扩展
SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw100Value,(BYTE*)&iValue,sizeof(DWORD));
Print("标定成功...");
break;
case '2':
Print("\r\n200欧姆的标定 ");
Print("\r\n接入电阻约为200欧姆,就绪后键入'g':");
while (GetChar() != 'g') OSTimeDly(10);
Print("\r\n 请等待几秒钟...");
GetAdcValue_cs5460(dwValue);
iValue = dwValue[1] & 0x00ffffff;
if(dwValue[1] & 0x00800000 ) //AD的原始数据为负数
iValue |= 0xff000000; //符号位扩展
SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw200Value,(BYTE*)&iValue,sizeof(DWORD));
Print("标定成功...");
break;
case 'x':
break;
default:
break;
}
if(i == 'x')
{
break;
}
}
break;
case 'x':
Print("\r\n 请复位系统...");
while(1)
{
OSTimeDly(10);
}
return FALSE;
default:
break;
}
}
}
void InitAdcSelCommand(void) /*初始化AD的片选命令*/ /*mod,lyq,2007-03-07 采用const方式的定义,则该函数没有必要了*/
{
/* BYTE i;
//********针对读取有效值时,在中断中需要用到的片选命令*******
for(i=0; i<8; i++) //片选A
{
dwregSet_RMS[i] = ADCSB | ADCSC | ADCSO;
dwregClr_RMS[i] = ADCSA;
}
for(; i<14; i++)//片选B
{
dwregSet_RMS[i] = ADCSA | ADCSC | ADCSO;
dwregClr_RMS[i] = ADCSB;
}
for(; i<20; i++)//片选C
{
dwregSet_RMS[i] = ADCSA | ADCSB | ADCSO;
dwregClr_RMS[i] = ADCSC;
}
for(; i<24; i++)//片选O
{
dwregSet_RMS[i] = ADCSA | ADCSB | ADCSC;
dwregClr_RMS[i] = ADCSO;
}
for(; i<26; i++) //片选A
{
dwregSet_RMS[i] = ADCSB | ADCSC | ADCSO;
dwregClr_RMS[i] = ADCSA;
}
dwregClr_RMS[i] = 0;
dwregSet_RMS[i] = ADCSA | ADCSB | ADCSC | ADCSO;
//****针对读取波形时,在中断中需要用到的片选命令***********
for(i=0; i<2; i++) //片选A
{
dwregSet_Wav[i] = ADCSB | ADCSC | ADCSO;
dwregClr_Wav[i] = ADCSA;
}
for(; i<4; i++)//片选B
{
dwregSet_Wav[i] = ADCSA | ADCSC | ADCSO;
dwregClr_Wav[i] = ADCSB;
}
for(; i<6; i++)//片选C
{
dwregSet_Wav[i] = ADCSA | ADCSB | ADCSO;
dwregClr_Wav[i] = ADCSC;
}
for(; i<9; i++) //片选A
{
dwregSet_Wav[i] = ADCSB | ADCSC | ADCSO;
dwregClr_Wav[i] = ADCSA;
}
dwregClr_Wav[i] = 0;
dwregSet_Wav[i] = ADCSA | ADCSB | ADCSC | ADCSO;
*/
}
void InitAdcCommand(void) /*mod,lyq,2007-03-07 采用const方式的定义,则该函数没有必要了*/
{
byAdcSampleType =0;
byAdcCommandIndex = 0;
byStartWaveSample =0;
/* dwWaveSampleCount = 0;
AdcCommandData[0] = SR; //视在功率
AdcCommandData[1] = Pactive;//有功功率
AdcCommandData[2] = Qavg;//平均无功功率(90°移相)
AdcCommandData[3] = PF; //功率因数
AdcCommandData[4] = VRMSR; //电压有效值
AdcCommandData[5] = IRMSR; //电流有效值
AdcCommandData[6] = TR; //温度
AdcCommandData[7] = FrequencyR; //频率
//B相读命令对应的寄存器
AdcCommandData[8] = SR; //视在功率
AdcCommandData[9] = Pactive;//有功功率
AdcCommandData[10] = Qavg;//平均无功功率(90°移相)
AdcCommandData[11] = PF; //功率因数
AdcCommandData[12] = VRMSR; //电压有效值
AdcCommandData[13] = IRMSR; //电流有效值
//C相读命令对应的寄存器
AdcCommandData[14] = SR; //视在功率
AdcCommandData[15] = Pactive;//有功功率
AdcCommandData[16] = Qavg;//平均无功功率(90°移相)
AdcCommandData[17] = PF; //功率因数
AdcCommandData[18] = VRMSR; //电压有效值
AdcCommandData[19] = IRMSR; //电流有效值
//零序读命令对应的寄存器
AdcCommandData[20] = VRMSR; //电压有效值
AdcCommandData[21] = IRMSR; //电流有效值
AdcCommandData[22] = STATUSR; // 状态寄存器 读
AdcCommandData[23] = STATUSR; // 状态寄存器(写)
//A相写命令对应的寄存器
AdcCommandData[24] = STATUSR; // 状态寄存器 (写)
AdcCommandData[25] = MASKR; // 中断屏蔽 (写)
for(i=0; i<23; i++)
{
ptr =(BYTE*)&dwReadAdcCommand[i];
ptr +=3;
*ptr --= ((AdcCommandData[i] <<1) & 0x3e);
*ptr --= SYNC0;
*ptr --= SYNC0;
*ptr --= SYNC0;
}
//写状态寄存器,清除中断标志
ptr =(BYTE*)&dwReadAdcCommand[23];
ptr +=3;
*ptr --= ( (AdcCommandData[23] <<1) | 0x40 ) ;
*ptr --= 0xff;
*ptr --= 0xff;
*ptr --= 0xff;
//写状态寄存器,清除中断标志
ptr =(BYTE*)&dwReadAdcCommand[24];
ptr +=3;
*ptr --= ( (AdcCommandData[24] <<1) | 0x40 ) ;
*ptr --= 0xff;
*ptr --= 0xff;
*ptr --= 0xff;
//写屏蔽寄存器,清除DRDY中断使能位,设置CRDY位
ptr =(BYTE*)&dwReadAdcCommand[25];
ptr += 3;
*ptr --= ( (AdcCommandData[25] <<1) | 0x40 ) ;
// *ptr --= 0x10; //CRDY =1,enable
*ptr --= 0x80;
*ptr --= 0x00;
*ptr --= 0x00;
*/
//********对波形采集中断的命令初始化******************************
/* AdcRealCommandData[0] = VR; //电压瞬时值(读) A相
AdcRealCommandData[1] = IR; //电流瞬时值 (读) A相
AdcRealCommandData[2] = VR; //电压瞬时值 (读)B相
AdcRealCommandData[3] = IR; //电流瞬时值 (读)B相
AdcRealCommandData[4] = VR; //电压瞬时值 (读)C相
AdcRealCommandData[5] = IR; //电流瞬时值 (读)C相
AdcRealCommandData[6] = STATUSR; // 状态寄存器(写) A相
AdcRealCommandData[7] = FrequencyR; //频率(读)A相
AdcRealCommandData[8] = MASKR; // 中断屏蔽 (写) A相
for(i=0; i<8; i++)
{
if(i==6)continue; //第6项单独初始化
ptr =(BYTE*)&dwReadAdcWaveCommand[i];
ptr += 3;
*ptr --= ((AdcRealCommandData[i] <<1) & 0x3e);
*ptr --= SYNC0;
*ptr --= SYNC0;
*ptr --= SYNC0;
}
//写状态寄存器 A相
ptr =(BYTE*)&dwReadAdcWaveCommand[6];
ptr += 3;
*ptr --= ( (AdcRealCommandData[6] <<1) | 0x40 ) ;
*ptr --= 0xff;
*ptr --= 0xff;
*ptr --= 0xff;
//写屏蔽寄存器,清除CRDY中断使能位,设置DRDY位
ptr =(BYTE*)&dwReadAdcWaveCommand[8];
ptr += 3;
*ptr --= ( (AdcRealCommandData[8] <<1) | 0x40 ) ;
*ptr --= 0x80;//DRDY =1, enable
// *ptr --= 0x10; //CRDY =1,enable
*ptr --= 0x00;
*ptr --= 0x00;
*/
//InitAdcSelCommand();/*初始化AD的片选命令*/
}
void TestAdc(void)
{
DWORD dwTemp;
BYTE byFlag =1;
BYTE cArray[5]={0x30,0x31,0x32,0x33,'\0'};
SCommInfo sComm;
SADCoef sADCoef[3];
INT32 i;
// DWORD dwArray[6];
sComm.byCommNo=0;
sComm.byDataBits=8;
sComm.byStopBits=1;
sComm.byParity=UART_PARITY_NONE;
sComm.dwBaudrate=9600;
InitCom(&sComm,18000000,INT_MODE_RX);
while(1)
{
byFlag = strlen(cArray);
WriteCom(0,(BYTE*)&byFlag,1);
byFlag = strlen(cArray);
WriteCom(0,(BYTE*)&byFlag,1);
// Print(cArray);
Led(10,100000);
OSTimeDly(10);
}
for(i=0; i<3; i++)sADCoef[i].dwVACOffset =0;
for(i=0; i<3; i++)sADCoef[i].dwIACOffset =0;
sADCoef[0].dwVDCOffset = 0x054ac5;
sADCoef[1].dwVDCOffset = 0x054ac5;
sADCoef[2].dwVDCOffset = 0x054ac5;
sADCoef[0].dwVACGain =0x561cef;
sADCoef[1].dwVACGain = 0x56de8a;
sADCoef[2].dwVACGain = 0x563021;
sADCoef[0].dwIACGain =0x4425c2;
sADCoef[1].dwIACGain =0x563021;
sADCoef[2].dwIACGain =0x43eaa3;
// InitAdc(sADCoef,4);
dwTemp = 10;
while(1)
{
Delay(10);
pgsFPort1->regOutClr=P25;
Delay(10);
pgsFPort1->regOutSet=P25;
if(flag_int ==3)
{
dwTemp =3;
WriteCom(0,(BYTE*)&dwTemp,1);
WriteCom(0,(BYTE*)&g_sRealCode.dwUa,4);
flag_int =0;
// WriteCom(0,(BYTE*)Test,4);
}
if(flag_int_w ==4)
{
dwTemp = 4;
WriteCom(0,(BYTE*)&dwTemp,1);
flag_int_w =0;
}
if(flag==2)
{
dwTemp = 2;
WriteCom(0,(BYTE*)&dwTemp,1);
flag =0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -