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.

[参考译文] MSPM0G1506:DAC:CALCTL CALSEL 位

Guru**** 2693225 points

Other Parts Discussed in Thread: MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1598634/mspm0g1506-dac-calctl-calsel-bit

器件型号: MSPM0G1506
Thread 中讨论的其他器件: MSPM0G3507

尊敬的团队:

我的客户发现、如果调用 DL_DAC12_startCalibration、DAC 性能会变得更好。 即使他们不读取和使用 CALDATA。

但在此 E2E 中、他们应在 DAC 校准后使用 CALDATA。 我们不知道为什么 DAC 性能变得更好。

_static_inline void DL_DAC12_startCalibration (DAC12_Regs *DAC12)

  DAC12->CALCTL =
    (DAC12_CALCTL_CALON_ACTIVE | DAC12_CALCTL_CALSEL_SELFCALIBRATIONTRIM);
}

 

  1. 您能帮我们解释一下 CALSEL 位的功能吗? TRM 没有说明如何使用该位。  
  2. CALSEL 和 CALON 位有什么关系? 有一些关于 CALON 的信息、并告诉用户如何在 TRM 19.2.11 DAC 输出放大器失调电压校准中进行失调电压校准。  但在我们的 driverlib 中、为什么设置 DAC12_CALCTL_CALSEL_SELFCALIBRATIONTRIM?

image.png

 

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

    尊敬的 Zane:

    启用 CALON 位允许用户校准任何偏移误差、从而实现 DAC 的出色性能。  

    CALSEL 位使用户能够选择是否使用出厂修整值、即 一次调整 在最终测试期间或在客户用户案例中使用自校准来校准最佳修整值。 默认为 Factory TRIM、但使用自校准修整将获得更好的结果。

    为了实现最佳结果、我们希望使 CALON 位能够启动失调电压误差校准、并使 CALSEL 位能够进行自校准、以校准到最佳修整、从而补偿失调电压误差。 因此、在 Driverlib 中、我们设置  DAC12_CALCTL_CALSEL_SELFCALIBRATIONTRIM。

    此致、

    Bill

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

    尊敬的 Bill:

    我对 M0G1507-LP 进行一些测试、并导入 DAC12_FIXED_VOLTAGE_Vref_INTERNAL_LP_MSPM0G3507_nortos_ticlang 演示、使用万用表测量 PA15 和 GND。

     

    我使用以下代码测试 ADC 校准功能:

    /*
     * Copyright (c) 2021, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #include "ti_msp_dl_config.h"
    
    /*
     * DAC12 Reference Voltage in mV
     *  Adjust this value according to DAC12 reference settings in SysConfig
     *    Or, in registers CTL1.REFSN and CTL1.REFSP
     */
    #define DAC12_REF_VOLTAGE_mV (2500)
    /*
     * DAC12 static output voltage in mV
     *  Adjust output as needed and check in DAC_OUT pin
     */
    #define DAC12_OUTPUT_VOLTAGE_mV (100)
    
    int main(void)
    {
        uint32_t DAC_value;
        uint32_t DAC_CALDATA;
    
        uint32_t realdata;
    
    
    
        SYSCFG_DL_init();
    
        DL_DAC12_performSelfCalibrationBlocking(DAC0);
    
        DAC_CALDATA = DL_DAC12_getCalibrationData(DAC0);
    
    
    
        /* Set output voltage:
         *  DAC value (12-bits) = DesiredOutputVoltage x 4095
         *                          -----------------------
         */
        DAC_value = (DAC12_OUTPUT_VOLTAGE_mV * 4095) / DAC12_REF_VOLTAGE_mV;
    
        realdata = DAC_value + DAC_CALDATA;
    
        DL_DAC12_output12(DAC0, realdata);
        DL_DAC12_enable(DAC0);
    
        while (1) {
            __WFI();
        }
    }
    

    何时 #define DAC12_OUTPUT_VOLTAGE_mV (1000)

    不执行校准:PA15 电压为 0.991V

    执行校准并添加 CALDATA:PA15 电压为 1.030V

    当#define 时 DAC12_OUTPUT_VOLTAGE_mV (100)

    不执行校准:PA15 电压为 99.1mV

    执行校准并添加 CALDATA:PA15 电压为 138.4mV

     

    从测试结果可以看出:DAC 校准后、DAC 输出精度会变差。

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

    尊敬的 Zane:

    我对您在上面提供的代码做了一些调整。

    要使  DL_DAC12_performSelfCalibrationBlocking (DAC0) 和  DL_DAC12_getCalibrationData (DAC0) 函数正常工作、您需要在启用 DAC 模块后(即  DL_DAC12_ENABLE (DAC0) 之后)启用该功能。  
     

    #include "ti_msp_dl_config.h"
    
    /*
     * DAC12 Reference Voltage in mV
     *  Adjust this value according to DAC12 reference settings in SysConfig
     *    Or, in registers CTL1.REFSN and CTL1.REFSP
     */
    #define DAC12_REF_VOLTAGE_mV (2500)
    /*
     * DAC12 static output voltage in mV
     *  Adjust output as needed and check in DAC_OUT pin
     */
    #define DAC12_OUTPUT_VOLTAGE_mV (2000)
    
    
    
    int main(void)
    {
        uint32_t DAC_value;
        uint32_t DAC_CALDATA;
        uint32_t realdata;
    
        SYSCFG_DL_init();
        // DL_DAC12_performSelfCalibrationBlocking(DAC0);
    
        // DAC_CALDATA = DL_DAC12_getCalibrationData(DAC0);
        /* Set output voltage:
         *  DAC value (12-bits) = DesiredOutputVoltage x 4095
         *                          -----------------------
         *                              ReferenceVoltage
         */
        DAC_value = (DAC12_OUTPUT_VOLTAGE_mV * 4095) / DAC12_REF_VOLTAGE_mV;
        DL_DAC12_enable(DAC0);
        
        DL_DAC12_performSelfCalibrationBlocking(DAC0);
        DAC_CALDATA = DL_DAC12_getCalibrationData(DAC0);
        realdata = DAC_value - DAC_CALDATA;
        DL_DAC12_output12(DAC0, realdata);
        // DL_DAC12_output12(DAC0, DAC_value);
    
        while (1) {
            __WFI();
        }
    }

    未经过校准且使用电压输出 1000mV PA15  测量值: 1.012V  

    校准后:PA15 电压为 1.008V

    未经校准和电压输出 2000mV、 测得 PA15:2.010V

    校准后:PA15 电压为:2.006 V

    希望这对您有所帮助。

    此致、

    Bill