TI中文支持网
TI专业的中文技术问题咨询交流网站

TMS320F28335: FFT库使用问题,幅值输出数组如何分析?

user6223461阅读(78)

Part Number:TMS320F28335

在使用28335 的RFFT例程时有个疑惑希望得到解答, 通过RFFT_f32_mag(&rfft);函数计算谐波幅值后的输出数组RFFTmagBuff中数组的下标表示的是什么?比如RFFTmagBuff[0]数组第一位代表直流分量?RFFTmagBuff[1]数组第二位代表基波?RFFTmagBuff[2]数组第三位代表二次谐波?不知道是这样理解吗?

比如下图是我RFFTmagBuff输出绘制的波形,请问该如何解读呢?

Green Deng:

你好,问题已经收到,我会咨询一下相关工程师之后给你答复。

LAUNCHXL-F28379D: ADC读取不到数据

Xy Zhang阅读(42)

Part Number:LAUNCHXL-F28379DOther Parts Discussed in Thread:C2000WARE,

HI,TI的工程师

我简单修改组合了TI的例程

C:\ti\C2000Ware_4_00_00_00\device_support\f2837xd\examples\cpu1\adc_soc_continuous

C:\ti\C2000Ware_4_00_00_00\device_support\f2837xd\examples\cpu1\epwm_up_aq,

将PWM1A(launchpad标号40)连接到ADCINA0(launchpad标号30),测试LAUNCHXL-F28379D的ADC读取ePWM外设发出的信号,但watch窗口显示AdcaResult0值始终为0

示波器测试ePWM输出波形正常

以下是我的代码,编译运行均无报错

//
// Included Files
//
#include "F28x_Project.h"

//
// Defines
//
#define EPWM1_TIMER_TBPRD  2000  // Period register
#define EPWM1_MIN_CMPA500

//
// Globals
//
typedef struct
{volatile struct EPWM_REGS *EPwmRegHandle;Uint16 EPwmMinCMPA;
}EPWM_INFO;

EPWM_INFO epwm1_info;

Uint16 AdcaResult0;

//
//  Function Prototypes
//
void InitEPwm1Example(void);
void ConfigureADC(void);
void SetupADCSoftware(void);

//
// Main
//
void main(void)
{
//
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the F2837xD_SysCtrl.c file.
//InitSysCtrl();

//
// Step 2. Initialize GPIO:
// This example function is found in the F2837xD_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
//InitGpio();

//
// Enable PWM1, PWM2 and PWM3
//CpuSysRegs.PCLKCR2.bit.EPWM1=1;

//
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3
// These functions are in the F2837xD_EPwm.c file
//InitEPwm1Gpio();

//
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
//DINT;

//
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the F2837xD_PieCtrl.c file.
//InitPieCtrl();

//
// Disable CPU interrupts and clear all CPU interrupt flags:
//IER = 0x0000;IFR = 0x0000;

//
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.  This is useful for debug purposes.
// The shell ISR routines are found in F2837xD_DefaultIsr.c.
// This function is found in F2837xD_PieVect.c.
//InitPieVectTable();


//
// For this example, only initialize the ePWM
//EALLOW;CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;EDIS;InitEPwm1Example();EALLOW;CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;EDIS;

//
// Step 4. User specific code, enable interrupts:
//
// Enable CPU INT3 which is connected to EPWM1-3 INT:
//IER |= M_INT3;

//
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
//PieCtrlRegs.PIEIER3.bit.INTx1 = 1;

//
// Enable global Interrupts and higher priority real-time debug events:
//EINT;  // Enable Global interrupt INTMERTM;  // Enable Global realtime interrupt DBGM////Configure the ADCs and power them up//ConfigureADC();////Setup the ADCs for software conversions//SetupADCSoftware();////take conversions indefinitely in loop//do{////convert, wait for completion, and store results//start conversions immediately via software, ADCA//AdcaRegs.ADCSOCFRC1.all = 0x0001; //SOC0////wait for ADCA to complete, then acknowledge flag//while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0);AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;////store results//AdcaResult0 = AdcaResultRegs.ADCRESULT0;////at this point, conversion results are stored in//AdcaResult0, AdcaResult1, AdcbResult0, and AdcbResult1//////software breakpoint, hit run again to get updated conversions//asm("ESTOP0");}while(1);

}



