热度 13
2013-12-19 10:36
4285 次阅读|
0 个评论
对于大多数MCU来说,浮点运算、三角函数永远是可望不可及的。说他可望是因为在编译环境函数库中,这些运算都可以通过软件来实现,但他付出的代价是较长代码长度和大量的CPU运算时间。代码长度也许是系统可以承受的,但大量的CPU运算时间则是实时控制系统无法接受的。 在Xinnova(www.xinnovatech.com)新推出的一系列低成本、高性能划时代MCU产品XN62L和XN12L中,三角函数得到了彻底解决。它通过集成高达32位CORDIC矢量计算机,可以轻易并高速实现复杂三角函数在各种实时系统上的矢量控制算法。如直流无刷电机(BLDC)矢量控制,步进电机的细分控制,逆变控制和坐标系的旋转计算。 Xinnova CORDIC的软件接口非常简单: 一个控制寄存器,三个计算输入寄存器X,Y,PH和三个计算结果寄存器RLT_X, RLT_Y, RLT_PH。 使用步骤如下: 设置CORDIC计算精度: CORDIC 支持高达32位到计算精度。计算精度与时间成正比。该CORDIC精度从16到32位。一旦控制寄存器的RES 位被设置的话,所有计算输入寄存器X, Y 和 PH 寄存器也必须使用相同的位数。 针对不同的计算要求,填入相应的X, Y 和 PH值 (相位)寄存器输入值范围: CORDIC只接受从 - π /2 到 + π /2 的对应相位值。- π /2 到 + π /2 的相位被映射到-0x6487 ED51 到 +0x6487 ED51的32位精度数或-0x6487 (-0x6487 ED51 16) 到 +0x6487 (+0x6487 ED51 16) 的16位 精度数。 CORDIC x, y 寄存器转换: 只有精度范围内的有效值参与计算(寄存器 ),其中RES位是符号位。在这里, -1 到 +1同样被映射到有效的寄存器位。例如:如果使用32位精度 CORDIC运算, -0x7FFF FFFF被映射到 -1,+0x7FFF FFFF 被映射到 +1。 设置 CORDIC 模式: CORDIC 支持 Sin, Cos 和 Arctan三种计算。根据要求设置相应的模式。. Sin 计算: 写 PH 选择 CORDIC 模式 10, Sin/Cos计算 读计算结果RLT_Y Cos 计算: 写 PH 选择 CORDIC 模式 10, Sin/Cos计算 读计算结果RLT_X Arctan 计算: 写 X 和 Y 选择 CORDIC 模式 01, Arctan计算 读计算结果RLT_PH 如下是采用CORDIC运算后在DA端口输出的正弦波。 另一个例子来自使用CORDIC做步进电机细分控制的电流波形。 结论: 使用CORDIC算法可以让MCU拓展其三角函数计算能力,Xinnova公司MCU是一个很好的尝试。