算法 - FOC闭环位置控制

目录

一、理论部分

二、伪代码


一、理论部分

二、伪代码

cpp 复制代码
float Kp=0.133;

//限制
#define _constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))

// 归一化角度到 [0,2PI]
float _normalizeAngle(float angle){
  float a = fmod(angle, 2*PI);   //取余运算可以用于归一化,列出特殊值例子算便知
  return a >= 0 ? a : (a + 2*PI);  
}

//根据输入Uq、Ud、角度,获取三相PWM;
void setPhaseVoltage(float Uq,float Ud, float angle_el) {
  angle_el = _normalizeAngle(angle_el);
  // 帕克逆变换
  Ualpha =  -Uq*sin(angle_el); 
  Ubeta =   Uq*cos(angle_el); 
  // 克拉克逆变换
  Ua = Ualpha + voltage_power_supply/2;
  Ub = (sqrt(3)*Ubeta-Ualpha)/2 + voltage_power_supply/2;
  Uc = (-Ualpha-sqrt(3)*Ubeta)/2 + voltage_power_supply/2;
  setPwm(Ua,Ub,Uc);
}

//电角度计算
//zero_electric_angle为电角度偏差
//PP 为 极对数
float _electricalAngle(){
  return  _normalizeAngle((float)(DIR *  PP) * getAngle_Without_track()-zero_electric_angle);
}

//Uq值=Kp*偏差e*DIR(正负方向)
setPhaseVoltage(_constrain(Kp*(motor_target-DIR*Sensor_Angle)*180/PI,-6,6),0,_electricalAngle());
相关推荐
keyipatience1 小时前
跳表详细解析
开发语言·数据结构·c++·算法·跳表
大侠归来2 小时前
cJSON 源码解析:parse_string 函数深入剖析
linux·网络·算法
余额瞒着我当琳3 小时前
C++ map 底层与AVL 树
开发语言·c++·算法
释厄6233 小时前
物理发展史·量子力学=节点2·牛顿力学=节点3·宇宙的语言算法AI
人工智能·算法·microsoft
CQU_JIAKE3 小时前
9.30【A】
算法
INGNIGHT3 小时前
1897 · 会议室 3(扫描线)
数据结构·算法
All for pursuit.3 小时前
【贪心-2】253.会议室 II
数据结构·c++·算法·leetcode
垆边人似月.3 小时前
华为机考题(一):质数因子
算法·华为
迷途之人不知返4 小时前
算法系列5:位运算
算法
牢姐与蒯4 小时前
c++加餐之位图
c++·算法·哈希