28335的浮点运算问题

2019-07-22 13:27发布


运算是否交给28335协处理器FPU,是DSP自行控制吗?
 
没用过双核的东西。见笑了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
lianshumou
1楼-- · 2019-07-22 13:58
mac001
2楼-- · 2019-07-22 17:12
 精彩回答 2  元偷偷看……
tptzj
3楼-- · 2019-07-22 18:56
hansonhe
4楼-- · 2019-07-22 23:57
可以参考如下例程代码,使用FPU。

一个32位乘法

cpu运算需要2079个CPU周期 2079*6.67ns=13866.93ns=13.86us

FPU运算需要75个CPU周期 75*6.67ns=500.25ns=0.5us

FPU运算一个浮点的sin函数 73*6.67=486.91ns=0.486us (sin函数无法输出180°到360°的负值)

FPU运算一个浮点的sin函数 71*6.67=473.57ns=0.473us

71这个数字是有浮动的。

相差两位数啊!

需要加载 头文件 math.h 库文件使用 rts2800_fpu32.lib



value=sin(1.57)*2+cos(0.5)*2;//147 cpu cycles
ESTOP0;
value=cos(0.5);// 70 cpu cycles
ESTOP0;//software breakpoint
value=2*value+3;// 5 cpu cycles
ESTOP0;
value=value*0.5;// 3 cpu cycles
ESTOP0;
value=value/2;//155 cpu cycles===1us
ESTOP0;由此可以看出来,在计算除法的时候尽量把除法化为乘法计算,乘法比除法速度快的太多了。

下面是psim仿真SVPWM的时候用c BLOCK写的程序,实现的SVPWM功能。

//输入和输出变量说明
//x1----alpha
//x2----beta
//x3----Vdc 母线电压
//x4----Ts Tpwm pwm周期
//y1----扇区号
//y2----tcm1
//y3----tcm2
//y4----tcm3
//----------------------------------------------------扇区判断
float u1,u2,u3;//扇区判断中间变量
unsigned char A,B,C,N;//扇区判断中间变量
float x,y,z;//PWM波中间变量
float tx,ty;//PWM波中间变量
float txx,tyy;
float ta,tb,tc;//PWM波中间变量
//float tcm1,tcm2,tcm3;//PWM波中间变量
u1=x2;
u2=0.866*x1-0.5*x2;
u3=-0.866*x1-0.5*x2;
if(u1>0)
A=1;
else
A=0;
if(u2>0)
B=1;
else
B=0;
if(u3>0)
C=1;
else
C=0;
N=4*C+2*B+A;
switch(N)
{
case 1:N=2;break;
case 2:N=6;break;
case 3:N=1;break;
case 4:N=4;break;
case 5:N=3;break;
case 6:N=5;break;
}
y1=N;//输出扇区号码


x=1.414*x2*x4/x3; //一次除法
y=(x1+0.5774*x2)*1.2247*x4/x3; //第二次除法
z=(x1-0.5774*x2)*1.2447*x4/x3; //第三次除法

switch(N)
{
case 1:tx=z;ty=x;break;
case 2:tx=-z;ty=y;break;
case 3:tx=x;ty=-y;break;
case 4:tx=-x;ty=-z;break;
case 5:tx=-y;ty=z;break;
case 6:tx=y;ty=-x;break;
}
if((tx+ty)>x4||(tx+ty)==x4)
{
txx=tx*x4/(tx+ty); //第四次除法
tyy=ty*x4/(tx+ty); //第五次除法
tx=txx;
ty=tyy;
}

ta=(x4-tx-ty)/4; //可以变除法为乘法
tb=ta+tx/2; //可以变除法为乘法
tc=tb+ty/2; //可以变除法为乘法

switch(N)
{
case 1:y2=ta;y3=tb;y4=tc;break;
case 2:y2=tb;y3=ta;y4=tc;break;
case 3:y2=tc;y3=ta;y4=tb;break;
case 4:y2=tc;y3=tb;y4=ta;break;
case 5:y2=tb;y3=tc;y4=ta;break;
case 6:y2=ta;y3=tc;y4=tb;break;
}


可以看出SVPWM最多有5此除法,根据前面的分析,5次除法大约使用了5us的时间。

20khz的载波频率,Tpwm=50us。50-5=45us

45us/6.67ns=6746.6(CPU cycles)

因此在中断内部实现矢量控制还是很有可能的。
TI_MCU
5楼-- · 2019-07-23 01:06
FPU是CPU中的一个协处理单元,一般来说编译器会自动把相应的代码放在FPU中进行计算的。所以编程的时候只要声明成合适的浮点型变量就可以了
balabalaa
6楼-- · 2019-07-23 06:53
谢谢楼上的。

一周热门 更多>