Làm cách nào để tạm dừng Arduino trong 1 mili giây thông qua MATLAB?


8

Tôi đã có thể kết nối MATLAB với Uno của mình với dòng mã này: a = arduino('COM4');thông qua gói này: Gói hỗ trợ Matlab cho Arduino .

Ngay bây giờ, MATLAB là tập lệnh chính của tôi sẽ đồng bộ hóa tất cả các thành phần [như Arduino].

Tôi có thể gửi xung đến động cơ bước của mình chỉ bằng cách sử dụng:

void loop() {
    digitalWrite(2, HIGH);
    delay(1);
    digitalWrite(2, LOW);
    delay(1);
}

Điều này hoạt động tốt, và sẽ làm cho động cơ di chuyển khoảng 2 mili giây một lần. Vấn đề của tôi là tôi không thể tìm ra cách tạo ra độ trễ tương tự này thông qua giao diện của MATLAB. Tôi biết rằng MATLAB có một pause()chức năng, nhưng khi tôi thiết lập một vòng lặp trong MATLAB như thế này:

a = arduino('COM4');
for m = 1:400
    a.digitalWrite(2, 1);
    pause(0.001);
    a.digitalWrite(2, 0);
    pause(0.001);
end

Mỗi bước mất CÁCH lâu hơn - mỗi lần khoảng 200 mili giây.

Các tùy chọn khác để tạo tạm dừng giữa Cao / Thấp kỹ thuật số được gửi đến Arduino là gì? Sẽ thật tuyệt nếu tôi có thể kiểm soát kết quả từ Matlab, thông qua Arduino.


Có vẻ như bạn cần một cái gì đó như GRBL . Đây là một chương trình độc lập cho một bảng arduino diễn giải ngôn ngữ lệnh và tạo ra các chuyển động của động cơ bước phối hợp. Nó chủ yếu dành cho gia công CNC, nhưng nó có thể có thể làm những gì bạn cần.
Sói Connor

Câu trả lời:


6

Sự chậm trễ quan sát tăng lên là do thời gian cần thiết để gửi lệnh từ MATLAB đến Arduino để mã của nó thực thi lệnh được yêu cầu. Trong trường hợp của bạn, a.digitalWrite. Vì vậy, thời gian thực tế giữa các xung sử dụng độ trễ của MATLAB là 0,001 tạm dừng cộng với thời gian tốc độ baud nhân với kích thước gói và giải mã sau đó thực hiện.

Tôi khuyên bạn không nên theo đuổi giải pháp này của MATLAB kiểm soát thời gian của Step Motors, từ xa. Vì khớp nối tiềm ẩn này sẽ là một hạn chế bực bội. Lưu ý rằng đối với động cơ bước thời gian không thể đủ khả năng thực hiện tiềm ẩn như vậy. Do đó, tất cả các máy in 3D và nhiều máy CNC có Step Motors đều sử dụng Arduino có G-Code (lệnh di chuyển động cơ với điểm đến) và phần sụn thời gian thực xử lý bước, trong phạm vi dung sai.

Tôi sẽ đề nghị sử dụng một cái gì đó như chương trình cơ sở grbl với lá chắn động cơ bước và sau đó yêu cầu MATLAB gửi mã G cần thiết. Nơi có những người khác với nhiều tính năng hơn nhưng phù hợp với In 3d. grbl đơn giản hơn và đi thẳng đến điểm của động cơ chuyển động.


0

Không rõ câu hỏi của bạn cho dù bạn đang cố gắng thực hiện thời gian thực mà không có độ trễ hoặc chỉ đơn giản là muốn điều chỉnh thời gian trễ của động cơ từ MATLAB. Nếu sau này, một cách tốt là gửi dữ liệu độ trễ (ví dụ: một số biểu thị khoảng thời gian bạn muốn giữa các xung) vie serial, chương trình Arduino của bạn sẽ nhận và cập nhật độ trễ của động cơ như mong muốn. Hoặc, lưu ý đến các hạn chế về RAM, bạn có thể gửi toàn bộ chuỗi độ trễ có thể chạy lần lượt với thời gian chính xác.

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.