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.

[参考译文] 编译器/TM4C123GH6PZ:外部 ADC 接口

Guru**** 1826200 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/817110/compiler-tm4c123gh6pz-external-adc-interface

器件型号:TM4C123GH6PZ
主题中讨论的其他器件:TM4C123

工具/软件:TI C/C++编译器

您好!

我将 TM4C123与 LTC2442外部 ADC 相连。 我在使用延迟读取 ADC 值时遇到问题。 我将使用2种方法读取 ADC。  

SSI 配置

void LTC2442_SPI_CONFIG (void)
{
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI0));
/配置 SSI0ePeripheral 位于端口 A 上、引脚2、4和5。*/ SYSCL_ROM_GPIO4*/

引脚





配置 GPIO_PIN_ROM_GPIO4*/ GPIO4*/输出引脚;配置 GPIO_PIN_ROM_GPIO4*/ GPIO4*/ GPIO4*/ GPIO4_ROM_GPIO4*/ GPIO4*/ GPIO_RESPON_ROM_OUTP_ROM_OUTPSI_ROM_OUTPSI_ROM_IN_ROM_OUTPSION_ROM_IN_IN_ROM_TOP_IN_ROM_TOP_ROM_TOP_CONTROM_TOPON_ROM_IN_ROM_TOP_CONTROM_TOP_IN_IN_IN_IN_IN_CONTROM_TOPON_IN_IN_
LTC2442_SPI_CS_HI;
ROM_GPIOPinTypeGPIOInput (GPIO_Porta_base、GPIO_PIN_7);//忙状态引脚
//为 SSI*/
ROM_GPIOPinTypeSSI (GPIO_Porta_base、LTC2442_SPI_PIN | LTC2442_SPI_SPI_PIN)配置引脚;针对 SSI0和 SSIClock_R0*
(SS_SSIP_SS_SS0*)、CLUST_SSIP_C24_C24_CK_SSIP_CLK_CL_CLK_SIMP_CL_C24*(
SSIP_CL_CK_SIMP_CL_CK_CL_CL_CL_CK_SIMP_CL_CLK_SIMP_CK_CL_CL_CK_SIMP_CK_SIMP_CK_CL_CL
SSI_MODE_MASTER、2000000、16);
ROM_SSIEnable (SSI0_BASE);
} 

第一种方法

