Thể loại: Mạch vi điều khiển
Số lượt xem: 19709
Bình luận về bài viết: 0

Điều khiển động cơ và servo với Arduino

 

Trong các thiết kế đơn giản của các hệ thống tự động hóa, thường không chỉ cần đọc các số đọc của cảm biến, mà còn phải thiết lập trong các cơ chế chuyển động. Đối với điều này, một loạt các động cơ điện được sử dụng. Tùy chọn đơn giản và phổ biến nhất là động cơ DC. Anh giành được tình yêu của những người yêu thích với khả năng tiếp cận, dễ điều chỉnh tốc độ. Nếu nhiệm vụ là di chuyển bất kỳ cơ chế nào đến một góc hoặc khoảng cách nhất định, sẽ thuận tiện khi sử dụng ổ đĩa servo hoặc động cơ bước.

Trong bài viết này, chúng tôi xem xét các động cơ servo và động cơ DC nhỏ, kết nối chúng với bảng Arduino và điều chỉnh DCT.

Điều khiển động cơ và servo với Arduino

Động cơ DC

Động cơ điện phổ biến nhất được sử dụng trong các thiết bị cầm tay, đồ chơi, mô hình điều khiển bằng radio và các thiết bị khác. Nam châm vĩnh cửu được cố định trên động cơ điện nhỏ trên stato và cuộn dây trên rôto.

Động cơ DC

Dòng điện được cung cấp cho cuộn dây thông qua cụm bàn chải. Bàn chải được làm bằng than chì, đôi khi tiếp xúc trượt đồng được tìm thấy. Bàn chải lướt trên lamellas nằm ở một đầu của cánh quạt. Nếu bạn không đi vào chi tiết, thì tốc độ quay của nó phụ thuộc vào dòng điện của cuộn dây phần ứng.

Bộ sưu tập động cơ neo

Trên các động cơ DC lớn, trên stato, có một cuộn dây kích thích được nối với cuộn dây rôto (thông qua cụm bàn chải) theo một cách nhất định (kích thích tuần tự, song song hoặc hỗn hợp). Do đó, mô-men xoắn và số vòng quay mong muốn đạt được.


Kiểm soát tốc độ

Động cơ điện DC

Khi được kết nối với nguồn điện, động cơ DC bắt đầu quay với tốc độ định mức. Để giảm tốc độ bạn cần giới hạn hiện tại. Để làm điều này, điện trở dằn được giới thiệu, nhưng điều này làm giảm hiệu quả của việc lắp đặt nói chung và một nguồn nhiệt dư thừa xuất hiện. Để điều chỉnh điện áp và dòng điện hiệu quả hơn, một phương pháp khác được sử dụng - Điều khiển PWM.

Điều khiển PWM

Phương pháp kiểm soát tín hiệu điều chế độ rộng xung (điện áp) là tạo ra giá trị điện áp mong muốn bằng cách thay đổi độ rộng xung, với thời lượng (tần số) không đổi.

Đó là, giai đoạn được chia thành hai phần:

1. Thời gian thôi thúc.

2. Tạm dừng thời gian.

Tỷ lệ của thời gian xung với tổng thời gian của giai đoạn được gọi là chu kỳ nhiệm vụ:

Ks = ti / tper

đối ứng được gọi là "chu kỳ nhiệm vụ":

D = 1 / KZ = tper / t và

Để mô tả chế độ hoạt động của bộ điều khiển PWM, cả hai khái niệm đều được sử dụng: cả chu kỳ nhiệm vụ và chu kỳ nhiệm vụ.

Mức tiêu thụ hiện tại của động cơ phụ thuộc vào sức mạnh của nó. Số lượng vòng quay, như đã nói, phụ thuộc vào hiện tại. Dòng điện có thể được điều chỉnh bằng cách thay đổi lượng điện áp đặt vào cuộn dây. Trong thực tế, khi được cung cấp bởi một điện áp vượt quá giá trị danh nghĩa theo chứng chỉ động cơ, tốc độ của nó cũng sẽ vượt quá tốc độ danh nghĩa. Tuy nhiên, các chế độ vận hành như vậy rất nguy hiểm cho động cơ, vì dòng điện lớn hơn trong cuộn dây, khiến cho hệ thống sưởi của chúng tăng lên.

