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/MSP432P401R:GUI Composer 中的 CCS 正弦波图形

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/953944/ccs-msp432p401r-ccs-sine-wave-graphing-in-gui-composer

器件型号:MSP432P401R

工具/软件:Code Composer Studio

您好!

我有一个 adc14_single_conversion 重复代码、为我提供一个包含 x 和 y 值的数组、用于绘制正弦波、 但是、当我使用默认标量图形选项并让它显示图形的标准化 ADCRes 时、我如何在 GUI Composer 中对该数组进行图形绘制、输出无法与频率高于100MHz 的任何正弦波保持一致。

那么、有没有方法可以使用要绘制的 x 和 y 值数组通过 GUI Composer 进行图形化、从而绘制正弦波、 或者、是否有办法利用内置图形小工具可靠地绘制频率高于100MHz - 10kHz 的波形。

来自 CCS 的我的代码:

/* DriverLib 包括*/
#include 

/*标准包括*/
#include 
#include 
#include 

/* static *
/ static volatile uint16_t curADCResult;//uint16_t
static volatile float normalizedADCRes;

// float
val[100]
;//移动 val[]和 i、j、k 变量
int i = 0;
int j
= 0;int k = 0;

static float tratuint16结果

int32_t temp;
if (0x8000 &结果)
{
温度=(结果>> 2)| 0xFFFFFFC000;
//printf ("HIT IF");
返回((temp * 3.3f)/ 8191);
}
其他
{
//printf ("hit else");
返回((Result/2)*3.3f)/(8191);
}
}


int main (void)
{
分别为//10kHz 和17.5个样本
//5kHz、然后在峰间采集35个样本
//5.8us

/*停止看门狗*/
MAP_WDT_A_HOLDTimer();

/*初始化变量*/
curADCResult = 0;

/*设置闪存等待状态*/
MAP_FlashCtl_setWaitState (FLASH_BANK0、1);
MAP_FlashCtl_setWaitState (FLASH_BANK1、1);

/*将 DCO 设置为48MHz */
MAP_PCM_setPowerState (PCM_AM_LDO_VCORE1);
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);

/*启用 FPU 进行浮点运算*/
map_fpu_enableModule();
MAP_FPU_enableLazyStacking();

//![单个采样模式配置]
/*初始化 ADC (MCLK/1/4)*/
MAP_ADC14_enableModule();
MAP_ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_4、
0);
//MAP_ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_4、0);

/*配置 GPIO (5.5 A0)*/
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、GPIO_PIN5、
GPIO_TICE_MODULE_FUNCTION);

/*配置 ADC 内存*/
MAP_ADC14_configureSingleSampleMode (ADC_MEM0、TRUE);
MAP_ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_AVCC_VREFNEG_VSS、
ADC_INPUT_A0、false);

/*配置采样计时器*/
MAP_ADC14_enableSampleTimer (ADC_MANUAL_DEACation);

/*启用/切换转换*/
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger ();
//![单个采样模式配置]

/*启用中断*/
MAP_ADC14_enableInterrupt (ADC_INT0);
MAP_Interrupt_enableInterrupt (INT_ADC14);
MAP_Interrupt_enableMaster();

while (1)
{
MAP_PCM_gotoLPM0 ();
}

}

//![单个采样结果]/*
ADC 中断处理程序。 每当
ADC_MEM0完成转换*时、就会调用此处理程序。
*/
void ADC14_IRQHandler (void)
{
浮点平均值= 0;

//双 NRE;
uint64_t status = MAP_ADC14_getEnabableInterruptStatus();
//float NRE;
//uint32_t temp;
MAP_ADC14_clearInterruptFlag (status);

IF (ADC_INT0和状态)
{
while (i<100)
{
curADCResult = MAP_ADC14_getResult (ADC_MEM0);
NORMizedADCRes=转换到浮点(curADCResult);
//normalizedADCRes=(curADCResult * 3.3)/16384;
//NRES =(双精度)标准 ADCRes;
//printf ("\n\n\r\n>D0 =%d.%03d V"、NRES);
Val[i]=标准化的 ADCRes;

//printf ("%f\n"、normalizedADCRes);
//printf ("%f\n"、val[i]);
MAP_ADC14_toggleConversionTrigger ();
i++;

if (i = 100)//在填充数组时触发,并在命中后打印数组的值
{
while (k < 100)
{
图形= val[k];
printf ("%f\n"、val[k]);
K++;
}
}
//printf

("finished 100 samples \n");

while (j < 100)//使用存储在数组中的值计算平均值
{
Avg = avg + val[j];
J++;
}

Avg = avg/100;
printf ("平均值:%f\n"、avg);
//ADC14_disableConversion();//而不是 exit()禁用转换以退出
}



我的输出:

谢谢、请提供帮助!

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

    [引用 user="SunHo Kim"]有一种方法可以利用内置图形小工具可靠地绘制频率高于100MHz - 10kHz 的波形。

    在这些频率下、图形功能更为有限。 为了获得最佳精度、我强烈建议使用高速示波器等硬件解决方案。