Mục lục:

Bộ điều khiển PID VHDL: 10 bước
Bộ điều khiển PID VHDL: 10 bước

Video: Bộ điều khiển PID VHDL: 10 bước

Video: Bộ điều khiển PID VHDL: 10 bước
Video: [MST] FPGA VHDL - BUỔI 7: Q FORMAT, PID 2024, Tháng bảy
Anonim
Bộ điều khiển PID VHDL
Bộ điều khiển PID VHDL
Bộ điều khiển PID VHDL
Bộ điều khiển PID VHDL

Dự án này là dự án cuối cùng của tôi để hoàn thành Bằng Cử nhân Danh dự của Học viện Công nghệ Cork. Hướng dẫn này được chia thành hai phần, phần đầu tiên sẽ bao gồm phần nội dung chính của mã PID là mục đích chính của dự án và phần thứ hai bao gồm giao diện mã được thực hiện trên bảng phát triển Basys 3 và sau đó giao tiếp với một quả bóng bàn giàn khoan. Các giàn khoan lý thuyết và được xây dựng được hiển thị trong các hình ảnh đính kèm.

Quân nhu

Mô phỏng

Vivado Design Suite

Triển khai (trong ngoặc là những gì đã được sử dụng cho dự án của tôi)

  • Bo mạch FPGA có thể đầu vào và đầu ra tín hiệu Digital / Analog (Basys 3)
  • một hệ thống có thể được điều khiển bằng một nguồn phản hồi duy nhất (Ping Pong Ball Levitation Rig)

giàn khoan

  • Ống polycarbonate
  • Quạt 5V
  • Cảm biến IR
  • Đế in 3D (Hướng dẫn này ghi lại cấu trúc của giàn khoan, cảm biến đã được thêm vào để cung cấp phản hồi nhưng giàn khoan nói chung là giống nhau)
  • 1k điện trở
  • Breadboard với 5V và GND Rail

Bước 1: Lý thuyết điều khiển cơ bản

Lý thuyết điều khiển cơ bản
Lý thuyết điều khiển cơ bản

Tôi nghĩ rằng việc thêm vào một số lý thuyết điều khiển cơ bản sẽ cung cấp cho bất kỳ ai muốn thử và triển khai mã này một cơ sở tốt để bắt đầu.

Sơ đồ đính kèm là cách bố trí của một bộ điều khiển vòng lặp đơn.

r- Là tài liệu tham khảo. Điều này xác định nơi bộ điều khiển muốn đi đến.

e-Là lỗi. Đây là sự khác biệt giữa giá trị trên cảm biến và giá trị tham chiếu của bạn. ví dụ. e = r- (d + đầu ra của cảm biến).

K-Đây là bộ điều khiển. Một bộ điều khiển có thể bao gồm ba thuật ngữ. Các số hạng này là P, I và D. Cả ba số hạng đều có cấp số nhân được gọi là Kp, Ki và Kd. Các giá trị này xác định phản ứng của bộ điều khiển.

  • P-Tỷ lệ. Một bộ điều khiển P nghiêm ngặt sẽ có đầu ra tỷ lệ với lỗi hiện tại. Bộ điều khiển P rất dễ thực hiện và hoạt động nhanh nhưng sẽ không bao giờ đạt được giá trị bạn đặt (tham khảo).
  • I-Tích phân. Một bộ điều khiển tích phân nghiêm ngặt sẽ tổng hợp lỗi trước đó mà cuối cùng sẽ đạt được tham chiếu mong muốn. Bộ điều khiển này thường quá chậm để triển khai. Việc thêm vào một thuật ngữ P sẽ làm giảm thời gian cần thiết để đạt được tham chiếu. Thời gian đầu vào được lấy mẫu phải được tính đến điều khoản tích phân được tích hợp theo thời gian.
  • D-Đạo hàm. Thuật ngữ Phái sinh sẽ có đầu ra phụ thuộc vào tốc độ thay đổi của sai số. Thuật ngữ này thường được sử dụng với thuật ngữ P hoặc với thuật ngữ PI. Vì điều này tỷ lệ thuận với tốc độ thay đổi của lỗi nên một nhiễu đơn sẽ bị khuếch đại tiếng ồn có thể gây ra hệ thống không ổn định. Thời gian cũng phải được tính đến vì thuật ngữ phái sinh cũng liên quan đến thời gian.

U- Đây là tín hiệu điều khiển. Tín hiệu này là một đầu vào cho giàn khoan. Trong trường hợp của dự án này, u là tín hiệu PWM đầu vào cho quạt để thay đổi tốc độ.

G- Đây là hệ thống đang được điều khiển. Hệ thống này có thể được lập mô hình toán học trong Miền S hoặc Z. Các hệ thống có thể là thứ tự thứ n nhưng đối với một người nào đó bắt đầu điều khiển hệ thống thứ tự đầu tiên có lẽ nên được giả định vì điều này dễ tính hơn nhiều. Đây là một kho thông tin về hệ thống mô hình hóa được tìm thấy trực tuyến. Tùy thuộc vào thời gian lấy mẫu của cảm biến, mô hình của hệ thống là rời rạc hoặc liên tục. Điều này có ảnh hưởng mạnh mẽ đến bộ điều khiển vì vậy nên nghiên cứu về cả hai.

d- Đây là nhiễu được thêm vào hệ thống. Sự nhiễu loạn là các lực lượng bên ngoài mà mô hình của hệ thống không tính đến. Một ví dụ dễ hiểu về điều này sẽ là một chiếc máy bay không người lái mà bạn muốn bay lơ lửng ở độ cao 5 mét, một cơn gió thổi đến và thả chiếc máy bay không người lái xuống 1 mét, bộ điều khiển sẽ định vị lại chiếc máy bay không người lái sau khi xảy ra nhiễu động. Điều này được gọi là nhiễu động vì gió không thể lặp lại nên không thể mô hình hóa điều này.

Để điều chỉnh bộ điều khiển, có quá nhiều quy tắc để đặt tên nhưng một số quy tắc tốt mà tôi đã bắt đầu là Cohen Coon và Zieger Nichols.

Mô hình hóa hệ thống nói chung là phần quan trọng nhất nếu không có mô hình chính xác thì bộ điều khiển đã được thiết kế sẽ không đáp ứng như mong muốn.

Ở đây cần có đủ thông tin để hiểu về cách bộ điều khiển hoạt động cùng với một số nghiên cứu riêng lẻ và mã bên dưới bộ điều khiển với bất kỳ sự kết hợp nào của ba thuật ngữ có thể được triển khai.

Bước 2: Viết mã PID

Viết mã PID
Viết mã PID

Nguyên tắc cơ bản của mã được tìm thấy tại liên kết sau đây đã được thực hiện và sửa đổi vì mã này không hoạt động nhưng có nhiều nguyên tắc đúng cho một điểm khởi đầu tốt. PID gốc Mã có một số lỗi như

  • Hoạt động liên tục - bộ điều khiển được kế thừa rời rạc vì vậy bộ điều khiển phải được thiết lập để chỉ tính toán tất cả 3 số hạng khi có đầu vào mới. Công việc xung quanh cho mô phỏng này là kiểm tra xem đầu vào có thay đổi so với lần trước hay không. điều này chỉ hoạt động để mô phỏng mã hoạt động chính xác.
  • Thời gian lấy mẫu không ảnh hưởng đến số hạng tích phân và đạo hàm - Bộ điều khiển cũng không xem xét thời gian lấy mẫu, do đó, một giá trị được gọi là bộ chia cho thời gian được thêm vào để đảm bảo các số hạng tích phân và đạo hàm hoạt động đúng khoảng thời gian.
  • Lỗi chỉ có thể là nguyên nhân - khi tính toán lỗi cũng có một vấn đề vì lỗi không bao giờ có thể có ý nghĩa tiêu cực khi tín hiệu phản hồi đã vượt qua giá trị tham chiếu mà bộ điều khiển sẽ tiếp tục tăng đầu ra khi nó phải giảm.
  • Giá trị tăng cho 3 số hạng là số nguyên - theo kinh nghiệm của tôi, tôi luôn thấy rằng các giá trị cho 3 số hạng trong bộ điều khiển luôn là số dấu phẩy động do Hệ số 3 không có số dấu phẩy động nên các giá trị phải được cung cấp giá trị tử số và giá trị mẫu số sẽ phục vụ như một công việc xung quanh vấn đề này.

Mã được đính kèm bên dưới có phần chính của mã và một bàn kiểm tra để mô phỏng mã. Thư mục zip chứa mã và testbench đã có trong Vivado nên bạn có thể mở để tiết kiệm thời gian. cũng có một thử nghiệm mô phỏng mã cho thấy đầu ra theo dõi tham chiếu, điều này chứng minh rằng mã đang hoạt động như dự định.

Bước 3: Cách sửa đổi hệ thống của bạn

Thứ nhất, không phải tất cả các hệ thống đều giống nhau mà phải phân tích các đầu vào và đầu ra của hệ thống. Trong trường hợp của tôi, đầu ra của giàn khoan đã cho tôi một giá trị cho vị trí là tín hiệu tương tự và đầu vào từ hệ thống là tín hiệu PWM. Có nghĩa là cần chuyển đổi ADC. May mắn thay Basys 3 có ADC tích hợp nên điều này không có vấn đề gì khi đầu ra của cảm biến IR phải được thu nhỏ xuống 0V-1V vì đây là phạm vi tối đa của ADC tích hợp. Điều này được thực hiện bằng cách sử dụng một mạch phân áp được làm từ điện trở 1k được thiết lập như một điện trở 3k mắc nối tiếp với một điện trở 1k. Tín hiệu tương tự bây giờ nằm trong phạm vi của ADC. Đầu vào PWM cho quạt có thể được điều khiển trực tiếp bởi đầu ra của cổng PMOD trên Basys 3.

Bước 4: Tận dụng I / O trên Basys 3

Có một số I / O trên Basys 3 cho phép gỡ lỗi dễ dàng hơn khi mã đang chạy. I / O được thiết lập như sau.

  • Hiển thị bảy đoạn - Điều này được sử dụng để hiển thị giá trị của tham chiếu và giá trị trên ADC tính bằng vôn. Hai chữ số đầu tiên của màn hình bảy đoạn hiển thị hai chữ số sau vị trí thập phân của giá trị ADC vì giá trị nằm trong khoảng 0-1V. Các chữ số ba và bốn trên màn hình bảy phân đoạn hiển thị giá trị tham chiếu tính bằng vôn, điều này cũng hiển thị hai chữ số đầu tiên sau vị trí thập phân vì phạm vi cũng nằm trong khoảng 0-1V.
  • 16 LED - Các đèn LED được sử dụng để hiển thị giá trị của đầu ra nhằm đảm bảo rằng đầu ra đang bão hòa và đầu ra đang thay đổi chính xác.

Bước 5: Tiếng ồn trên đầu ra cảm biến hồng ngoại

Có nhiễu trên đầu ra cảm biến để khắc phục sự cố này, một khối tính trung bình đã được đặt ra vì điều này là đủ và cần rất ít công việc để hoàn thành.

Bước 6: Bố cục mã tổng thể

Bố cục mã tổng thể
Bố cục mã tổng thể

Có một đoạn mã vẫn chưa được nói đến. Mã này là một bộ chia xung nhịp được gọi là bộ kích hoạt. bit mã này kích hoạt mã ADC để lấy mẫu. mã ADC mất tối đa 2us để hoàn thành, do đó đầu vào hiện tại và đầu vào trước đó được tính trung bình. 1us sau khi tính trung bình này, bộ điều khiển sẽ tính toán các số hạng P, I và D. toàn bộ bố cục của mã và giao diện được hiển thị trong sơ đồ kết nối tạm thời.

Bước 7: Kiểm tra

Thử nghiệm
Thử nghiệm

Mã đã được triển khai trên Basys 3 và phản hồi sau đây đã được ghi lại. tham chiếu đã thay đổi giữa 2 giá trị. đó là trường hợp trong mã dự án đã hoàn thành đính kèm. Video đính kèm hiển thị phản hồi này trong thời gian thực. Các dao động phân rã nhanh hơn ở phần trên của ống vì bộ điều khiển được thiết kế cho vùng này nhưng bộ điều khiển không hoạt động tốt hơn ở phía dưới ống vì hệ thống không tuyến tính.

Bước 8: Sửa đổi để cải thiện dự án

Dự án đã hoạt động như dự kiến nhưng có một vài sửa đổi mà tôi sẽ thực hiện nếu dự án có thể được gia hạn.

  • Triển khai bộ lọc kỹ thuật số để giảm nhiễu hoàn toàn
  • thiết lập mã ADC, mã trung bình và mã tích hợp để kích hoạt tuần tự.
  • sử dụng một cảm biến khác để phản hồi vì phản ứng không tuyến tính của cảm biến này gây ra nhiều vấn đề với dự án này nhưng điều đó xảy ra nhiều hơn ở phía điều khiển chứ không phải phía mã hóa.

Bước 9: Làm việc thêm

Trong suốt mùa hè, tôi đã viết mã cho bộ điều khiển tầng và thực hiện các sửa đổi mà tôi đã đề xuất cho bộ điều khiển PID vòng đơn.

Các sửa đổi được thực hiện đối với bộ điều khiển PID thông thường

· Mẫu bộ lọc FIR được triển khai các hệ số phải được thay đổi để đạt được tần số cắt mong muốn. Cách triển khai hiện tại là bộ lọc linh sam 5 lần nhấn.

· Thời gian của mã đã được thiết lập để bộ lọc sẽ truyền mẫu mới qua và khi đầu ra sẵn sàng, thuật ngữ tích phân sẽ được kích hoạt, điều đó có nghĩa là mã có thể được sửa đổi để hoạt động ở các khoảng thời gian khác nhau mà ít nỗ lực thay đổi hơn mã số.

· Vòng lặp for chính điều khiển chương trình cũng đã bị giảm vì vòng lặp for này mất 7 chu kỳ trước đó, điều này làm chậm tốc độ hoạt động tối đa của Bộ điều khiển nhưng bằng cách giảm vòng lặp for t 4 trạng thái, điều này có nghĩa là khối mã chính có thể hoạt động trong vòng 4 chu kỳ đồng hồ.

Thử nghiệm

Bộ điều khiển này đã được thử nghiệm và hoạt động như dự định Tôi không chụp ảnh bằng chứng này vì phần này của dự án chỉ là để giữ cho tâm trí hoạt động. Mã để kiểm tra cũng như testbench sẽ có sẵn ở đây để bạn có thể kiểm tra chương trình trước khi triển khai.

Tại sao sử dụng bộ điều khiển thác

Một bộ điều khiển tầng điều khiển hai phần của hệ thống. Trong trường hợp này, một bộ điều khiển tầng sẽ có một vòng lặp bên ngoài là một bộ điều khiển có phản hồi từ cảm biến IR. Vòng lặp bên trong có phản hồi dưới dạng thời gian giữa các xung từ máy đo tốc độ xác định tốc độ quay của quạt. Bằng cách thực hiện kiểm soát, có thể đạt được phản ứng tốt hơn ngoài hệ thống.

Bộ điều khiển thác hoạt động như thế nào?

Vòng lặp bên ngoài của bộ điều khiển sẽ cung cấp một giá trị cho thời gian giữa các pules đến bộ điều khiển vòng trong. Bộ điều khiển này sau đó sẽ tăng hoặc giảm chu kỳ nhiệm vụ để đạt được thời gian mong muốn giữa các xung.

Thực hiện các sửa đổi trên giàn

Rất tiếc, tôi không thể thực hiện các sửa đổi này trên thiết bị vì tôi không có quyền truy cập vào nó. Tôi đã thử nghiệm bộ điều khiển vòng lặp đơn đã sửa đổi hoạt động như dự định. Tôi chưa thử nghiệm bộ điều khiển thác. Tôi tin rằng bộ điều khiển sẽ hoạt động nhưng có thể yêu cầu một số sửa đổi nhỏ để hoạt động như dự định.

Thử nghiệm

Tôi không thể kiểm tra bộ điều khiển vì rất khó để mô phỏng hai nguồn đầu vào. Vấn đề duy nhất tôi có thể thấy với bộ điều khiển tầng là khi vòng lặp bên ngoài cố gắng tăng điểm đặt được cung cấp cho vòng trong nên điểm đặt lớn hơn thực sự là RPS thấp hơn cho quạt nhưng điều này có thể được khắc phục dễ dàng. lấy điểm đặt từ giá trị lớn nhất của tín hiệu điểm đặt (4095 - điểm đặt - tacho_result).

Bước 10: Kết luận

Nhìn chung, dự án hoạt động như tôi dự định khi dự án bắt đầu nên tôi hài lòng với kết quả. Cảm ơn bạn đã dành thời gian đọc nỗ lực của tôi trong việc phát triển bộ điều khiển PID trong VHDL. Nếu bất kỳ ai đang cố gắng triển khai một số biến thể của điều này trên hệ thống và yêu cầu một số hỗ trợ để hiểu mã, hãy liên hệ với tôi, tôi sẽ trả lời càng sớm càng tốt. Bất cứ ai thử công việc bổ sung đã được tổng hợp nhưng không được thực hiện, vui lòng liên hệ với tôi để được hỗ trợ. Tôi sẽ đánh giá rất cao nếu bất cứ ai thực hiện nó cho tôi biết nó diễn ra như thế nào.

Đề xuất: