Làm thế nào để sử dụng Arduino để điều khiển ESC?


9

Tôi đang sử dụng Arduino Uno để điều khiển ESC cho bộ tứ giác (đang thực hiện) của mình. Tôi hiện đang sử dụng thư viện servo để điều khiển ESC, hoạt động rất tốt.

Ngoại trừ..

Tổng số 100 là tốc độ tối đa, nghĩa là tôi chỉ có 10 tốc độ trong khoảng từ 90 (dừng) và 100 (động cơ hết công suất) để chạy chính xác bộ tứ của tôi, tôi muốn có nhiều tùy chọn tốc độ hơn. Có ý kiến ​​gì không? Tôi đang gặp khó khăn khi sử dụng tín hiệu PWM, mặc dù vậy tôi có thể không làm đúng.

Mã hiện tại của tôi là đây :

#include <Servo.h>

Servo myservo; // create servo object to control a servo
                // a maximum of eight servo objects can be created

int pos = 0; // variable to store the servo position

void setup()
{
  myservo.attach(8); // attaches the servo on pin 8 to the servo object
}

void loop()
{

 int maxspeed=100;
 int minspeed=0;
 int delaytime=5;
 int count;

 for(count=0; count <1; count+=1) {
  for(pos = minspeed; pos < maxspeed; pos += 1) // goes from 0 degrees to 180 degrees
  { // in steps of 1 degree
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(delaytime); // waits 15ms for the servo to reach the position
  }
  for(pos = maxspeed; pos>=minspeed; pos-=1) // goes from 180 degrees to 0 degrees
  {
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(delaytime); // waits 15ms for the servo to reach the position
  }
  if(count>1){
    break;
  }
 }

 myservo.write(92);
 delay(100000);
 myservo.write(90);
 delay(10000000);
}

Câu trả lời:


5

Hàm servo.write (angle) được thiết kế để chấp nhận các góc từ 0 đến 180. (Giá trị 180 lớn hơn đáng kể so với 100). Bạn có thể cho tôi biết tài liệu Servo bạn đã đọc " 100 (động cơ hết công suất) " ở đâu, để chúng tôi có thể sửa lỗi đánh máy đó không?

Vui lòng thay đổi dòng

int maxspeed=100; /* wrong */

đến

int maxspeed=180;

Ngoài ra, vui lòng chạy servo.refresh()định kỳ để cập nhật các servo - có lẽ đại loại như:

for(pos = maxspeed; pos>=minspeed; pos-=1) // goes from 180 degrees to 0 degrees
{
    myservo.write(pos); // set the servo position
    myservo.refresh(); // tell servo to go to the set position
    delay(delaytime); // waits 15ms for the servo to reach the position
};
// ...
myservo.write(92);
for( long int delaytime = 0; delaytime < 100000; delaytime+=10 ){
    myservo.refresh(); // tell servo to go to the set position
    delay(10);
};

Như mpflaga đã chỉ ra, bạn có thể có độ chính xác cao hơn bằng cách đặt độ rộng xung trực tiếp tính bằng micrô giây với

myservo.writeMicroseconds(1000); // typical servo minimum; some go down to 600 or less
myservo.writeMicroseconds(2000); // typical servo maximum; some go up to 2500 or more

ps: Bạn đã thấy "nháy mắt không chậm trễ" chưa? Kỹ thuật đó giúp đọc cảm biến và cập nhật vị trí servo dễ dàng hơn với thời gian nhịp tim ổn định.


Cảm ơn bạn, tôi sẽ xem xét từng gợi ý. Để trả lời câu hỏi của bạn: Tôi đã không đọc trong bất kỳ doc rằng servo đếm 100 là sức mạnh tối đa, I figured it out bằng cách kiểm tra động cơ ( hobbyking.com/hobbyking/store/... ) và thấy rằng số servo trên 100, prop dường như không quay nhanh hơn, cho tôi một phạm vi hoạt động rất nhỏ.
Toozinger

Nếu đó là trường hợp sau đó, thì pin của bạn không thể cung cấp đủ dòng điện (kiểm tra giá trị C) hoặc động cơ của bạn quá lớn (quá tải cho động cơ) hoặc esc của bạn không thể cung cấp đủ dòng điện (trong trường hợp đó có thể bị nóng lên). Vui lòng kiểm tra tất cả các khả năng trên.
Hazkaz

4

Mã của bạn sử dụng điển hình servo.attach(pin)nơi bạn có thể sử dụng quá tải servo.attach(pin, min, max)để đặt micrô tối thiểu và tối đa của độ rộng xung để phù hợp với phạm vi mong muốn cho ESC của bạn. Ngoài ra, để làm rõ hơn một chút nơi myservo.write(90);được sử dụng để đặt góc, bạn có thể sử dụng myservo.writeMicroseconds(1500);để đặt thời lượng của xung trực tiếp tính bằng micrô giây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.