• Cần giúp đỡ? Hãy gọi:   0938.788.458
Tất cả danh mục
DIY

Giải thuật PID 3 bậc tự do cho bàn bi cân bằng

Giải thuật PID 3 bậc tự do cho bàn bi cân bằng

Bàn bi cân bằng bao gồm một tấm phẳng và một viên bi trên đó cần được cân bằng. Cân bằng viên bi chỉ đạt được thông qua trạng thái cân bằng không ổn định trong đó bất kỳ thay đổi nhỏ nào về độ nghiên của tấm phẳng dẫn đến gia tốc của viên bi thay đổi liên tục cho đến khi nó tấm phẳng không còn nghiên hay viên bi ở đúng vị trí mong muốn. Một hệ thống như vậy trình bày một vấn đề điều khiển thật sự thú vị vì điều khiển vòng kín là cần thiết để cân bằng viên bi ổn định trên tấm phẳng.

 

Một cách khá tốt để kiểm soát chuyển động của viên bi là tách rời các hướng x và y trên tấm phẳng. Điều này cho phép hai vòng điều khiển độc lập riêng biệt. Một vòng điều khiển trục x của viên bi và vòng khác điều khiển trục y. Mỗi vòng điều khiển cho trục x và y bao gồm hai phần; một vòng điều khiển bên trong và một vòng lặp bên ngoài. Vòng lặp bên trong chịu trách nhiệm chạy các động cơ bước trong vòng kín để điều khiển góc. Góc động cơ thu được từ các bộ mã hóa cầu phương trên mỗi động cơ bước. Một góc đặt cho các động cơ bước được cung cấp từ vòng ngoài và sự khác biệt giữa góc đặt và góc đo sẽ điều khiển tốc độ góc của động cơ bước.

Vòng ngoài điều khiển vị trí viên bi thực tế trên tấm phẳng. Đầu vào của vòng lặp này là vị trí viên bi mong muốn và phản hồi được đo vị trí viên bi. Vị trí bi thu được bằng cách sử dụng điện trở 4 dây trên đó bi lăn. Sự khác biệt và tốc độ thay đổi của chênh lệch giữa vị trí đặt và vị trí đo xác định góc đầu ra được đưa vào vòng điều khiển bên trong. Vòng điều khiển bên ngoài có dạng bộ điều khiển tỷ lệ-đạo hàm (PD), trong khi tất cả những gì cần thiết cho vòng lặp bên trong là bộ điều khiển tỷ lệ.

Đầu ra từ toàn bộ hệ thống điều khiển là vị trí của viên bi trên tấm phẳng. Vị trí được kiểm soát bằng cách điều chỉnh gia tốc viên bi. Gia tốc bi là một chức năng của góc tấm phẳng và góc tấm phẳng là một chức năng của góc động cơ bước. Sử dụng xấp xỉ góc nhỏ, một thay đổi nhỏ trong góc động cơ từ trạng thái cân bằng sẽ dẫn đến thay đổi tuyến tính liên quan đến góc của tấm phẳng và do đó thay đổi gia tốc của viên bi. Phép tính gần đúng này hoạt động khá tốt để kiểm soát viên bi ngay cả ở các góc lớn hơn.

Bước 1: Phương pháp thiết kế

Nền tảng được thiết kế để có ba bậc tự do. Các động cơ bước được thiết lập trong một mô hình tam giác đều. Cấu hình này kết hợp chuyển động x và y nhưng dẫn đến một thiết kế cơ học đơn giản hơn để hạn chế hoàn toàn vị trí nền tảng. Thiết kế cũng cho phép nền tảng xoay quanh vị trí của viên bi thay vì chỉ ở giữa. Cách tiếp cận này sẽ cho phép thay đổi gia tốc đột ngột hơn của viên bi, vì bi di chuyển không có sự dịch chuyển dọc trong quá trình điều chỉnh góc tấm phẳng. Hiện tại nền tảng chỉ được lập trình để xoay vòng về trung tâm.

Động cơ bước vòng kín 360 độ được chọn vì chúng hoạt động với thiết bị điện tử máy in 3D hiện có. Thêm phản hồi sẽ loại bỏ vấn đề bước bị bỏ lỡ vốn có đối với động cơ bước và cho phép bước vi mô chính xác hơn khi góc đo được kiểm soát, chứ không phải số bước.

