分享

SGM58200开发以及相关应用

 新用户3699NmrV 2022-09-09 发布于广东

数模转换芯片ADC:SGM58200开发以及相关应用

概要:主要针对圣邦的型号为SGM58200的数模转换芯片的配置以及常用使用方法做出介绍和解释,包含但不仅限对于不同采样周期的配置和计算,及与一些常用其他品牌的性能对比介绍和说明。



一、SGM58200概况

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
支持IIC从设备的通讯方式,24位精度,供电电压3.0V ~5.5V,可编程信号转化周期SPS范围从6.25 SPS到960 SPS及一定的PGA增益设置,支持单端采样或多端及差分采样等功能,大致嵌入式关注的内容如上所述,其他的内容在说明书中基本都能查阅。

二、ADC设备地址

在这里插入图片描述
本ADC提供的1个地址pin,可以用于联级IIC通讯时从设备地址的确认,如果只使用一个ADC的情况,需要注意硬件工程师将该脚实际连接的地方,以确定设备地址。
在这里插入图片描述

二、寄存器介绍

在这里插入图片描述
本芯片一共包含7个需要配置的寄存器,根据需求选用,或默认而不必配置。

1.Conversion Register

功能描述:用于存放AD转换后的数据,在重新上电后以及等待每一次的转换结果除来之前,寄存器中的所有位都会被清零,直到完成一次转换。
读写性:只读
寄存器地址: 0x0
位号与功能:无

2.Config Register

功能描述:配置寄存器,包含大部分芯片转化功能的配置位,如操作模式,输入信号选项,波特率,PGA增益设置,差分对比模式配置等。该寄存器是最主要的配置相关寄存器,大多数的性能控制均在此处配置。
读写性:读/写
寄存器地址:0x1
位号与功能:
在这里插入图片描述
Bit[15]: 设备的操作模式配置。当为'写’时:0-无影响,1-进行单次转化,可以理解为是设备的一种使能配置。当为'读’时,读回来为0-设备当前正在一次转化工作中,1-当前空闲。
在这里插入图片描述
Bit[14:12]: 输入管脚配置,根据写入该寄存器不同值,可以配置不同输入引脚作为信号源。当AINn = GND的这种情况,就可以对某一个做类似单端电压的采样工作,将GND换成其他AINx的话就可以作为一种差分结果的采样工作方式。
在这里插入图片描述
Bit[11:9]: PGA增益配置,如上图,此外对PGA的配置全范围比例,在说明中也有,如下图。
在这里插入图片描述
在这里插入图片描述
Bit[8]: 配置采样模式,连续采样模式和单次采样模式。
对于不同的采样模式,需要不同的逻辑来处理,比较直接的区别在于,连续采样模式在配置完成之后,SGM就开始连续采样,并且按照配置的SPS值进行更新ad值,对于MCU来说,需要计算合适的延时,确保每次接收到的ad值是刚更新完成的数据。
而单次采样则不必考虑这种延时,由于单次采样每次都需要重新配置,所以每一个CLK信号之后的数据内容都能保证是最新的ad值。
对于是使用单次采样还是连续采样模式,主要参考AINp和AINn是否需要切换,对于同一个AD的两个input在不需要切换的情况下,只需要做连续采样就可以了。
另一个考虑因素是采样速度的要求,单次采样每一次都要重新配置SGM,会耗费掉一定的实际时间。
在这里插入图片描述

Bit[7:5]: SPS配置,决定采样速率的重要因素,但是需要注意本寄存器只能配置其中某一行的频率,需要结合'Config1 Register’一起使用。
此外,计算每次的采样实际时间是需要考虑滤波阶数的,在SGM58200中,滤波阶数不可配置,仅由SPS值决定,关于这一点,在说明书(2020年版本)中有明确说明:

在这里插入图片描述
例如配置连续采样模
式下的:
SPS = 50, DelayTime =(1000ms / 50)*3 = 60ms;
SPS =960,DelayTime =(1000ms / 960)*4 = 4.17ms;
这是单次不同SPS下的采样理论时间计算方式。

Bit[4]: 配置比较器模式,包含传统比较器和窗口比较器两种模式的配置。

Bit[3]: 配置比较器极性。

Bit[2]: 配置自锁比较器。

Bit[1:0]: 配置比较器使能或触发先后顺序。
主要对比较器的作用顺序,在1次转换,2次或4次转换后生效比较器的功能,或者是直接关闭比较器(默认)的使用,进行相关配置。

3. Lo_Thresh & Hi_Thresh

功能描述:采样电压上下限的配置。在这款AD芯片中的介绍中,号称的精度是24bit,但是实际可用的只有16bit,主要就是受限于,它的上限电压和下限电压都是16bit。如果需要使用小于16位的限制,就可以在此寄存器进行配置。
在这里插入图片描述
需要注意的有两点:1. 上下限电压值也受到PGA配置的影响。
2. 一般配置需要Li大于Lo,注意MSB的配置,默认配置中就是16位的最高最低配置,没有特殊情况就使用默认即可。
读写性:读/写
寄存器地址:0x2,0x3
位号与功能:Lo_thresh与Hi_thresh均为16位的数据寄存器,代表被配置的二进制值。

