làm trơn một chuyển động


7

tôi có một động cơ bước (được điều khiển bởi một arduino) để di chuyển một số bánh răng và ròng rọc. vấn đề là ròng rọc giật rất nhiều: chuyển động bắt đầu và dừng quá nhiều đột ngột. để làm cho chuyển động trở nên trôi chảy hơn, tôi nghĩ rằng tôi có thể sử dụng một loại đường dốc: chuyển động đầu tiên là chậm, khi các động cơ đã đạt đến vận tốc mà nó tiếp tục, sau đó chậm lại một cách trơn tru.

tôi đã thử sử dụng sóng hình sin theo cách này:

// generate ramp
float t = 0;
float deltat = PI/(200+1)
for(int i=0; i<200; i++) {
    ramp[i] = 1000 - sin(t)*900;
    t += deltat;
}

bây giờ tôi có một đoạn gồm 200 phần tử đi từ 1000 (rất chậm) đến 100 (rất nhanh) sau một làn sóng xoang. Bây giờ tôi di chuyển động cơ với mã này:

for(int i=0; i<200; i++) {
    int delay_velocity = ramp[i];

    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(delay_velocity); 

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(delay_velocity);
}

Điều này hoạt động khá tốt: ròng rọc không giật quá nhiều và tôi có quyền kiểm soát bao nhiêu bước để làm.

nhưng công việc này cũng có vấn đề:

  • tôi không thể tạo ra các đường dốc rất dài (do tràn vào atmega) - giả sử một mảng không dài hơn 400 phần tử nhiều hơn (nó phụ thuộc vào thời gian phác thảo arduino)
  • Tôi có quyền kiểm soát bao nhiêu bước nhưng tôi không biết phải mất bao nhiêu thời gian để hoàn thành nó (tôi nghĩ tôi có thể tính toán nó với một số tổng hoặc tích phân nhưng nó không thực tế lắm)

Vì vậy, tôi đang tìm kiếm một số cách khác để làm mịn chuyển động của tôi. tôi nghĩ rằng tôi có thể có một đường cong khác thay vì hình sin. một cái gì đó như thế này?

nhập mô tả hình ảnh ở đây

Cho đến bây giờ tôi đã không cân nhắc để tạo ra đoạn đường nối trong máy tính và sau đó chuyển nó sang arduino nhưng có thể là một khả năng.

vài lời khuyên? suy nghĩ?


cần giúp đỡ! tôi có thể nhận được mã làm việc đầy đủ trong đó bạn sẽ có đầu ra dir bước nhanh trên hai chân, tôi quan tâm đến mã đầu tiên mà bạn đã đăng. Tôi không thể tìm ra phần còn lại vì kỹ năng lập trình kém của mình. hoặc chỉ các phần khó khăn với tất cả các khai báo hoàn thành, để tôi có thể hiểu được. tôi đang lái một ổ dugong dc với một arduino uno.

Tôi đang nói về động cơ bước .. không bao giờ sử dụng động cơ dc
nkint

Câu trả lời:


7

Những gì bạn đang tìm kiếm được gọi là hồ sơ vận tốc hình thang .

Hồ sơ vận tốc hình thang

Không cần phải sử dụng sóng tội lỗi. Chuyển động mượt mà có thể đạt được bằng cách đơn giản tăng tốc tuyến tính đến mức tối đa, giữ nó ở đó, sau đó để nó dốc xuống lần nữa. Nhiều máy phay CNC và robot sử dụng loại hồ sơ này.

Nếu bạn muốn chuyển động siêu mượt, bạn có thể chọn cấu hình S-Curve.

Hồ sơ S-Curve

Toán học cho điều này là khó hơn đáng kể, nhưng chuyển động là đẹp. Trong video này, họ cho thấy hai cấu hình chuyển động ảnh hưởng đến một ly nước như thế nào.


wow, yeah, nó chính xác là những gì tôi đang tìm kiếm. Bạn cũng có một số liên kết để thực hiện?
nkint

Tôi thực sự, thực sự nghi ngờ rằng video đang hiển thị vận tốc hình thang so với vận tốc đường cong s. Có vẻ như không có gia tốc nào so với gia tốc tuyến tính.
Sói Connor

Điều tôi nghĩ họ muốn nói là cấu hình gia tốc tuyến tính tạo ra cấu hình chuyển vị cong s .
Sói Connor

@FakeName - Vâng, bây giờ tôi xem lại, thật khó để thấy bất kỳ sự tăng tốc nào đang diễn ra. Có thể là giai đoạn tăng tốc quá ngắn đến mức không thể phát hiện trong video. Trong trường hợp đó, nó cũng không thực sự là một thử nghiệm công bằng.
Rocketmagnet

@Rocketmagnet - Ồ, tôi chắc chắn thấy tăng tốc , nhưng tôi không thấy tăng tốc tràn lan . Nó trông giống như tăng tốc tuyến tính thẳng lên với tôi.
Sói Connor

0

Thay vì đặt các giá trị đường nối của bạn trong một mảng, chỉ cần tính toán chúng một cách nhanh chóng, nếu bạn có đủ mã lực trong Arduino của mình:

function ramp (int i)
{
    return 1000 - sin(t * i) * 900;
}

Bạn có thể điều chỉnh phương trình khi cần thiết.


không thỏa hiệp này chuyển động của động cơ không phải là một giải pháp phù hợp
nkint
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.