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.

[参考译文] TMS320F28379D:在 CCS 20.2 中将图形数据(整数或浮点)导出到 CSV 的过程

Guru**** 2515700 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556478/tms320f28379d-procedure-for-exporting-graph-data-integer-or-float-to-csv-in-ccs-20-2

部件号:TMS320F28379D


工具/软件:

您好:

我最近已从 Code Composer Studio (CCS) 12.6 版迁移到 CCS 20.2 版。 在 CCS 12.6 中、我能够将所需数据记录到整数组中、然后使用“Expressions"窗口“窗口中提供的图形工具将其可视化。 此外、图形工具提供了将绘制的数据直接导出到.csv文件的选项、然后将其用于进一步的后处理和分析。

但是、在 CCS 20.2 中、我找不到用于从图形工具导出采集数据的等效功能。 您能否提供有关如何在 CCS 20.2 中实现相同功能的指导?

谢谢你

Vijay

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

    尊敬的 Vijay:

    可在以下位置找到图形特性描述: https://software-dl.ti.com/ccs/esd/documents/users_guide_ccs/ccs_debug-main.html#graph-view

    此时它似乎只支持 PNG 导出。

    F28379D 支持我们的 Signal Sight 工具、还可将该工具集成到您的项目中、以进行高速数据导出。 您可以在此处找到有关该内容的更多信息: https://www.ti.com/lit/pdf/spradn1 

    此工具支持 CSV 导出

    此致、

    彼得

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

    尊敬的 Vijay:

    请下载 20.3.0、它包含如下所示的更新 CCS Graph 功能

    • FFT 图支持幅度和相位
    • 添加将图形数据导出到文件的功能
    • 添加指定数据类型大小的功能

    此致、

    彼得

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

    您好、Peter、

    我下载了 CCS 20.3。 我有一个简单的程序、其中 50Hz 的单位 SINE_WAVE 通过 50Hz 的低通滤波器。 我要绘制捕获的数据。 我使用数组来存储 1 个周期的数据并绘制它。  

    自由参数。 我得到了以下视图

    即使数组包含正确的值(我可以数组以浮点格式具有正确的值)。 但图形未反映这一点。 代码如下所示。

    //#############################################################################
    //
    // Toggle GPIO pins 22, 52 and 97 using timers
    // CPU1 controls GPIO 22 and 97
    // CPU2 controls GPIO 52
    // CPU1 uses Timer 0 and Timer 1 for toggling pins
    // CPU2 uses Timer 1 for toggling pin
    //
    //#############################################################################
    
    //
    // Included Files
    //
    #include "driverlib.h"
    #include "device.h"
    #include "math.h"
    #include "First_order_filter_MACRO.h"
    #include "PI_CONTROLLER_AntiWindup_MACRO.h"
    
    float32_t theta = 0, delta_theta=0.031416;
    float32_t sineval = 0, FO_filter_out = 0.0, FO_filter_prev = 0.0;
    float32_t i_n = 0.0, i_n_1 = 0.0, v_n = 5;
    
    uint16_t data_capture = 0;
    float32_t sine_values[200], filtval[200]; 
    float32_t RLresp[200], v_in[200];
    uint16_t i = 0;
    float32_t tau = 1/(2*M_PI*50);
    float32_t Ts = 100e-6;
    float32_t y_n_1 = 0, y_n = 0;
    float32_t L = 7.5e-3, R = 10;
    
    float32_t FO_filter (float32_t x_n, float32_t y_n_1);
    float32_t RL_filter (float32_t v_n, float32_t i_n_1);
    
    FO_FILTER FO_sine = FO_FILTER_DEFAULTS;
    PI_Controller I_RL = PI_CONTROLLER_DEFAULTS;
    
    uint16_t a=0;
    
    __interrupt void timer0_isr(void) {
        // Execute control algorithms
        // Toggle GPIO 22
        HWREG(GPIODATA_BASE + GPIO_O_GPATOGGLE) |= (uint32_t) 0x400000U;
    
        if(theta<=2*M_PI){
            sineval = 1*sin(theta);
        }
        else {
            theta = 0;
        }
        theta+=delta_theta;
        
        FO_sine.x_n = sineval;
        FO_filter_macro(FO_sine, tau);
        I_RL.error = sineval;
        PI_CONTROLLER_AW(I_RL);
         // FO_filter_out = FO_filter(sineval, FO_filter_prev);
         // FO_filter_prev = FO_filter_out;
        // i_n = RL_filter(v_n, i_n_1);
        // i_n_1 = i_n;
    
        if(data_capture==1)
        {
             sine_values[i] = sineval;
             filtval[i] = FO_sine.y_n;
             //filtval[i] = I_RL.y_sat;
            // RLresp[i] = i_n;
            // v_in[i] = v_n;
             i++;
            // if(i > 50){
            //     v_n = 10;
            // }
            
             if(i > 199){
                 i = 0;
                 data_capture = 0;
            //     v_n = 5;
             } 
        }
    
        //uint16_t dacA_value = (v_in[i]/10.0)*4095;
        // HWREGH(DACA_BASE + DAC_O_VALS) = (uint16_t)((v_n/10.0)*4095);
        // HWREGH(DACB_BASE + DAC_O_VALS) = (uint16_t) (i_n_1*4095);
    
        HWREGH(DACA_BASE + DAC_O_VALS) = (uint16_t)(((1+sineval)/2)*4095);
        HWREGH(DACB_BASE + DAC_O_VALS) = (uint16_t) (((1+FO_filter_out)/2) * 4095);
        
        // Cleanup
        // Clear flag in timer module
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TCR) |= 0x1000U;
        // Clear ACK bit in PIEACK register
        HWREGH(PIECTRL_BASE + PIE_O_ACK) |= (uint16_t) 0x1U;
    }
    
    float32_t FO_filter(float32_t x_n, float32_t y_n_1){
        float32_t y_n = (Ts*x_n + tau*y_n_1)/(Ts + tau);
        return y_n;
    } 
    
    
    float32_t RL_filter(float32_t x_n, float32_t y_n_1){
        float32_t y_n = (Ts*x_n + L*y_n_1)/(L+Ts*R);
        return y_n;
    } 
    
    
    __interrupt void timer1_isr(void) {
    // Execute control algorithms
        // Toggle GPIO 22
        HWREG(GPIODATA_BASE + GPIO_O_GPDTOGGLE) |= (uint32_t) 0x2U;
    
    
        // Cleanup
        // Clear flag in timer module
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TCR) |= 0x1000U;
    }
    
    //
    // Main
    //
    void main(void)
    {
        // Initialize device
        Device_init();
    
        // Disable interrupts and clear them at the CPU
        // Initialize PIE module
        Interrupt_initModule();
    
    
        // Initialize PIE Vector Table
        Interrupt_initVectorTable();
    
    
        // Enable clock to Timer 0 and Timer 1
        EALLOW;
        HWREG(CPUSYS_BASE + SYSCTL_O_PCLKCR0) |= (uint32_t) 0x18U;
        EDIS;
    
    
        // Configure Timer 0 and Timer 1
        // Stop the timers
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0x10U;
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0x10U;
    
        // Load the period value
        // Timer 0 = 1 second interval, Timer 1 = 2 second interval
        HWREG(CPUTIMER0_BASE + CPUTIMER_O_PRD) = 20e3 - 1;
        HWREG(CPUTIMER1_BASE + CPUTIMER_O_PRD) = 200000000 - 1;
    
        // Load optional pre-scale value
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TPR) = 0;
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TPR) = 1;
    
        // Set the mode of running
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0x800U;
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0x800U;
        
        // Enable timer interrupts
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0xC000U;
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0xC000U;
    
        // Reload period and prescale
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0x20U;
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TCR) |= (uint16_t) 0x20U;
    
    
        // Register ISRs for Timer 0 and Timer 1
        Interrupt_register(INT_TIMER0, &timer0_isr);
        Interrupt_register(INT_TIMER1, &timer1_isr);
    
        // Configure the PIE module for Timer 0 interrupt INT1.7
        HWREGH(PIECTRL_BASE + PIE_O_IER1) |= (uint16_t) 0x40U;
    
        // Enable global interrupts and configure IER
        // Enable Timer 0
        IER |= 0x1U;
        // Enable Timer 1
        IER |= 0x1000U;
        EINT;
    
        // DAC Initialization starts
        EALLOW;
    
        // DAC Reference Selection
        HWREGH(DACA_BASE + DAC_O_CTL) |= 0x0001U;
        HWREGH(DACB_BASE + DAC_O_CTL) |= 0x0001U;
    
        // DAC Load Mode
        HWREGH(DACA_BASE + DAC_O_CTL) &= 0xFFFBU;
        HWREGH(DACB_BASE + DAC_O_CTL) &= 0xFFFBU;
        
        // Power-up Buffered DAC
        HWREGH(DACA_BASE + DAC_O_OUTEN) |= 0x0001U;
        HWREGH(DACB_BASE + DAC_O_OUTEN) |= 0x0001U;
        
        // Wait for Power-up time (atleast 500us)
        DEVICE_DELAY_US(500);
        
        //initialize DACVALS
        HWREGH(DACA_BASE + DAC_O_VALS) = 0x0000U;
        HWREGH(DACB_BASE + DAC_O_VALS) = 0x0000U;
    
    	EDIS;
        // DAC Initialization ends
    
    
        // Configure GPIO pins 22, 52, and 97
        EALLOW;
        // Pin 22
        HWREG(GPIOCTRL_BASE + GPIO_O_GPAMUX2) &= 0xffffcfffU;
        HWREG(GPIOCTRL_BASE + GPIO_O_GPADIR) |= (uint32_t) 0x400000U;
    
        // Pin 52
        HWREG(GPIOCTRL_BASE + GPIO_O_GPBMUX2) &= 0xfffffcffU;
        HWREG(GPIOCTRL_BASE + GPIO_O_GPBDIR) |= (uint32_t) 0x100000U;
        HWREG(GPIOCTRL_BASE + GPIO_O_GPBCSEL3) |= (uint32_t) 0x20000U;
    
    
        // GPIO 97
        HWREG(GPIOCTRL_BASE + GPIO_O_GPDMUX1) &= 0xfffffff3U;
        HWREG(GPIOCTRL_BASE + GPIO_O_GPDDIR) |= (uint32_t) 0x2U;
        EDIS;
    
    
        // Start the timers
        HWREGH(CPUTIMER0_BASE + CPUTIMER_O_TCR) &= 0xffefU;
        HWREGH(CPUTIMER1_BASE + CPUTIMER_O_TCR) &= 0xffefU;
    
    
        // Infinite loop
        while (1) {}
    
    }
    
    //
    // End of File
    //
    

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

    尊敬的 Vijay:

    您是否可以选择更改数组值的数据格式? 如果您看到的数组值正确、那么您可能需要在 CCS 中更改图形的一些设置

    此致、

    彼得