4.Config1 Register

功能描述:配置1寄存器,主要是一些其他的配置功能。
读写性:写(说明书暂未明确)
寄存器地址:0x4
位号与功能:
Bit[8]: 通过写'1’进行power down操作。
Bit[7]:用于控制SPS值纵向表的寄存器配置,需要结合前面SPS操作一起配置。
在这里插入图片描述
Bit[6]: 通过写'1’配置AINs(当前被配置的一对)输出2微安的电流源。

Bit[5]: 通过写'1’配置ADC选用内部二极管通道。

Bit[4]: 配置IIC总线通信的电气特性,

Bit[3]: 通过写'1’配置AIN3作为ADC的外部基准电压。

5.Chip ID

功能描述:产品ID和版本信息
读写性:只读
寄存器地址:0x5
位号与功能:
Bit[5~7]: 版本号
Bit[8~12]: ID号

6.GN_Trim1 for EXT_REF

功能描述:可配置的外部基准的补偿功能
读写性:未明确
寄存器地址:0x6
位号与功能:
在这里插入图片描述
手册中注明,当Config1 Register中如果配置Bit3是外部基准电压的话,可以在GN_Trim1本寄存器中进行进一步的相关配置,主要是为了补偿外部基准(如果存在)的误差错误。当然,如果没有调用外部基准,或是外部基准为0的时候,本寄存器的功能也就没有作用了。

三、Demo实例

部分寄存器操作代码如下:

void SGM_I2C_InitConfigRegister(unsigned char AinID)
{
	unsigned char devaddr = 0; //定义ADC设备地址
	unsigned char configaddr = 0;//定义设备寄存器地址
	unsigned short configdata = 0;//定义寄存器配置数据

	devaddr = 0x48;	
	//GND-1001000, VDD-1001001, SDA-1001010, SCL-1001011
//选择设备地址,根据联级或其他实际配置做选择

	/*Config1 register的相关配置*/
	configaddr = 0x04;//Config1 register的寄存器地址
	configdata = 0x108; // 0x08: 	0001 0000 1000 					
//Bit [8] = 1: PD power down this part
//Bit [7] = 0: Use SPS from 6.25Hz to 800Hz column
//Bit [6] = 0: No current sourced
//Bit [5] = 0: None
//Bit [4] = 0: Disable leakage blocking circuit.
//Bit [3] = 1:Use AIN3 as external reference for ADC
	I2C_WriteConfigRegister(devaddr, configaddr, configdata);//写入


	/*Config register的相关配置*/
	configaddr = 0x01;//Config register的寄存器地址
	configdata = 0;
	configdata |= (((U16)0x01) << 15);					
//OS[15] = 1: 单次
	configdata |= ((((U16)AinID & 0x03) + 4) << 12);	
//MUX[14:12]= 100: AINP = AIN0 and AINN = GND								
//			= 101: AINP = AIN1 and AINN = GND								
//			= 110: AINP = AIN2 and AINN = GND								
//			= 111: AINP = AIN3 and AINN = GND


	configdata |= (((U16)0x02) << 9);				
//PGA[11:9] = 010: PGA = 8(+- 2.048V)
	configdata |= (((U16)0x01) << 8);				
//MODE[8] = 1:单次采样模式  
	configdata |= (((U16)0x03) << 5);				
//DR[7:5] = 011:50Hz 或 60Hz

	I2C_WriteConfigRegister(devaddr, configaddr, configdata);//写入
	//启动RDY低有效模式
	/*Lo_Thresh register的相关配置*/
	configaddr = 0x02;//寄存器地址
	configdata = 0x00;					
	I2C_WriteConfigRegister(devaddr, configaddr, configdata);
	/*Hi_Thresh register的相关配置*/
	configaddr = 0x03;//寄存器地址
	configdata = 0x8000;				
	I2C_WriteConfigRegister(devaddr, configaddr, configdata);

}

Demo中对部分常用的寄存器和功能做出了配置,主要包括SPS采样率, AINx采样源选择,Ext外部基准选择,ADC设备地址选择,PGA增益比例,单次或连续采样模式配置,根据手册中不同寄存器地址写入相对应的值完成全部操作。
其他对ADC的功能配置需要依据产品实际需求,比如手册中明确提到对抗工频的采样率要求是50/60SPS,

在这里插入图片描述
此外还有一个本模块的隐藏问题,就是采样周期的计算,在前文中已经对采样计算方式做了描述,基于该ADC的滤波阶数不可配置的问题,对应的实际产生实时信号的延时需要注意,这个问题也导致他的采样速率会比其他产品有较明显的差异,在需要满足采样周期的前提下,建议多联级使用此ADC。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多