Mục lục:

Menu điều khiển tốc độ bước được điều khiển cho Arduino: 6 bước
Menu điều khiển tốc độ bước được điều khiển cho Arduino: 6 bước

Video: Menu điều khiển tốc độ bước được điều khiển cho Arduino: 6 bước

Video: Menu điều khiển tốc độ bước được điều khiển cho Arduino: 6 bước
Video: Arduino | Điều Khiển Tốc Độ Động Cơ Bước Bằng Biến Trở 2024, Tháng bảy
Anonim
Menu điều khiển tốc độ bước được điều khiển cho Arduino
Menu điều khiển tốc độ bước được điều khiển cho Arduino
Menu điều khiển tốc độ bước được điều khiển cho Arduino
Menu điều khiển tốc độ bước được điều khiển cho Arduino
Menu điều khiển tốc độ bước được điều khiển cho Arduino
Menu điều khiển tốc độ bước được điều khiển cho Arduino

Thư viện SpeedStepper này là bản viết lại của thư viện AccelStepper để cho phép điều khiển tốc độ của động cơ bước. Thư viện SpeedStepper cho phép bạn thay đổi tốc độ động cơ đã đặt và sau đó tăng / giảm tốc đến tốc độ cài đặt mới bằng cách sử dụng thuật toán tương tự như thư viện AccelStepper. Thư viện SpeedStepper cũng cho phép bạn đặt giới hạn cộng trừ và vị trí 'nhà'. Có một lệnh goHome để trở về vị trí trang chủ.

Hạn chế: Thư viện SpeedStepper chỉ điều khiển đầu ra hướng và bước, do đó cần được kết nối với trình điều khiển động cơ, chẳng hạn như Trình điều khiển dễ dàng, để thực sự điều khiển động cơ bước. Thư viện AccelStepper cung cấp nhiều tùy chọn lái xe hơn có thể được sao chép vào thư viện này nếu cần.

Ba bản phác thảo ví dụ được cung cấp, mỗi bản có thể chạy mà không cần động cơ hoặc trình điều khiển động cơ. Bản phác thảo speedStepperPlot đưa ra các lệnh tốc độ ví dụ và lệnh goHome và tạo ra một biểu đồ về tốc độ và vị trí kết quả. Bản phác thảo speedStepperSetup cung cấp một thiết lập điều khiển bằng menu để đặt vị trí và giới hạn của động cơ, sau đó chạy động cơ và điều chỉnh tốc độ lên xuống và goHome để kết thúc. Bản phác thảo speedStepperProfile cho thấy một ví dụ về thiết lập và thực thi một cấu hình tốc độ.

Trong khi thư viện AccelStepper cung cấp khả năng kiểm soát vị trí tốt, điều khiển tốc độ là cần thiết cho Đầu dò Băng tan Nguyên mẫu để Thu thập Mẫu Sinh học trên Europa. Đây là video về phiên bản trước đó của nguyên mẫu, sử dụng trọng lượng thay vì động cơ. Bản sửa đổi 1.1 đã thêm các cấu hình tốc độ sau khi người dùng yêu cầu một phương tiện để kiểm soát cấu hình tốc độ của máy bơm.

Thư viện này chạy trên Arduino Uno và Mega2560, nhưng đối với nguyên mẫu, bộ nhớ lớn hơn / bộ xử lý nhanh hơn SparkFun Redboard Turbo đã được sử dụng.

Hướng dẫn này cũng có sẵn trực tuyến tại Thư viện điều khiển tốc độ bước cho Arduino

Quân nhu

Để chạy các bản phác thảo ví dụ, chỉ cần Arduino UNO hoặc Mega2560 và các thư viện phần mềm là cần thiết

Đối với thử nghiệm băng ghế dự bị của thư viện, SparkFun Redboard Turbo đã được sử dụng với Trình điều khiển dễ dàng, 200 bước / vòng quay, động cơ bước 12V 350mA và nguồn cung cấp 12 DC 2A hoặc lớn hơn, ví dụ: https://www.sparkfun.com/products/14934. Cáp USB A đến Micro USB tới Cáp nối tiếp TTLArduino IDE V1.8.9 và một máy tính để chạy nó.

Bước 1: Chức năng Thư viện

Thư viện SpeedStepper chạy động cơ bước được giới hạn bởi các giới hạn do thư viện thiết lập. Xem tệp SpeedStepper.h để biết các phương pháp thư viện khác nhau có sẵn. Đây là một phác thảo về logic đằng sau chúng.

Vị trí của bước được theo dõi bằng cách đếm số bước (xung). Thư viện giới hạn vị trí giữa các vị trí setPlusLimit (int32_t) và setMinusLimit (int32_t). Giới hạn cộng luôn> = 0 và giới hạn trừ luôn <= 0. Khi khởi động, vị trí động cơ là 0 (nhà) và giới hạn được đặt thành số +/- rất lớn (khoảng +/- 1e9 bước). setAcceleration (float) đặt tốc độ động cơ sẽ thay đổi tốc độ lên hoặc xuống. Khi động cơ đạt đến giới hạn cộng hoặc trừ, nó sẽ giảm tốc với tốc độ này cho đến khi dừng lại ở giới hạn. Khi khởi động, gia tốc được đặt thành 1,0 bước / giây / giây. Cài đặt gia tốc luôn là số + ve. Dấu hiệu của cài đặt setSpeed (float) thiết lập hướng động cơ sẽ di chuyển.

setSpeed (float) đặt tốc độ tăng / giảm tốc động cơ từ tốc độ hiện tại của nó. Tốc độ có thể được đặt thông qua setSpeed (float) bị giới hạn, theo giá trị tuyệt đối, theo cài đặt, setMaxSpeed (float), mặc định 1000 bước / giây và setMinSpeed (float), mặc định 0,003 bước / giây. Các giá trị mặc định này cũng là giới hạn tốc độ được mã hóa cứng tuyệt đối mà thư viện sẽ chấp nhận cho setMaxSpeed () và setMinSpeed (). Nếu bạn muốn đặt tốc độ tối đa> 1000 bước / giây, bạn sẽ cần chỉnh sửa dòng đầu tiên trong tệp SpeedStepper.cpp để thay đổi maxMaxSpeed (1000) thành tốc độ tối đa bạn muốn. Trong thực tế, tốc độ tối đa cũng bị giới hạn bởi thời gian giữa các lần gọi phương thức run () của thư viện. Đối với 1000 bước / giây, phương thức run () phải được gọi ít nhất sau mỗi 1mS. Xem phần Độ trễ bên dưới.

Cố gắng đặt tốc độ nhỏ hơn tốc độ tối thiểu sẽ làm cho động cơ dừng lại. Mỗi setters này có một getter tương ứng, hãy xem tệp SpeedStepper.h. Đối với tốc độ, getSetSpeed () trả về tốc độ bạn đặt thông qua setSpeed (), trong khi getSpeed () trả về tốc độ động cơ hiện tại thay đổi khi nó tăng / giảm tốc theo tốc độ bạn đặt. Nếu động cơ không đi theo hướng bạn nghĩ đến, bạn có thể gọi invertDirectionLogic () để hoán đổi hướng động cơ di chuyển cho tốc độ + ve.

getCurrentPosition () trả về vị trí động cơ hiện tại so với 'nhà' (0). Bạn có thể ghi đè vị trí động cơ hiện tại setCurrentPosition (int32_t). Vị trí mới được giới hạn trong giới hạn cộng / trừ đã đặt.

Ban đầu động cơ dừng ở vị trí 0. Gọi setSpeed (50.0) sẽ khiến nó bắt đầu tăng tốc theo hướng + ve đến tốc độ tối đa là 50 bước / phút. Gọi hardStop () sẽ ngay lập tức dừng động cơ tại vị trí của nó. Mặt khác, gọi phương thức stop () sẽ đặt tốc độ bằng 0 và giảm tốc động cơ dừng lại. Việc gọi stopAndSetHome () sẽ dừng động cơ ngay lập tức và đặt vị trí của nó thành 0. Các giá trị giới hạn cộng / trừ không được thay đổi nhưng bây giờ được quy về vị trí 0 (nhà) mới này. Gọi goHome () sẽ trả lại bước về vị trí 0 (nhà) này và dừng lại. Gọi setSpeed () sẽ hủy về nhà.

