主题中讨论的其他器件:REF5025、
计算 ADS1282的输入电压时遇到问题。 我使用 REF5025作为电压基准。
ADS1282连接到 TI Tiva TM4C1231D5PMT MCU。
ADS1282输入端的电压约为0.5V。
我在 DOUT 上获得以下读数、
MCU 使用 ADC_READ()函数从 ADC 读取数据、
int read_adc (){
unsigned int adc [6];
//0。 将芯片选择线路切换为低电平(低电平有效)。
///ROM_GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_3、0);
//ads1282_RDATA();
ADC[0]= Rx_spi0 ();
ADC[1]= rx_spi0 ();
ADC[2]= Rx_spi0 ();
ADC[3]= Rx_spi0 ();
//1. 将芯片选择线路切换为低电平(低电平有效)。
///ROM_GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_3、GPIO_PIN_3);
INT DATA = ADC[0]<< 24 | ADC[1]<< 16 | ADC[2]<< 8 | ADC[3];
unsigned char pol 位=数据>> 31;
如果(pol 位= 0)
{
返回数据;
}
其他
{
数据=数据- 1;
数据=~数据;
数据=-1*数据;
返回数据;
}
}
ADC 读数(数据)通过 UART 发送到计算机。
如果(CH > 0){
//usprintf (&status、"-%d<"、abs (data));
STATUS[0]='>';
STATUS[1]='-';
STATUS[2]= ABS (DATA)>> 24;
STATUS[3]= ABS (DATA)>> 16;
STATUS[4]= ABS (DATA)>> 8;
STATUS[5]= ABS (DATA)>> 0;
STATUS[6]='<';
}
否则{
//usprintf (&status、"++%d<"、abs (data));
STATUS[0]='>';
STATUS[1]='+';
STATUS[2]= ABS (DATA)>> 24;
STATUS[3]= ABS (DATA)>> 16;
STATUS[4]= ABS (DATA)>> 8;
STATUS[5]= ABS (DATA)>> 0;
STATUS[6]='<';
}
UARTSend (status、7);
ADC 数据被重新放入一个 c#程序中、
公共 int adc_count ()
{
port.Write ("M");
byte] ADC_COUNT_byte =新字节[7];
系统。线程。线程。睡眠(1);
port.read (adc_count_BYTE、0、7);
字符串结果= System.Text.Encoding.UTF8.GetString (ADC_COUNT_BYTE);
//Trace.WriteLine (结果);
int ADC_count = 0;
如果(ADC_COUNT_BYTE[1]='-')
{
ADC_COUNT =-1 *(ADC_COUNT_BYTE[2]<< 24 | ADC_COUNT_BYTE[3]<< 16 | ADC_COUNT_BYTE[4]<< 8 | ADC_COUNT_BYTE[5]);
trace.WriteLine ($"-ADC count ->{ADC_count}");
trace.WriteLine ($"ADC_COUNT_BYTE[2]={ADC_COUNT_BYTE[2]}");
trace.WriteLine ($"ADC_COUNT_BYTE[3]={ADC_COUNT_BYTE[3]}");
trace.WriteLine ($"ADC_COUNT_BYTE[4]={ADC_COUNT_BYTE[4]}");
trace.WriteLine ($"ADC_COUNT_BYTE[5]={ADC_COUNT_BYTE[5]}");
}
如果(ADC_COUNT_BYTE[1]='+')
{
ADC_COUNT = ADC_COUNT_BYTE[2]<< 24 | ADC_COUNT_BYTE[3]<< 16 | ADC_COUNT_BYTE[4]<< 8 | ADC_COUNT_BYTE[5];
trace.WriteLine ($"+ADC count ->{ADC_count}");
trace.WriteLine ($"ADC_COUNT_BYTE[2]={ADC_COUNT_BYTE[2]}");
trace.WriteLine ($"ADC_COUNT_BYTE[3]={ADC_COUNT_BYTE[3]}");
trace.WriteLine ($"ADC_COUNT_BYTE[4]={ADC_COUNT_BYTE[4]}");
trace.WriteLine ($"ADC_COUNT_BYTE[5]={ADC_COUNT_BYTE[5]}");
}
返回 ADC_COUNT;
}
ADC 电压的计算公式为:
公共双精度 adc_volage()
{
int adc_c = adc_count ();
双电压=(双电压)(ADC_c * 2.5 / Math.PoW (2、30));
//双电压=(double)(adc_c * 2.328e-9);
trace.WriteLine ("ADC 电压->{VOLTAGE}");
返回电压;
}
它的输出是、
-ADC 计数->-842794107
ADC_COUNT_BYTE[2]= 50
ADC_COUNT_BYTE[3]= 60
ADC_COUNT_BYTE[4]= 4
ADC_COUNT_BYTE[5]= 123
ADC 电压->-1.96228294400498
我似乎不能弄清楚我的错误。 请提出任何建议。
谢谢、
Allan