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.

[参考译文] MSP430FG6626:CTSD16校准

Guru**** 2392455 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/794341/msp430fg6626-ctsd16-calibration

器件型号:MSP430FG6626

您好!

我正在尝试使用内部 DAC 连接校准 CTSD16 A/D、但我无法获得与 DAC 输出相对应的读数。  我能够独立使用 A/D 和 DAC、并且可以通过 A/D 监视 Veref+、内部温度传感器和 AVcc、但每次我尝试读取 DAC 时、无论 DAC 输出设置为什么、我都得到大约32768的读数。  除了将通道设置 为 CTSD16_INPUT_CH18之外、读取 DAC 是否还有任何特殊的注意事项?  

谢谢、

Justin

 

void initialize_dac ()
{
//将基准设置为外部、将放大器设置为中速且电流
DAC12_0CTL0 = DAC12SREF_3 | DAC12AMP_5 | DAC12OPS;

//将增益设置为2个基准(如果 DAC12OG 开启且 DAC12IR 关闭增益为2个)
DAC12_0CTL1 = DAC12OG;
_DELAY_CYCLES (1000);
//清除数据寄存器
DAC12_0DAT = 0;

//在 DAC 上运行内部校准例程
DAC12_0CALCTL = DAC12PW;//设置密码并禁用校准寄存器锁定位
DAC12_0CTL0 |= DAC12CALON;//开始校准
while (DAC12_0CTL0 & DAC12CALON);//等待校准完成
DAC12_0CALCTL =( DAC12PW | DAC12LOCK );//启用校准寄存器锁定位

DAC12_0CTL0 |= DAC12ENC;
}

#define CALSAMPLES 10
void adcOffsetCal ()
{
//为 CTDS16
CTSD16CTL 启用外部基准块&&~CTSD16OFFG;
//必须将外部基准 IO 引脚设置为备用功能
P5SEL |= BIT0;

//启用 P6SEL.0来为 A0-A3上的转换提供栅极基准
//对于 A4和 A5
P6SEL,为 P4SEL.6和 P4SEL.1|= BIT3 + BIT2 + BIT1 + BIT0;
P4SEL |= BIT6 + BIT1;

DAC12_0DAT = 1000;
//使用外部基准和内部电阻器初始化 CTSD16以实现时钟
CTSD16_init (CTSD16_base、CTSD16_RTR_INPUT_CHARGEPUMP_BURST_REQUEST_ENABLE、CTSD16_REF_EXTERNAL);


CTSD16_initConvertParam AdvParam ={0};

CTSD16_INPUT
= convAdvParam.groupEnable
convAdvParam.inputChannel = CCSD16_PUT = CCSD16_INPUT = CCEST_CONVRAPHOLDER.param;CTSD16_ENTREM_CONVER_CONVER_COMPON_COMPON_COMPONGAL;CTSD16_CLUS_COMPON_COMPON_COMP
convAdvParam.dataFormat = CTSD16_DATA_FORMAT_BINARY;
initAdvParam.railToRailInput = CTSD16_RTR_INPUT_ENABLE;
convAdvParam.interruptDelay = CTSD16_Four_SAMP_INTERRUPT;
Advatio.oversample_Param = CTSD16_oversample_256;// 16位样本需要
Advent.gain = CTSD16_COMP16






;conv_Ct_16 = CTSDT_PRINT16;conv_0 = CTSD_16;conv_COMP_IN_16 = CTSDT_PRINT16; i++){
//清除转换器0中断标志
CTSD16_clearInterrupt (CTSD16_base、CTSD16_converter_0、CTSD16_converter_interrupt | CTSD16_converter_overflow_interrupt);
CTSD16_startConverterConversion (CTSD16_base、CTSD16_converter_0);
while (!CTSD16_getInterruptStatus (CTSD16_base、CTSD16_converter_0、CTSD16_converter_interrupt));
dummy[i]= CTSD16_getResults (CTSD16_base、CTSD16_converter_0)>> 8;
dummyAvg += dummy[i];
}
dummyAvg // CALSAMPLES;
}

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

    我将查看此内容、并尽快返回给您。 BTW、在我浏览您的代码之前、您能否确认您没有将输入也用作基准电压?

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

    我在 VeREF+引脚上使用固定的外部基准、并且能够在外部引脚(A0)的 A/D 中读取正弦波并正确显示它。 我还能够在 DAC0上输出正弦波、但我无法在内部将 DAC0输出连接到 A/D。 我始终准备就绪~半刻度。

    此致、

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

    您好 Justin、

    希望您周末愉快。

    找到问题。 从用户指南中获取以下快照:

    在 CTSD16代码中、您选择了输入通道18、这意味着 AD4+和 AD4-。 然而、这两个通道被连接在一起、从而使您的 AD 原始数据达到大约32768。

    如果要通过 CTSD16测量 DAC 输出、则必须使用外部连接。

    希望这会有所帮助。

    此致、

    哈里

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

    您好、Harry、

    感谢您的回复。  因此、从数据表中的这个片段中、您可以做的所有校准 CTSD16的工作就是读取中点、并且具有内部 DAC 连接实际上没有好处?

    说实话、在用户指南和数据表中、这似乎是一个非常无用的功能、在没有 DAC 或 Vref 连接的简单短路情况下、内部 DAC 连接也会实现同样的功能。

    此致、

    Justin

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

    您好 Justin、

    首先、很抱歉造成不便。

    这两个内部连接的目的是校准 CTSD 的差分偏移。 您可以正确地看到、即使没有 DAC/Vref 连接、简单的短路也可以实现这一点。

    对于增益误差/偏移误差、实际上 TI 已在器件生产期间对其进行了校准。 您可以参阅数据表中的"器件描述符"部分。

    请参阅用户指南中的以下部分、了解如何使用。

    此致、

    哈里