CODE_LINUX_APP_ADC

主要用途:该模块实现了应用层对于AD设备操作的封装,能够实现AD设备的初始化、读取电流数值和读取电压数值等功能。

能力分类:嵌入式

应用领域:安防监控,便携产品,电源电池,机器人,智能家居

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

1.1  原理及方式

定义一个Struct AD的结构来存储传入的AD配置参数(通道号,方向,值等)、设备文件名称等信息,根据输入的电流电压选择参数,通过读取AD寄存器中的值获得AD设备返回的电流值和电压值,并通过观测值对返回值进行校正。

1.2  主要功能

该模块实现了应用层对于AD设备操作的封装,能够实现AD设备初始化、读取电流数值和读取电压数值等功能。

 标准模块

 模块设计

结构体设计

1. Struct AD的结构来存储传入的AD配置参数(设备名称,通道号,方向,电流或者电压值等)等信息

typedef  struct AD{

    dll_t   node;

    devClass    class;

    char name[32];

    uint8 chan;// channel of the AD,0~4 used to the voltage,5~7 used to the current

    uint32 regval;//value read from AD DATA register

    float vol;//voltage:-40.0~+40.0,unit: V

    float current;//current:0~20, unit:mA

}objAD;

 

主要函数说明

AD初始化函数

函数原型

objAD *   AD_init( const char *name,  uint8 chan )

功能描述

初始化AD设备

输入参数

const char *nameAD设备名称不超过32字节

uint8 chan通道号,范围为0~7

 

输出参数

全局变量值的变化

返回值

NULL-失败;

AD设备指针-成功。

 

获取AD电压函数

函数原型

STATUS AD_getVoltage(objAD *  obj)

功能描述

获取AD电压,对应通道号为0~4

输入参数

objAD *  obj初始化分配的设备指针,设置其chan字段指定通道号

 

输出参数

objAD *  obj:获取的电压放置在其vol字段,寄存器值放置在regval字段

全局变量值的变化

返回值

ERROR-失败;

OK-成功。

 

获取AD电流函数

函数原型

STATUS AD_getCurrent(objAD *  obj)

功能描述

获取AD电流,对应通道号为5~7

输入参数

objAD *  obj初始化分配的设备指针,设置其chan字段指定通道号

 

输出参数

objAD *  obj:获取的电压放置在其current字段,寄存器值放置在regval字段

全局变量值的变化

返回值

ERROR-失败;

OK-成功。

 

关闭AD设备函数

函数原型

STATUS AD_close(objAD *  obj)

功能描述

关闭打开所有AD设备通道,释放其资源

输入参数

objAD *  obj初始化分配的设备指针 

 

输出参数

全局变量值的变化

返回值

ERROR-失败;

OK-成功。

类定义

应用举例

基于API实现能够测试AD控制器的配置和读写功能的测试程序

int adtest(int argc, char **argv)

{

 STATUS  ret  =  OK;

 int i = 0;

 int error = 0;

 objAD * pAD[AD_MAX_CHAN] = {NULL,};

 int result = PASS;

 uint32 count = 0;

 int type  = 0;

 int chan = 0;

 

const char * adname[]={"voltage0", "voltage1", "voltage2", "voltage3", "voltage4", "current0", "current1", "current2"};

for(i = 0; i < AD_MAX_CHAN; ++i)

{

    pAD[i] = AD_init(adname[i], i);

    if(NULL == pAD[i])

    {

    OUT_MSG("init ad %s error:%x",adname[i],  gErrNo);

    }

}

     OUT_MSG("**************test AD start**********************\n");

     switch(type)

     {

      case 0:

          for(i = 0; i < count; ++i)

           {

               for(chan = 0 ;  chan < 5; ++chan )

              {

               if (OK == AD_getVoltage(pAD[chan]))

              {

                OUT_MSG("GET %s  Voltage:%f V\n",pAD[chan]->name,  pAD[chan]->vol);

              }else{

               OUT_MSG("Failed to get %s voltage.\n", pAD[chan]->name);

              }

             }

             PAUSE();

           }

       break;

      case 1:

         for(i = 0; i < count; ++i)

          {

             for(chan = 0 ;  chan < 3; ++chan )

             {

               if (OK == AD_getCurrent(pAD[chan+5]))

              {

                OUT_MSG("GET %s  Current:%f mA\n",pAD[chan+5]->name,  pAD[chan+5]->current);

              }else{

               OUT_MSG("Failed to get %s current.\n", pAD[chan+5]->name);

              }

            }

           PAUSE();

         }//

       break;

      default:

 

       OUT_MSG("wrong type.\n");

       exit(0);

     }

   /* release the resources */

     for(i = 0; i < AD_MAX_CHAN; ++i)

    {

           AD_close(pAD[i]);

    }

  OUT_MSG("*********************test AD OK********************\n");

 

  return ret;

}

其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>