99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

【 DigiKey DIY原創(chuàng)大賽】自平衡萊羅三角形(四)- 程序結(jié)構(gòu)及邏輯

本項目是在Arduino2.3.3下開發(fā)的,需要安裝esp32_package_1.0.6.exe庫環(huán)境。還需要安裝電機的驅(qū)動代碼庫我使用的是Arduino-FOC-2.2.1“SimpleFOC.h”。

萊羅三角形涉及到的技術比較復雜。主要有電機的速度控制、整機的平衡控制PID算法、卡爾曼濾波 "Kalman.h"等等。

電機的控制FOC(Field-Oriented Control)是一種用于電機控制的方法,廣泛應用于現(xiàn)代交流電機驅(qū)動系統(tǒng)中。流程包括初始化系統(tǒng):包括硬件初始化、變量初始化等。讀取傳感器數(shù)據(jù):從編碼器或其他傳感器讀取轉(zhuǎn)子位置信息。計算轉(zhuǎn)子位置:通過讀取的傳感器數(shù)據(jù)計算出轉(zhuǎn)子的實際位置。計算d-q軸電流:將三相電流轉(zhuǎn)換為d-q軸系下的電流。計算轉(zhuǎn)矩和磁通:根據(jù)d-q軸電流計算電機的電磁轉(zhuǎn)矩和磁通。計算電壓指令:根據(jù)FOC算法計算出所需的電壓指令。生成PWM信號:將電壓指令轉(zhuǎn)化為PWM信號。輸出PWM信號:將生成的PWM信號發(fā)送給逆變器,以驅(qū)動電機。循環(huán)等待下一個周期:等待下一個控制周期開始,重復上述過程。 

對電機的操作代碼如下

//連接motor對象與傳感器對象
  motor.linkSensor(&sensor);
  //供電電壓設置 [V]
  driver.voltage_power_supply = 12;
  driver.init();
  //連接電機和driver對象
  motor.linkDriver(&driver);
  //FOC模型選擇
  motor.foc_modulation = FOCModulationType::SpaceVectorPWM;
  //運動控制模式設置
  motor.controller = MotionControlType::torque;
    //速度PI環(huán)設置
  motor.PID_velocity.P = v_p_1;
  motor.PID_velocity.I = v_i_1;
  //最大電機限制電機
  motor.voltage_limit = 12;
  //速度低通濾波時間常數(shù)
  motor.LPF_velocity.Tf = 0.01;
  //設置最大速度限制
  motor.velocity_limit = 40;
  motor.useMonitoring(Serial);
讀取MPU6050數(shù)據(jù)
while(i2cRead(0x3B, i2cData, 14));
    accX = (int16_t)((i2cData[0] << 8) | i2cData[1]);
    accY = (int16_t)((i2cData[2] << 8) | i2cData[3]);
    accZ = (int16_t)((i2cData[4] << 8) | i2cData[5]);
//    tempRaw = (int16_t)((i2cData[6] << 8) | i2cData[7]);
    gyroX = (int16_t)((i2cData[8] << 8) | i2cData[9]);
    gyroY = (int16_t)((i2cData[10] << 8) | i2cData[11]);
    gyroZ = (int16_t)((i2cData[12] << 8) | i2cData[13]);
double dt = (double)(micros() - timer) / 1000000; // Calculate delta time
    timer = micros();
double pitch = acc2rotation(accX, accY);
double gyroZrate = gyroZ / 131.0; // Convert to deg/s
    kalAngleZ = kalmanZ.getAngle(pitch, gyroZrate + gyroZ_OFF, dt);
    gyroZangle += (gyroZrate + gyroZ_OFF) * dt;
    compAngleZ = 0.93 * (compAngleZ + (gyroZrate + gyroZ_OFF) * dt) + 0.07 * pitch;
angle當前角度與期望角度差值,在差值大的時候進行搖擺,差值小的時候LQR控制電機保持平衡
if(test_flag == 0)//正常控制
{
if(abs(pendulum_angle) < swing_up_angle) // if angle small enough stabilize 0.5~30°,1.5~90°
{
     target_velocity = controllerLQR(pendulum_angle, gyroZrate, motor.shaft_velocity);
if(abs(target_velocity) > 120)
        target_velocity = _sign(target_velocity) * 120;
motor.controller = MotionControlType::velocity;
motor.move(target_velocity);
}
else // else do swing-up
{    // sets swing_up_voltage to the motor in order to swing up
motor.controller = MotionControlType::torque;
          target_voltage = -_sign(gyroZrate) * swing_up_voltage;
motor.move(target_voltage);
}
}
使用esp32串口實現(xiàn)下載程序,下載軟件是flash_download_tool_3.9.2

選擇正確串口就可以下載。

整機成品入下圖

以下為視頻演示:

總結(jié):

經(jīng)歷這個項目,開始了無鋼網(wǎng)焊接之旅。上手了ESP32,學習了FOC,AS5600,MPU6050,EG2133,卡爾曼濾波,PID算法等等等等。

致謝!

感謝電源網(wǎng)和DigiKey

感謝45roll和每一個幫助過任何人的人

全部回復(0)
正序查看
倒序查看
現(xiàn)在還沒有回復呢,說說你的想法
發(fā)
主站蜘蛛池模板: 久久九九国产精品 | 人妻无码久久中文字幕专区 | 国产大片免费完整观看 | 国产高清乱子精品偷伦对白 | 美国人泡妞xxxxwww免费看 | 国产男人天堂 | 亚洲国产成人精品无色码 | 5x免费视频 | 91视频在线网站 | www.com在线观看| 欧美18videosex性欧美tube1080 | 亚洲国产精品久久久久久69 | 中文字幕在线伊人 | 激情偷乱人伦小说视频在线精 | 扒开双腿猛进入在线观看 | 国产精品久久久久久久亚洲按摩 | 国产真实乱子伦视频播放 | 极品嫩模被黑人20厘米 | 特a毛片| 久久精品人妻无码一区二区三区 | 九九日视频| aaaa一级片| 国产AV国片偷人妻麻豆 | 欧洲美女粗暴牲交视频免费 | 中文无字幕一区二区三区 | 国产专区2 | 受被攻c哭高h视频在线观看 | www在线免费观看欧美黄 | 久久精品这里热有精品 | 日欧一片内射VA在线影院 | 欧美黑人粗暴多交高潮水最多 | 日本最黄一级片免费在线 | 欧美精品一区二区精品网 | 亚洲美女视频网站 | 国产一区二区免费在线观看 | 成人免费观看视频网站 | 成人片在线看 | 欧美日韩精品一区二区三区四区 | 日韩视频一区在线观看 | 97精品人人A片免费看 | 男女性高爱潮免费网站 |