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.

[参考译文] MSP430FR4133:使用 EVM 板上的 ADC

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1163300/msp430fr4133-using-the-adc-on-the-evm-board

器件型号:MSP430FR4133
主题中讨论的其他器件: DRV5055

我尝试使用 MSP430FR4133上的 ADC 来显示从 DRV5055线性霍尔效应传感器读取的结果。 在设置 ADC 引脚进行读取时、我认为 ADC 的初始化存在一个问题。 我认为我初始化为 ADC 进行读取的引脚始终输出3伏电压、而不是被拉至霍尔效应传感器的电压输出。 我的设置是否有问题会导致这种情况? 我使用在 MSP Academy 中 Resource Explorer ADC Concepts 中找到的示例代码进行设置。

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

    您好、卡特、

    您是否修改了代码? 如果是、您会介意分享 吗?  

    此外、为了澄清一下、您从哪个示例代码开始、是 msp430fr413x_ADC10_02.c?  

    此致、
    Brandon Fisher

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

    是的、我从该代码开始。 我直接使用了该代码、但没有对其进行修改、我尝试对其进行修改以使用其他 ADC 端口之一、在这种情况下、它们始终输出0伏电压。

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

    感谢 Carter、

    如果您拆下 Launchpad 并使用 DMM 或示波器测量霍尔传感器的输出、您会看到什么电压?  

    如果您能够将已知电压从工作台电源馈入 ADC、这也是一个很好的测试。  

    此致、
    Brandon Fisher

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

    在未连接 launchpad 的示波器上、我看到1.65伏、但如果我连接引脚1.1尝试读取它、它跳转到3伏、如果我尝试连接引脚1.4进行读取、则跳转到0伏。 当我尝试读取时、两种方法都按照示例设置 ADC 引脚。

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

    A1 (P1.1)连接到反向通道 UART [参考 Launchpad UG 图16/19]。 尝试从"桥接器"接头(J101)上移除 TX/RX 跳线。

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

    谢谢 Bruce。 引脚拉高和拉低的问题的解决方案。 不过、我认为我仍然没有正确设置 ADC、因为无论我尝试读取的电压是多少、读数都不会改变

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

    卡特

    如何检查 ADC 读数? 您是否只是在 CCS 的观察窗口中检查 ADC_Result 值?  

    此致、
    Brandon Fisher

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

    我正在检查观察窗口、并将其显示在 EVM 的 LCD 屏幕上。 观察窗口中的 ADC_Result 值仅在80至170之间变化、在零电压下为80、在3.3电压下为170、当我尝试在 LCD 上显示电压时、这几乎不会显示任何变化。

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

    您现在使用的是什么源代码? (我在 LCD 上看不到任何显示 ADC 读数的示例。)

    此外、您将什么用作电压源? 我对源阻抗特别感兴趣--台式电源或电池可以正常工作,但对于电位计(电阻分压器),很容易最终得到非常高的源阻抗,这将为您提供“大量”的读数。 作为一个快速实验、尝试将 ADCSHT 设置为非常大的值、并查看是否有任何变化。

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

    我刚刚在我的 MSP430FR4133 Launchpad 上运行了此代码、它的功能与您 所期望的一样。 当您仅使用该示例代码时、在运行 调试器时查看 ADC_Result 值应该会获得良好的结果、除非硬件方面有问题。  

    我喜欢 Bruce 在这里提出的建议、即增加采样保持时间、看看这是否与阻抗相关。

    此外、如果您专门使用此代码、并将其打印到 LCD 上、您是否会想到将代码放入文章中? 您的问题可能是由看似不相关的问题引起的。 发布时、"插入"菜单下有一个代码格式工具、可保留可读性。  

    此致、
    Brandon Fisher

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

        // Set all GPIO pins to output low to prevent floating input and reduce power consumption
        GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN2|GPIO_PIN3|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P6, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P7, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setOutputLowOnPin(GPIO_PORT_P8, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
    
        GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN2|GPIO_PIN3|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P6, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P7, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
        GPIO_setAsOutputPin(GPIO_PORT_P8, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
    
        //GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN1);
    
        // Configure button S1 (P1.2) interrupt
        GPIO_selectInterruptEdge(GPIO_PORT_P1, GPIO_PIN2, GPIO_HIGH_TO_LOW_TRANSITION);
        GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN2);
        GPIO_clearInterrupt(GPIO_PORT_P1, GPIO_PIN2);
        GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN2);
    
        // Set P4.1 and P4.2 as Secondary Module Function Input, LFXT.
        GPIO_setAsPeripheralModuleFunctionInputPin(
               GPIO_PORT_P4,
               GPIO_PIN1 + GPIO_PIN2,
               GPIO_PRIMARY_MODULE_FUNCTION
               );
    
        // I2C pins
            P5SEL0 |= BIT2 | BIT3;
    

        // L0~L26 & L36~L39 pins selected
        LCD_E_setPinAsLCDFunctionEx(LCD_E_BASE, LCD_E_SEGMENT_LINE_0, LCD_E_SEGMENT_LINE_26);
        LCD_E_setPinAsLCDFunctionEx(LCD_E_BASE, LCD_E_SEGMENT_LINE_36, LCD_E_SEGMENT_LINE_39);
    
        LCD_E_initParam initParams = LCD_E_INIT_PARAM;
        initParams.clockDivider = LCD_E_CLOCKDIVIDER_3;
        initParams.muxRate = LCD_E_4_MUX;
        initParams.segments = LCD_E_SEGMENTS_ENABLED;
    
        // Init LCD as 4-mux mode
        LCD_E_init(LCD_E_BASE, &initParams);
    
        // LCD Operation - Mode 3, internal 3.02v, charge pump 256Hz
        LCD_E_setVLCDSource(LCD_E_BASE, LCD_E_INTERNAL_REFERENCE_VOLTAGE, LCD_E_EXTERNAL_SUPPLY_VOLTAGE);
        LCD_E_setVLCDVoltage(LCD_E_BASE, LCD_E_REFERENCE_VOLTAGE_2_96V);
    
        LCD_E_enableChargePump(LCD_E_BASE);
        LCD_E_setChargePumpFreq(LCD_E_BASE, LCD_E_CHARGEPUMP_FREQ_16);
    
        // Clear LCD memory
        LCD_E_clearAllMemory(LCD_E_BASE);
    
        // Configure COMs and SEGs
        // L0 = COM0, L1 = COM1, L2 = COM2, L3 = COM3
        LCD_E_setPinAsCOM(LCD_E_BASE, LCD_E_SEGMENT_LINE_0, LCD_E_MEMORY_COM0);
        LCD_E_setPinAsCOM(LCD_E_BASE, LCD_E_SEGMENT_LINE_1, LCD_E_MEMORY_COM1);
        LCD_E_setPinAsCOM(LCD_E_BASE, LCD_E_SEGMENT_LINE_2, LCD_E_MEMORY_COM2);
        LCD_E_setPinAsCOM(LCD_E_BASE, LCD_E_SEGMENT_LINE_3, LCD_E_MEMORY_COM3);
    
        // Select to display main LCD memory
        LCD_E_selectDisplayMemory(LCD_E_BASE, LCD_E_DISPLAYSOURCE_MEMORY);
    
        // Turn on LCD
        LCD_E_on(LCD_E_BASE);

    第一部分代码是我在 Init_GPIO 函数中的代码、第二部分来自 Init_LCD 函数。 我从 msp430fr4133的开箱即用演示代码中获取了这两个代码。 当我仅运行示例代码时、它实际上会起作用、因此这些代码的设置中可能会出现问题。

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

    您好、卡特、

    您将使用 Driverlib 进行 LCD 和 GPIO 初始化。 您是否有任何特殊原因也不会使用 Driverlib ADC 示例?

    https://dev.ti.com/tirex/explore/node?devices=MSP430FR4133&devtools=MSP430FR4133&node=A__AHkyNcx8Ouivc4pnjcEQMA__msp430ware__IOGqZri__LATEST

    您可以同时使用 DriverLib 和基于寄存器的代码、但最好只使用一个代码。 它 还可以简化您的代码。  


    此致、
    Brandon Fisher

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

    在解决引脚拉高和拉低的问题之前、我已经尝试过 driverLib 代码。 在这个问题解决后、我不想再进行测试。 我使用了该代码、现在我能够获得正确的结果。 非常感谢!