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 数值?
您好 Vadim:
我需要更多详细信息来了解您的问题。 您能否提供您的 ADC 设置代码(如果使用的话、还能提供 SysConfig 设置)? 另外、您是如何读取结果的?
谢谢。
伊袋
__interrupt void INT_myADC0_1_ISR (void)
{
//
//将最新结果添加到缓冲区中
//
adcAResults[index++]= ADC_readResult (ADCARESULT_base、ADC_SOC_NUMBER0);
//
//如果缓冲区已满,则设置 bufferFull 标志
//
if (results_buffer_size <= index)
{
索引= 0;
bufferFull = 1;
}
//
//清除中断标志
//
ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_GROUP1);
}
尊敬的 Ibukun:
感谢您的支持! 以上是我的 ADC 读取例程。 如何附加 syscfg 文件?
谢谢 Vadim
Vadim、
您只需在工程目录中附加.syscfg 文件(或在文本编辑器中将其打开并粘贴其内容)。 ADC 设置是完全通过 SysConfig 完成的、还是您是否具有可以操控 SOC 配置的 C 代码?
此致、
伊袋
尊敬的 Ibukun:
我完全是通过 SysConfig 完成的、
/**
*这些参数是在生成该文件时使用的。 它们将自动应用到系统的后续
*通过 GUI 或 CLI。 有关如何覆盖这些参数的附加信息,请使用"--help"运行 CLI。
*@cliArgs --设备"F2837xD"-包装"F2837xD_337ZWT"-部件"F2837xD_337ZWT"-上下文"CPU1"-产品"C2000WARE@4.02.00.00 "
*@版本{"tool":"1.15.0+2826"}
*/
/**
*导入此配置中使用的模块。
*/
const adc = scripting.AddModule ("/driverlib/adc.js "、{}、false);
const adc1 = adc.addInstance ();
const ePWM = scripting.AddModule ("/driverlib/epwm.js、{}、false);
const epwm1 = ePWM.addInstance();
const epwm2 = ePWM.addInstance();
/**
*将自定义配置值写入导入的模块。
*/
ADC1.$name ="myADC0";
adc1.enableSOC =["ADC_SOC_NUMBER0"];
adc1.soc0SampleWindow = 20;
ADC1.enableInts =["ADC_INT_number1";
ADC1.enableInterrupt1 = true;
ADC1.enableInterrupt1ContinuousMode = true;
ADC1.registerInterrupts =["1"];
ADC1.soc0Trigger ="ADC_TRIGGER_EPWM2_SOCA";
ADC1.adcInt1.enableInterrupt = true;
epwm1.epwmTimebase_counterMode ="EPWM_COUNTER_MODE_UP";
epwm1.epwmTimebase_hsClockDiv ="EPWM_HSCLOCK_DIVIDER_1";
epwm1.$name ="myEPWM1_Input";
epwm1.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_ZERO ="ePWM_AQ_OUTPUT_LOW";
epwm1.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_PERIOD ="ePWM_AQ_OUTPUT_LOW";
epwm1.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA ="ePWM_AQ_OUTPUT_HIGH";
epwm1.epwmCounterCompare_enableShadowLoadModeCMPA = false;
epwm1.epwmTimebase_period = 2199;
epwm1.epwmCounterCompare_cmpA = 1099;
epwm1.ePWM.$assign ="EPWM1";
epwm2.epwmTimebase_counterMode ="epwm_counter_mode_up";
epwm2.epwmTimebase_hsClockDiv ="EPWM_HSCLOCK_DIVIDER_1";
epwm2.$name ="myEPWM2_ADC";
epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_B_ON_TIMEBASE_ZERO ="ePWM_AQ_OUTPUT_LOW";
epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_B_ON_TIMEBASE_PERIOD ="ePWM_AQ_OUTPUT_LOW";
epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_B_ON_TIMEBASE_UP_CMPA ="ePWM_AQ_OUTPUT_HIGH";
epwm2.epwmCounterCompare_enableShadowLoadModeCMPA = false;
epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_ZERO ="ePWM_AQ_OUTPUT_LOW";
epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_PERIOD ="ePWM_AQ_OUTPUT_LOW";
epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA ="ePWM_AQ_OUTPUT_HIGH";
epwm2.epwmTimeBase_period = 199;
epwm2.epwmCounterCompare_cmpA = 99;
epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true;
epwm2.epwmEventTrigger_EPWM_SOC_A_triggerSource ="EPWM_SOC_TBCTR_U_CMPA";
epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar ="1";
epwm2.ePWM.$assign ="EPWM2";
epwm2.ePWM.epwmaPin.$assign ="bul.A7";
epwm2.epwm2.epwmmbpin.$assign ="Ball.b7";
/**
*用于未锁定引脚/外设的 Pinmux 解决方案。 这样可确保将来对自动解算器进行细微更改
*该工具的版本不会影响您最初看到的 pinmux。 可以完全删除这些行、以便
*从头开始重新解决。
*/
epwm1.ePWM.epwmaPin.$appinestSolution ="Ball.c8";
epwm1.epwm.epwmbPin_$appenestSolution ="ball.d8";
谢谢 Vadim
您好 Vadim:
我没有 在上面粘贴的 SysConfig 中看到 ADC 时钟预分频设置或分辨率/信号模式设置。
作为参考、假设 SYSCLK 为200MHz、 该器件的最小 ADC 时钟预分频必须被4.0分频。
看起来您已经在 ePWM 上配置了输出 A 和输出 B 以执行 CMPA、这将生成 SOC 触发器。 我想这是导致在相同的时基周期发出两个 SOC 触发信号、从而导致在相同的 ePWM 周期内进行背靠背转换、并会解释您的结果。
此致、
伊袋
谢谢! ADC 预分频是一个问题。
瓦迪姆