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.

[参考译文] CCS/TM4C123GH6PM:根据我需要控制电机速度、我想为接口2电位器写入代码、并使用 tm4c123gxl。

Guru**** 2481465 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/702223/ccs-tm4c123gh6pm-i-want-to-write-code-for-interface-two-potentiometer-with-tm4c123gxl-according-that-i-need-to-control-speed-of-motor

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

对于以下代码、我需要更改哪些内容、以便可以连接两个电位计。

当我同时尝试这种方法时、它不会控制 电机速度。

在此程序中、我必须使用两个电位器来控制电机速度。

#include
#include
#include "inc/hw_memmap.h"
#include" driverlib/gpio.h"
#include "inc/hw_types.h"
#include" driverlib/debug.h"
#include" driverlib/sysctl.h"
#include" driverlib/adc.h"
//为每次采样将值存储在变量 ui32ADC0Value 中//

uint32_t ui32ADC0Value[1]、ui32ADC0Value1[1];
int main (空)

40MHz 时的//系统时钟
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);//启用 ADC0模块
SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);//启用 ADC0模块

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);//为 ADC0启用 GPIO
//模块
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);//启用 ADC0模块的 AN0
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2);//启用 ADC0模块的 AN0

// ADC0模块、触发是处理器事件、配置了序列发生器0
ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_PROCESSOR、1);
// ADC0模块,序列发生器0,对于1个采样,输入来自通道0 PE3
ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC1_base、1、1、ADC_CTL_CH1);
//为 ADC0启用序列1
ADCSequenceEnable (ADC0_BASE、1);
ADCSequenceEnable (ADC1_BASE、1);
while (1)

//清除 ADC0、序列发生器1的中断标志
ADCIntClear (ADC0_BASE、1);
ADCIntClear (ADC1_BASE、1);
为 ADC 0模块、序列发生器1提供//触发
ADCProcessorTrigger (ADC0_BASE、1);
ADCProcessorTrigger (ADC1_base、1);
while (!ADCIntStatus (ADC0_BASE、1、false))

//
//清除 ADC 中断标志。
//
ADCIntClear (ADC0_BASE、3);

//将所有不同采样的转换值存储在数组中
//ui32ADC0Value
ADCSequenceDataGet (ADC0_BASE、1、ui32ADC0Value);
ADCSequenceDataGet (ADC1_base、1、ui32ADC0Value1);

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

    您是否有机会参考 TivaWare 示例? 请看一下该示例的工作原理。 该示例可在中找到 /examples/peripheral/adc.

    我对您的代码有一些意见。 首先、我想您的目的是仅使用一个 ADC 模块中的两个不同序列发生器、但您要配置两个不同的 ADC 模块。 请阐明您是否确实希望使用两个 ADC 模块或一个 ADC 模块中的两个不同 ADC 序列发生器。 从我在应用中看到的内容中、您只需使用一个 ADC 模块即可完成。 但是、如果您想使用两个 ADC 模块、也没关系。 请注意、芯片中有两个 ADC 模块。 每个 ADC 模块有4个序列发生器。 每个序列发生器可支持不同数量的通道。

    第二个注释用于以下代码。 您为 ADC0序列发生器1设置优先级0、为 ADC1序列发生器1设置优先级1。 只有在同一 ADC 模块内使用序列发生器时、才需要优先级。 由于您使用两个不同的 ADC 模块、因此每个模块的优先级可设置为0。

    ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、0);
    ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_PROCESSOR、1);

    第三个注释针对以下代码。 序列发生器1可以支持4个步骤。 您正在将 CH0分配到步骤0。 但您还需要告诉序列发生器、步骤0也是最后一步。 否则、ADC 不知道如何处理其他3个步骤。 您需要使用 ADC_CTL_END 进行限定、以告知 ADC 第0步也是最后一步。
    ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0);


    第四个注释针对以下代码。 您正在将 CH1分配给 ADC1序列发生器1的第1步。 您需要再次告知 ADC1第1步是序列发生器1的最后一步。
    ADCSequenceStepConfigure (ADC1_base、1、1、ADC_CTL_CH1);

    我真的认为您应该参考 TivaWare 示例。 如果您想使用两个 ADC 模块、这是可以的。 如果是这种情况、为什么不使用仅支持一步的序列发生器3? 您可以将一个通道分配给 ADC0序列发生器3、将另一个通道分配给 ADC1序列发生器3。 为什么您甚至不考虑将两个通道分配给一个序列发生器、例如仅一个 ADC 模块的序列发生器1? 序列发生器1可以支持4个步骤。 您可以为序列发生器1分配两个 ADC 通道。 触发序列发生器1后、它将同时对两个通道进行采样。 这不会更简单。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    先生、我想处理两个中断。 但我不知道如何处理中断处理程序中的两个中断、因为这两个中断都是  

    ADC 将在转换完成时发送中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不确定您是否完成了我的最后一个回复。 如果您使用两个不同的 ADC 模块或两个不同的序列发生器、那么您将获得两个不同的中断请求。 您将需要两个不同的 ISR 来分别处理这两个中断。 正如我在上次答复中建议的那样、如果您只使用一个采样两个 ADC 通道的序列发生器、那么您只有一个中断。 当中断发生时、这意味着两个通道都已被采样和转换。