Hallo,
ich habe ein Problem mit einem I2C ADC (ADS7828) in meinem System.
Dieser läuft nicht so wie ich will.
An den 8 Eingängen messe ich 4 mal die Spannung
(Spgteiler->Impedanzwandler) und 4 mal den Strom (LEM-Wandler
LTS15-NP->Impedanzwandler).
Wie in der Schaltung zu sehen betreibe ich den Wandler mit 5V (~4,96V).
1 | uint16_t i2c_adc_dcdc_read(uint8_t channel)
|
2 | //
|
3 | {
|
4 | uint32_t buffer = 0; // average puffer
|
5 | uint8_t adcmux = i2c_dcdcadc_add[channel]; // select related adc channel address
|
6 | uint8_t lowbyte, highbyte; // buffer for incoming data
|
7 | uint8_t i; // iteration variable
|
8 |
|
9 | i2c_start_wait(I2C_DCDCADC+I2C_WRITE); // start i2c transfer (DCDCADC)
|
10 | i2c_write(adcmux); // CMD byte: single ended, channel selection, int ref off and power-down mode
|
11 | i2c_stop(); // stop i2c transfer
|
12 |
|
13 | //for(i = 0; i < I2C_AVG_NUM; i++)
|
14 | //{
|
15 | i2c_start_wait(I2C_DCDCADC+I2C_READ); // start i2c transfer
|
16 | highbyte = i2c_readAck(); // read high byte conversion register
|
17 | lowbyte = i2c_readNak(); // read low byte conversion register
|
18 | i2c_stop();
|
19 |
|
20 | // buffer += ((highbyte<<8) + lowbyte); // high + low byte, add adc value to average puffer
|
21 | //}
|
22 |
|
23 | //buffer = buffer >> I2C_AVG_SHIFT; // calculate average result
|
24 | buffer = (highbyte<<8) + lowbyte;
|
25 | return buffer; // return result
|
26 | }
|
Folgendes Problem habe ich mit dem ADS7828. Wenn ich den Strom der
LEM-Wandler im Leerlauf messen will, dann ergeben sich am Ausgang des
Wandlers ~2,5V für 0A. Diese ~2,5V liegen auch an den Eingängen des
ADS7828 an. Wenn ich jedoch meinen Quellcode für alle 8 Kanäle
durchlaufen lasse, dann springen mir die gemessenen Werte zu sehr hin
und her, z.B. bei einer Strommessung im Leerlauf von 2,4V-2,6V, sodass
es sich krasse Ungenauigkeiten ergeben.
Betrieben wird der ADS7828 mit Single Ended und externer Ref Spg bzw
PowerDown Mode 0.
Hat jemand schon ähnliche Probleme mit dem ADS7828 gehabt?
Als Lösungsansatz habe ich einen Kanal mehrmals durchlaufen lassen ohne
den Kanal zu wechseln, das hat aber auch keine Verbesserung gebracht.