This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好。 我遇到了 我们使用 ADS112C04芯片制作的 ADC 模块问题。 附件为所述模块的原理图和 PCB 设计。 该器件从 ADS1115模块汲取灵感、添加了二极管、用于防止输入电压超出限值(-0.3V 和5.3v)。
该模块能够与通过运行 Wire.beginTransmission(address 进行验证的微控制器(ESP32模块)进行通信。 但是、随着添加的更多命令(即 RESET、START、rreg 和 wreg)、IC 开始不能正常工作、最终会冒烟。 所用代码见附件。 目标是使用内部基准电压在2ksps 条件下执行连续转换。
#include <Wire.h> int address=0x40; int decimalResolution=6; int interruptPin = 36; int initialTime=0; int nowTime=0; volatile bool rdy=false; void setup() { Serial.begin(115200); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), adsReady, FALLING); Wire.begin(); if(ADS_begin()){ Serial.println("Iz alive! Iz alive"); } else{ Serial.println("Dedz"); } ADS_reset(); ADS_requestADC(); Serial.println(ADS_readRegister(address,0x20),BIN); Serial.println(ADS_readRegister(address,0x24),BIN); Serial.println(ADS_readRegister(address,0x28),BIN); Serial.println(ADS_readRegister(address,0x2C),BIN); ADS_start(); initialTime=micros(); Serial.println(ADS_readRegister(address,0x28),BIN); } void loop() { if (rdy == true) { rdy=false; int voltageRecord = ADS_readData(address); nowTime = micros(); int timeRecord = (nowTime - initialTime)/1000; String dataInstance=String(timeRecord,decimalResolution)+","+String(voltageRecord,decimalResolution); Serial.println(dataInstance); } } bool ADS_begin() { if (! ADS_isConnected()) return false; return true; } bool ADS_isConnected() { Wire.beginTransmission(address); return (Wire.endTransmission() == 0); } void ADS_start(){ Wire.beginTransmission(address); Wire.write((uint8_t)0x08); Wire.endTransmission(); } void ADS_reset(){ Wire.beginTransmission(address); Wire.write((uint8_t)0x06); Wire.endTransmission(); } void ADS_requestADC() { // write to register is needed in continuous mode as other flags can be changed uint16_t config_1 = 0x00; // bit 7-4 Input multiplexer config config_1 |= 0x00; // bit 3-1 Gain config_1 |= 0x00; // bit 0 PGA enable uint16_t config_2 = 0x40; // bit 7-5 Data rate config_2 |= 0x00; // bit 4 Opeating mode config_2 |= 0x08; // bit 3 conversion mode config_2 |= 0x00; // bit 2-1 voltage reference config_2 |= 0x00; // bit 0 temperature sensor mode Serial.println(ADS_writeRegister(address, config_1, config_2)); } bool ADS_writeRegister(uint8_t address, uint16_t config_1, uint16_t config_2) { Wire.beginTransmission(address); Wire.write((uint8_t)0x40); Wire.write((uint8_t)config_1); Wire.write((uint8_t)0x44); Wire.write((uint8_t)config_2); return (Wire.endTransmission() == 0); } int ADS_readRegister(uint8_t address,uint8_t reg_map) { uint16_t value=0; Wire.beginTransmission(address); Wire.write((uint8_t)reg_map); Wire.endTransmission(); Wire.requestFrom((int) address, 1); value=Wire.read(); return value; } int ADS_readData(uint8_t address) { uint16_t value=0; int rv=0; Wire.beginTransmission(address); Wire.write((uint8_t)0x10); Wire.endTransmission(); rv=Wire.requestFrom((int) address, 2); if (rv == 2) { value = Wire.read() << 8; value += Wire.read(); return value; } } void adsReady() { rdy = true; }
我不确定这是硬件问题还是软件问题。 想知道我们哪里出了问题。 但我怀疑 这个问题与 IC 的 RESET 引脚连接到 VDD 时调用的 RESET 命令有关。 烟似乎来自这个引脚。 在修复模块之前、希望验证我的怀疑。
非常感谢。
您好!
我怀疑 这个问题与 IC 的 RESET 引脚连接到 VDD 时调用的 RESET 命令有关。
大多数软件问题不会导致我们的零件开始吸烟,这很可能是硬件问题。 您是否在器件的电源和输入引脚上使用了示波器? 这是检查是否在任何一个引脚上没有施加过大电压的好方法。 您为器件提供什么电压? L1和 L2是什么种类的组件? 如果高电感值导致电源引脚上出现电压尖峰可能会损坏器件、我不会感到意外。
确保您没有意外地交换连接。 此时您可能还损坏了器件、因此请记住、即使您找到并修复了该问题、您仍可能会注意到此器件上有烟雾和燃烧。
如果您还有任何问题、请告诉我、
列维德弗里斯