Nếu thiệt hại cho động cơ từ các xung ngắn hạn hoặc các chế độ vận hành ngắn hạn lặp đi lặp lại là tối thiểu, thì trong quá trình vận hành kéo dài ở điện áp cao và nó sẽ bị cháy hoặc vòng bi của nó sẽ nóng lên và nêm, và sau đó các cuộn dây sẽ bị cháy nếu nguồn điện không được ngắt.

Nếu điện áp đầu vào quá thấp, động cơ nhỏ có thể đơn giản là không có đủ năng lượng để di chuyển. Do đó, cần phải thực nghiệm tìm ra tốc độ và điện áp bình thường cho một động cơ cụ thể không vượt quá danh nghĩa.


Chúng tôi kết nối với arduino

Tôi có một động cơ nhỏ nằm, có vẻ như từ một máy nghe băng cassette, điều đó có nghĩa là điện áp định mức của nó sẽ dưới 5 volt, thì công suất đầu ra của arduino là đủ. Tôi sẽ cấp nguồn cho nó từ chân 5V, tức là từ đầu ra của bộ ổn định tuyến tính nằm trên bảng. Theo sơ đồ mà bạn nhìn thấy dưới đây.

Tôi không biết dòng điện của động cơ này, vì vậy tôi đã kết nối nó với nguồn điện và tôi đã cài đặt một bóng bán dẫn hiệu ứng trường giữa động cơ và chân nguồn, trên cổng mà tín hiệu từ đầu ra PWM được áp dụng, có thể sử dụng bất kỳ tín hiệu nào có sẵn.

Sơ đồ kết nối động cơ Arduino DC

Để điều chỉnh tốc độ, tôi đã thêm một điện trở thay đổi vào mạch, kết nối nó với đầu vào tương tự A0. Để kết nối nhanh chóng, tôi đã sử dụng một chiếc bánh mì không hàn, còn được gọi là bánh mì.

Tôi đã cài đặt một điện trở giới hạn dòng điện trong hệ thống dây bán dẫn (để giảm dòng điện cổng, điều này sẽ cứu cổng khỏi quá trình đốt cháy và nguồn cung cấp năng lượng vi điều khiển khỏi sụt lún và đóng băng) khoảng 240 Ohms, và kéo nó xuống đất với điện trở 12 kOhm, điều này phải được thực hiện để làm cho nó ổn định hơn bể màn trập làm việc và xả nhanh hơn.

Chi tiết về bóng bán dẫn hiệu ứng trường được mô tả trong một bài viết trên trang web của chúng tôi. Tôi đã sử dụng một mosfet mạnh mẽ, phổ biến và không quá đắt tiền với một kênh n và một diode đảo ngược IRF840 tích hợp.

Điều hành và xác định một phần của mạch

Đây là những gì lắp ráp phòng thí nghiệm của tôi trông giống như:

Động cơ DC và arduino

Hàm điều khiển PWM được gọi khi ghi vào các giá trị đầu ra tương ứng (3, 5, 6, 9, 10, 11) từ 0 đến 255 bằng lệnh AnalogWrite (pin, value). Logic công việc của cô được mô tả trong các biểu đồ dưới đây.

Chức năng điều khiển PWM

Một tín hiệu như vậy được áp dụng cho cổng của bóng bán dẫn:

Một tín hiệu như vậy được áp dụng cho cổng của bóng bán dẫn

Mã chương trình cho sự ô nhục là ngắn và đơn giản, chi tiết tất cả các chức năng này đã được mô tả trong các bài viết trước về arduino.

int cảm biếnPin = A0; // đầu vào từ chiết áp

int motorPin = 3; // Ngõ ra PWM tới cổng của camera

void setup () {

pinMode (motorPin, OUTPUT);

}

void loop () {

analogWrite (motorPin, map (analogRead (sensorPin), 0, 1023, 0, 256));

}

Trong hàm analogWrite, tôi gán một giá trị cho đầu ra PWM, thông qua lệnh map, việc sử dụng nó cho phép bạn loại bỏ một vài dòng mã và một biến.


Đây là một sơ đồ làm việc và rất tốt cho việc quan sát các quá trình khi điều chỉnh công suất tải, độ sáng của đèn LED, tốc độ động cơ, bạn chỉ cần kết nối tải mong muốn thay vì động cơ. Trong trường hợp này, thay vì 5V, bất kỳ điện áp nào cũng có thể được áp dụng cho tải, ví dụ như 12V, đừng quên kết nối nguồn âm với tiếp điểm, ví dụ như 12V, đừng quên kết nối nguồn âm với chân GND trên bảng vi điều khiển.

Trong arduino, tần số PWM, khi được gọi thông qua chức năng analogWrite, chỉ có 400 Hz, ở các giá trị điện áp tối thiểu, một tần số tương ứng được nghe từ cuộn dây động cơ.

Arduino và servo

Phục vụ

Một động cơ có thể ở vị trí được xác định trước, và khi tiếp xúc với các yếu tố bên ngoài, ví dụ, độ lệch bắt buộc của trục, giữ cho vị trí của nó không thay đổi - được gọi là ổ servo. Nói chung, định nghĩa nghe hơi khác một chút:

Servo là một động cơ phản hồi tiêu cực.

Thông thường, ba dây đi ra từ một ổ đĩa servo:

  • Cộng thêm sức mạnh.

  • Ít năng lượng hơn.

  • Tín hiệu điều khiển.

Ổ đĩa servo bao gồm:

  • Động cơ DC (hoặc động cơ không chổi than);

  • Phí quản lý;

  • Bộ truyền vị trí (bộ mã hóa cho các servo có góc quay 360 ° hoặc chiết áp cho các servo có góc quay 180 °);

  • Giảm tốc (giảm tốc độ động cơ và tăng mô-men xoắn trên trục truyền động).

Bộ điều khiển so sánh tín hiệu trên cảm biến vị trí tích hợp và tín hiệu đi qua dây điều khiển, nếu chúng khác nhau, thì có một góc quay ở góc mà độ chênh lệch giữa tín hiệu được cân bằng.

Nguyên lý hoạt động của servo

Các đặc điểm chính của servo:

  • Tốc độ quay (thời gian trong đó trục quay qua một góc 60 °);

  • Mô-men xoắn (kg / cm, tức là động cơ có thể chịu được bao nhiêu kg trên cần số cách trục 1 cm);

  • Điện áp cung cấp;

  • Tiêu thụ hiện tại;

  • Theo phương pháp điều khiển (analog hoặc kỹ thuật số, không có sự khác biệt đáng kể, nhưng kỹ thuật số nhanh hơn và ổn định hơn).

Thông thường, chu kỳ tín hiệu là 20 ms và thời lượng của xung điều khiển:

  • 544 ss - tương ứng với 0 °;

  • 2400 s - tương ứng với góc 180 °.

Trong các trường hợp hiếm hoi, độ dài xung có thể khác nhau, ví dụ, tương ứng là 760 và 1520, thông tin này có thể được làm rõ trong tài liệu kỹ thuật cho ổ đĩa. Một trong những sở thích phổ biến nhất là Tower Pro SG90 và các mẫu tương tự.Nó là không tốn kém - khoảng 4 đô la.

Sevroprivod cho arduino

Nó giữ 1,8 kg / cm trên trục, và hoàn thành với nó là các ốc vít và đòn bẩy với các trục cho trục. Trên thực tế, em bé này khá mạnh và rất khó để ngăn chặn nó bằng một ngón tay - ổ đĩa bắt đầu rơi ra khỏi các ngón tay - đó là sức mạnh của nó.


Điều khiển servo và Arduino

Như đã đề cập, điều khiển được thực hiện bằng cách thay đổi thời lượng xung, nhưng không nhầm lẫn phương thức này với PWM (PWM), tên chính xác của nó là PDM (Điều chế thời lượng xung). Độ lệch nhẹ trong tần số tín hiệu (20 ms - thời lượng, tần số 50 Hz) không có vai trò đặc biệt. Nhưng không đi chệch khỏi tần số quá 10 Hz, động cơ có thể chạy giật hoặc cháy.

Điều khiển servo và Arduino

Kết nối với arduino khá đơn giản, bạn cũng có thể cấp nguồn cho ổ đĩa từ chân 5v, nhưng không mong muốn. Thực tế là khi bắt đầu có một bước nhảy nhỏ trong hiện tại, điều này có thể gây ra sự cố mất điện và Đầu ra vi điều khiển sai. Mặc dù 1 ổ đĩa nhỏ (loại SG90) là có thể, nhưng không còn nữa.

