📄 adsample.c
字号:
//*******************************************************************************
//Copyright (c) 2007,美国派利斯电子(北京)有限公司 硬件部
//文件名称: Hardware.c
//摘 要: 本文件主要包含PT2060程序中采样数据处理部分
//当前版本: D-1
//作 者: 佟文杰
//完成日期: 4/13/2007
//修 改 人:
//修改原因:
//修改日期:
//*******************************************************************************
#include "adsample.h"
#include <C8051F020.H>
#include <math.h>
#define MAXLENGTH 0x7FF
#define MAXGROUP 16
#define SYSCLK 22118400
unsigned int idata uiSampleteCompleteLocation;
unsigned char idata uchSampleLocationNumber;
unsigned char idata uchRMSCompleteStatus;
xdata struct PT2060AD AD _at_ 0x0100; //定义到0x800再开始
unsigned int *pSampBuffer0;
unsigned int *pSampBuffer1;
unsigned int *pSampBuffer2;
unsigned int *pSampBuffer3;
unsigned int idata uchChannelScaleStatus[2];
//unsigned int idata temp;
//unsigned char idata l;
unsigned char idata uchRMSDataStorageNumber1;
unsigned char idata uchRMSDataStorageNumber2;
unsigned char xdata uchValue1;
unsigned char xdata uchValue2;
unsigned int xdata uiRmsCounter[2][4];
unsigned char idata uchPercentCountNumber; //20080910
float xdata fPercentValueBAK[2][4]; //20080910
//-----------------------------------------------------------------------
//函数名称:void CaculateDataScale(void)
//功 能:提前初始化计算过程中需要的变量
//输入参数:无
//返 回:无
//完成日期:4/16/2007
//-----------------------------------------------------------------------
void CaculateDataScale(void)
{
unsigned char xdata i;
for (i=0; i<2; i++)
{
AD.fRealIntegralScaleData[i] = CaculateIntegralScale(i + 1);
AD.fRealNotIntegralScaleData[i] = CaculateNotIntegralScale(i + 1);
AD.fRealNotIntegralLittleScaleData[i] = CaculateNotIntegralLittleRangeScale(i + 1);
AD.fRealLVDTScaleData[i] = CaculateLVDTScale(i + 1);//HHH
AD.lLvdtMark[i] = CalculateLVDTZeroPosition(i+1); //HHHHHHHHHH
JudgeChannelScale(i+1);
}
}
//-----------------------------------------------------------------------
//函数名称:void InitADSampleModule(void)
//功 能:AD采样模块参数初始化
//输入参数:无
//返 回:无
//完成日期:4/16/2007
//-----------------------------------------------------------------------
void InitADSampleModule(void)
{
unsigned char xdata i;
ADModuleSoftInitialize();
for (i=0; i<2; i++)
{
CaculateIntegrateRMSZero(i+1);
CaculateNotIntegrateLargeRangeRMSZero(i+1);
CaculateNotIntegrateLittleRangeRMSZero(i+1);
}
//20080730
// {
ADModuleSampleRateInitialize();
// }
}
//-----------------------------------------------------------------------
//函数名称:void ADModuleSoftInitialize(void)
//功 能:AD采样模块软件参数初始化
//输入参数:无
//返 回:无
//完成日期:4/16/2007
//-----------------------------------------------------------------------
void ADModuleSoftInitialize(void)
{
unsigned int i;
unsigned char j;
AD.uchGroupDone = 0;
AD.uiCurProcessingIndex = 0x0f; //20080703
AD.uiPassedGroupIndex = 0;
AD.uiSampleLocation = 0;
AD.uchCurMinCount = 0;
for (i=0; i<2; i++)
{
AD.uiDataAverage[i] = 0;
AD.fDataRMSAverage[i] = 0;
}
AD.uiGapSumPTR1 = 0;
AD.uiGapSumPTR2 = 0; //加初始化
for(i=0;i<32;i++)
{
AD.uiGapSumValue1[i] = 0xcc0;
AD.uiGapSumValue2[i] = 0xcc0 ;
}
AD.uchCurMaxCount = 0;
AD.uiGapSumPTR1 = 0;
for(i=0;i<4;i++)
{
AD.uiCurPKPKValue[i] = 0;
AD.uiLastPKPKValue[i] = 0;
}
for(i=0;i<30;i++)
{
AD.uiMaxValue0[i] = 1;
AD.uiMinValue0[i] = 4095;
AD.uiMaxGroup0[i] = 14;
AD.uiMinGroup0[i] = 14;
AD.uiMaxValue1[i] = 1;
AD.uiMinValue1[i] = 4095;
AD.uiMaxGroup1[i] = 14;
AD.uiMinGroup1[i] = 14;
AD.uiMaxValue2[i] = 1;
AD.uiMinValue2[i] = 4095;
AD.uiMaxGroup2[i] = 14;
AD.uiMinGroup2[i] = 14;
AD.uiMaxValue3[i] = 1;
AD.uiMinValue3[i] = 4095;
AD.uiMaxGroup3[i] = 14;
AD.uiMinGroup3[i] = 14;
}
// AD.uchCountNumber1 = 0;
// AD.uchCountNumber2 = 0;
// AD.uchCountNumber = 0;
uchRMSCompleteStatus = 0;
uiSampleteCompleteLocation = 0;
uchSampleLocationNumber = 0;
uchChannelScaleStatus[0] = 0;
uchChannelScaleStatus[1] = 0;
for (i=0; i<8; i++)
{
AD.fDataRMSADAverage[0][i] = 0;
AD.fDataRMSADAverage[1][i] = 0; //20080708
}
uchRMSDataStorageNumber1 = 0; //20080708
uchRMSDataStorageNumber2 = 0; //20080708
uchValue1 = 0; //20080708
uchValue2 = 0; //20080708
uchPercentCountNumber = 0; //20080910
for (i=0; i<2; i++)
{
for (j=0; j<4; j++)
{
fPercentValueBAK[i][j] = 0; //20080910
}
}
}
//--------------------------------------------------------
//函数名称:void SetDefaultCentricity(unsigned char uchChannel)
//功 能:初始化采样中心线
//输入参数:通道号
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
/*void SetDefaultCentricity(unsigned char uchChannel)
{
unsigned char xdata i,j;
switch(AD.uchChType[uchChannel - 1])
{
case 13:
case 16:
case 18:
for (i=0; i<2; i++)
{
for (j=0;j<15;j++)
{
// AD.uiDataAverageBAK[i][j] = 0x812; //改电路之前的数据 4cb
}
}
break;
case 14:
case 17:
for (i=0; i<2; i++)
{
for (j=0;j<15;j++)
{
// AD.uiDataAverageBAK[i][j] = 0x7c0;
}
}
break;
}
} */
//--------------------------------------------------------
//函数名称:void ADModuleSampleRateInitialize(void)
//功 能:初始化采样频率和采样通道
//输入参数:通道号
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void ADModuleSampleRateInitialize(void)
{
switch(AD.uchChType[0])
{
case 13: //加速度输入 输出加速度 a-a
case 16: //速度输入 输出速度 v-v
switch(AD.uchSampleRate[0])
{
case 3: //4K
SetSampleRate(SYSCLK/12/16044);
break;
case 1: //0.5K
SetSampleRate(SYSCLK/12/2022);
break;
default:
SetSampleRate(SYSCLK/12/16044);
break;
}
AD.uiGroupNum = 16;
AD.uiGroupLength = 256;
break;
case 14: //加速度输入 输出速度 a-v
case 15: //加速度输入 输出位移
case 17: //速度输入 输出位移 v-d
SetSampleRate(SYSCLK/12/16044);
AD.uiGroupNum = 16;
AD.uiGroupLength = 256;
break;
case 18: //位移输入 输出位移 d-d
SetSampleRate(SYSCLK/12/2005);
AD.uiGroupNum = 16;
AD.uiGroupLength = 256;
break;
case 22: //LVDT输入 输出机壳膨胀
case 28: //HHH
SetSampleRate(SYSCLK/12/8192);
AD.uiGroupNum = 8;
AD.uiGroupLength = 256;
break;
default:
SetSampleRate(SYSCLK/12/16044);
break;
}
SampleStartControl();
SetInitChannel();
}
//--------------------------------------------------------
//函数名称:void SetSampleRateAD(unsigned char uchChannel, unsigned char uchSampleRate)
//功 能:将采样频率设置到AD模块
//输入参数:通道号,采样频率
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetSampleRateAD(unsigned char uchChannel, unsigned char uchSampleRate)
{
AD.uchSampleRate[uchChannel - 1] = uchSampleRate;
}
//--------------------------------------------------------
//函数名称:void SetChannleType(unsigned char uchChannel,unsigned char uchChannelType)
//功 能:设置采样通道类型
//输入参数:采样通道,采样通道类型
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetChannleType(unsigned char uchChannel,unsigned char uchChannelType)
{
if (((uchChannelType > 12) && (uchChannelType < 19)) || ((uchChannelType > 20) && (uchChannelType <23)) || (uchChannelType==28))
{
AD.uchChType[uchChannel - 1] = uchChannelType;
}
else
{
AD.uchChType[uchChannel - 1] = 13; //设定类型,不在范围之内默认加速度输入,加速度输出
}
}
//--------------------------------------------------------
//函数名称:void SetSensorDirection(unsigned char uchChannel, unsigned char uchSensorDirection)
//功 能:设置传感器方向
//输入参数:通道号,传感器方向
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetSensorDirection(unsigned char uchChannel, unsigned char uchSensorDirection)
{
AD.uchSenDirection[uchChannel - 1] = uchSensorDirection;
}
//--------------------------------------------------------
//函数名称:void SetMeasureType(unsigned char uchChannel, unsigned char uchtMeasureType)
//功 能:设置测量类型
//输入参数:通道号,测量类型
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetMeasureType(unsigned char uchChannel, unsigned char uchtMeasureType)
{
AD.uchtMeasureType[uchChannel - 1] = uchtMeasureType;
}
//--------------------------------------------------------
//函数名称:void SetCPUPosizationStatusAD(unsigned char uchCPUPosizationFlag)
//功 能:设置上下CPU位置的标志
//输入参数:CPU位置标志
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetCPUPosizationStatusAD(unsigned char uchCPUPosizationFlag)
{
AD.uchCPUPosizationStatus = uchCPUPosizationFlag;
}
//--------------------------------------------------------
//函数名称:void SetSensorSensitive(unsigned char uchChannel, unsigned int uiSensorSensitive)
//功 能:设置传感器灵敏度
//输入参数:通道号,传感器灵敏度
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetSensorSensitive(unsigned char uchChannel, unsigned int uiSensorSensitive)
{
AD.uiSenSensitive[uchChannel - 1] = uiSensorSensitive;
}
//--------------------------------------------------------
//函数名称:void SetZeroPosition(unsigned char uchChannel, int iZeroPosition)
//功 能:设置零点位置
//输入参数:通道号,零点位置电压值
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetZeroPosition(unsigned char uchChannel, int iZeroPosition)
{
AD.iZeroPosition[uchChannel - 1] = iZeroPosition;
}
//--------------------------------------------------------
//函数名称:void SetScaleLow(unsigned char uchChannel,int iScaleLow)
//功 能:设置量程范围下限
//输入参数:通道号,量程下限
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetScaleLow(unsigned char uchChannel,int iScaleLow)
{
AD.iScaleLow[uchChannel - 1] = iScaleLow;
}
//--------------------------------------------------------
//函数名称:void SetScaleHigh(unsigned char uchChannel,int iScaleHigh)
//功 能:设置量程范围上限
//输入参数:通道号,量程上限
//返 回:无
//作 者:佟文杰
//----------------------------------------------------------
void SetScaleHigh(unsigned char uchChannel,int iScaleHigh)
{
AD.iScaleHigh[uchChannel - 1] = iScaleHigh;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -