多通道高精度集成电路参数测试


前言

本设计中采用AD5522进行参数测量,通过控制字控制芯片内部寄存器来完成测量,可完成FVMI,FIMV等不同测量模式。通过MCU对芯片进行逻辑控制,主要设计了参数控制、模式切换程序和外部扩展量程的继电器控制逻辑。通过网口/串口完成数据上传,最终通过上位机显示测量数据曲线。

一、四通道参数测量单元

(1)四通道参数测量单元PMU
电压驱动(FV)
电流驱动(FI)
测量电压(MV)功能
测量电流(MI)功能
(2)四个可编程电流范围(内部RSENSE)
±5μA、 ±20μA、 ±200μA、 ±2mA、可扩展量程
(3)一个可编程电流范围、最高达±80mA(外部RSENSE)
(4) 集成16位可编程DAC
(5)支持片增益和偏置校正
(6)支持FI电压箝位和FV电流箝位

二、功能框图

在这里插入图片描述

三、具体设计

设计采用qt+STM32方式,上位机可以选择测量单元单通道进行测量,测量分为进行手动和自动测量方式。测量模式可选择FIMV或者FVMI模式进行测量。
通讯部分上位机和MCU通讯,设计了简单通讯协议用于握手和控制PMU单元进行测量。

1.上位机部分代码

          if (m_Send_charBuff[3] == 1&& m_MeansOut_Guard==10)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0000;
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          else if (m_Send_charBuff[3] == 2 && m_MeansOut_Guard == 10)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0000;
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          else if (m_Send_charBuff[3] == 3 && m_MeansOut_Guard == 10)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0000;
             
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          else if (m_Send_charBuff[3] == 4 && m_MeansOut_Guard == 10)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0000;
            
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          if (m_Send_charBuff[3] == 1 && m_MeansOut_Guard == 5)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0040;
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          else if (m_Send_charBuff[3] == 2 && m_MeansOut_Guard == 5)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0040;
             
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          else if (m_Send_charBuff[3] == 3 && m_MeansOut_Guard == 5)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0040;
             
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }
          else if (m_Send_charBuff[3] == 4 && m_MeansOut_Guard == 5)
          {
              AD5522_CMD_WriteProgramSYS = 0x3C0040;
        
              ProgramPUMCode = 0xF200000;
              ProgramX1Code = 0xFC00000;
          }

          if (m_Send_charBuff[2]==0x01)  
         {
              ProgramPUMCode= 0x001000;           
              if (m_Send_charBuff[4] ==0X01)     
              {
                  ProgramPUMCode = 0x1200;
                  ProgramX1Code = 0xD0000;
                  //ProgramX1Code = 0x80000;
   
              }
              else if (m_Send_charBuff[4] ==0X02)
              {
                  ProgramPUMCode = 0x9200;
                  ProgramX1Code = 0xD0000;
                  //ProgramX1Code = 0x90000;
                  //AD5522_CMD_WriteProgramDACOffset = 0xF89A492;
              }
              else if (m_Send_charBuff[4] ==0X03)
              {
                  ProgramPUMCode = 0x11200;
                  ProgramX1Code = 0xD0000;
                  //ProgramX1Code = 0xA0000;
                 
              }
              else if (m_Send_charBuff[4] ==0X04)
              {
                  ProgramPUMCode = 0x19200;  //19200
                  ProgramX1Code = 0xD0000;
                  //ProgramX1Code = 0xB0000;
                  //AD5522_CMD_WriteProgramDACOffset = 0xF8BA492;
              }
              else if (m_Send_charBuff[4] == 0X05)
              {
                  ProgramPUMCode = 0x21200;
                  ProgramX1Code = 0xD0000;
         
              }
          }
          else  
          {
              if (m_Send_charBuff[4] == 0X01)
              {
                  Rsense = 200000; 
                  ProgramPUMCode = 0x83200;
                  ProgramX1Code  = 0x80000;
              }
              else if (m_Send_charBuff[4] == 0X02)
              {
                  Rsense = 50000;
                  ProgramPUMCode = 0x8b200;
                  ProgramX1Code = 0x90000;
              }
              else if (m_Send_charBuff[4] == 0X03)
              {
                  Rsense = 5000; 
                  ProgramPUMCode = 0x93200;
                  ProgramX1Code = 0xA0000;
              }
              else if (m_Send_charBuff[4] == 0X04)
              {
                  Rsense = 500; 
                  ProgramPUMCode = 0x9b200;
                  ProgramX1Code = 0xB0000;
              }
              else if (m_Send_charBuff[4] == 0X05)
              {
                  Rsense = 100; 
                  ProgramPUMCode = 0xA3200;
                  ProgramX1Code = 0xC0000;
              }
          }
        //发送数据
        m_Message_charBuff[0] = 0x7E;//帧头
        m_Message_charBuff[1] = 0x7E;
        m_Message_charBuff[2] = AD5522_CMD_WriteProgramSYS;//系统控制器
        m_Message_charBuff[3] = AD5522_CMD_WriteProgramSYS>>8;
        m_Message_charBuff[4] = AD5522_CMD_WriteProgramSYS>>16;
        m_Message_charBuff[5] = AD5522_CMD_WriteProgramSYS>>24;
        m_Message_charBuff[6] = AD5522_CMD_WriteProgramPUM;//PUM控制器
        m_Message_charBuff[7] = AD5522_CMD_WriteProgramPUM>>8;
        m_Message_charBuff[8] = AD5522_CMD_WriteProgramPUM>>16;
        m_Message_charBuff[9] = AD5522_CMD_WriteProgramPUM>>24;
        m_Message_charBuff[10] = AD5522_CMD_WriteProgramX1;//DAC控制器
        m_Message_charBuff[11] = AD5522_CMD_WriteProgramX1>>8;
        m_Message_charBuff[12] = AD5522_CMD_WriteProgramX1>>16;
        m_Message_charBuff[13] = AD5522_CMD_WriteProgramX1>>24;
        m_Message_charBuff[14] = AD5522_CMD_WriteProgramM;//M增益控制器
        m_Message_charBuff[15] = AD5522_CMD_WriteProgramM>>8;
        m_Message_charBuff[16] = AD5522_CMD_WriteProgramM>>16;
        m_Message_charBuff[17] = AD5522_CMD_WriteProgramM>>24;
        m_Message_charBuff[18] = AD5522_CMD_WriteProgramC;//C偏置控制器
        m_Message_charBuff[19] = AD5522_CMD_WriteProgramC>>8;
        m_Message_charBuff[20] = AD5522_CMD_WriteProgramC>>16;
        m_Message_charBuff[21] = AD5522_CMD_WriteProgramC>>24;
        m_Message_charBuff[22] = AD5522_CMD_WriteProgramDACOffset;//DAC偏置控制器
        m_Message_charBuff[23] = AD5522_CMD_WriteProgramDACOffset >> 8;
        m_Message_charBuff[24] = AD5522_CMD_WriteProgramDACOffset >> 16;
        m_Message_charBuff[25] = AD5522_CMD_WriteProgramDACOffset >> 24;
        m_Message_charBuff[26] = 1; //m_Send_charBuff[6];      //更新寄存器
        m_Message_charBuff[27] = m_Send_charBuff[3];           //通道号
        m_Message_charBuff[28] = 0xFF;//帧尾