Để điều khiển các servo như vậy với arduino, bạn có thư viện Servo được tích hợp trong IDE, nó có một bộ lệnh nhỏ:

  • Đính kèm () - thêm một biến vào pin. Ví dụ: tên của Drive.attach (9) - chúng tôi kết nối một servo với chân 9. Nếu ổ đĩa của bạn cần các xung điều khiển có độ dài không chuẩn (544 và 2400) s), thì chúng có thể được chỉ định cách nhau bằng dấu phẩy sau số pin, ví dụ: servo.attach (pin, góc tối thiểu (s), góc tối đa trong ISS));

  • write () - đặt góc quay của trục theo độ;

  • writeMicroseconds () - đặt góc qua độ dài xung tính bằng micro giây;

  • read () - xác định vị trí hiện tại của trục;

  • đính kèm () - Kiểm tra xem pin có được đặt với servo được kết nối không;

  • tách () - hủy lệnh đính kèm.

Thư viện này cho phép bạn điều khiển 12 servo từ UNO, Nano và các bảng tương tự (mega368 và 168), trong khi khả năng sử dụng PWM trên chân 9 và 10 biến mất. Nếu bạn có MEGA, bạn có thể điều khiển máy chủ thứ 48, nhưng PWM trên chân 11 và 12 sẽ biến mất, nếu bạn sử dụng tối đa 12 servo, thì PWM sẽ vẫn hoạt động đầy đủ trên tất cả các tiếp điểm.

Nếu bạn đã kết nối thư viện này, bạn sẽ không thể làm việc với các máy thu / phát 433 MHz. Có một thư viện Servo2 cho cái này, cái này giống hệt nhau.

Thư viện Servo2

Dưới đây là một ví dụ về mã mà tôi đã sử dụng cho các thử nghiệm với ổ đĩa servo, nó nằm trong bộ ví dụ tiêu chuẩn:

#include // kết nối thư viện

Servo myservo; // khai báo tên biến cho servo myservo

int potpin = 0; // pin để kết nối chiết áp cài đặt

int val; // biến để lưu kết quả đọc tín hiệu từ chiết áp

void setup () {

myservo.attach (9); // đặt 9 pin làm đầu ra điều khiển cho servo

}

void loop () {

val = analogRead (potpin); // kết quả đọc chiết áp được lưu trong trans. val, họ sẽ ở trong phạm vi từ 0 đến 1023

val = bản đồ (val, 0, 1023, 0, 180); // dịch phạm vi đo từ đầu vào tương tự 0-1023

// trong phạm vi tác vụ cho servo 0-180 độ

myservo.write (val); // vượt qua chuyển đổi tín hiệu từ pot-ra để kiểm soát đầu vào servo

trì hoãn (15); // độ trễ là cần thiết để hệ thống hoạt động ổn định

 

Chúng tôi kết nối servo với Arduino

Kết luận

Sử dụng các động cơ điện đơn giản nhất kết hợp với arduino là một nhiệm vụ khá đơn giản, trong khi việc làm chủ vật liệu này sẽ mở rộng khả năng của bạn trong lĩnh vực tự động hóa và robot. Các robot đơn giản nhất hoặc các mô hình điều khiển vô tuyến của ô tô bao gồm các động cơ như vậy và động cơ servo được sử dụng để điều khiển vòng quay của các bánh xe.

Trong các ví dụ được xem xét, một chiết áp được sử dụng để đặt góc quay hoặc tốc độ quay, bất kỳ nguồn tín hiệu nào khác có thể được sử dụng thay vào đó, ví dụ, xoay hoặc thay đổi tốc độ có thể xảy ra do thông tin nhận được từ các cảm biến.

Một ví dụ về việc sử dụng động cơ servo trong năng lượng thay thế: theo dõi góc tới của ánh sáng mặt trời và điều chỉnh vị trí của các tấm pin mặt trời trong các nhà máy điện.

Để thực hiện một thuật toán như vậy, bạn có thể sử dụng một số quang điện tử hoặc các thiết bị quang điện tử khác để đo lượng ánh sáng tới và tùy theo cách đọc của chúng, đặt góc quay của bảng mặt trời.

Xem thêm tại electro-vi.tomathouse.com:

  • Cách thức bố trí servo và hoạt động
  • Arduino và động cơ bước: cơ bản, kế hoạch, kết nối và kiểm soát
  • Tính năng kết nối thiết bị với Arduino
  • Cách phân biệt động cơ cảm ứng với động cơ DC
  • Cách kết nối bộ mã hóa gia tăng với Arduino

  •