Từ chức năng chuyển sang arduino


7

Câu hỏi này có vẻ ngu ngốc, nhưng tôi đã tò mò về nó trong một thời gian dài.

Vì vậy, tôi là một sinh viên kỹ thuật mới và chúng tôi đã học được rất nhiều về "thiết kế bộ điều khiển". Ví dụ, bộ điều khiển thiết kế cho một hệ thống lái xe hơi và như vậy. Tất cả các "bộ điều khiển" mà chúng tôi thiết kế đều nằm trong miền Laplace aka s-domain. Và hầu hết các lần nó sẽ chỉ là một chức năng chuyển. Vậy làm thế nào để các kỹ sư hệ thống điều khiển thực sự sử dụng các chức năng chuyển giao này trong arduino và các bộ vi điều khiển khác? Tôi có nghĩa là bạn không thể đặt chức năng trong đó phải không?

Bạn có phải chuyển đổi hàm truyền sang một số dạng khác và viết mã cho vi điều khiển hay có cách nào đơn giản hơn để làm điều đó không?

Cảm ơn vì đã dành thời gian cho tôi!

Câu trả lời:


4

Giả sử bạn có một Arduino mà bạn đã sắp xếp để lấy mẫu tín hiệu với tốc độ mẫu là 1 / T sau đó được bộ điều khiển của bạn xử lý. Chúng ta cũng giả sử rằng thời gian xử lý cho bộ điều khiển của bạn nhỏ so với T, ví dụ 0,1 / T

Đầu tiên, bạn cần chuyển đổi chức năng chuyển bộ điều khiển sang thời gian riêng biệt. Có rất nhiều cách để làm điều này. Matlab có hàm c2d () thuận tiện. Một cách bạn có thể làm trên giấy (không phải cách tốt nhất), là sử dụng Phương pháp của Euler's.

s = (z - 1) / T trong đó T là khoảng thời gian lấy mẫu.

Chuyển đổi hàm truyền sau đó: (s + a) / (s + b) => (z- (1-aT)) / (z- (1-bT))

Vì vậy, bây giờ bạn có một TF trong z như: Y (z) / X (z) = (zc) / (zd) trong đó Y là đầu ra và X là đầu vào.

Để thực hiện điều này trong một bộ điều khiển, bạn cần điều này như một phương trình khác biệt về độ trễ. Vì vậy, chuyển đổi phương trình thành hàm của (z ^ -1), đó là một độ trễ:

Y (z) / X (z) = (1-cz ^ -1) / (1-dz ^ -1)

và viết lại thành: Y (Z) (1-dz ^ -1) = X (z) (1-cz ^ -1)

Y (Z) -dY (z) .z ^ -1 = X (z) -cX (z) .z ^ -1

và thay đổi thời gian mẫu coi z ^ -1 là độ trễ: y (n) - dy (n-1) = x (n) - cx (n-1)

sắp xếp lại: y (n) = dy (n-1) + x (n) - cx (n-1)

Bạn có thể thực hiện điều này một cách dễ dàng trong Arduino bằng cách nhận ra rằng y (n-1) là giá trị trước đó của y (n) và tương tự cho x (n) và x (n) là giá trị đầu vào cho bộ điều khiển; tức là tham chiếu trừ đi đầu ra từ ADC.


Bạn có phiền cho chúng tôi một số ví dụ mã để thực hiện các loại bài tập này không? Tôi sẽ thực sự biết ơn bạn. Trong trường hợp của tôi, a có chức năng chuyển + b2 trong đó mỗi giá trị là: a1 = a2 = (aT / aT + 2); b1: luôn là 1; và b2: aT-2 / aT + 2. T là thời gian mẫu. Như bạn thấy tôi đã tính toán mọi thứ nhưng tôi gặp khó khăn trong mã lập trình trong arduino mega, nếu bạn có thể giúp tôi, tôi sẽ rất biết ơn.
Mauricio López
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.