您好!
至于 ADC、我没有回答上一个问题、所以我创建了一个新的线程。
下面是内容
https://e2e.ti.com/support/microcontrollers/other/f/908/p/878416/3279617#3279617
Q1> ADCSequenceDataGet (ADC1_base、0和 pui32ADC0Value [0])无法正常工作。
请告诉我。
此致、
Jame、Shin
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.
您好!
至于 ADC、我没有回答上一个问题、所以我创建了一个新的线程。
下面是内容
https://e2e.ti.com/support/microcontrollers/other/f/908/p/878416/3279617#3279617
Q1> ADCSequenceDataGet (ADC1_base、0和 pui32ADC0Value [0])无法正常工作。
请告诉我。
此致、
Jame、Shin
我的朋友、
您是否认为您的"将必要的背景数据连接起来"而不是"在这里(立即)展示它"-对您的无经验"帮助者"施加(两者)"额外和不连贯"的压力! 经常-被迫"远离... 然后返回这里"原因、"关键事实丢失-或者(甚至)使其他(强大且有用)方法或想法"变弱和变云"...
你的“时间很重要”——但不能对你的帮助者说同样的话? 您的"努力减少"(不幸的是、"需要您的帮助者付出更大的努力")是否合理? 明智吗?
您好!
我不知道为什么要在这里创建新的线程。 如果是新问题、通常会创建一个新主题。 如果这是上一个主题中未回答的问题、则应继续该主题。 当您创建这样的新线程时、我必须花费大量的时间来阅读 您的其他线程、以了解历史和进度。
[引用 user="Jame shin"] Q1> ADCSequenceDataGet (ADC1_base、0和 pui32ADC0Value [0])无法正常工作。
这意味着它无法正常工作? 它是在某个时候工作还是根本不工作? 您能总结一下错误吗?
您好、Charles、
感谢您的回答。
我了解再生螺纹注释。
简要总结问题。
如何修改源代码?
Q1>不同 ADC 捕获的值会导致 pui32ADC0Value [0]和 pui32ADC1Value [0]出现问题。
因此 ADC1无法正常工作。 我不知道为什么。
ADCSequenceDataGet 之间的延迟条件(ADC0_BASE、…) 和 ADCSequenceDataGet (ADC1_base、…) 功能。
// PE[3]/AIN0 (CH0),伏特->(ADC0):+5V 测量,
// PE[2]/AIN1 (CH1),伏特->(ADC1):+1.5V 测量
(无延迟)
pui32ADC0Value[0] ADC 计算值:4.54V
pui32ADC1Value[0] ADC 计算值:4.54V
(1的延迟)
pui32ADC0Value[0] ADC 计算值:4.54V (5V-4.5V=0.5V)
pui32ADC1Value[0] ADC 计算值:0.26V (1.5-0.26 =1.24V)
Q2> 64引脚 TQFP MCU 为 ADC VREFP 3.3V 供电。
DK-EVB 144引脚 MCU 为 VREFP 3.0V。 这种差异会导致 ADC0测量中的0.5V 差异
如何校准0.5V?
此致、
Jame、Shin
main() {char pcVoltBuffer1[6]; char pcCurrBuffer1[6]; char pcVoltBuffer2[6]; char pcCurrBuffer2[6] ……μ A uint32_t pui32ADC0Value[2]; uint32_t pui32ADC1Value[2]; ……μ A uint32_t ui32V; uint32_t ui32V 电流; ……μ A SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD) GPIOPinTypeADC (GPIO_3_base);SysCtlPeripheralEnable (SYSCTL_PIN_2_PIN_PIN_PIN_2|GPIO_BASE) GPIOPinTypeADC (GPIO_PORTD_base、GPIO_PIN_1_GPIO_PIN_0); ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_PROCESSORS、 0); ADCSequenceConfigure (ADC1_BASE、0、ADC_TRIGGER_PROCESSORT0); ADCSequenceStepConfigure (ADC0_BASE、 0、2、ADC_CTL_CH0|ADC_CTL_CH6|ADC_CTL_IE|ADC_CTL_END); ADCSequenceStepConfigure (ADC1_BASE、0、 2、ADC_CTL_CH1|ADC_CTL_CH7|ADC_CTL_IE|ADC_CTL_END); ADCSequenceEnable (ADC0_BASE、0); ADCSequenceEnable (ADC1_BASE、 0); IntMasterEnable(); while (1) { ……μ A。 ADCProcessorTrigger (ADC0_BASE、0); ADCProcessorTrigger (ADC1_base、0); while (!ADCIntStatus (ADC0_BASE、0、false)&&!ADCIntStatus (ADC1_base、0、false)) { } ADCIntClear (ADC0_BASE、0); ADCIntClear (ADC1_BASE、0) // PE[3]/AIN0 (CH0),伏特->(ADC0) ADCSequenceDataGet (ADC0_BASE、0、&pui32ADC0Value[0]); ui32Vol=(pui32ADC0Value[0]* 4100)/ 819; usnprintf (pcVoltBuffer、5、"%U.%u "、ui32V/1000、ui32Vol%1000); // PD[1]/AIN6 (CH6)、电流->(ADC0) ui32Current =(pui32ADC0Value[1]* 200)/273; usnprintf (pcCurrent Buffer、5、"%U.%04u "、ui32Current/1000、ui32Current%1000); … // PE[2]/AIN1 (CH1),伏特->(ADC1) ADCSequenceDataGet (ADC1_base、0、&pui32ADC1Value[0]); ui32Vol=(pui32ADC1Value[0]* 4100)/ 819; usnprintf (pcVoltBuffer、5、"%U.%u "、ui32V/1000、ui32Vol%1000); // PD[0]/AIN7 (CH7),电流->(ADC1) ui32Current =(pui32ADC1Value[1]* 200)/273; usnprintf (pcCurrent Buffer、5、"%U.%04u "、ui32Current/1000、ui32Current%1000); 。} }
让我们首先看看以下几行代码。 您如何知道 pui32ADC0Value[1]具有正确的数据? 当您调用 ADCSequenceDataGet 时、它将返回到缓冲区中的样本数量。 您需要根据复制到缓冲区的数据数量来确定 pu32ADC0Value[1]甚至 pu32ADC0Value[0]中是否存在有效数据。
// PE[3]/AIN0(CH0), Volt -> ( ADC0 )
ADCSequenceDataGet(ADC0_BASE, 0, &pui32ADC0Value[0]);
ui32Volt=(pui32ADC0Value[0]* 4100) / 819;
usnprintf(pcVoltBuffer, 5,
"%u.%u "
, ui32Volt/1000,ui32Volt%1000);
// PD[1]/AIN6(CH6), Curr -> (ADC0)
ui32Current = (pui32ADC0Value[1] * 200) / 273;
usnprintf(pcCurrBuffer, 5,
"%u.%04u "
, ui32Current/1000,ui32Current%1000);
4.2.2.28 ADCSequenceDataGet
获取采样序列的捕获数据。
原型:
内部32_t
ADCSequenceDataGet (uint32_t ui32Base、
uint32_t ui32SequenceNum、
uint32_t * pui32缓冲器)
参数:
ui32Base 是 ADC 模块的基址。
ui32SequenceNum 是采样序列编号。
pui32Buffer 是存储数据的地址。
描述:
此函数将数据从指定的采样序列发生器输出 FIFO 复制到存储器驻留
缓冲器。 硬件 FIFO 中可用的采样数被复制到缓冲区中、
该值被认为足够大、足以容纳这么多样本。 此函数仅返回
当前可用的样本、如果可用、可能不是整个采样序列
在执行过程中。
返回:
返回复制到缓冲区的样本数。
您好、Charles、
很好的展示-年轻的员工、我很感谢您的分析。
几个月过去-这张(经常)海报似乎"购买"了 Kiss 及其"高度关注和简化保障措施"。 现在、两者似乎都有、"离开大楼..."
正如您所说-让我们(进一步)看看以下几行海报代码:
// PE[3]/AIN0(CH0), Volt -> ( ADC0 )
ADCSequenceDataGet(ADC0_BASE, 0, &pui32ADC0Value[0]);
ui32Volt=(pui32ADC0Value[0]* 4100) / 819;
usnprintf(pcVoltBuffer, 5,
"%u.%u "
, ui32Volt/1000,ui32Volt%1000);
// PD[1]/AIN6(CH6), Curr -> (ADC0)
ui32Current = (pui32ADC0Value[1] * 200) / 273;
usnprintf(pcCurrBuffer, 5,
"%u.%04u "
, ui32Current/1000,ui32Current%1000);