Thư viện SpeedStepper cũng cung cấp khả năng kiểm soát hồ sơ tốc độ thông qua các phương thức setProfile (SpeedProfileStruct * profileArray, size_t arrayLen), startProfile (), stopProfile (), để ngắt một hồ sơ đang chạy và isProfileRunning (). Xem bản phác thảo ví dụ speedStepperProfile.

Bước 2: Chạy ví dụ SpeedStepperPlot mà không cần động cơ

Chạy ví dụ SpeedStepperPlot mà không cần động cơ
Chạy ví dụ SpeedStepperPlot mà không cần động cơ

Cài đặt Arduino IDE V1.8.9 Tải xuống và cài đặt thư viện SpeedStepper Lưu SpeedStepper.zip rồi sử dụng mục menu Arduino IDE Sketch → Bao gồm Thư viện → Thêm thư viện. ZIP để nhập thư viện Tải xuống và cài đặt thư viện millisDelay

Mở phác thảo ví dụ Examples → SpeedStepper → speedStepperPlot (Khởi động lại IDE nếu cần). Bản phác thảo này được cấu hình để hoạt động với Serial, ví dụ: UNO và Mega, v.v. Để chạy trên SparkFun Redboard Turbo, hãy xem bên dưới.

Không cần bảng trình điều khiển hoặc động cơ bước để chạy ví dụ này. Các ví dụ này sử dụng D6 và D7 làm đầu ra. Bạn có thể thay đổi các chân đầu ra thành bất kỳ đầu ra kỹ thuật số nào bằng cách thay đổi cài đặt STEP_PIN và DIR_PIN gần đầu bản phác thảo.

Tải bản phác thảo lên bảng và sau đó mở Công cụ → Máy vẽ nối tiếp ở 115200 baud để hiển thị biểu đồ của tốc độ (ĐỎ) và vị trí (XANH) Giới hạn cộng được đặt thành 360 khiến tốc độ tăng lên 0 từ khoảng 100 điểm trên trục x. Giới hạn trừ là -510. Vị trí dừng ở ~ -390 vì tốc độ đã được yêu cầu đến 0,0. Tại điểm 380 trên trục x, lệnh cmd goHome được đưa ra để trả bước về vị trí số không.

Bản phác thảo speedStepperPlot này sử dụng millisDelays để chuyển đổi thời gian giữa các tốc độ và gia tốc khác nhau. Trong nhiều trường hợp, việc sử dụng SpeedStepperProfile, như trong ví dụ tiếp theo, đơn giản hơn.

Bước 3: Chạy ví dụ SpeedStepperProfile mà không cần động cơ

Chạy ví dụ SpeedStepperProfile mà không cần động cơ
Chạy ví dụ SpeedStepperProfile mà không cần động cơ

Mở bản phác thảo ví dụ Examples → SpeedStepper → speedStepperPlot, bản phác thảo này tạo ra biểu đồ ở trên bằng cách sử dụng Arduino Serial Plotter và là một ví dụ về việc chạy một cấu hình tốc độ quy định chẳng hạn như nếu chạy một máy bơm.

Cấu hình Tốc độ Bước được tạo thành từ một mảng SpeedProfileStruct, được định nghĩa trong tệp SpeedStepper.h.

