BLDC-数字开方根计算

FOC控制算法中不可避免用使用到数字开方根;
对于没有硬件开方计算的MCU,则需要软件计算开方。

这里提供两种开方计算方式:
移位法和查表法
其中差表法时间快,M0一般1us左右,但是要占用内存。
移位法不占用ROM/RAM,但是速度慢一些。

1、移位法

unsigned int _sqrt(unsigned long value)
{
    unsigned	long T,B,C = 0;
    for (B=0x40000000,T = 0;B != 0;B >>= 2) 
    {
        T = C + B;
        C >>= 1;
        if (T <= value) 
        {
            value -= T;
            C += B;
        }
    }
	C = C & 0xffff;
	return(C);
}

2、查表法

signed int Vector_Vq_Limit(signed int *Vd)
{
	volatile signed int temp_vq_q15;
	signed int ret;
	
	if((*Vd) >  FOC.Vs_Max)	(*Vd) =  FOC.Vs_Max;
	if((*Vd) < -FOC.Vs_Max)	(*Vd) = -FOC.Vs_Max;
	
	temp_vq_q15 = FRACMPY_Q15(*Vd,*Vd);
	temp_vq_q15 = (stru_FOC.Vs_Square_Max - temp_vq_q15)>>6;  
              
	ret = (s32)Q15Sqrt_Table[temp_vq_q15];

	return(ret);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值