尊敬的 TI、尊敬的 Angel Rodriguez、
我们正在测试我在上一个问题[1]中提到的电路板 、以通过 RTD 3线 Pt100传感器使用 ADS1220测量精确温度。
1.原理图
在验证了 EVB 和连接到 Arduino MCU 的 cjmcu-1220后、我们使用此原理图。
ADS1220连接到 SPI 总线和 STM32H7 MCU、用于 MOSI/MISO/CK 和 CS/DRDY 通过 GPIO 扩展器连接。
GPIO 扩展器工作正常、我们可以通过配置寄存器的 SPI 与 ADS1220进行通信、并读取输出代码、不过接收到的数据似乎不正确、但硬件连接似乎正常工作
SPI 通信
SPI 线路上的探测似乎正确
D4=、D5=MISO、D6=MOSI、D7=CS
我们可以观察到传入的 MISO 数据、
软件配置
我们目前正在使用以下代码
#include <Adafruit_MCP23X17.h> #include <Protocentral_ADS1220.h> #include <SPI.h> #include <atomic> Adafruit_MCP23X17 mcp; #define PGA 32 // Programmable Gain, confirm that the same as set_pga_gain #define VREF 2.048 // Internal reference of 2.048V #define VFSR VREF/PGA #define FULL_SCALE (((long int)1<<23)-1) #define ADS1220_CS_PIN PIN_SPI_SS #define ADS1220_DRDY_PIN 2 // #define NUM_ADS1220 8 #define NUM_ADS1220 1 SPISettings spi_settings(1000000, MSBFIRST, SPI_MODE1); Protocentral_ADS1220 ads1220[NUM_ADS1220]; int32_t adc_data; float ADS1220Temperature; void setup() { Serial.begin(115200); while (!Serial) ; delay(5000); Serial.println("Set up MCP23017"); // if (!mcp.begin_I2C(0x20, &Wire2)) { if (!mcp.begin_I2C(0x20, &Wire2)) { Serial.println("Failed to initialize MCP23X17 device at 0x20"); } for (size_t i = 0; i < 8; i++) { mcp.pinMode(7 - i, INPUT); // 7-0: port A, DRDY, INPUT mcp.pinMode(i + 8, OUTPUT); // 8-15: port B, CS, OUTPUT } for (size_t i = 0; i < 8; i++) { mcp.digitalWrite(i + 8, HIGH); // Set CS to HIGH } Serial.println("Set up ADS1220"); SPI.begin(); for (size_t i = 0; i < NUM_ADS1220; i++) { ads1220[i] = Protocentral_ADS1220(spi_settings); ads1220[i].begin( [i] (bool level) { mcp.digitalWrite(i + 8, level); }, [i] () -> bool { return mcp.digitalRead(7 - i); } ); ads1220[i].set_pga_gain(PGA_GAIN_1); ads1220[i].set_data_rate(DR_600SPS); ads1220[i].select_mux_channels(MUX_AIN0_AIN1); //Configure for differential measurement between AIN0 and AIN1 ads1220[i].set_VREF(VREF_REFP0); ads1220[i].set_IDAC_Current(IDAC_250); ads1220[i].set_IDAC2_Route(IDAC2_AIN0); ads1220[i].set_IDAC1_Route(IDAC1_AIN1); ads1220[i].PrintRegisterValues(); ads1220[i].set_conv_mode_single_shot(); //Set Single shot mode } Serial.println("Start"); } void loop() { for (size_t i = 0; i < NUM_ADS1220; i++) { adc_data = ads1220[i].Read_SingleShot_WaitForData(); Serial.print("\n\nADS1220 No."); Serial.print(i); Serial.print(" Diff (mV): "); Serial.print(convertToMilliV(adc_data)); delay(500); // float temperature = readADS1220Temperature(i); // Serial.print("\nADS1220 No."); // Serial.print(i); // Serial.print(" Temperature in °C: "); // Serial.print(temperature); // delay(100); } delay(1000); } float convertToMilliV(int32_t i32data) { return (float)((i32data*VFSR*1000)/FULL_SCALE); } float readADS1220Temperature(size_t i) { ads1220[i].TemperatureSensorMode_enable(); delay(50); // waiting time after register changed, for 20SPS float temperature = (ads1220[i].Read_Data_Samples() / 1000 * 0.03125); // In °C ads1220[i].TemperatureSensorMode_disable(); delay(50); // waiting time after register changed, for 20SPS return temperature; }
不过、我们会收到以下数据、
ADS1220 0号差分电压(mV):-1.47
读取:0xFFFD0D28 (-193240)
因此、我想知道电流寄存器配置是否正确以便为三线 RTD 测量检索正确的数据。
我的好!
Zabieru.
[1]: e2e.ti.com/.../ads1220-ads1220-spi-connection-to-stm32h7