1800|1

1152

帖子

24

TA的资源

纯净的硅(高级)

楼主
 

基于【EVAL-ADICUP360】的毫欧计-程序设计 [复制链接]

 

下位机主要是将AIN5输出1mA恒流,但不知道为什么输出的电流不准,在200uA以内时,实测特别准确,但超过200uA时就不准了,实际电流偏高。也没有在官方找到正确答案。

1mA实测电流为1.081mA。超出官方说的5%。不过不影响,有实测结果就行。

AIN5输出1mA恒流,接到目标电阻+极,负极接GND,原理图参见我上个贴子。

测出的AD数据通过串口发送至上位机,目标板自带了CMSIS-DAP,并有串口。

通过板上的紫色LED闪烁指示运行状态。

代码如下:

  • #include "ADuCM360.h"
  • #include "DioLib.h"
  • #include "DacLib.h"
  • #include "AdcLib.h"
  • #include "IexcLib.h"
  • #include "UrtLib.h"
  • #include "DmaLib.h"
  • #include "string.h"
  • #include "stdio.h"
  • char uart_tx_bf[256];
  • uint32_t sysTick=0;
  • uint32_t delayCount=0;
  • uint32_t ad;
  • void PrintStr(); //打印发送缓冲区的字符串
  • int main(void){
  • SystemCoreClockUpdate(); //SystemCoreClock
  • SysTick_Config(SystemCoreClock/1000);
  • //串口配置==============================
  • UrtCfg(pADI_UART,B115200,COMLCR_WLS_8BITS,0);
  • //p0.1 p0.2 uart模式 只有一个UART,可分配有两块引脚上。 p0.6/p0.7
  • DioCfgPin(pADI_GP0,PIN1,3);
  • DioCfgPin(pADI_GP0,PIN2,3);
  • //紫色LED灯 输出模式
  • DioDrv(pADI_GP0,BIT4,0,0);
  • //电流源配置==============================
  • //掉电关,参考源选择内部,输出0选AIN7,输出1选择AIN6
  • IexcCfg(IEXCCON_PD_off,IEXCCON_REFSEL_Int,IEXCCON_IPSEL1_AIN5,IEXCCON_IPSEL1_Off);
  • //电流源200uA,辅助10uA禁用 电流源可配置为0.01mA-1mA AIN4/5/6/7可配置为电流源输出
  • IexcDat(IEXCDAT_IDAT_1mA,IDAT0Dis);
  • //DAC配置==============================
  • //DacCfg(DACCON_CLR_Off,DACCON_RNG_IntVref,DACCON_CLK_HCLK,DACCON_MDE_16BitSlow);
  • //AD1引脚配置==============================
  • //ad1 -AIN1 +AIN3
  • AdcPin(pADI_ADC1,ADCCON_ADCCN_AGND,ADCCON_ADCCP_AIN0);
  • /*
  • //偏置电压选择 AIN7/AIN11 DVDD(1.8v)/2=0.9V
  • AdcBias(pADI_ADC1,ADCCFG_PINSEL_AIN11,ADC_BIAS_X1,ADC_GND_OFF);
  • */
  • //缓冲 参考电压
  • //AdcBuf(pADI_ADC1,ADCCFG_EXTBUF_OFF,ADCCON_BUFBYPP|ADCCON_BUFBYPN);
  • //放大倍数,有无符号
  • //AdcRng(pADI_ADC0,ADCCON_ADCREF_INTREF,ADCMDE_PGA_G128,ADCCON_ADCCODE_UINT);
  • //ADC配置 外部参考源
  • AdcRng(pADI_ADC1,ADCCON_ADCREF_INTREF,ADCMDE_PGA_G128,ADCCON_ADCCODE_UINT);
  • //float q=(float)1200/(float)0x3FFFFF; //内部基准系数
  • //测试DAC
  • /*
  • AdcPin(pADI_ADC1,ADCCON_ADCCN_AGND,ADCCON_ADCCP_DAC);
  • AdcBuf(pADI_ADC1,ADCCFG_EXTBUF_OFF,ADCCON_BUFBYPP);
  • AdcRng(pADI_ADC1,ADCCON_ADCREF_INTREF,ADCMDE_PGA_G1,ADCCON_ADCCODE_UINT);
  • float q=(float)1200/(float)0xfffffff;
  • */
  • //满量程 G=8=125mV 0x7ffffff 28bit
  • //G=16 =62.5mV
  • //G=32 =22.18mV
  • //k型热电偶 1000度=41.23mV
  • // uint16_t da=32768; //0.6V
  • // DacWr(0,da<<12);
  • //ADC零点校准
  • AdcGo(pADI_ADC1,ADCMDE_ADCMD_INTOCAL);
  • while((AdcSta(pADI_ADC1)&(1<<5))==0); //bit5 or ADCxSTA_CAL
  • AdcGo(pADI_ADC1,ADCMDE_ADCMD_SINGLE);
  • while(1){
  • if(delayCount==0){
  • DioTgl(pADI_GP0,BIT4);
  • delayCount=500;
  • }
  • if(AdcSta(pADI_ADC1)&1){ //bit0 or ADCxSTA_RDY
  • ad= AdcRd(pADI_ADC1);
  • sprintf(uart_tx_bf,"%d\r\n",ad);
  • PrintStr();
  • AdcGo(pADI_ADC1,ADCMDE_ADCMD_SINGLE);
  • }
  • }
  • }
  • void PrintStr(){ //打印发送缓冲区的字符串
  • char * ptr=uart_tx_bf;
  • while(*ptr){
  • UrtTx(pADI_UART,*ptr);
  • ptr++;
  • while((UrtLinSta(pADI_UART)&COMLSR_THRE)==0);
  • }
  • }
  • void SysTick_Handler(){
  • sysTick++;
  • if(delayCount>0)
  • delayCount--;
  • }
  • //end

 

最新回复

超过200uA时就不准这个问题   另外程序代码中间插入空行有点多     详情 回复 发表于 2022-10-25 08:32
点赞 关注
 
 

回复
举报

7018

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

超过200uA时就不准这个问题

 

另外程序代码中间插入空行有点多

 

 
 
 

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

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
      关闭
      站长推荐上一条 1/10 下一条
      中星联华&ADI明日直播
      直播主题:大咖面对面,轻松玩转高速ADC性能测试
      直播时间:3月25日(周二)14:00
      活动奖励:京东卡、双肩包

      查看 »

       
      EEWorld订阅号

       
      EEWorld服务号

       
      汽车开发圈

       
      机器人开发圈

      About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

      站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 13

      北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

      电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
      快速回复 返回顶部 返回列表