//
// InitEPwm1Example - Initialize EPWM1 values
//
void InitEPwm1Example()
{//// Setup TBCLK//EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;// Set timer periodEPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm1Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm1Regs.TBCTR = 0x0000;// Clear counterEPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;//// Setup shadow register load on ZERO//EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//// Set Compare values//EPwm1Regs.CMPA.bit.CMPA = EPWM1_MIN_CMPA;// Set compare A value//// Set actions//EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;// Set PWM1A on ZeroEPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;// Clear PWM1A on event A,// up count

}

//
// ConfigureADC - Write ADC configurations and power up the ADC for both
//ADC A and ADC B
//
void ConfigureADC(void)
{EALLOW;////write configurations//AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);////Set pulse positions to late//AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;////power up the ADCs//AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;////delay for 1ms to allow ADC time to power up//DELAY_US(1000);EDIS;
}

//
// SetupADCSoftware - Setup ADC channels and acquisition window
//
void SetupADCSoftware(void)
{Uint16 acqps;////determine minimum acquisition window (in SYSCLKS) based on resolution//acqps = 14; //75ns////Select the channels to convert and end of conversion flag//ADCA//EALLOW;AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;  //SOC0 will convert pin A0AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //sample window is acqps +//1 SYSCLK cyclesAdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1; //end of SOC1 will set INT1 flagAdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//enable INT1 flagAdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is clearedEDIS;
}


//
// End of file
//

请问AdcaResult0无数据是什么原因呢?

谢谢!

Green Deng:

好像查看AdcaResult是看不出采样值,太久没跑这个例程有点忘了。印象中例程里面应该是建了个数组,数组中可以读取采样值。

,

Xy Zhang:

我是用了一个16位的整型来储存AdcaResult

AdcaResult0 = AdcaResultRegs.ADCRESULT0;

但是读取AdcaResult0显示采样值一直为0

DRV8301-69M-KIT: 实验电机推荐

Rui Weng阅读(43)

Part Number:DRV8301-69M-KIT

DRV8301-69M-KIT套件是不配例程电机的,请问TI官方有推荐的电机们

我从网上寻找了一款科尔摩根的电机,其编码器是 增量式换向编码器,请问这种编码器,驱动板套件支持么

Green Deng:

增量式编码器是支持的,但是增量式换向编码器就不太清楚了,没在论坛碰到过这种编码器。。。

另外,电机的话官方现在好像已经不售卖了,比如IHN06576

TMS320F28388D: CLA软件触发中断延时

强 zeng阅读(30)

Part Number:TMS320F28388D

我用测试C28核和CLA并行处理时(进行同样的代码),发现软件采用CLA_forceTasks(CLA1_BASE,CLA_TASKFLAG_1)启动TASK1时,并没有立即进入CLA_tas(),延时了1us才进入task。

__interrupt void Cla1Task1 ( void )
{////Local Variables//// num = 0;GPIO_writePin(78,1);
//GpioDataRegs.GPBSET.bit.GPIO33 = 1;int xTblIdx; //integer valued Table indexfloat A0,A1,A2; //Table coefficientsfloat *entry;float result;int i;////Preprocessing////__mdebugstop();xTblIdx = fVal * TABLE_SIZE_M_1; //convert table index to u16-bitsxTblIdx = xTblIdx * 3; //Table is ordered as 3 32-bit coefficients, the//index points to these triplets, hence the *3*sizeof(float)
//entry = &CLAasinTable[xTblIdx];
//A0 = *entry++;
//A1 = *entry++;
//A2 = *entry;
//result = A0 + fVal*(A1 + A2*fVal);
//
////
////Post processing
////
//if(fVal < 0)
//{
//result = - result;
//}xTblIdx = xTblIdx * 3333;xTblIdx = xTblIdx * 3234 + xTblIdx * 367 ;fResult = xTblIdx;
//GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1;GPIO_writePin(78,0);
}
void main(void)
{//// Intialize device clock and peripherals//Device_init();//// Initialize GPIO and configure the GPIO pin as a push-pull output//GPIO_setPadConfig(78, GPIO_PIN_TYPE_STD);GPIO_setPinConfig(GPIO_78_GPIO78);GPIO_setDirectionMode(78, GPIO_DIR_MODE_OUT);GPIO_setMasterCore(78, GPIO_CORE_CPU1_CLA1);GPIO_setDirectionMode(80, GPIO_DIR_MODE_OUT);GPIO_setPinConfig(80);//// Disable pin locks and enable internal pullups.////Device_initGPIO(); //skipped for this example//// Initialize PIE and clear PIE registers. Disables CPU interrupts//Interrupt_initModule();//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).//Interrupt_initVectorTable();//// Configure the CLA memory spaces first followed by// the CLA task vectors//CLA_configClaMemory();CLA_initCpu1Cla1();//// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)//EINT;ERTM;//// Run the test////CLA_runTest();for(;;){int xTblIdx1; //integer valued Table indexfloat result1;int i;GPIO_writePin(80,1);CLA_forceTasks(CLA1_BASE,CLA_TASKFLAG_1);xTblIdx1 = fVal * TABLE_SIZE_M_1; //convert table index to u16-bitsxTblIdx1 = xTblIdx1 * 3; //Table is ordered as 3 32-bit coefficients, the//index points to these triplets, hence the *3*sizeof(float)xTblIdx1 = xTblIdx1 * 3333;xTblIdx1 = xTblIdx1 * 3234 + xTblIdx1 * 367 ;fResult = xTblIdx1;GPIO_writePin(80,0);DEVICE_DELAY_US(50);}
}

