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

unflash安装

C2000阅读(23)

请问ti工程师uniflash_3.4.1.00012_win32能在Win10   64位系统安装吗,我安装时总是报错,

Susan Yang:

我来试一下,我现在使用的是UNIFLASH 4

也是 Win1064

28379D扩展SDRAM问题

C2000阅读(24)

查阅28379D的数据手册得知,存在256M*16的预留空间可以分配给外部存储器。因此我想扩展一片4G的SDRAM。即64M*4Banks*16的SDRAM,经过计算需要16位的地址位(16行地址与10列地址)加BA[1:0]才可以。但是由于使用SDRAM导致复用引脚A[19:13]不能作为地址位,28379中只有A[12:0]共13个地址位,凑不够16位。后来数据手册中的实例部分有将普通的GPIO端口通过加上拉电阻作为地址位使用,请问这些引脚在程序中如何配置,如何使用,是否有相关的例程可以供参考。另,希望可以推荐一片符合要求的SDRAM,查找了很多芯片都不符合64M*4Banks*16的要求

Susan Yang:

不知您是否有参考过下面的文档?

https://www.ti.com/lit/an/sprac96a/sprac96a.pdf 

关于virtual page,您可以参考C2000ware内的例程

C2000Ware_3_02_00_00\device_support\f2837xd\examples\cpu1\emif_dc_pages\cpu01

TMS320F2835 adc连续采样

C2000阅读(26)

我现在想采集adc2的值,用软件触发,连续采样,我的设置如下:

AdcRegs.ADCCTL1.bit.INTPULSEPOS = 0;

AdcRegs.INTSEL1N2.bit.INT2E = 0;//关闭中断
AdcRegs.INTSEL1N2.bit.INT2CONT = 1; //连续模式
AdcRegs.INTSEL1N2.bit.INT2SEL = 0x10; //选择无效
AdcRegs.ADCSOC1CTL.bit.CHSEL = 2; //将ADCINA2映射到通道1
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0;//软件触发

//
// set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
//
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
EDIS;
AdcRegs.ADCSOCFRC1.bit.SOC1=1;

然后我每次读的时候:

AdcRegs.ADCSOCFRC1.bit.SOC1=1;//软件触发
adc_tmp=AdcResult.ADCRESULT1;//读值

如果我改成这样:

//AdcRegs.ADCSOCFRC1.bit.SOC1=1;//软件触发

adc_tmp=AdcResult.ADCRESULT1;//读值

就读不出数来,也就是说,我把软件触发关闭,adc值就读不出来,那么这个AdcRegs.INTSEL1N2.bit.INT2CONT = 1; //连续模式有什么意义呢?如果每次我读取都需要软件触发的话,这个连续方式作用不大啊,我的理解是我把连续模式打开后,我只要软件触发一次后,我读取adc_tmp=AdcResult.ADCRESULT1;的值都会成功,因为我把连续模式打开了,如果不是这么理解的话,那么这个连续模式是怎么理解的呢?在什么情况下才有用呢?

Susan Yang:

参考用户指南,该位设置后会强制给通道产生SOC信号,从而实现连续采样

TMS320F28035 关于cal触发问题

C2000阅读(18)

我的芯片是TMS320F28035,我测试了C2000Ware_3_02_00_00这个库里面的cla_adc这个例程,然后发现那个adc触发是pwm周期内多次触发,而不是pwm一次,adc触发cla一次。我把代码贴出来

#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "CLAShared.h"
#include <string.h>
#include <stdint.h>

//
// Prototype statements
//
__interrupt void cla1_isr2(void);

//
// Globals
//
#pragma DATA_SECTION(ConversionCount, "Cla1ToCpuMsgRAM");
#pragma DATA_SECTION(VoltageCLA, "Cla1ToCpuMsgRAM");

Uint16 ConversionCount;
Uint16 LoopCount;
Uint16 VoltageCLA[NUM_DATA_POINTS];

extern Uint16 Cla1funcsLoadStart;
extern Uint16 Cla1funcsLoadSize;
extern Uint16 Cla1funcsRunStart;

void Gpio_select(void)
{
EALLOW;

GpioCtrlRegs.GPADIR.bit.GPIO12 = 0x01; // All outputs
GpioCtrlRegs.GPADIR.bit.GPIO24 = 0x01;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 0x01;

GpioDataRegs.GPADAT.bit.GPIO12 =0x01;
GpioDataRegs.GPADAT.bit.GPIO24 =0x01;
GpioDataRegs.GPBDAT.bit.GPIO34 =0x01;
EDIS;
}

void main(void)
{
Uint16 adc_tmp,adc_val;
InitSysCtrl();
DINT;
InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

EALLOW; // This is needed to write to EALLOW protected register
PieVectTable.CLA1_INT2 = &cla1_isr2;
EDIS; // This is needed to disable write to EALLOW protected registers

InitAdc(); // For this example, init the ADC
AdcOffsetSelfCal();

PieCtrlRegs.PIEIER11.bit.INTx2 = 1; // Enable INT 11.2 in PIE (CLA Task2)
IER |= M_INT11; // Enable CPU Interrupt 11
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM

memcpy((uint16_t *)&Cla1funcsRunStart,(uint16_t *)&Cla1funcsLoadStart,
(unsigned long)&Cla1funcsLoadSize);

EALLOW;
Cla1Regs.MVECT2 = (Uint16)((Uint32)&Cla1Task2 – (Uint32)&Cla1Prog_Start);
Cla1Regs.MVECT8 = (Uint16)((Uint32)&Cla1Task8 – (Uint32)&Cla1Prog_Start);

Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_ADCINT2; Cla1Regs.MMEMCFG.bit.PROGE = 1; // Map CLA program memory to the CLA
Cla1Regs.MCTL.bit.IACKE = 1; // Enable IACK to start tasks via software
Cla1Regs.MIER.all = (M_INT8 | M_INT2); // Enable Task 8 and Task 2
Cla1ForceTask8andWait(); // Force CLA task 8.
// This will initialize ConversionCount to zero

AdcRegs.ADCCTL1.bit.INTPULSEPOS = 0;
AdcRegs.INTSEL1N2.bit.INT2E = 1; //Enable ADCINT2
AdcRegs.INTSEL1N2.bit.INT2CONT = 0; //Disable ADCINT2 Continuous mode
AdcRegs.INTSEL1N2.bit.INT2SEL = 1; //setup EOC1 to trigger ADCINT2 to fire
AdcRegs.ADCSOC1CTL.bit.CHSEL = 2; //set SOC1 channel select to ADCINA2
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5; //set SOC1 start trigger on EPWM1A
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6; EDIS;

InitEPwm1Gpio();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;

EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 0x2EE; // Set compare A value

EPwm1Regs.TBPRD = 0x5DC;

EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;

Gpio_select();
for(;;)
{
adc_val=ConversionCount;
adc_tmp=VoltageCLA[0];
LoopCount++;
}
}

__interrupt void cla1_isr2()
{
GpioDataRegs.GPATOGGLE.bit.GPIO24=1;
AdcRegs.ADCINTFLGCLR.bit.ADCINT2 = 1; PieCtrlRegs.PIEACK.all = 0xFFFF;
}

这个代码我就是把pwm1a的信号输出,还有就是在__interrupt void cla1_isr2()这个中断里面翻转了一下IO,然后抓取了pwm的波形跟__interrupt void cla1_isr2()中断的波形,发现pwm输出是20khz,而中断的频率到了250khz,跟我的理解不一样啊,我的理解应该是pwm一个周期应该产生一次adc触发,cla收到adc触发后,在Cla1Task2这个任务里转换一次adc,然后产生__interrupt void cla1_isr2()中断告知cpu,不知道我的理解是否正确。我把波形贴出来,大神帮我看看,为什么实际产生的波形跟我的理解有误差呢?

我的问题:

1、为什么那个__interrupt void cla1_isr2()中断不是pwm1a在一个周期内只产生1次?

Green Deng:

1、我不确定你测的GPIO波形是否正确?正常的GPIO波形应该是0~3.3V的,为什么你的波形幅值这么奇怪。。。
2、例程里面采的是ADCINA2通道,把结果存到了ADCRESULT1的,这点没有问题啊

user6392471:

回复 Green Deng:

GPIO是正常的,那个波形是由于有led后跟一个限流电阻,我量的led端电压

adcresult1问题我找到资料了,但是那个cal中断就不知道是为什么了

28335 ADC DMA相关的问题

C2000阅读(17)

我现在想要采集ADCINA0-ADCINA7的输入电压,通过DMA传输,一直连续不断采集,我的配置代码如下

EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // 150 / (2*3) = 25M
EDIS;

InitAdc();

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Sequential mode: Sample rate = 1/[(2+ACQ_PS)*ADC clock in ns]
// = 1/(2*40ns) =12.5MHz (for 150 MHz SYSCLKOUT)
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC module clock = HSPCLK/1 = 25.5MHz/(1) = 25.0 MHz
AdcRegs.ADCTRL1.bit.CPS = 0;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 级联操作模式
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // 连续模式
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0; // 顺序采样
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1; // Enable Sequencer override feature
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 7; // 8个转换通道
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; // 中断启用
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;

AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 7; // 8个转换通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //ADCINA0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //ADCINA1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7;

dmadest = dma_adcbuf;
dmasource = &AdcMirror.ADCRESULT0; //Point DMA source to ADC result register base
DMACH1AddrConfig(dmadest, dmasource);
DMACH1BurstConfig(7, 1, 10);
DMACH1TransferConfig(9, 1, 1);
DMACH1WrapConfig(1, 0, 80, 0);

