FOC و SimpleFOC چیست؟ (مبتدی)
موتورهای BLDC (Brushless DC) در کوادکوپترها، ماشینهای برقی، و UGVهای حرفهای استفاده میشوند. معمولاً کنترل آنها با ESC ساده انجام میشود که فقط سرعت را تنظیم میکند. اما FOC (Field Oriented Control — کنترل میدانگرا) روشی است که موتور را با بیشترین گشتاور و کمترین اتلاف انرژی کنترل میکند — نتیجه: حرکت نرمتر، توقف دقیقتر، و کنترل موقعیت.
کتابخانه SimpleFOC این کنترل پیچیده را برای آردوینو ساده کرده. با یک درایور DRV8302/DRV8305 (حدود ۱۵-۳۰ دلار) و یک انکودر مغناطیسی AS5600 (۵ دلار)، میتوان FOC را روی آردوینو اجرا کرد. UGV با FOC میتواند سرعت دقیق را حفظ کند حتی در سربالایی.
محصولی که میسازید
یک UGV با کنترل سرعت FOC — موتور BLDC + AS5600 + SimpleFOC.
- هزینه درایور: SimpleFOC Shield ≈ ۲۵ دلار
- انکودر: AS5600 ≈ ۵ دلار
- دقت سرعت: ±۰.۵ RPM
کد SimpleFOC — Velocity Control
#include <SimpleFOC.h>
// موتور: 7 جفت قطب (BLDC معمولی)
BLDCMotor motor = BLDCMotor(7);
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8); // 3PWM + Enable
// انکودر مغناطیسی AS5600 روی I2C
MagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C);
float target_velocity = 10.0; // rad/s
void setup() {
sensor.init();
motor.linkSensor(&sensor);
driver.voltage_power_supply = 12; // ولتاژ
driver.init();
motor.linkDriver(&driver);
motor.controller = MotionControlType::velocity;
// PID تنظیم Velocity:
motor.PID_velocity.P = 0.2;
motor.PID_velocity.I = 20;
motor.PID_velocity.D = 0.001;
motor.voltage_limit = 6; // حداکثر ولتاژ اعمالی
motor.init();
motor.initFOC();
}
void loop() {
motor.loopFOC();
motor.move(target_velocity);
// دستور از Serial:
if(Serial.available()) {
target_velocity = Serial.parseFloat();
}
}
مقایسه FOC با L298N
| مشخصه | L298N + موتور DC | SimpleFOC + BLDC |
|---|---|---|
| نرمی حرکت | متوسط | عالی ✓ |
| کنترل دقیق سرعت | ضعیف | عالی (±0.5RPM) ✓ |
| هزینه | ۵ دلار | ۳۰ دلار |
| پیچیدگی | ساده | متوسط |
| راندمان | ۶۰-۷۰% | ۹۰-۹۵% ✓ |