测试发现GPIO78引脚都是再GPIO80拉高后1us才被拉高,而且主函数执行时间才750ns,而CLA执行了4.2us,

蓝色为CPIO80,红色为GPIO78.

按我的理解,CLA跟CPU应该是并行处理,触发AICK1,进入TASK1执行代码,CPU继续继续z主程序代码,然后等待task完成,但实测并没有得到这个结果。

Green Deng:

你好,问题已经收到,我会咨询一下CLA方面的专家之后回复你,还请耐心等待

TMS320F28035: 28035 的 SCI FIFO接收中断是否有BUG?

fw yang阅读(26)

Part Number:TMS320F28035

设置FIFO接收深度为4级, 发送深度0级;

用串口调试助手发送数据 01 03 00 00 00 02 C4 0B 共8个bytes, 示波器波形如下图

上图中,第一个为串口调试助手发送数据, 第二个波形为DSP回复数据.

注意看第一个波形持续时间为4.52ms, 波特率为19200, 可以计算1/19200*11*8=4.583ms,这与示波器波形相符,说明发送数据正确;如果是12个字节的话1/19200*11*12 = 6.875ms,这两个时间差示波器能轻易区分.

再看CCS监测数据

reDtat为接收数据,完全正确

但是 reciveCounter 为进接收中断次数,串口助手发送8个字节按理应该进中断为 8 / 4 = 2次, 监测数据为进了3次;re_data_counter = 12, 12 = 4 * 3, 接收了12个数据, 每进一次中断都读取了FIFO有几个数据再读取;如下面这段代码

dataNum = mo->SCIFFRX.bit.RXFFIL;

for (i = 0; i < dataNum; i++)
{
    md->reDtat[md->re_data_counter] = mo->SCIRXBUF.all;
    md->re_data_counter++;
}

很明显串口调试助手只发送了8个数据,按理FIFO尝试为4级的情况下只需进2次中断读8个字节;而实际28035却进了3次中断,读取了12个字节。并且示波器监测发送数据完全正确,28035读取数据也完全正确。但是进的中断次数却错了。

因此,在串口助手发送前我把reDtat[9]~reDtat[11]的数值手动改成其他数据,再用串口助手发送同样的数据,果然reDtat[9]~reDtat[11] 全部变为0。也就是说SCI在接收完毕后,在没有数据的情况下多进了一次中断,多接收了4个数据,且数据全为0.

目前, 我没有找到原因, 请各位大侠帮忙,如果需要我可以奉上代码.

Green Deng:

你好,内容比较多,我整理了一下,大概意思是说:

F28035的SCI启用FIFO的情况下接收8个字节的消息进入了3次中断,而且最后一次中断接收的是全为00的4个数据。是这样吗?

上面概述没问题的话可能还是要给出一下SCI & FIFO的配置代码查看一下。

TMS320F280023: 请问高精度PWM 分辨率可达到多少hz可调?

user6223461阅读(19)

Part Number:TMS320F280023

请问高精度PWM 分辨率可达到多少hz可调?能做到mhz可调吗?如果不能的话可做到最低多少hz可调?

Green Deng:

你好,HRPWM高精度PWM典型的分辨率可以达到150ps。

,

user6223461:

您好,我看手册上写的50KHz开关频率时,高精度PWM是0.5hz可调对吗?

,

Green Deng:

从表格的说明来看,是这样的。

,

user6223461:

好的,谢谢!

,

Green Deng:

客气了