2.MCU部分代码

				{ 
					AD5522_Write_Data(AD5522_CMD_WriteProgramSYS);//写AD5522寄存器 //0x80080
				}
				if((GPIOD->IDR& GPIO_IDR_IDR_15)) //当BUSY信号为高时
				{ 
					AD5522_Write_Data(AD5522_CMD_WriteProgramDACOffset);//写AD5522寄存器 //0x80080
				}
				
				if((GPIOD->IDR& GPIO_IDR_IDR_15)) //当BUSY信号为高时
				{ 
					AD5522_Write_Data(AD5522_CMD_WriteProgramX1);//写AD5522寄存器 //AD5522_CMD_WriteProgramX1
				}
				if((GPIOD->IDR& GPIO_IDR_IDR_15)) //当BUSY信号为高时
				{ 
					AD5522_Write_Data(AD5522_CMD_WriteProgramPUM);
				}

3.具体测试

具体测试量晶体二极管特性和电阻特性曲线,测试结果如图所示。
(1) 晶体二极管IV特性测定晶体二极管I-V特性测定
(2) 电阻IV特性测定
电阻IV特性测定

四、总结

此次设计在应用中也碰到一些问题,通过实战应用中都得到了解决,在此也简单的记录下。当然开发不易珍惜每一分原创和劳动成果,同时注意平时开发过程中的经验积累总结。该工程已经在现有的工程项目中得到了应用和验证,如有需要了解详细的设计可以联系 QQ:309967512

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交流测量应用往往要求电隔离,以保护系统和用户不受高压损害。通常通过使用体积笨重的传感器电压/电流变压器或将数据和电源接口与测量子系统进行隔离,实现电隔离。然而,这些方法占用的空间相当可观,具有隐性成本和设计难题。 Sonoma (MAXREFDES14#)电能测量子系统参考设计利用单个脉冲变压器实现与系统的电隔离,使用电阻作为检测元件。从而形成小尺寸、具有成本优势的电路板。 Sonoma设计采用隔离型电能测量处理器(MAX78615+LMU);多通道高精度模/数转换器(ADC) (MAX78700);脉冲变压器;可选的20MHz晶振;以及将交流电压和电流转换为可测信号的检测电阻。Sonoma具有嵌入式负载监测单元(LMU)固件、校准和配置数据非易失存储器,是完备的测量子系统,可集成至任意设计。 系统设计框图: 特性应用 高精度功率测量 高压电隔离 预设增益/失调参数 板载4mΩ电流检测电阻,具有良好温度系数 板载电压检测电阻分压器,分压比为2667:1,具有良好温度系数 交流90至264V通用交流输入电压范围 交流电可插拔端子(最大8A) 小尺寸印刷电路板(PCB) 器件驱动器 C语言源代码 Xilinx:registered: LX9和ZedBoard:trade_mark:平台配置文件 Pmod:trade_mark:兼容规格 照明控制系统 商业和工业自动化 可再生能源系统 电动车充电系统 智能家居应用 高精度电能测量系统电路 PCB 截图,用PADS9.0打开: 所有附件内容截图: 更多详细介绍:https://www.maximintegrated.com/cn/design/referenc...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值