Thread 中讨论的其他器件:SysConfig
大家好。
我想知道是否可以使用 adcbuf 对两个或多个通道的数据进行采样。 如果答案是肯定的、您能给我一个指南吗??? 我在文档中搜索过、但无法实现。
我的用例如下:我在 DIO_23中连接了一个模拟信号,在 DIO_24中连接了另一个模拟信号。 我每 秒需要读取五次它们的值、因此我认为 adcbuf 必须能够很好地执行该操作。
此致。
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.
大家好。
我想知道是否可以使用 adcbuf 对两个或多个通道的数据进行采样。 如果答案是肯定的、您能给我一个指南吗??? 我在文档中搜索过、但无法实现。
我的用例如下:我在 DIO_23中连接了一个模拟信号,在 DIO_24中连接了另一个模拟信号。 我每 秒需要读取五次它们的值、因此我认为 adcbuf 必须能够很好地执行该操作。
此致。
您好、Mariano、
您可以将 adcbufcontinuous 示例导入 CCS、并从 SysConfig Editor -> ADCBuf 模块增加通道。 然后、您可以从同一窗口中为每个通道选择 ADCBuf PinMux。 然后、您可以选择 重复发生模式= ADCBuf_Recurrence_mode_One_shot 和返回模式= ADCBuf_Return_mode_Blocking、在这里、每次调用 ADCBuf_convert 前、adcChannel 都会发生变化。 您可以查看 ADCBuf TI 驱动程序运行时 API 中的所有数据结构参数和函数。
此致、
Ryan
非常感谢、我在 SysConfig 编辑器中看不到信道编号。
ADCBuf 与 RERECEenceMode 一起工作= ADCBuf_RECEARE_MODE_Continuous 并且返回模式= ADCBuf_RETURE_MODE_CALLBACK???
我在这里使用以下代码片段进行了测试:
ADCBuf_Handle adcbuf; ADCBuf_Params adcbufParams; ADCBuf_init(); ADCBuf_Params_init(&adcbufParams); adcbufParams.returnMode = ADCBuf_RETURN_MODE_CALLBACK; adcbufParams.recurrenceMode = ADCBuf_RECURRENCE_MODE_CONTINUOUS; adcbufParams.callbackFxn = adcBufCallbackFxn; adcbufParams.samplingFrequency = 10; adcbuf = ADCBuf_open(0, &adcbufParams); ADCBuf_Conversion conversion[2]; conversion[0].adcChannel = ADCBUF_CHANNEL_0; // VBATT conversion[0].sampleBuffer = bufferOne; conversion[0].sampleBufferTwo = bufferTwo; conversion[0].samplesRequestedCount = ADC_BUFFER_SIZE; conversion[1].adcChannel = ADCBUF_CHANNEL_1; // KEYS conversion[1].sampleBuffer = bufferOne; conversion[1].sampleBufferTwo = bufferTwo; conversion[1].samplesRequestedCount = ADC_BUFFER_SIZE; ADCBuf_convert(adcbuf, conversion, 2);
但 adcBufCallbackFxn 只调用一个通道。
再次感谢你。
ADCBuf_convert 将只转换一个通道和 ADCBuf_Conversion 结构、因此 您需要更改 adcChannel 并为每个通道重新调用 ADCBuf_convert。 未经测试的伪代码:
ADCBuf_Handle adcbuf; ADCBuf_Params adcbufParams; ADCBuf_init(); ADCBuf_Params_init(&adcbufParams); adcbufParams.returnMode = ADCBuf_RETURN_MODE_CALLBACK; adcbufParams.recurrenceMode = ADCBuf_RECURRENCE_MODE_CONTINUOUS; adcbufParams.callbackFxn = adcBufCallbackFxn; adcbufParams.samplingFrequency = 10; adcbuf = ADCBuf_open(0, &adcbufParams); ADCBuf_Conversion conversion; conversion.adcChannel = ADCBUF_CHANNEL_0; // VBATT conversion.sampleBuffer = bufferOne; conversion.sampleBufferTwo = bufferTwo; conversion.samplesRequestedCount = ADC_BUFFER_SIZE; ADCBuf_convert(adcbuf, conversion, 1); conversion.adcChannel = ADCBUF_CHANNEL_1; // KEYS ADCBuf_convert(adcbuf, conversion, 1);
此致、
Ryan
好的、我将在这里进行测试。 但看起来:
extern int_fast16_t ADCBuf_convert (ADCBuf_Handle handle、ADCBuf_Conversion 转换[]、uint_fast8_t channelCount);
其中通道计数为:
@param[in] 通道数在此 中转换的通道数
* 调用。 应为@p 转换数组的长度。 具体取决于
* 器件、可能不支持多个同步转换。 请参见器件
* 具体实施。
您说过 CC2642可能不支持多路同步转换、对吧??
来自 ADCBufCC26X2.h: 不支持同时在多个通道上执行转换。 换言之,调用 ADCBuf_convert ()时,参数 channelCount 必须始终设置为1。 CC26XX 器件上的 ADC 不支持硬件中通道或引脚的时分多路复用。
您是正确的、如前所述 、建议的乘法通道运行模式为 RecurrencedMode = ADCBuf_Recurrence_mode_One_Shot、返回模式= ADCBuf_Return_mode_Blocking
此致、
Ryan