int LTC2442_ADC_OutputRead (unsigned int Channelnumber)
{
uint32_t TX[2]={0};
uint32_t data =0;
int i=0;
float sum =0;
float ADC_Conv = 0.2980232416405;
//unsigned int channel_number = 0xB0000000;//unsigned TIFPT_42_while

、GPIO32_datored GPIO_portale_pin;// t_gpin + while
/*在读取 ADC 数据之后将 CS 引脚设为低电平*/
LTC2442_SPI_CS_LO;

while (GPIOPinRead (GPIO_Porta_base、LTC2442_SPI_BUSY_PIN));
/*读取 ADC 数据后将 CS 引脚设为低电平*/
LTC2442_SPI_CS_LO;
//ADC_SPI_Rqst_pkt= LTC2442_ADC_SPIPktGen (ADC_Channel_No);//为 ADC 通道数据请求生成数据包。
//ADC_SPI_READ_Pkt= LTC2442_ADC_Communication (ADC_SPI_Rqst_pkt); //虚拟读取以设置下一个输出通道

开关(通道号)
{

案例0:
{

for (i =0;i<2;i++)
{
for (ulindex = 0;ulindex < NUM_SSI_data;ulindex++)
{

ROM_SSIDataPut (SSI0_BASE、ch0[ulindex]);
while (ROM_SSIBusy (SSI0_BASE)){}
ROM_SSIDataGet (SSI0_BASE、&ulDataRx[ulindex]);
while (ROM_SSIBusy (SSI0_BASE)){}
延迟(100);//5毫秒延迟
}
}

中断;
}
LTC2442_SPI_CS_HI; 

方法2.

unsigned int RTC2442_ADC_Communication (unsigned int ADC_SPI_Rqst_pkt)
{
volatile unsigned int Temp_Pkt= 0、ADC_SPI_Read_Pkt=0、Tx_Temp_buff = 0;
while (GPIOPinRead (GPIO_Porta_base、LTC2442_SPI_Busy_PIN));
/*读取 ADC 数据后使 cs 引脚变为低电平*/
LTC2442_SPI_CS_LO;

while (ROM_SSIBusy (SSI0_BASE){}

Tx_Temp_buff =((ADC_SPI_Rqst_pkt>16)和0x0000Temp &;ROM_SSIFFFF

(SSI0_BASE











)=(ADC_SSIFFFF);

发送到 DAC 的//第二个16位数据包。

while (SSIBusy (SSI0_BASE)){}

ROM_SSIDataGet (SSI0_BASE、&Temp_Pktt);

while (SSIBusy (SSI0_BASE)){}

LTC2442_SPI_CS_HI;

ADC_SPI_READ_Pkt|= Temp_Pktt;
return ADC_SPI_PCT_Read
;} 

在第一种方法中、我将延迟并能够读取数据。 如果我不进行延迟、则表示它无法读取数据、 并且在方法2 中无延迟地读取数据。

为何延迟会影响数据读取。

我想读取 ADC 输出端的恒定电压。  当我尝试读取电压 时、电 压会在微伏范围内波动。 我在 ADC 的输入端连接了一个恒压源、并读取 ADC 输出、但电压在微伏范围内波动、取平均值时、这些值也仅发生波动。 是否有任何方法可以减少这种波动。

谢谢、

Alphy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我想首先指出,“这里很少有人”曾抱怨过“µV”波动!   

    您已经选择了一个(非常)强大的24位 ADC -此类器件实现其规格的能力-在很大程度上取决于其实现方式!   (以及您对此类器件(相当大)要求的理解、接受和合规性!)   其中一些"命令"如下所示:

    • 线性(现在可能是 ADI)销售此器件的专用"评估板"-任何形式 的"不专家级 PCB/更糟糕的是-"试验电路板"-绝对没有机会!  您对 ADC 的物理实现保持沉默、这一点至关重要。   (µV Δ V 波动-几乎肯定表明存在评估板)  您的 ADC IC 是如何安装的?
    • 假定一个合适的评估板-到 ADC 评估板的电力输送有多正确和稳定?  您能否"全盘"地测量 ADC IC 电源引脚的电力输送至微伏?
    • 注意到 µV 波动'时、您不提供此类波动的程度。  这种情况可能很严重-目前未知。
    • "µV 恒定/稳定"是如何应用于 ADC 输入的"恒定电压源"。   再说一次-您是否能够(真正)将其测量为 µV -尤其是"进行"转换?
    • 您的 ADC (假设的评估板)与您的'4C123'(假设的 Launchpad?)之间的"公共接地连接"的正确、精确和安全程度   

    25µVRMS 您报告的"延迟差异"- ADC 规格显示:"6.9Hz/200nVRMS 至3.5kHz/μ s"-因此转换率确实会影响转换分辨率。   但  µV 怀疑"上述问题"是"最有可能怀疑" '"波动的原因!  

    还请记住、这样、" ADC 转换数据位的数量过多最常用于扩展动态信号范围"(即通过防止或减少 "次侧削波")、并且(而不是)简单地提高信号分辨率。

    24位 ADC 是"真正的优势"所在的省份-此处(包括本记者)很少(曾经)可能需要(或实现)此类精度。  如上所述-需要"近乎完美的实施和测量技术"的"完美风暴"、以提取如此出色但要求苛刻的器件的"完整测量功率"...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我不熟悉 LTC 设备。 需要检查的一点是器件是否在 SDO 输出上指示 EAP=0。 我建议您使用范围来检查您是否获得了预期的数据。 由于您使用的是外部 ADC、因此如果您认为外部 ADC 以恒定输入电压提供波动的转换输出、则可以直接从器件供应商处获得更好的支持。  

     我还想给大家一个机会,明天我将在一个星期内离开办公室,只能有限地进入论坛。 如果您的问题今天无法解决、我建议您创建一个新主题、以便我们的支持团队为您提供帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    非常感谢您的快速回复。

    回答您的疑问如下:

    我们不使用评估套件,ADC 安装在我们的定制 PCB 上。 该电路板专为我们的内部应用而设计。我们需要在 ADC 输出端实现.001%的精度。

    2.我使用高精度万用表测量了输入源(电池)的电压 、测量值一致。 输入电压没有波动。

    3、I AM 读数为1670036、1670031、1670028、1670033、1670035、1670039、1670040、 在13.8Hz 输出速率下、速度/分辨率噪声为220nVRMS、同时抑制50Hz / 60Hz。

    今天、我还尝试读取了这些值、并且仍然存在波动。 我们是否可以对程序执行任何操作以实现更高的精度。

    谢谢、

    Alphy  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您-您的详细信息(两者都很有帮助且受到赞赏)。

    您/您的公司"勇敢"和/或精通"PCB 布局艺术/科学"或...  (外交阻挡进一步说明。)

    您应该知道、它刚刚过了06:00 (在美国西海岸)-今天是一个全国性的假期-尽管对我的团队来说是一个"工作假期"。   (因此、如果此"快速点击"未能正确解决问题、此回复必须被削减/缩短-我可以在我们的"礼节性义务"完成后返回。)

    立即回复您的数字商品:

    1. 同样、我们的调查结果"证明"几乎总是-"使用供应商生产/提供的评估板证明是最佳的"。   即使是较小的 PCB 布局、 "出问题或折衷"也可能会降低此类敏感器件的性能。   (不暗示任何批评-这是一个"简单的事实陈述"。)  至少、我的团队会"购买评估板"、然后"复制/适当"所有内容、"不会被绑定!"  (在我们尝试此类"扩展 PCB 设计"之前、我们先完成了此"删除"操作。)   即使是 PCB 层的数量及其几何形状和重叠、也很可能证明至关重要...
    2. 再次-您的"高精度万用表"(真的)是否"胜任此任务?"   (请注意、精度表示"可重复性"-您在此处选择了"精度"。)  如果我们假设您的仪表(即"ulti-meter")"符合任务要求"-您在 MCU 访问的同时进行(并记录)一系列测量、器件读数?  (观看"测量仪"几秒钟是不够的。)
    3. 查看您的读数-但对于前两个读数-这些读数会单调增加。   您的 ADC 所受的温度变化是导致此类单调"波动"的(通常)原因。   未声明为:
      • 您的 ADC 在"行驶收获"之前已通电多长时间?
      • 温度保持多稳定-在 ADC 的位置/周围?   当然还有-在 ADC 器件本身。
      • "电源或基准"是多少(非常)稳定-它驱动 ADC 的信号输入?

      最后、您会注意到"在13.8Hz 输出速率下、速度/分辨率是220nVRMS 噪声"-然而、ADC 的规格列表"6.9Hz/200nVRMS"-建议 ADC 的分辨率应(而不是)变为440nVRMS -您不同意?

    事实证明、在尝试发现器件的"正常和习惯"行为和/或响应时、联系器件供应商总是很有用。   对我来说、减去"所有事实"、您观察到的情况看起来(基本上)正常。   祝您好运...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alphy、

     我希望 CB1的评论对您有所帮助。 我也不知道除了让 CB1等社区成员分享他宝贵的意见以外,还有什么可以帮助他们。 您使用的是第三方组件、我们对此没有任何经验。 我建议您直接联系组件供应商以寻求帮助。