struct SpeedProfileStruct {

tốc độ phao; // tốc độ đích ở cuối bước này unsigned long deltaTms; // thời gian để tăng tốc từ tốc độ hiện tại (ở đầu bước này) đến tốc độ mục tiêu};

Xác định một mảng SpeedProfileStruct chứa tốc độ mục tiêu cho mỗi bước và thời gian, deltaTms, tính bằng mS, để đạt được tốc độ mục tiêu đó so với tốc độ mục tiêu trước đó. Nếu deltaTms bằng 0 hoặc rất nhỏ, thì tốc độ sẽ chỉ nhảy ngay lập tức sang tốc độ mục tiêu mới. Nếu không, gia tốc cần thiết sẽ được tính toán setAcceleration () sẽ được gọi theo sau là lệnh gọi setSpeed () cho tốc độ mục tiêu mới. Trong mọi trường hợp, cấu hình sẽ bị giới hạn bởi các giới hạn vị trí cộng và trừ hiện có và cài đặt tốc độ tối đa / tối đa. Nếu bạn muốn giữ một tốc độ, chỉ cần lặp lại tốc độ trước đó với thời gian bạn muốn. Vì tốc độ mục tiêu mới giống với tốc độ hiện tại, gia tốc được tính toán sẽ bằng 0 và tốc độ không xảy ra.

Mảng SpeedProfileStruct này tạo ra âm mưu trên

const SpeedProfileStruct profile = {{0, 0}, // dừng ngay lập tức nếu chưa dừng {0, 1000}, // giữ 0 trong 1 giây {-50, 0}, // nhảy đến -50 {-200, 2000}, // đoạn dốc đến -200 {-200, 6000}, // giữ ở -200 trong 6 giây {-50, 2000}, // đoạn dốc xuống -50 {0, 0}, // // dừng lại ngay lập tức {0, 1500}, // giữ 0 trong 1,5 giây {50, 0}, // nhảy đến 50 {200, 2000}, // đoạn nối tới 200 {200, 6000}, // giữ 200 trong 6 giây {50, 2000}, // đoạn đường nối tới 50 {0, 0}, // // dừng ngay lập tức {0, 1000} // giữ số 0 // để vẽ đầu ra}; const size_t PROFILE_LEN = sizeof (profile) / sizeof (SpeedProfileStruct); // tính toán kích thước của mảng hồ sơ

Cấu hình được thiết lập bằng cách gọi setProfile (SpeedProfileStruct * profileArray, size_t arrayLen), ví dụ: stepper.setProfile (hồ sơ, PROFILE_LEN);

Khi cấu hình đã được thiết lập, hãy gọi startProfile () để bắt đầu chạy nó từ tốc độ động cơ hiện tại (thường bạn sẽ bắt đầu từ khi dừng lại). Khi kết thúc cấu hình, động cơ sẽ tiếp tục chạy ở tốc độ mục tiêu cuối cùng. Phương thức isProfileRunning () có thể được gọi để xem liệu cấu hình vẫn đang chạy. Nếu bạn muốn dừng cấu hình sớm, bạn có thể gọi stopProfile () để hủy cấu hình và tạm dừng động cơ.

Bước 4: Chạy ví dụ SpeedStepperSetup mà không cần động cơ

Bản phác thảo ví dụ được thiết kế để làm cơ sở cho ứng dụng động cơ bước của riêng bạn. Nó cung cấp một giao diện điều khiển bằng menu cho phép bạn di chuyển động cơ đến vị trí chính của nó, nếu chưa ở đó và sau đó tùy chọn đặt lại các giới hạn cộng và trừ và sau đó chạy động cơ trong phạm vi đó. Menu 'chạy' cho phép bạn tăng và giảm tốc độ, đóng băng ở tốc độ hiện tại, dừng lại và cũng có thể trở về nhà.

Bản phác thảo này minh họa một số tính năng phần mềm giúp vòng lặp () luôn đáp ứng để bạn có thể thêm đầu vào cảm biến của riêng mình để điều khiển bước. Cần hết sức tránh những sự chậm trễ có thể ảnh hưởng đến việc kiểm soát tốc độ. (Xem Sự chậm trễ là điều xấu xa)

Cài đặt các thư viện được sử dụng để chạy SpeedStepperPlot, ở trên, và sau đó cũng cài đặt thư viện pfodParser. Thư viện pfodParser cung cấp các lớp NonBlockingInput và pfodBufferedStream được sử dụng để xử lý đầu vào của người dùng và đầu ra của trình đơn với việc chặn chạy vòng lặp ().

Mở ví dụ Examples → SpeedStepper → speedSpeedSetup. Bản phác thảo này được cấu hình để hoạt động với Serial, ví dụ: UNO và Mega, v.v. Để chạy trên SparkFun Redboard Turbo, hãy xem bên dưới.

Không cần bảng trình điều khiển hoặc động cơ bước để chạy ví dụ này. Các ví dụ này sử dụng D6 và D7 làm đầu ra. Bạn có thể thay đổi các chân đầu ra thành bất kỳ đầu ra kỹ thuật số nào bằng cách thay đổi cài đặt STEP_PIN và DIR_PIN gần đầu bản phác thảo. Tải bản phác thảo lên bảng và sau đó mở Công cụ → Màn hình nối tiếp ở 115200 để xem menu CÀI ĐẶT.

SETUP pos: 0 sp: 0.00 + Lim: 500000 -Lim: -500 LATENCY: stepper: 492uS loop: 0uS p - set Home l - set up limit h - goHome r - run>

Khi bản phác thảo chạy, vị trí hiện tại của bước được coi là vị trí 'nhà' (0). Nếu bạn cần định vị lại bước về vị trí 'nhà' thực sự của nó, hãy nhập lệnh p để hiển thị menu SET HOME

SET HOME pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: stepper: 752uS loop: 3852uS x - setHome tại đây và thoát + - Forward - - Reverse s - swap Forward / Reverse - hardStop >

Như bạn có thể thấy các giới hạn được mã hóa trong bản phác thảo đã bị loại bỏ để bạn có thể định vị lại bước ở bất kỳ đâu. Bạn cần chú ý đừng lái nó vượt quá giới hạn vật lý nếu không bạn có thể làm hỏng thứ gì đó.

Sử dụng + cmd để bắt đầu di chuyển bước về phía trước, nếu bạn thấy nó di chuyển sai hướng, hãy nhập lệnh không phải lệnh hoặc chỉ một dòng trống để dừng nó và sau đó sử dụng lệnh scommand để hoán đổi hướng của Forward. Bạn nên cập nhật bản phác thảo để bao gồm một lệnh gọi đến invertDirectionLogic () trong thiết lập để sửa lỗi này cho lần chạy tiếp theo.

Sử dụng các lệnh + / - để định vị bước về vị trí 0 chính xác. Động cơ bắt đầu chậm và sau đó tăng tốc độ khi nó tiếp tục, chỉ cần sử dụng và trống dòng để dừng nó. Tốc độ tối đa cho việc này và menu giới hạn được đặt bởi MAX_SETUP_SPEED ở đầu setupMenus.cpp.

Khi động cơ đã được định vị ở vị trí 'nhà' của nó, hãy sử dụng cmd x để đặt lại vị trí hiện tại là 0 và quay lại menu CÀI ĐẶT.

Nếu bạn cần đặt các giới hạn, thường chỉ là trong thiết lập ban đầu, hãy sử dụng cmd l để vào menu SET LIMITS

ĐẶT GIỚI HẠN pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: bước: 944uS Vòng lặp: 5796uS l - setLimit here + - Forward - - Reverse h - goHome x - exit - hardStop>

Sử dụng + cmd để chuyển tiếp đến giới hạn cộng và sau đó sử dụng cmd l để đặt nó làm giới hạn cộng. Sau đó, lệnh h có thể được sử dụng để trở về 0 và - cmd được sử dụng để di chuyển nếu đưa động cơ đến vị trí ở giới hạn trừ. Một lần nữa sử dụng cmd l để đặt giới hạn trừ. Lưu ý vị trí của các giới hạn cộng và trừ và cập nhật các câu lệnh setPlusLimit và setMinusLimit của phương thức setup () với các giá trị này.

Khi các giới hạn được đặt, hãy sử dụng x cmd để quay lại menu CÀI ĐẶT và sau đó bạn có thể sử dụng cmd r để mở menu RUN

RUN MENU pos: 0 sp: 3,31 + Lim: 500000 -Lim: -500 LATENCY: bước: 944uS Vòng lặp: 5796uS + - Tăng tốc độ - - Giảm tốc độ h - goHome. - hardStop - đóng băng Tốc độ> + pos: 4 sp: 9.49 + Lim: 500000 -Lim: -500 LATENCY: bước: 792uS loop: 5664uS pos: 42 sp: 29.15 + Lim: 500000 -Lim: -500 LATENCY: bước: 792uS loop: 5664uS pos: 120 sp: 49.09 + Lim: 500000 -Lim: -500 LATENCY: bước: 792uS loop: 5664uS pos: 238 sp: 69.06 + Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS

+ Cmd bắt đầu tăng tốc theo hướng về phía trước và in ra vị trí và tốc độ sau mỗi 2 giây. Khi động cơ đạt đến tốc độ bạn muốn, bạn có thể dừng tăng tốc bằng bất kỳ phím nào khác (hoặc một đầu vào trống). Bạn có thể giảm tốc độ bằng cách sử dụng - cmd xuống để dừng. Nếu dừng - cmd sẽ tăng tốc ngược lại.

Menu RUN này cung cấp khả năng kiểm soát thủ công đối với dự án của bạn. Để điều khiển tự động, bạn sẽ cần thêm một số cảm biến khác.

Bước 5: Độ trễ

Việc điều khiển động cơ bước phụ thuộc vào phần mềm chỉ huy mỗi bước. Để duy trì tốc độ đã đặt, bản phác thảo của bạn cần gọi phương thức stepper.run () đủ thường xuyên để kích hoạt bước tiếp theo vào đúng thời điểm cho tốc độ hiện tại. Để kiểm soát thông qua cảm biến, bạn cần có thể xử lý kịp thời các phép đo mới. Vị trí / tốc độ in ra bao gồm hai phép đo LATENCY để cho phép bạn kiểm tra bản phác thảo của mình đã đủ nhanh chưa.

Độ trễ bước (pfodBufferedStream)

Độ trễ bước đo độ trễ tối đa giữa các lần gọi liên tiếp đến phương thức stepper.run (). Để chạy động cơ bước ở tốc độ 1000 bước mỗi giây, độ trễ bước cần nhỏ hơn 1000uS (1mS). Phiên bản đầu tiên của bản phác thảo này có độ trễ là nhiều mili giây. Để khắc phục điều này, các cuộc gọi bổ sung đến phương thức runStepper () (gọi stepper.run ()) nơi được thêm thông qua mã. Điều này không hoàn toàn giải quyết được vấn đề vì menu và câu lệnh in đầu ra đã chặn bản phác thảo khi bộ đệm Serial Tx nhỏ đã đầy. Để tránh sự chặn này, pfodBufferedStream từ thư viện pfodParser đã được sử dụng để thêm bộ đệm in đầu ra 360 byte mà các câu lệnh in có thể nhanh chóng ghi vào. Sau đó, pfodBufferedStream giải phóng các byte ở tốc độ truyền được chỉ định 115200 trong trường hợp này. pfodBufferedStream phải tùy chọn chặn khi bộ đệm đầy hoặc chỉ thả các ký tự tràn. Ở đây, nó được thiết lập để bỏ bất kỳ ký tự bổ sung nào khi bộ đệm đầy để bản phác thảo không bị chặn khi chờ Serial gửi ký tự.

Độ trễ vòng lặp (NonBlockingInput)

Độ trễ vòng lặp đo độ trễ tối đa giữa các lần gọi liên tiếp đến phương thức loop (). Điều này đặt tốc độ bạn có thể xử lý các phép đo cảm biến mới và điều chỉnh tốc độ đặt động cơ. Sau đó cần nhanh đến mức nào phụ thuộc vào những gì bạn đang cố gắng kiểm soát.

Sự chậm trễ do các câu lệnh in đã được loại bỏ bằng cách sử dụng pfodBufferedStream ở trên, nhưng để xử lý đầu vào của người dùng, bạn cần chỉ lấy ký tự đầu tiên của đầu vào và bỏ qua phần còn lại của dòng. Lớp NonBlockingInput trong thư viện pfodParer được sử dụng để trả về một ký tự khác 0 khi có đầu vào, sử dụng readInput () và để xóa và loại bỏ các ký tự sau, sử dụng clearInput (), cho đến khi không nhận được ký tự nào trong 10mS mà không chặn vòng lặp ()

Tất nhiên độ trễ của vòng lặp sẽ được tăng lên bởi mã bổ sung mà bạn thêm vào để đọc các cảm biến và tính toán tốc độ thiết lập mới. Nhiều thư viện cảm biến thực hiện việc sắp xếp chỉ sử dụng độ trễ (..) giữa việc bắt đầu đo và lấy kết quả. Bạn sẽ cần phải viết lại các thư viện này để sử dụng millisDelay thay thế, để nhận phép đo sau độ trễ không chặn phù hợp.

Bước 6: Chạy SpeedStepperSetup với Động cơ bước và SparkFun Redboard Turbo

Tốc độ chạyStepperSetup với một động cơ bước và SparkFun Redboard Turbo
Tốc độ chạyStepperSetup với một động cơ bước và SparkFun Redboard Turbo
Tốc độ chạyStepperSetup với một động cơ bước và SparkFun Redboard Turbo
Tốc độ chạyStepperSetup với một động cơ bước và SparkFun Redboard Turbo

Để chạy bản phác thảo SpeedStepperSetup thực tế, bạn sẽ cần một động cơ bước, trình điều khiển và nguồn điện và trong ví dụ này là SparkFun Redboard Turbo.

Sơ đồ đấu dây ở trên (phiên bản pdf) cho thấy các kết nối. Trong bản phác thảo SpeedStepperSetup, hãy thay đổi định nghĩa SERIAL thành #define SERIAL Serial1

Động cơ bước, Nguồn điện, Trình điều khiển và Bảo vệ

Có nhiều loại và kích cỡ của động cơ bước. Ở đây, một động cơ bước hai cuộn dây 12V 350mA được sử dụng để thử nghiệm. Để cấp nguồn cho bước này, bạn cần nguồn điện từ 12V trở lên và lớn hơn 350mA.

Thư viện này chỉ cung cấp đầu ra hướng và bước, vì vậy bạn cần một trình điều khiển để giao tiếp với động cơ bước. Trình điều khiển Dễ dàng và Trình điều khiển Big Easy điều khiển dòng điện đến các cuộn dây của động cơ để bạn có thể sử dụng nguồn điện có điện áp cao hơn một cách an toàn, ví dụ như sử dụng nguồn 6V cho động cơ 3,3V. Trình điều khiển dễ dàng có thể cung cấp từ 150mA / cuộn dây đến 700mA / cuộn dây. Đối với dòng điện cao hơn, Trình điều khiển Big Easy có thể cung cấp tối đa 2A cho mỗi cuộn dây. Đọc phần Câu hỏi thường gặp ở cuối trang Easy Drive.

Các ví dụ này sử dụng D6 và D7 làm đầu ra Bước và Hướng. Bạn có thể thay đổi các chân đầu ra thành bất kỳ đầu ra kỹ thuật số nào bằng cách thay đổi cài đặt STEP_PIN và DIR_PIN gần đầu phác thảo.

Lập trình Sparkfun Redboard Turbo

Lập trình Redboard Turbo có vấn đề. Nếu nó không lập trình được, trước tiên hãy nhấn nút đặt lại một lần và chọn lại cổng COM trong menu Công cụ Arduino và thử lại. Nếu cách đó không hiệu quả, hãy nhấn đúp vào nút ấn đặt lại và thử lại.

Lên dây trình điều khiển dễ dàng

Hai động cơ bước cuộn dây có 4 dây. Sử dụng đồng hồ vạn năng để tìm các cặp kết nối với mỗi cuộn dây và sau đó đấu dây một cuộn dây vào đầu nối Easy Driver A và cuộn dây còn lại vào đầu cuối B. Không quan trọng bạn đấu dây theo vòng nào vì bạn có thể sử dụng cmd s trong menu cài đặt để hoán đổi hướng chuyển động.

Nguồn cung cấp động cơ được nối với M + và GND Đặt mức logic của bo mạch bằng liên kết 3 / 5V. Rút ngắn liên kết với nhau cho các đầu ra của bộ vi xử lý 3.3V, như SparkFun Redboard Turbo (nếu bạn để nó mở, nó sẽ phù hợp với tín hiệu kỹ thuật số 5V, ví dụ như UNO, Mega) Kết nối các chân GND, STEP, DIR với GND của bộ vi xử lý và bước và chân đầu ra dir. Không cần kết nối nào khác để điều khiển động cơ.

Cáp nối tiếp USB sang TTL

Khi di chuyển bản phác thảo SpeedStepperSetup từ Uno / Mega sang Redboard Turbo, bạn có thể ngây thơ chỉ cần thay thế #define SERIAL Serial bằng #define SERIAL SerialUSB cho phù hợp với kết nối nối tiếp USB Redboard Turbo, tuy nhiên, bạn sẽ thấy rằng độ trễ bước kết quả là khoảng 10mS. Đó là chậm hơn 10 lần so với UNO. Điều này do cách CPU Redboard xử lý kết nối USB. Để giải quyết vấn đề này, hãy kết nối USB với Cáp nối tiếp TTL tới D0 / D1 và đặt # xác định SERIAL Serial1 để sử dụng kết nối nối tiếp phần cứng để điều khiển động cơ bước. Sử dụng Serial1 mang lại vòng lặp LATENCY: bước: 345uS: 2016uS nhanh hơn 3 lần so với UNO cho bước và độ trễ vòng lặp

Chương trình đầu cuối

Arduino Serial Monitor khó sử dụng hơn một chút để điều khiển động cơ bước vì bạn phải nhập ký tự vào dòng cmd rồi nhấn Enter để gửi. Một phương tiện phản hồi nhanh hơn là mở cửa sổ đầu cuối, TeraTerm cho PC (hoặc CoolTerm Mac), được kết nối với cổng COM của cáp USB to TTL. Sau đó, trong cửa sổ đó, nhấn phím cmd sẽ gửi nó ngay lập tức. Nhấn Enter chỉ gửi một dòng trống.

Đặt phạm vi tốc độ động cơ

Như đã lên dây ở trên, Easy Drive được định cấu hình cho 1/8 bước, vì vậy 1000 bước / giây sẽ quay động cơ ở tốc độ 1000/800 bước / vòng = 0,625 vòng / giây hoặc tối đa 37,5 vòng / phút. Bằng cách thay đổi đầu vào thành MS1 / MS2, bạn có thể chuyển đổi giữa các bước 1/8, ¼, ½ và đầy đủ. Để biết các bước đầy đủ, hãy kết nối cả MS1 và MS2 với GND. Điều này sẽ cho phép tốc độ lên đến 300 vòng / phút. Việc chọn cài đặt MS1 / MS2 thích hợp cho phép bạn điều chỉnh tỷ số truyền đã cài đặt giữa động cơ và bộ phận được dẫn động.

Bảo vệ phần cứng

Trong khi thư viện SpeedStepper cho phép bạn thiết lập giới hạn vị trí trên chuyển động của động cơ, việc kiểm tra vị trí được thực hiện bằng cách đếm số bước do phần mềm đưa ra. Nếu động cơ dừng lại, tức là mô-men xoắn không đủ để điều khiển động cơ bước tiếp theo thì vị trí phần mềm sẽ không đồng bộ với vị trí động cơ. Sau đó, khi bạn sử dụng lệnh 'goHome', động cơ sẽ vượt quá vị trí nhà. Để tránh làm hỏng phần cứng, bạn nên lắp các công tắc hành trình ở giới hạn cứng để ngắt nguồn điện động cơ

Đặt giới hạn dòng động cơ

Đầu tiên, đặt nó ở cài đặt thấp nhất của chiết áp. tức là điện áp ở TP1 là nhỏ nhất. Chiết áp rất mỏng, vì vậy đừng ép chiết áp qua các điểm dừng cơ học. Đặt động cơ lái xe ở tốc độ chậm ổn định từ từ, sau đó từ từ xoay chiết áp cho đến khi động cơ không bị nhảy hoặc giật giữa các bước.

Phần kết luận

Dự án này chỉ ra cách sử dụng thư viện SpeedStepper trong một ứng dụng thực tế. Mặc dù thư viện AccelStepper cung cấp khả năng kiểm soát vị trí tốt, điều khiển tốc độ là cần thiết cho Đầu dò băng tan nguyên mẫu để thu thập mẫu sinh học trên Europa, vì vậy thư viện AccelStepper đã được viết lại để cung cấp khả năng kiểm soát tốc độ với giới hạn cuối và chức năng goHome.

Đề xuất: