Quantcast
Channel: C2000™︎ 微控制器论坛 - 最近的话题
Viewing all 12343 articles
Browse latest View live

下载程序是出现:data verfication failed at address 0x3FFFC0。please verify target memory and memory map

$
0
0

2812,版本ccs3.3,编译时没错,下载程序是出现错误:data verfication failed at address 0x3FFFC0。please verify target memory and memory map,望大神解答!谢谢!


关于询问ADC中断寄存器的问题

$
0
0

INTSELxNy这个寄存器中的x和y分别指的是什么?

ti移相全桥PCMC发波疑问

$
0
0

如题,看了一下ti提供的例程,有两个疑问,请帮忙看下:

1.初始化中pwm2被pwm1在过零点同步,同时也会被峰值电流比较产生的同步信号同步,这两个同步不会打架吗,过零同步的目的是什么2.pwm2的周期是prd,但是从波形看,有时会发出比prd宽的脉冲,怎么实现的

LUANCHXL-F28027F + BOOSTXL-DRV8301 使用问题

$
0
0

目前状况是这样的,我已经在通过proj_lab05b可以识别电机的参数了。但是我将识别出来的参数改入user.h后,生成的out文件。在加载到gui中,无法enable system。也就不能继续运行。主要是Rs、Ls_d、Ls_q、rated_flux这四个参数。但是改回原始参数就可以enable system。

CCS编写了28335程序,编译出现没有安装'XDAIS' v1.0.0的错误,具体错误报告如下,请问怎么解决

$
0
0


**** Clean-only build of configuration Debug for project LED ****

"F:\\tiCCS\\ccsv6\\utils\\bin\\gmake" -k clean
DEL /F "CMD\28335_RAM_lnk.exe" "CMD\DSP2833x_Headers_nonBIOS.exe" "LED.out" "LED.hex"
DEL /F "SRC\DSP2833x_CpuTimers.d" "SRC\DSP2833x_DefaultIsr.d" "SRC\DSP2833x_GlobalVariableDefs.d" "SRC\DSP2833x_PieCtrl.d" "SRC\DSP2833x_PieVect.d" "SRC\DSP2833x_SysCtrl.d" "SRC\DSP2833x_Xintf.d" "SRC\LED.d"
DEL /F "DSP2833x_ADC_cal.obj" "DSP2833x_CodeStartBranch.obj" "DSP2833x_CpuTimers.obj" "DSP2833x_DefaultIsr.obj" "DSP2833x_GlobalVariableDefs.obj" "DSP2833x_PieCtrl.obj" "DSP2833x_PieVect.obj" "DSP2833x_SysCtrl.obj" "DSP2833x_Xintf.obj" "DSP2833x_usDelay.obj" "LED.obj"
DEL /F "SRC\DSP2833x_ADC_cal.d" "SRC\DSP2833x_CodeStartBranch.d" "SRC\DSP2833x_usDelay.d"
找不到 F:\tiCCS\workspace_v6_2\LED\Debug\CMD\28335_RAM_lnk.exe
找不到 F:\tiCCS\workspace_v6_2\LED\Debug\LED.out
找不到 F:\tiCCS\workspace_v6_2\LED\Debug\SRC\DSP2833x_CpuTimers.d
找不到 F:\tiCCS\workspace_v6_2\LED\Debug\DSP2833x_ADC_cal.obj
找不到 F:\tiCCS\workspace_v6_2\LED\Debug\SRC\DSP2833x_ADC_cal.d
'Finished clean'
' '

**** Build Finished ****
Buildfile generation error occurred..
Product 'XDAIS' v1.0.0 is not currently installed and no compatible version is available. Please install this product or a compatible version.
Build stopped..

我使用的是CCS6.2最新版本,用的是XDS100V3编译器。

28377s DMA传输完成中断标志位在哪?(查询的方式)

$
0
0

我使用28377s做电机控制,PWM触发AD同时触发DMA-SPI通信,AD完成后进入到AD中断中,我想查询下DMA-SPI是否完成了,请问是查哪个标志位?DMA-SPI实际上是有两路DMA,一路给SPI TX由PWM触发,一路是给SPI RX由SPI RX触发。我现在想在AD中断中判断SPI-RX是否完成了。

在lab05b中增加绝对编码器信息

$
0
0

现在需要利用TI的无传感器FOC控制算法,实现伺服控制功能。

对电机的电流、转速和位置进行精确控制,特别是低速性能。

TI的FAST无传感器控制策略显然是无法实现的。这里希望在Instaspin算法的基础上,增加绝对位置编码器信息。

FOC控制的电角度由绝对位置编码器提供。

现在我在28069上通过SPI已经可以读到准确的绝对位置数据,

但我不知道如何将编码器数据,转换为FOC的电角度信息,融合到lab05b的例程中。

实现对电机的平稳控制。

你们是否有过类似应用,该如何实现,是否有一些参考帖子。谢谢

希望得到TI工程师的回复,谢谢~

经电流重构后,PWM写入数据函数怎么理解?

$
0
0
//! \brief     Writes PWM data to the PWM comparators for motor control
//! \param[in] handle    The hardware abstraction layer (HAL) handle
//! \param[in] pPwmData  The pointer to the PWM data
static inline void HAL_writePwmData(HAL_Handle handle,HAL_PwmData_t *pPwmData)
{
  uint_least8_t cnt;
  HAL_Obj *obj = (HAL_Obj *)handle;
  PWM_Obj *pwm;
  _iq period;
  _iq pwmData_neg;
  _iq pwmData_sat;
  _iq pwmData_sat_dc;
  _iq value;
  uint16_t value_sat;

  for(cnt=0;cnt<3;cnt++)
    {
      pwm = (PWM_Obj *)obj->pwmHandle[cnt];
      period = (_iq)pwm->TBPRD;
      pwmData_neg = _IQmpy(pPwmData->Tabc.value[cnt],_IQ(-1.0));
      pwmData_sat = _IQsat(pwmData_neg,_IQ(1.0),_IQ(-1.0));
      pwmData_sat_dc = _IQmpy(pwmData_sat + _IQ(1.0), _IQ(0.5));
      value = _IQmpy(pwmData_sat_dc, period);
      value_sat = (uint16_t)_IQsat(value, period, _IQ(0.0));

      // write the PWM data
      PWM_write_CmpA(obj->pwmHandle[cnt],value_sat);
    }

  return;
}

在这个函数中,for循环部分,特别是下面这段:

period = (_iq)pwm->TBPRD;
      pwmData_neg = _IQmpy(pPwmData->Tabc.value[cnt],_IQ(-1.0));
      pwmData_sat = _IQsat(pwmData_neg,_IQ(1.0),_IQ(-1.0));
      pwmData_sat_dc = _IQmpy(pwmData_sat + _IQ(1.0), _IQ(0.5));
      value = _IQmpy(pwmData_sat_dc, period);
      value_sat = (uint16_t)_IQsat(value, period, _IQ(0.0));
这段怎么理解?求各位大神指教啊!!

求助!关于28377S的CLA使用问题!

$
0
0

我在对CLA进行调试的过程中,分别连接了CPU1以及CLA1,并对CPU1进行load Program,对CLA1进行load symbol,现在有两个问题

1.  我目前使用CLA只是简单的赋值,把a的值通过CLA传给c,a和c都已经定义在CpuToCla1MsgRAM和Cla1ToCpuMsgRAM中,调试时一步一步的走,也能看到程序能进到Task1里,但是就是不执行Task1里的赋值语句,不知道为什么,会不会是还有哪里定义错了???(另外我在load symbol的时候会跳进F2837xS_CodeStartBranch.asm里,停在LB wd_disable处,但是我跑controlsuit的例子不会这样,不知道是不是因为这里不对啊)

2.  还有一个问题,CLA在运算时主核可以干别的事情不耽误么?两者是并行关系么?

感谢诸位大神!!!真的新手一枚啊

IQmath_fpu32.lib compatibility cannot be determined

$
0
0

hi: TI 的工程师你好?

我这边硬件平台是 TMSF28069     加载 的 iqmath_fpu32.lib  打开 fpu32        --opt_level off          --opt_for_speed  2    --fp_mode  strict

使用中 有几点疑问,麻烦解答一下,谢谢

1:在编译时 MATH_TYPE = FLOAT_MATH 选择浮点时没有问题, 但是在选择 MATH_TYPE = IQ_MATH 定点时就会有如下这样的 warning ,不知是怎么引起的该怎么消除,    

2:在出现上面警告时发现 计算上面的 函数的 结果是对的, 但是 计算的时间是有明显的差异的

以_IQsin为例   执行_IQsin 1万次   在MATH_TYPE = FLOAT_MATH 时需要 9.06-1.326 = 7.734ms    在MATH_TYPE = IQ_MATH 时需要 7.160-1.326 = 5.834ms

请问这时我的 IQmath_fpu32.lib  使用的是否有问题

3:在上面的情况下我发现    做 float*float   的时间 几乎 和 long*long的时间 所以 我想请问 在浮点计算时 TI 是否也提供了 对这样 的 _IQsin 等 复杂函数的运算库, 具体要怎么做?  在  motoware 里 的 2806xRevB_FastSpinROMSymbols_fpu32.lib 是干什么用的 添加进工程后,  在工程的.cmd  文件里要修改吗?

28335编译过程中报错怎么解决a value of type "void (*)(long)" cannot be used to initialize an entity of type "float"

$
0
0

之前在编写的时候运行还是正常的,加入了SVPWM模块后,就出现了不能使用类型(*)(long)”来初始化的问题,请问该怎么解决?

以下是附件,谢谢!

280049M中CLA中的.h可以包含CPU的一些函数吗?

$
0
0

各位大神:

       280049M中cla文件中能包含CPU的一些头文件,那么这些CPU的头文件的函数声明和CLA是什么关系?

ccs工程配置成下载至flash问题

$
0
0

我想将工程配置成能烧写到板子flash 中,前面都好好的,也编译连接成功并生成了.out文件,但是我将对应的文件烧到板子中后,并不能达到和程序烧至ram里面一样的执行功能,这是为什么呢?望回复?

CCS生成的map文件配置问题

$
0
0

请问,CCS有无相关的配置选项,配置之后,可以在MAP文件中显示变量名称、地址及大小。

PMSM3_4开环跑测量转速问题

$
0
0

PMSM3_4开环跑的,我SpeedRef = 0.5,BaseRpm=3000,理论应该测得转速是1500,但是我测的转速是1500到3000一直跳动,有时会稳定在3000一小段时间。

这会是什么原因呢? 还有我想问下ImeasAOffset和CalibratedAngle怎么测量?


TMS320F28377D双核CPU2无法运行

$
0
0

参考controlsuite例程,编写两个IO灯指示程序,用官方2837xD_FLASH_lnk_cpu1.cmd  2837xD_FLASH_lnk_cpu2.cmd文件,CPU1里的点亮LED程序正常运行,CPU2的程序无法加载,点击DEBUG后会出现如下错误提示:C28xx_CPU2: Error setting the GSxMSEL register for Flash operations

CPU1里的程序:

Int main()

_watchdog_reg = WdRegs.WDCR.all;
DisableDog();
InitPeripheralClocks();

IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
// InitFlash();

led_init_gpio();

GPIO_SetupPinOptions(99, GPIO_OUTPUT, GPIO_PUSHPULL);
GPIO_SetupPinMux(99, GPIO_MUX_CPU2, 0);

Clock_tickStart();

Clock_start(every2ms_clock_hndl);

BIOS_start(); /* does not return */
return(0);
}

CPU2里的程序:

Int main()

_watchdog_reg = WdRegs.WDCR.all;
DisableDog();
InitPeripheralClocks();


Clock_tickStart();

Clock_start(every2ms_clock_hndl);

BIOS_start(); /* does not return */
return(0);
}

void every2ms_clock_func()
{

if(_tasks_counter % 500 == 0)
{

_tasks_counter = 0;

if (ed_status()==0)
GPIO_WritePin(99, 1);
else
GPIO_WritePin(99, 0);

}
_tasks_counter++;
}

关于svgen

$
0
0

TI的例程中关于SVPWM,给出了如下算法:

#define SVGENDQ_MACRO(v) \
v.tmp1= v.Ubeta; \
v.tmp2= _IQdiv2(v.Ubeta) + (_IQmpy(_IQ(0.866),v.Ualpha)); \
v.tmp3= v.tmp2 - v.tmp1; \
\
v.VecSector=3; \
v.VecSector=(v.tmp2> 0)?( v.VecSector-1):v.VecSector; \
v.VecSector=(v.tmp3> 0)?( v.VecSector-1):v.VecSector; \
v.VecSector=(v.tmp1< 0)?(7-v.VecSector) :v.VecSector; \
\
if (v.VecSector==1 || v.VecSector==4) \
{ v.Ta= v.tmp2; \
v.Tb= v.tmp1-v.tmp3; \
v.Tc=-v.tmp2; \
} \
\
else if(v.VecSector==2 || v.VecSector==5) \
{ v.Ta= v.tmp3+v.tmp2; \
v.Tb= v.tmp1; \
v.Tc=-v.tmp1; \
} \
\
else \
{ v.Ta= v.tmp3; \
v.Tb=-v.tmp3; \
v.Tc=-(v.tmp1+v.tmp2); \
} \
尝试着推导了一下这段代码跟传统七段式SVPWM的关系,没有推出来,不知道过来人怎么理解这段代码的,感觉这里的扇区跟传统七段式的分法也不太一样。

求指教。

TI的instaspin foc的FAST算法需要的三相电压采样替代问题

$
0
0

请问下,TI的instaspin foc的FAST算法需要的三相电压采样,可以用母线电压乘以占空比的方法替代三相电压采样吗?急等!!!

sys/bios 28335 can通信

$
0
0

我在28335上面使用sys/bios,进行can初始化的时候,

do
{
ECanbShadow.CANES.all = ECanbRegs.CANES.all;
} while(ECanbShadow.CANES.bit.CCE != 1 ); // Wait for CCE bit to be set

加断点调试,发现一直在这里循环等待。

后来发现can寄存器都无法写入,无论是否有保护的。

C2000上电引导模式解析------【TI FAE 经验分享】

$
0
0

在使用C2000的时候,经常遇到工程师说芯片仿真能够运行,但是单机跑却不能跑起来;或者在调试时,复位芯片 > run,发现程序不能跑起来。这其中的原因主要是没有了解C2000的引导模式设置。另外当我们想通过其他方式去引导芯片启动的时候,往往也需要清楚知道C2000的引导是怎么设置的。因此,在这里跟大家分享一下我对C2000引导模式的理解,希望对各位理解芯片从上电到跑到main这一段芯片运行情况有所帮助。

以C2000 Piccolo系列的引导模式为例,delfino稍微有点区别,concerto系列的引导则更复杂。但理解了Piccolo的引导原理对我们理解后面两个系列的芯片有非常大的帮助。

1.首先我们根据图1来看一下芯片上电后的代码执行流程,当芯片在接收到一个复位信号后,会到0x3FFFC0去复位向量,该复位向量跳到BootROM 0x3FF75C中去执行bootloader的程序,这里主要有initboot, 和SelectBootMode, 以及一些外设引导的函数。SeleteBootMode根据芯片的硬件或软件设置来判断芯片该去哪里寻找程序入口,直接目的是如何找到main,然后执行应用程序。

                               图1. 芯片的复位流程图

我们最常用到的主要有两种引导模式:

一种是boot to RAM,即跳到0x000000的RAM中,去开始执行指令,主要针对程序加载在RAM的仿真模式;另外一种是boot to Flash,则跳到0x3F7FF6中去开始执行代码。

相应的,程序会这两个入口地址0x000000, 0x3F7FF6放一条跳转指令,在codestart.asm源文件中,原因是在Flash的入口地址处只有两个单元的空间,后面是CSM模块,所以需要跳转;而在RAM中之所以也需要跳转,主要是因为在跳转到main之前,需要执行一小段代码_c_int00,该代码会使用0x000003之后的一段RAM,如果代码放在那里,在执行_c_int00之后会损坏代码。

另外就是一些外设引导模式,如SCI引导以及SPI引导等,像我们常使用的C2PROG软件就支持SCI引导,然后通过串口下载程序。

2. 那么芯片的SelectBootMode函数是如何来判断芯片的引导模式(boot mode)呢?

从图2中我们可以看到,首先会判断芯片是否连接仿真器,根据TRST引脚的状态来判断。

如果是仿真器连接,则进入仿真引导(Emulation Boot),这时候芯片的引导主要是靠2个RAM的单元来判断,即EMU_BMODE和EMU_KEY,地址是0xD01和0xD00,所以我们在连接仿真器后,可以首先修改这两个EMU_BMODE和EMU_KEY来设置引导模式;

如果没有连接仿真器,则进入单机跑模式(stand alone), 这时候芯片的引导主要靠GPIO34和GPIO37的状态,以及两个OTP存储单元的值来判断。不过我们经常没有使用OTP这两个单元,用GPIO的状态就已经够了。

                                            图2. 两种状态下的引导模式

3. 仿真器连接时的引导模式配置

  

当带仿真器的时候,芯片会根据EMU_BMODE和EMU_KEY这两个单元的值来判断引导模式,比如我们带仿真器最常用的就是引导到RAM,即需要设置EMU_KEY = 0X55AA, EMU_BMODE = 0X000A。当我们在仿真的时候,程序load到Flash的时候,就需要设置EMU_KEY = 0X55AA, EMU_BMODE = 0X000B,如果EMU_BMODE = 0x0003的话,由于我们没有对OTP单元进行操作,即OTP的值为0xFFFF,所以这种情况下也是boot to flash。

在带仿真器跑程序的时候,我们发现即使我们不配置引导模式,程序也能够跑到main,这主要是因为CCS的功能,在程序load到芯片的时候,或是reset > restart,CCS会自动屏蔽bootloader的过程,自动跳到main函数入口。如果我们只选择reset CPU,则需要配置引导模式,即对0x0d01, 0x0d00这两个单元在memory window进行写相应的值,或是在script的菜单中选择引导模式,程序才能够跑到main中。

Viewing all 12343 articles
Browse latest View live
<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>