INSTASPIN-BLDC: 关于电流反馈极性的疑问

user78960159阅读(20)

Part Number:INSTASPIN-BLDCOther Parts Discussed in Thread:BOOSTXL-3PHGANINV, INA240

以BOOST'XL-DRV8301为例,三相电流的检测电阻位于下桥臂驱动管与GND之间

检流放大器设计如下:

检测电阻P端连接至放大器负端,电阻N端连接至放大器正端,即采用了负极性连接方式,如InstaSPIN说明文档中的描述:

代码处理如下:

可以看到,虽然是负极性连接方式,但是电流的offset是正值,HAL_getCurrentScaleFactor也没有取反,也是正值

问题1.如果采用以上硬件电路设计方式和软件计算方法,采集得到的相电流相位应该是与电机相电流同向的吧?

问题2.我理解这里用负极性连接方式,是因为检测电阻在下桥臂驱动管与GND之间,电阻上流过的电流都是从每相绕组流出的,也就是电阻上流过的电流与电机相电流相位差180度,所以使用负极性连接方式,这样放大器输出的检测信号的极性就与电机相电流同相了,不知道这个理解对不对?

BOOSTXL-3PHGANINV开发套件中使用INA240A1检测电机相电流

其典型应用如下图所示:

由上图理解,采样电阻串接在三相绕组中,这与采样电阻串接在下桥臂与GND之间的连接方式不同,因此在这里的典型应用图中使用了正反馈连接方式。

然而,BOOSTXL-3PHGANINV中的INA240使用了负反馈的连接方式,如下图所示:

问题3:采样电阻串在电机每相中,为什么也要采用负极性的连接方式呢?

Cherry Zhou:

您好,能否请您再重新上传下最后两张图片?我这边显示不出来哦。

,

user78960159:

好的 感谢帮助

未显示的第一张图是ina240典型应用

第二张图为氮化镓开发板电流采集部分原理图

逆变器

tai weiyu阅读(19)

Other Parts Discussed in Thread:TCM1050

Ti是否有TCM控制下的逆变器相关的参考设计呀

Green Deng:

你好,你是指基于TCM系列芯片的逆变器相关参考设计吗?比如TCM1050

TMS320F28335: C2000™︎ 微控制器论坛

such阅读(15)

Part Number:TMS320F28335

关于dsp处理器中的XINTF或者EMIF总线问题,使用片外flash存储代码,通过xintf或者emif总线引导启动程序,那么程序起来后,是不是xintf或者emif总线一直被占用无法释放,是不是会导致无法通过xintf或者emif总线访问其他挂载在总线上的其他ram或者flash呢?

Green Deng:

你好,不影响的。

boot引脚只需要在上电期间保持引脚电位就可以,上电之后就会释放对boot的控制。

一般会对引脚进行一个外部弱上下拉,这样即能保证上电期间的电位,又不影响之后程序运行对引脚的控制。

,

such:

您好,我的意思不是上电后能不能再次控制boot引脚,而是XINTF总线,我的程序存在外部flash中,那么程序的运行会一直通过XINTF总线读取外部flash的代码,那么这种运行代码的方式是不是会一直占用XINTF总线?

,

Green Deng:

抱歉没这方面的测试经验,不过在内部flash运行的时候有一个做法是可以通过memcpy函数将flash中的代码搬移到ram中运行,外部flash运行应该也可以进行同样的操作。但此时芯片还会不会访问外部flash,这个我还真不知道。。。

,

such:

好的 谢谢您,您说的这个通过memcpy搬运到RAM中确实有这种的,比如说延时函数,这种在RAM中运行延时更加精准,但是我还没有发现把所有代码全部从flash搬运到ram中运行的例子,不过这确实是一种方法。

总之还是谢谢您了,我会查找一些更多的资料。

,

Green Deng:

全部搬运的方法其实跟部分搬运差不多,但是要注意的是,程序如果太大的话ram会不够用。

,

such:

好的谢谢

,

Green Deng:

客气了

TMS320F28027: 最大系统时钟60M

Zhicheng Lu阅读(10)

Part Number:TMS320F28027

tms320f28027这款芯片最大系统时钟为60M,请问我外接晶振进行倍频能超过60M吗,或者对芯片内部10M晶振时钟进行12倍倍频能输出120M的系统时钟吗?

Green Deng:

你好,这款芯片最大系统时钟为60MHz,没办法超频。更别说超频2倍了

© 2022 TI中文支持网   网站地图 鲁ICP备2022002796号-1