电子秤ADC芯片CS1237技术资料问题合集

问题11:实际应用中,多个称重传感器应该怎么与ADC连接?

解答:如果传感器是测量同一物体(例如:厨房垃圾处理器),一般建议使用并联的方式。则相同类型的信号线连接在一起。对于传感器的要求是产品规格尽量一致,尤其是灵敏度需要一致,否则会导致偏载问题。如果使用REFOUT引脚输出VS,需要注意传感器的激励电流是否在合理范围内。举例:

如果系统不是测量同一个物体,则传感器单独连接不同的模拟通道或不同的 ADC。

问题 12:为什么 REFOUT 引脚输出的电压值小于 VDD 引脚的电压值?REFOUT 引脚最大输出电流大约多少mA?

解答:
1 、因为激励源控制电路存在 Ron(典型值 10ohm),当电路接上传感器时, 激励电流经过 Ron 会产生压降, 这是正常现象。
2 、REFOUT 引脚最大输出电流约为 20mA。假如多个小阻值传感器(例如 350ohm)并联使用,建 议使用外部激励源,以免造成激励源电压下降严重。大阻值传感器(例如 1200ohm)并联使用则影响不大。

问题 13:如果使用外部激励源作为参考,不使用 REFOUT 输出作为参考,电路如何实现?

解答:悬空 REFOUT 引脚即可。但需要注意参考电压不能高于 VDD。对于桥式传感器, 低成本应用可以使用 VDD 作为激励源。如下图所示:

问题 14:CS1237 是否可以使用开关电源进行供电?
解答:可以,但不建议直接使用开关电源供电。最好经过电源滤波,然后次级电源使用线性电源电路给 ADC 供电。

问题 15:CS1237的通信接口是标准 SPI 端口吗?
解答:不是的。CS1237 是 Chipsea  自定义的双向通信接口。需要主控使用 GPIO 模拟时序。
 

问题 16:CS1237是否可以与主控使用不同的电压供电?
解答:可以。但需要注意通信的 GPIO 电平是否符合要求。举例: CS123x 使用 5.0V 供电,MCU    使用 3.3V 供电。由于 VIH 最小值为 0.7*5.0V=3.5V ,因此 MCU 的 SCLK 高电平必须>3.5V 才能使ADC 有效识别。可以使用电平转换电路实现 IO 电平匹配。

问题 17:CS1237的模拟输入如果处于悬空状态,AD 值乱跳是否正常?
解答:这是正常现象。因为 CS1237的模拟输入处于不确定状态,因此 AD 值会乱跳。

问题 18:CS1237切换通道时,需要像其它 sigma-delta ADC 丢掉前几笔数据吗?
解答:CS1237切换通道时会自行丢掉无效数据,无需用户额外处理。如下图所示:
 

鼎盛合(peakcoo.com)资料

问题 19:CS1237/CS1238 的读写操作需要注意什么事情?
解答:
1、主控上电后默认设置:SCL 输出低电平,SDA 输入开上拉。
2、通信时序 SCL 高电平需要<100μs ,否则会误触发进入休眠模式,一般建议 SCL=2μs~ 15μs。
3、完整时序为 46 个 clocks。
举例: 读取 AD 值操作,发送 24 个 CLK 读取 AD 值,然后发送 22 个空 CLK。如果采用上电默认配置, 也可以发送 24 个 CLK+3 个空 CLK(非完整时序) ,简化读取 AD 值操作。
 

4、在 New Data Update 期间(t8),读写 ADC 操作无效, 且时序复位。因此避免在 t8 期间读取AD 值, 以免时序混乱。

5、读取 AD 值(包括读写寄存器), 建议使用外部下降沿中断判断 New Data Ready,如果中断有 效则标志位使能,然后根据标志位读取 AD 值。如果不是在中断函数里操作读写时序, 则读写操作前需要关闭相应的外部中断,读写操作完毕后再开启中断。
6、如果使用查询的方法(每隔一段时间判断 SDA 是否为低电平), 需要缩短查询间隔(例如1ms~5ms),避免读取数据期间 New Data Update 导致时序错乱, 表现为 AD 值每隔一段时间乱跳。
7 、CS1237配置命令的长度为 7bits ,因此写配置命令(0x65)/读配置命令(0x56)的 bit7无效,发送数据时发送 bit6~bit0。

问题 20:为什么 AD 值每隔一段时间会跳动一下又恢复正常?
解答:因为 CS1237在 New Data Update 期间会更新 AD 值,且时序复位。如果读取 AD 期间遇到 New Data Update 就会导致时序错乱,表现为 AD 码值错乱。
举例:如下图所示,虽然每次读取 AD 值前都判断 SDA 是否为低电平,但如果没有时序对齐的话,就会可能出现读取期间遇到New Data Update 的状况。

读取 AD 值(包括读写寄存器) ,建议使用外部下降沿中断判断 New Data Ready,如果中断有效则标志位使能,然后根据标志位读取 AD 值。外部中断起到时序对齐的作用。
如果不是在中断函数里操作读写时序,则读写操作前需要关闭相应的外部中断,读写操作完毕后再开启中断。
如果使用定时查询的方法(每隔一段时间判断 SDA 是否为低电平) ,需要缩短查询间隔(例如 1ms~5ms)。 DR=640Hz/1280Hz 则不建议使用查询判断,以免定时中断频繁产生。
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
_TXD0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); 以下是一个简单的CS5532电子秤程序的示例,用于读取重量数据: ```C #include /*Configure GPIO pin : ETH_RMII_REF_CLK_Pin */ GPIO_InitStruct.Pin = ETH_RMII_REF_CLK_Pin; GPIO_InitStruct.Mode = <stdio.h> #include <wiringPi.h> #include <wiringPiI2C.h> #define CS5532_ADDRESS 0x GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Altern48 // CS5532 I2C地址 int main() { int fd; unsigned char data[3]; int result; ate = GPIO_AF11_ETH; HAL_GPIO_Init(ETH_RMII_REF_CLK_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin wiringPiSetup(); // 初始化wiringPi库 fd = wiringPiI2CSetup(CS5532_ADDRESS); // 初始化 Output Level */ HAL_GPIO_WritePin(ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET); } ``` 在上述代码I2C设备 while(1) { // 发送读取命令 wiringPiI2CWrite(fd中,我们使用了HAL_ETH_ReadPHYRegister函数来读取PHY寄存器的值,从而判断网线是否插入, 0x00); // 读取数据 result = wiringPiI2CRead(fd); data[0]。具体的寄存器地址和位定义可以根据您使用的PHY芯片而定。 请注意,上述代码 = result & 0xFF; result = wiringPiI2CRead(fd); data[1] = result & 0xFF只是一个简单示例,您可能需要根据实际情况进行修改和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值