
FOC
文章平均质量分 86
tilblackout
score til you black out.
展开
-
PMSM FOC位置环S曲线控制算法(恒定急动度)
之前做FOC位置环控制的时候,简单地加了一个S曲线控制,参考链接如下:FOC 单电阻采样 位置环控制伺服电机这里面我的代码实现其实就是在每step个ADC中断中,根据函数f(x)=11+e−xf(x)=\frac{1}{1+e^{-x}}f(x)=1+e−x1生成一个uint16的S曲线定点数组,每次计算位置增加的比例,进而设置位置环的目标值。当然还需要考虑一些问题,比如S曲线有一些地方很平缓,增量不高,所以在还没到step个ADC中断的时候,PID就已经收敛了,所以电机就会在目标位置轻微抖动。当然..原创 2022-06-25 12:27:01 · 8570 阅读 · 6 评论 -
C语言正余弦函数定点查表算法原理及实现
如果用数学库中的sin和cos函数计算,可能涉及浮点、乘法、除法运算,运行速率较低。这里介绍一种正余弦查表算法。参考代码:SMT32 FOC电机库的mc_math.c。首先我们知道正弦和余弦的函数值差了90°,所以查表数据只需要保存正弦或者余弦的结果即可。待计算的角度范围为[0,2π],我们只需要保存的角度,其它象限的角度通过三角函数公式变换一下即可。(1)正余弦表格生成第一步当然是保存范围内正余弦函数的值,保存的越多计算结果越精确,但又消耗更多的存储空间。在STM32电机库中采用int16.原创 2022-04-24 16:21:30 · 14339 阅读 · 13 评论 -
FOC 位置环S曲线之定点查表算法
在位置环中,若直接让电机到指定位置刚开始加速度过大,会对电机造成损坏,所以一般不会直接将实际位置误差进行PID计算,而是逐步地增加位置。本篇文章介绍一种简单的定点数查表实现S曲线一、原理实际上就是利用方程,其函数图像如下所示:可以看到该函数的值域是(0,1),斜率也是先增加再减小,就用这个函数作为我们电机运动的S曲线。代码中就是每隔一定时间设置位置环的目标值,位置误差的增长率就和这个S曲线函数相同。二、代码实现1、生成S曲线数组由于需要用定点S曲线,所以使用Q16格式来保存数组,原创 2022-04-16 20:16:07 · 3792 阅读 · 5 评论 -
CORDIC算法 arctan反正切计算原理及C语言定点实现
之前做FOC算法的时候,用到了TLV493D磁传感芯片通过两个相差90°的正弦曲线计算角度,所以需要计算arctan的值。这里就基于CORDIC(坐标旋转数字计算方法,Coordinate Rotation Digital Computer)理论,实现一种arctan的定点计算方法。一、原理坐标旋转与FOC中的Park变换原理相同,CORDIC也是通过旋转坐标轴来求解反正切值的。如果去掉cosθ,这样不会影响角度旋转的结果,只是x和y都被缩小了cosθ,这样能简化计算,这称为伪旋原创 2022-04-06 21:12:22 · 11541 阅读 · 2 评论 -
FOC 单电阻采样 位置环控制伺服电机
FOC单电阻采样,位置环控制微型伺服电机,旋转到设定位置,S曲线平滑旋转过程。原创 2021-12-10 21:44:48 · 9289 阅读 · 1 评论 -
FOC电机库 定点PID代码分析
代码来源于STM32 FOC电机库中的pid_regulator.c。PID结构体typedef struct PID_Handle{ int16_t hDefKpGain; /**< Default @f$K_{pg}@f$ gain */ int16_t hDefKiGain; /**< Default @f$K_{ig}@f$ gain */ int16_t hKpGain; /**<原创 2021-12-05 11:26:36 · 4565 阅读 · 2 评论 -
FOC SVPWM函数PWMC_SetPhaseVoltage解析
一、扇区判断/* wUAlpha和wUBeta这里都乘了2,后面又除以了2,wY和wZ即没有分母 */wUAlpha = Valfa_beta.qV_Component1 * ( int32_t )pHandle->hT_Sqrt3;//hT_Sqrt3为2/√3wUBeta = -( Valfa_beta.qV_Component2 * ( int32_t )( pHandle->hPWMperiod ) ) * 2;wX = wUBeta;wY = ( wUBeta + wUA原创 2021-10-14 23:06:34 · 5517 阅读 · 2 评论