用AD5933做的阻抗测量仪设计--带完整程序(6)

2019-02-17 17:36

基于AD5933的阻抗测量仪

{

xishu=(1/(21.006)); //计算系数

xishu=(1/(xishu*valu))*100000000+0.5; //计算阻值 ll=xishu; i=1; } break;

case 6:

if((valu<4800)&&(valu>800))

{

xishu=(1/(96.527914)); //计算系数 xishu=(1/(xishu*valu))*100000000+0.5; //计算阻值 ll=xishu; i=1; }

break;

default:

break; }

if(i==1) //满足条件则显示阻值,相位 {

a[0]=ll/10000000+48;

a[1]=ll000000/1000000+48; a[2]=ll00000/100000+48; a[3]=ll0000/10000+48;

a[4]=ll000/1000+48; a[5]='.';

a[6]=ll00/100+48; a[7]=ll0/10+48; a[8]=ll0+48; a[9]='K'; a[10]=0;

LCD_WriteStr(4,2,a);

regist=ll;

if((y==0)&&(x==0))

{

//计算并显示 atan2(float y, float x); 求y/x(弧度表示)的反正切值 xishu=atan2(imvalu,revalu)*180/3.14+0.5; }

if((y==1)&&(x==0))

{

//计算并显示 atan2(float y, float x); 求y/x(弧度表示)的反正切值 xishu=atan2((imvalu*(-1)),revalu)*180/3.14-0.5;

基于AD5933的阻抗测量仪

xishu=xishu+180;

}

if((y==1)&&(x==1)) {

//计算并显示 atan2(float y, float x); 求y/x(弧度表示)的反正切值 xishu=atan2(imvalu,revalu)*180/3.14+0.5; xishu=xishu+180; }

if((y==0)&&(x==1))

{

xishu=atan2(imvalu,(revalu*(-1)))*180/3.14-0.5; atan2(float y, float x); 求y/x(弧度表示)的反正切值

xishu=xishu+360; }

if((ll<1000)&&(ll>400)) //相位误差修正 ll=xishu-89.5;

if((ll<10000)&&(ll>=1000))

ll=xishu-(-0.0012237*regist+91.46)+0.5; if((ll<100000)&&(ll>=10000))

ll=xishu-(-0.0001515*regist+91.016)+0.5; if((ll<1000000)&&(ll>=100000))

ll=xishu-(-0.0000179*regist+91.806)+0.5; if((ll<=2000000)&&(ll>=1000000))

ll=xishu-(-0.000009675*regist+93.789)+0.5; if((ll<12000000)&&(ll>2000000))

ll=xishu-(-0.00000256*regist+95.444)+0.5; if(ll<0) //判断正负 {

ll=ll*(-1); a[0]='-';

a[1]=ll/100+48; a[2]=ll0/10+48; a[3]=ll0+48; a[4]=0;

LCD_WriteStr(4,3,a); } else {

a[0]=' '; a[1]=ll/100+48; a[2]=ll0/10+48; a[3]=ll0+48; a[4]=0;

LCD_WriteStr(4,3,a);

//计算并显示

基于AD5933的阻抗测量仪

}

} }

//---------------------------------------------------------------------------------------------------------------------

// 函数原形:ReadData(unsigned char addr) // 功能描述:读数据函数。

// 参数说明:unsigned char addr 子地址 // 返回值:数据

//---------------------------------------------------------------------------------------------------------------------

unsigned int ReadData(unsigned char addr) //读数据

{

unsigned int data_a;

ISend(AD5933_addr,SET_POINT,addr); delays(5);

data_a=IRcv(AD5933_addr); delays(5); return data_a; }

//---------------------------------------------------------------------------------------------------------------------

// 函数原形:void wendu(void) // 功能描述:温度测量函数。

// 参数说明:无。 // 返回值:无

//---------------------------------------------------------------------------------------------------------------------

void wendu(void)

{

unsigned char Status,a[3]; unsigned int Tm; //复位AD5933

ISend(AD5933_addr,0x81,0x10); delays(5);

ISend(AD5933_addr,0x81,0x00); delays(5);

//启动温度测量

ISend(AD5933_addr,0x80,0x91); delays(5);

//等待转换完成

基于AD5933的阻抗测量仪

do

{

Status=ReadData(0x8F); }while(!(Status & 0x01));

Tm=ReadData(0x92); Tm<<=8;

Tm+=ReadData(0x93);

Tm=Tm&0x3FFF;

Tm=Tm/32; //温度换算并且显示 a[0]=Tm0/10+48; a[1]=Tm0+48; a[2]=0;

LCD_WriteStr(4,1,a); }

//---------------------------------------------------------------------------------------------------------------------

// 函数原形:void sweepfre(void)

// 功能描述:测量函数 // 参数说明:无。 // 返回值:无

//---------------------------------------------------------------------------------------------------------------------

void sweepfre(void)

{

unsigned char Status=0,count; signed int Re=0,Im=0;

InitAD5933(); //初始化AD5933 do {

Status=ReadData(0x8F); }while(!(Status & 0x02)); //读回阻抗的实部 Re=ReadData(0x94); delays(5);

Re=Re<<8;

Re+=ReadData(0x95); delays(5);

//读回阻抗的虚部 Im=ReadData(0x96); delays(5); Im=Im<<8;

基于AD5933的阻抗测量仪

Im+=ReadData(0x97);

delays(5); display(Re,Im); }

//--------------------------------------------------------------------------------------------------------------- // 函数原形:int main(void) // 功能描述:主函数。 // 参数说明:无。 // 返回值:无

//--------------------------------------------------------------------------------------------------------------- int main(void) {

unsigned char data;

// 设置晶振为系统时钟

SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);

// 使能本例所使用的外设。

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

// 配置相关引脚,以进行I2C操作,初始化LED指示灯。

GPIODirModeSet(GPIO_PORTB_BASE, SDA | SCL | SDAA|

SCLL,GPIO_DIR_MODE_OUT);

GPIODirModeSet(GPIO_PORTD_BASE, SDAye | SCLye |

CSye|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_DIR_MODE_OUT);

lcdInit(); //液晶初始化 LCD_WriteStr(1,1,\温度:\ LCD_WriteStr(1,2,\幅值:\ LCD_WriteStr(1,3,\相位:\ LCD_WriteStr(6,3,\度\ LCD_WriteStr(5,1,\度\

while(1) {

wendu(); //测量温度 for(j=0;j<7;j++) {

if(j==2)

continue;

GPIOPinWrite(GPIO_PORTD_BASE,0xe0, j<<5); //选着通道 sweepfre(); //扫描并计算阻抗 } }


用AD5933做的阻抗测量仪设计--带完整程序(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:海沧区关于赴福州学习考察情况的报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: