正弦波的产生使用查表法,sin表里面是250个,0~90度的,步进为0.36度的计算出来的正弦值。利用正弦波的对称性,只需要0~90度的即可。
但是这250个值并不是每个都用,而是在程序中由有一个步进值step,
u_index += step
v_index += step
w_index += step
这个步进值step,同F_OUT相关
step = (float ) F_OUT / 10
每个周波后,index和F_OUT都会复位
if(u_index >= 1000)
{
u_index = 0;
F_OUT = Get_F_Command(); // update Frequency
}
unsigned char Get_F_Command()
{
unsigned char Freq;
// get F_Command;
//e.g.
Freq = 50;
return Freq;
}
实际上F_OUT只在第一个周波内是F_OUT = 200,其他周波都是50
由于VF_Mul_F = (int)F_OUT * VF_RATIO,VF_RATIO是不变的:#define VF_RATIO 327
所以只有在第一个周波内,VF_Mul_F是一个值,其他周波内变成了1/4,(50/200).其他见图:
XXX = VF_Mul_F * (long)sin_TABLE[index - 500]>>16或VF_Mul_F * (long)sin_TABLE[index]>>16或VF_Mul_F * (long)sin_TABLE[999 - index]>>16或(long)sin_TABLE[499 - index] * (long)VF_Mul_F >> 16
之所以第一周波与后面不同,我想是为了驱动大一些,步进更细一些,容易启动一些吧。
文章评论(0条评论)
登录后参与讨论