Bước 2: Vật liệu và dụng cụ

VẬT LIỆU

  • Thanh nhôm 3 “x 1/4” (2-3 ft)
  • Tấm nhôm 1/8 “(đủ để cắt một vòng tròn 6” )
  • Tấm nhựa 1/8 “(6” x 7,5 “) và đủ để cắt ba tấm 1 / 2” vòng tròn
  • Vòng nhôm 1/2 “(khoảng 6”)
  • 9X Traxxas 5347
  • Thanh sợi carbon pultruded 4,9mm OD X 2,8mm (khoảng 10 “)
  • Arduino Mega 2560
  • Bảng điều khiển máy in Ramp 1.4
  • Trình điều khiển động cơ bước 3X DRV8825
  • Động cơ bước 3X Nema 14 với mô-men xoắn tối thiểu 26,0 OZ, trục kép 5mm
  • Bộ mã hóa và phương pháp bậc hai 3-1-1-19-197 kỹ thuật số để gắn vào động cơ bước
  • Màn hình cảm ứng điện trở 8.4 “4 dây và phần cứng để nối với vi điều khiển
  • Nút ấn
  • Nguồn cung cấp tối thiểu 12V-4A DC
  • 1-1/ 4 ” bi thép
  • Vít nắp 9X m3-0,5 x 14mm
  • Vít chìm 6X để gắn động cơ
  • 3X # 6-32 x 7/16 in. Vít nắp ổ cắm
  • Vít đầu nút 6X # 6-32 x 1/2in
  • 3X # 8-32 x 1/2 in. Vít nắp và vòng đệm
  • # 8-32 tất cả các đệm hoặc ốc vít để sử dụng như tất cả các đệm (khoảng 12 in.)
  • # 6-32 tất cả các đệm hoặc ốc vít để sử dụng như tất cả các đệm (khoảng 2 in.)
  • Dây điện
  • epoxy hai phần
  • băng keo hai mặt
  • băng keo hai mặt mỏng

CÔNG CỤ

  • Máy CNC
  • máy tiện thủ công
  • khoan bấm và bit
  • mũi khoan: # 6-30, # 8-32, m3-0.5
  • Phím hex SAE và số liệu
  • Máy vặn vít
  • Cây hàn
  • máy tính có cài đặt Arduino IDE

Bước 3: Mô hình chi tiết

Các mô hình và bản vẽ SolidWorks đi kèm chỉ mang tính tham khảo. Ý định của tôi là cung cấp đủ chi tiết cho ai đó để thực hiện một dự án tương tự nhưng không tạo ra một bản sao chính xác. Người ta nên cải thiện thiết kế và điều chỉnh nó để phù hợp với nhu cầu của mỗi người.

Assem3.SLDASM

arm.SLDASM

arm.SLDPRT

another middle disk.SLDPRT

arm Y.SLDPRT

ball end 2.SLDPRT

ball of end.SLDPRT

cone.SLDPRT

graphite rod.SLDPRT

motor arm.SLDPRT

stepper motor nema 14.SLDPRT

top disk.SLDPRT

top ring.SLDPRT

top screen plate.SLDPRT

Bước 4: Bộ phận cắt CNC 1/4 Inch

 

Sử dụng các mô hình SolidWorks và bản vẽ tham chiếu đi kèm để tạo mẫu cho thanh 1/4 “. Các bộ phận được cắt bằng đầu 1/8” với độ sâu 1/2 “.

Bước 5: Bộ phận cắt CNC 1/8 inch

Sử dụng các mô hình SolidWorks và bản vẽ tham chiếu đi kèm để tạo mẫu cho tấm nhôm 1/8 “và tấm nhựa. Các bộ phận được cắt bằng máy CNC 1/8” với độ sâu 1/2 “. Bit khắc 8 “đã được sử dụng để cắt hoa văn trên đầu tấm nhựa.

Bước 6: Tạo đệm và ống

  • Cắt 15 x 5/8 “miếng # 8-32 tất cả các đệm
  • Vặn xuống 12 trong số 15 mảnh sao cho 1/2 (5/16 “) mảnh bị trượt bên trong ống carbon để lại các sợi còn nguyên trên nửa còn lại của mảnh
  • Cắt 3 x 5/8 “số # 6-32 tất cả các chuỗi
  • Cắt 6 x 1 “ống carbon. Những mảnh này nên có chiều dài càng gần càng tốt. Tôi đã sử dụng công cụ trên máy tiện.

Bước 7:

 

  • Xoay 6 miếng nhôm tròn 1/2 “thành dài 1/2”
  • Khoan và gõ (m3-0,5) một đầu của mỗi mảnh đến độ sâu 1/4 “
  • Phay phần dưới để lại một đầu đường kính 0,2 “
  • Đảo ngược bộ phận và khoan / chạm (# 6-32) đầu kia đến độ sâu 1/4 “

Bước 8: Khoan lỗ

Khoan và chạm vào các bộ phận nhôm theo bản vẽ được cung cấp và các mô hình.

Trước khi chạm vào tấm trên cùng của nhựa, dán ba đĩa nhựa nhỏ vào mặt dưới của tấm thẳng hàng với các lỗ. Khoan vào các lỗ trong nhựa sau khi keo được dán chặt.

Nhấn vào đầu thanh Traxxas bằng cách sử dụng đầu # 8-32.

Bước 9: Lắp ráp khung

Phiên bản đầu tiên của khung và động cơ được hiển thị trong khi dự án hoàn thành hiển thị một bộ sửa đổi. Các mô hình SolidWorks cho các phần sửa đổi được cung cấp.

  • Gắn chân vào đĩa tròn 1/8 “bằng cách sử dụng vít đầu nút # 6-32.
  • Gắn trục vào khung động cơ bằng cách sử dụng ren # 6-32
  • Thêm ốc vít nắp đầu ổ cắm # 6-32 vào đầu kẹp của đầu động cơ
  • Lắp ráp các đầu que bằng cách đẩy các viên bi vào đúng vị trí
  • Gắn các đầu thanh vào trục trên đầu động cơ bằng vít m3-0.5
  • Gắn bộ mã hóa vào mặt sau của động cơ bước
  • Gắn động cơ bước vào khung đế
  • Lắp ráp bệ tam giác trên cùng bằng cách sử dụng vít m3-0,5 với đầu thanh được đặt đúng vị trí
  • Gắn các mảnh Y vào đầu que trên bệ tam giác bằng cách sử dụng 3 mảnh # 8-32
  • Chỉ trong 12 mảnh # 8-32 tất cả các sợi vào cánh tay Ys và đầu thanh còn lại
  • Nối 6 ống carbon vào các thanh ren
  • Sau khi epoxy được xử lý, trượt các đầu của động cơ lên ​​các trục động cơ bước và siết chặt các vít kẹp
  • Vặn chặt tấm acrylic trên cùng vào khung hình tam giác bằng vít nắp 3 # 8-32 x 1/2 “
  • Dán màn hình cảm ứng vào tấm acrylic bằng băng dính hai mặt mỏng ở các góc. Hãy chắc chắn rằng phía hoạt động ở mặt trên.

Bước 10: Nối dây

Các thiết bị điện tử điều khiển bao gồm các bộ phận dễ dàng tìm kiếm: Arduino Mega 2560, bảng điều khiển máy in 3D RAMPS 1.4 và ba trình điều khiển động cơ bước DRV8825. Ba động cơ bước sẽ được dán nhãn A, B và C.

  • Gắn Arduino Mega vào mặt dưới của khung bằng băng keo hai mặt.
  • Sửa đổi hai trong số các trình điều khiển động cơ bước DRV8825 để chân BƯỚC tăng lên thay vì xuống. Điều này sẽ cho phép các chân được kết nối với bộ định thời phần cứng trên Arduino.
  • Lắp board điều khiển RAMPS 1.4 vào board Arduino và các ổ DRV8825 vào các ổ cắm X, Y và Z trên board RAMPS với hai trình điều khiển được sửa đổi ở vị trí X và Y. RAMPS nên được đặt cho 32 microstep.
  • Kết nối động cơ bước A với ổ X, động cơ B với ổ Y và động cơ C với ổ Z. Nếu động cơ quay sai hướng khi kiểm tra điều chỉnh code hoặc dây.
  • Tạo các kết nối chân sau:
  • Chân X động cơ bước —– D6
  • Chân Y động cơ bước —- D5
  • Encoder a động cơ A —– D2
  • Encoder b động cơ A —– D3
  • Encoder a động cơ B —– D18
  • Encoder b động cơ B —– D19
  • Encoder a động cơ C —– D20
  • Encoder b động cơ C —– D21
  • Bộ mã hóa 3X + 5V —– + 5V
  • Bộ mã hóa 3X GND —– GND
  • màn hình cảm ứng X + 5V —– A12
  • màn hình cảm ứng X GND —– D44
  • màn hình cảm ứng Y + 5V —– A10
  • màn hình cảm ứng Y GND —– A5
  • núm cầu phương a —– D32
  • núm cầu phương b —– D47
  • Nút núm cầu phương —– D45
  • núm cầu phương GND —– GND
  • Các động cơ bước được cấp nguồn từ DC được cung cấp cho các đầu nối nguồn bên ngoài trên board RAMPS
  • Bỏ diode D1 có thể là cần thiết nếu bộ điều chỉnh Arduino 5V quá nóng như đang xảy ra trên board của tôi. Arduino sẽ cần nguồn riêng nếu D1 bị loại bỏ.

Bước 11: Màn hình cảm ứng điện trở 4 dây

Các phép đo vị trí bi được thực hiện bằng cách sử dụng màn hình cảm ứng điện trở 4 dây 8.4 in. Màn hình cảm ứng điện trở là bộ chia điện áp hiệu quả với các vị trí x và y được đo liên tục. Để có được vị trí từ màn hình, cần có 4 chân vi điều khiển. Tất cả các hộp phải là hai chiều với trở kháng đầu ra thấp và trở kháng đầu vào cao. Hai trong số các chân cần đo điện áp tương tự. Các tấm trên cùng và dưới cùng bên trong màn hình cảm ứng có điện trở, trong phạm vi 1K ohm, nhưng cách ly với nhau khi màn hình không được chạm vào. Để thực hiện phép đo vị trí X, hai chân được kết nối với phần dưới cùng của màn hình được đặt thành đầu ra với trở kháng thấp. Một trong các chân được đặt ở mức cao và chân còn lại được đặt ở mức thấp. Điều này tạo ra một tiềm năng điện trên phần dưới cùng của màn hình. Các chân được kết nối với phần trên cùng của màn hình được đặt làm đầu vào trở kháng cao và giá trị tương tự được ghi lại từ một trong các chân. Khi màn hình được chạm vào, phần trên cùng của màn hình sẽ tiếp xúc với đáy, tạo ra một bộ chia điện áp và tạo ra một điện áp tương tự tỷ lệ với vị trí cảm ứng theo hướng X. Quá trình được đảo ngược để ghi lại vị trí Y của cảm ứng.

Đó là mong muốn chỉ thực hiện đo lường khi có một liên lạc. Cấu hình thứ ba được đặt để chờ điều kiện cảm ứng và chỉ nhập trạng thái đo vị trí khi có cảm ứng. Điều này được thực hiện bằng cách đặt mặt trên hoặc mặt dưới của màn hình xuống đất; cài đặt các chân được kết nối ở mức thấp. Lớp khác được kết nối với các đầu vào trở kháng cao với điều kiện pullup trên một trong các chân được kết nối. Trạng thái kỹ thuật số của pin pullup được theo dõi cho đến khi một cú chạm trên màn hình kéo lớp thấp xuống bằng cách kết nối với lớp tiếp đất khác.

Bước 12: Phương pháp điều khiển

Động cơ bước thường được vận hành một cách tuyệt đối trong đó số lượng các bước gửi đến động cơ được theo dõi để xác định chuyển động của động cơ. Thủ tục này có hai phẩm chất không mong muốn. Rõ ràng nhất là mất bước. Nếu động cơ gặp một tải đủ để dừng chuyển động, vị trí thực tế sẽ bị mất, vì các bước được chỉ huy không còn phù hợp với vị trí động cơ. Vấn đề ít rõ ràng hơn là sản xuất và đếm các bước của động cơ khi sử dụng vi bước ở tốc độ cao. Một động cơ bước điển hình có 200 bước cho một cuộc cách mạng đầy đủ. Điều này chuyển thành 6400 bước cho một cuộc cách mạng đầy đủ nếu sử dụng 32 bộ điều khiển microstep. Khi chạy các động cơ ở tốc độ 300 vòng / phút, cần có công suất 32000 bước mỗi giây cho mỗi động cơ. Chạy ba động cơ sẽ dẫn đến gần 200 nghìn thay đổi logic mỗi giây.

Giải pháp là giảm tải thế hệ bước tới bộ định thời mức phần cứng và so sánh các thanh ghi trong khi sử dụng bộ mã hóa trên động cơ để đo trực tiếp chuyển động. Sau đó, một hệ thống vòng kín có thể được thiết lập với giá trị đầu vào biểu thị sự khác biệt giữa góc động cơ mong muốn và góc đo từ bộ mã hóa. Đầu ra từ vòng điều khiển sau đó sẽ đặt RPM của động cơ. Mạch xung cần thiết được tạo từ ba bộ định thời phần cứng 16 bit với ba thanh ghi so sánh. Các bộ định thời được thiết lập không có tỷ lệ trước tạo ra tốc độ đếm 16 MHz đặt lại khi số đếm bằng với thanh ghi so sánh. Một chân đầu ra tương ứng được bật khi thiết lập lại bộ đếm thời gian, tạo ra một chuỗi xung cần thiết để di chuyển động cơ bước. Tần số của chuỗi xung được đặt theo kích thước của thanh ghi so sánh và xác định RPM của động cơ. Đầu ra được thu nhỏ từ vòng điều khiển động cơ bước có thể được đưa vào thanh ghi so sánh để đặt RPM của động cơ. Với phương pháp này, tất cả việc tạo tín hiệu động cơ bước được thực hiện ở mức phần cứng để vi điều khiển miễn phí cho các tác vụ khác.

Một vòng điều khiển tỷ lệ đạo hàm (PD) được thực hiện để đạt được vị trí bóng chủ yếu. Một thành phần không thể thiếu đã được thêm vào, nhưng không cần thiết. Thuật ngữ tỷ lệ trong vòng điều khiển chỉ đơn giản là sự khác biệt giữa vị trí được chỉ huy và vị trí bóng đo được nhân với một mức tăng tỷ lệ thuận. Thuật ngữ tỷ lệ dẫn đến chuyển động trơn tru của góc tấm, vì những thay đổi về vị trí bóng thường dẫn đến một số lượng lớn. Điều này không đúng khi tính đạo hàm bậc 1 đơn giản dx ≈ [x (i) – x (i 1)] / h vì chuyển động bóng giữa các phép đo là nhỏ với nhiễu tương đối lớn. Hành vi có thể được cải thiện bằng cách tăng thời gian giữa các lần đo nhưng sau đó thời gian đáp ứng của hệ thống trở nên lớn. Giải pháp là sử dụng nhiều hơn lịch sử bóng để dự đoán tốt hơn vận tốc hiện tại. Một xấp xỉ tốt cho chuyển động của quả bóng là gia tốc không đổi vì góc của tấm không thay đổi mạnh mẽ. Một stprint chính xác thứ hai chỉ sử dụng các phép đo trong quá khứ để dự đoán đạo hàm hiện tại là mong muốn. Các stprint nên có loại bỏ tiếng ồn tốt và hành vi đáp ứng thời gian.Pavel Holoborodko đã công bố một danh sách các khuôn tô cho ước tính đạo hàm một phía mà từ đó một mẫu tô 16 điểm được chọn. Đạo hàm thu được mượt mà hơn đáng kể so với trường hợp đơn giản trong khi vẫn duy trì thời gian đáp ứng hệ thống tốt.

Cả hai thành phần tỷ lệ và đạo hàm được thêm vào với nhau sao cho phần tỷ lệ nghiêng tấm để tăng tốc quả bóng về phía vị trí đặt và thành phần đạo hàm nghiêng tấm để làm chậm chuyển động của quả bóng. Độ lớn của mỗi giá trị có thể được đặt bằng cách điều chỉnh các giá trị khuếch đại cho đến khi hệ thống được làm ẩm nghiêm trọng.

Các góc nền đại diện cho độ nghiêng X và Y cần được chuyển thành ba góc động cơ bước. Trục X và Y được chiếu lên ba trục động cơ để xác định trọng số điều khiển tương đối. Cách tiếp cận này chỉ là một xấp xỉ của hành vi mong muốn nhưng hoạt động khi cần thiết.

Tỷ lệ thực thi code nhất quán là cần thiết. Điều này đạt được thông qua việc sử dụng một thói quen ngắt kích hoạt cứ sau 1ms tắt Timer0. Các cờ thực thi mã được kích hoạt trong thường trình ngắt cho phép các phần khác nhau của mã chạy.

Bước 13: Chương trình và điều chỉnh khung đế

Code này yêu cầu một số thư viện bao gồm:  encoderrunning medianrunning average, và PID.

Thư viện PID có thể được loại bỏ dễ dàng vì chỉ phần tỷ lệ được sử dụng cho điều khiển góc động cơ bước.

Màn hình sẽ cần một hiệu chuẩn ban đầu. Trong phần đầu của code dưới các giá trị hiệu chuẩn “màn hình cảm ứng” có thể được nhập. Uncomment “serial.print (measured_x_pos)” và “serial.println (measured_y_pos)” ở dưới cùng của vòng lặp chính để hiển thị số đọc trên màn hình. Chạm vào màn hình tại các vị trí được truy tố trong phần “công cụ màn hình cảm ứng” và nhập các giá trị được hiển thị vào code. Sau khi hiệu chuẩn, nhận xét lại các bản in nối tiếp.

Núm điều khiển cầu phương được sử dụng để điều chỉnh các giá trị trong quá trình vận hành. Serial monitor Arduino IDE có thể được sử dụng để hiển thị các giá trị. Giá trị đầu tiên được hiển thị là thời gian vòng điều khiển chính trong uS. Giá trị này không được vượt quá 5mS vì đó là khoảng thời gian gọi của vòng lặp chính. Nút ấn cầu phương được sử dụng để tiến tới giá trị tiếp theo. Ba giá trị tiếp theo là lợi nhuận theo tỷ lệ, đạo hàm và tích phân. Những giá trị này có thể được điều chỉnh bằng núm xoay để đạt được điều chỉnh mong muốn. Bóng sẽ nhanh chóng di chuyển đến vị trí đã đặt với độ vọt lố tối thiểu. Các giá trị sẽ bị mất trong chu kỳ nguồn, do đó chúng phải được nhập thủ công vào mã sau khi điều chỉnh hoàn tất. Giá trị offset cho các hướng X và Y có thể được điều chỉnh tiếp theo. Bóng sẽ được bù từ vị trí mong muốn nếu nền tảng không được cấp và mức tăng tích phân không được sử dụng. Thay đổi giá trị offset để căn giữa quả bóng trên nền tảng khi “mẫu 0” được đặt. Các mẫu bóng khác nhau có thể được chọn với 8 mẫu hiện đang được lập trình bằng các phương trình tham số. Tốc độ di chuyển của bóng cũng được điều chỉnh với biến “tốc độ mẫu”; số nhỏ hơn tương đương với chuyển động bóng nhanh hơn. Giá trị cuối cùng là “hướng mẫu” đặt hướng di chuyển của quả bóng. số nhỏ hơn tương đương với chuyển động bóng nhanh hơn. Giá trị cuối cùng là “hướng mẫu” đặt hướng di chuyển của quả bóng. số nhỏ hơn tương đương với chuyển động bóng nhanh hơn. Giá trị cuối cùng là “hướng mẫu” đặt hướng di chuyển của quả bóng.

Code được cung cấp là chương trình chính thức nhưng hãy cải thiện nó.

ball_on_plate_v2_9.ino

Arduino-PID-Library-master.zip

Encoder-master.zip

RunningAverage.zip

RunningMedian.zip