OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5291|回复: 1

51单片机,AD5933的阻抗测量主程序,有些地方看不懂,有没有大神,解释一下

[复制链接]

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2015-10-6
在线时间
25 小时
发表于 2018-5-13 12:09:42 | 显示全部楼层 |阅读模式
50金钱

        data_CountFL=CC1.MNum+20;                 //é¨Ãèμãêy

                                AD5933_FreInit( CC1.Fre , CC1.PlusFre );

                                Range = AD5933_SetRange();
                                AD5933_SelfTest( Range , &SelfT );                //×Ô2a
                                Switch_Config( 1 , Range );                          //¿a·′à¡
                                AD5933_StartTest( 0 );
                                AD5933_ReadImpedance( &OutT );
                                QP();                 //ÇåÆá
                                Temp = ((float)SelfT.Impedance/OutT.Impedance*Range);
                                if( (OutT.Phase-SelfT.Phase)<=0 )
                                {
                                        TempPhase = ( ((float)(OutT.Phase-SelfT.Phase)) );
                                }
                                else
                                {
                                        TempPhase = ((float)(OutT.Phase-SelfT.Phase));
                                }
                                LCD_WriteString( 1,0,"Imped:");
                                if( Temp-ConstR<0 )
                                {
                                        LCD_WriteFloat(1,7, 0);
                                }
                                else
                                {
                                        LCD_WriteFloat(1,7, Temp-ConstR);       
                                }
                                LCD_WriteString( 2,0,"hase:");
                                LCD_WriteFloat(2,7,TempPhase);       
                        }
                        EA = 1;
                }
               
                if( Rx_OK==1 )                        //&#189;&#248;è&#235C&#191;&#216;&#214;&#198;2aá&#191;×′ì&#172;
                {
                        if( Check_And0(UART_Rx_Buffer,Max_Rx)==0 )         //è&#231;1&#251;D£&#209;éoí==0&#190;í&#198;&#244;&#182;ˉ&#189;a&#206;&#246;êy×é
                        {
                                QP();
                                LCD_WriteString(2,0,"RECEIVE OK!");
                                for( i=0 ; i<3 ;i++)                                                          //&#187;&#241;è&#161;·¢é&#228;μ&#216;&#214;·
                                {
                                        UART_Tx_Buffer[i] = UART_Rx_Buffer[i+3];
                                }
                                CC1.MNum = UART_Rx_Buffer[11];
                                CC1.Fre = (uint)(UART_Rx_Buffer[7])*256+(uint)(UART_Rx_Buffer[8]);                        //&#198;μ&#194;ê
                                CC1.PlusFre = (uint)(UART_Rx_Buffer[9])*256+(uint)(UART_Rx_Buffer[10]);                //&#198;μ&#194;ê&#212;&#246;á&#191;
                                CC1.Sp =  UART_Rx_Buffer[12] -10;
                                CC1.Voltage = UART_Rx_Buffer[13];

                                AD5933_TestToPC();                                                 //&#191;aê&#188;2aê&#212;
                                Add_And0( UART_Tx_Buffer , 8*CC1.MNum+7 );
                                EA = 0;
                                UART_WriteTable( UART_Tx_Buffer , 8*CC1.MNum+8 );
                                EA = 1;

                                Rx_OK=0;
                                UART_IT(1);
                        }
                        else
                        {
                                QP();
                                LCD_WriteString(2,0,"RECEIVE Error;");
                                Rx_OK=0;
                                UART_IT(1);
                        }
                }
        }
        return 0;
}

void AD5933_TestToPC( void )                      //2aê&#212;ò&#187;′&#206;×°&#212;&#216;μ&#189;·¢é&#228;&#187;o3&#229;
{
        uchar i;
        float Range;                        //3&#245;′&#206;á&#191;3ì &#212;Y′&#230;
        unsigned long Temp;
        unsigned long TempPhase;

        switch( CC1.Voltage )                      //&#188;¤à&#248;·&#229;·&#229;&#214;μ£o0.2Vpp:0x02 0.4Vpp:0x04 1Vpp:0x06         2Vpp:0x00
        {
                case 1: data_Vpp=0x02;break;               
                case 2: data_Vpp=0x04;break;
                case 3: data_Vpp=0x06;break;
                case 4: data_Vpp=0x00;break;
        }
        data_CountFL = CC1.MNum+20;                    //é¨&#195;èμ&#227;êy

        AD5933_FreInit( CC1.Fre , CC1.PlusFre );      //AD5933&#207;μí33&#245;ê&#188;&#187;ˉ

        Range = AD5933_SetRange();                              //&#189;&#248;DDá&#191;3ì2aê&#212;
       
        AD5933_SelfTest( Range , &SelfT );                //×&#212;2a
       
       
        Switch_Config( 1 , Range );                          //&#191;a·′à&#161;
        Delay_Ms( 100 );

        CJ_Long( UART_Tx_Buffer , 3 , ConstR*100 );
        AD5933_StartTest( 0 );
        AD5933_ReadImpedance( &OutT );
        LCD_WriteFloat(1,0,Range);
        Temp = (unsigned long )((float)SelfT.Impedance/OutT.Impedance*Range*100.0);
        if( (OutT.Phase-SelfT.Phase)<=0 )
        {
                TempPhase = (unsigned long )( 800000 + ((float)(OutT.Phase-SelfT.Phase)*100000.0) );
        }
        else
        {
                TempPhase = (unsigned long )((float)(OutT.Phase-SelfT.Phase)*100000.0);
        }
        CJ_Long( UART_Tx_Buffer , 7 , Temp );                  //×è&#191;1
        CJ_Long( UART_Tx_Buffer , 11 , TempPhase );         //&#207;à&#206;&#187;
        for( i=0 ; i<CC1.MNum-1 ; i++ )
        {
                Switch_Config( 1 , Range+1 );                          //&#191;a·′à&#161;
                Delay_Ms(50);
                AD5933_StartTest( CC1.Sp );
                AD5933_ReadImpedance( &OutT );
                AD5933_SelfTest( Range , &SelfT );                //×&#212;2a

                Temp = (unsigned long )((float)SelfT.Impedance/OutT.Impedance*Range*100.0);
                if( (OutT.Phase-SelfT.Phase)<0 )
                {
                        TempPhase = (unsigned long )( 800000 + ((float)(OutT.Phase-SelfT.Phase)*100000.0) );
                }
                else
                {
                        TempPhase = (unsigned long )((float)(OutT.Phase-SelfT.Phase)*100000.0);
                }
                CJ_Long( UART_Tx_Buffer , 15+8*i , Temp );                  //×è&#191;1
                CJ_Long( UART_Tx_Buffer , 15+4+8*i , TempPhase );         //&#207;à&#206;&#187;
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-5-14 01:18:35 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 19:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表