DMACH1ModeConfig(DMA_SEQ1INT, PERINT_ENABLE,ONESHOT_DISABLE, CONT_DISABLE,SYNC_DISABLE, SYNC_SRC,OVRFLOW_DISABLE, SIXTEEN_BIT,CHINT_END, CHINT_ENABLE);

StartDMACH1();

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1;

并配置了相应的中断函数,但是我发现,传输完成进入到中断函数之后,貌似不会再继续采集转换了,并且发现每次采集到的值并不是那么准确,请问是我的配置有问题吗

Green Deng:

你可以参考一下TI的官方例程,例程就是ADC采样之后通过DMA传输的:C:\ti\c2000\C2000Ware_3_02_00_00\device_support\f2833x\examples\adc_dma

Tony Liu4:

回复 Green Deng:

参考的就是例程,我发现也是进了中断,然后处理完我采集到的数据之后,不会接着采集,不会进第二次中断了

28035Bootloader API库

C2000阅读(16)

楼上大神们好,请问28035Bootloader API库在哪里能下载到呢?谢谢!

Susan Yang:

可以在C2000ware安装文件夹下找到

\C2000Ware_3_02_00_00\libraries\boot_rom

F28035 Flash2803x_API_Config.h

C2000阅读(19)

你好,请问F28035的库文件,Flash2803x_API_Config.h和Flash2803x_API_Library.h这些文件都在哪里能下载到呢?万分感谢!

Susan Yang:

回复 liyuanyuan:

很高兴能帮到您!

基于TMS320F28335的电机开发套件?

C2000阅读(26)

请问有没有基于TMS320F28335的电机开发套件呢?低压电机

我看了官网上的TMDSCNCD28335,该套件是可以插到可以插到高压套件基板上的。

1,我需要的只是驱动48V电机,功率也就100——200W,不知道有没有什么方案呢?

2,另外,我有一块DRV8301-69M-KIT板子,可以直接用于TMDSCNCD28335吗?

3,软件方面TMDSCNCD28335支持电机开发吗?类似motoware之类?

Green Deng:

1、目前TI提供的基于F28335的电机开发套件只有高压套件:TMDSHVMTRPFCKIT,如果低压的话可以考虑F28035,选择更多一些:www.ti.com.cn/…/TMS320F28035

2、DRV8301-69M-KIT是一款完整的电机控制套件,而TMDSCNCD28335只是控制卡。你是不是说反了?不过TMDSCNCD28335也不能用于DRV8301-69M-KIT,因为DRV8301-69M-KIT是需要带instaspin算法的芯片的(尾缀带"F"或者"M"的芯片型号)

3、如果是TMDSHVMTRPFCKIT的话可以在controlSUITE中找到对应的电机控制例程:C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1

Shan:

回复 Green Deng:

您好,您所描述的我已经明白,还有想继续请教一下:

一、如果不局限于28335芯片,那么针对48V(5Amax)的电机控制套件,有什么推荐吗?客户强调了两条需求:1,需要编码器;2,可以控制同步电机和异步电机(不是同时)

二、我现有的DRV8301-69M-KIT + 28069的组合,是否满足上述条件?

Green Deng:

回复 Shan:

可以满足的,F28069得是带尾缀"F"或者"M"的,比如F28069F或者F28069M。这样的话可以使用TI的instaSPIN算法,有感无感,同步异步电机都可以控制。

位置控制的角度由FAST估算器提供是否可行

C2000阅读(7)

 你好如上图角度由FAST估算器提供,有没有现成的实验例子。

Green Deng:

你好,LAB13a是位置控制,提供FAST角度和速度估算值。

user6321368:

回复 Green Deng:

你好LAB13a是编码器提供的参数,我想要去掉编码器,由FAST提供角度和速度估算值

User.h中的值设置

C2000阅读(5)

你好,

我现在使用的板卡是LAUNCHXL-F28069M和TIDA-00364,我现在正在配置User.h中的值,有一些问题需要帮助

1、TIDA-00364板卡的PWM频率设置在8~10KHZ,关于抽取率的部分比较疑惑,不知道它的值应该怎么设置,PWM的频率与它们有什么关系

它们的关系是怎样的,怎么确定和设置它们的值,能详细说明一下吗?谢谢

期待您的回复,谢谢

Green Deng:

这个参数资料很少,你可以参考一下E2E上FAE的回复:e2e.ti.com/…/683290

yingying fu:

回复 Green Deng:

谢谢您的回复;

我还想知道PWM的频率设置为8KHZ时,这几个参数需要更改吗?

例程里DRV8305的PWM频率设置为45KHZ,我查找到一些资料看到这几个参数都与PWM频率有关系,如图

我设置PWM频率并且不使中断溢出或者程序出状况,这几个参数是否需要修改?

Green Deng:

回复 yingying fu:

可以根据InstaSPIN Projects and Labs User’s Guide上第72页对这个参数的说明,进行修改。
另外,这个参数也与电机是否是低感电机还是高感电机有关(例程中有相关说明),一般10^ -5级别的电感的电机认为是低感电机。