CƠ SỞ LÝ THUYẾT
Khái quát về mô hình con lắc ngược
Mô hình con lắc ngược là một hệ thống gồm một con lắc và một cánh tay đòn gắn trên xe điều khiển bằng động cơ điện, di chuyển trên mặt phẳng Khi con lắc được nâng lên vị trí cao, nó không thể giữ ổn định và luôn có xu hướng ngã xuống, trừ khi có lực cân bằng tác động để giữ nó ở trạng thái đứng yên Với khối lượng m, mô hình con lắc ngược sẽ điều khiển xe di chuyển tới và lui nhằm duy trì sự ổn định của con lắc ở vị trí cân bằng.
Hình 1 1 Khái quát mô hình con lắc ngược
Ký hiệu trong mô hình l: chiều dài cánh tay đòn (m)
M: khối lượng xe (kg) g: gia tốc trọng trường (m/s 2 )
F: lực tác động vào xe (N) m: khối lượng con lắc (kg) x: vị trí của xe (m)
11 θ: góc giữa con lắc ngược và phương thẳng đứng (rad)
Mô tả về chuyển động của con lắc ngược trong mô hình
Ta chọn phương ngang, hướng đi từ trái sang phải là chiều dương Góc tọa độ đặt tại điểm 0
Góc qua ta quy ước chiều quay cùng chiều kim đồng hồ là chiều dương, gốc tọa độ của góc là khi con lắc thẳng đứng
Xe của con lắc sẽ chuyển động tịnh tiến theo phương X trong mặt phẳng và con lắc sẽ chuyển động quay trong mặt phẳng XY.
Xây dựng mô hình động học của con lắc ngược
TH1: Quả nặng gắng trên thanh có khối lượng không đáng kể
Hình 1 2 Mô hình con lắc ngược có khối lượng không đáng kể
- Động năng của con lắc
=> Ta suy ra động năng tổng: 1 2 1 2 2 1 2
Ta có : sin cos cos sin m M m M m m x x l x x l y l y l
- Áp dụng toán tử Lagrange:
Từ (3) và (4) ta suy ra:
( ) os ml sin cos sin 0 ml sin os sin os
M m x ml c F ml x x ml mgl mx l
= − 2 os sin os 2 sin sin
( os ) c Fc mg Mg l M m mc
TH2: con lắc là thanh đồng chất
Hình 1 3 Mô hình con lắc ngược với con lắc đồng chất
Tiến hành tổng hợp lực con lắc theo phương ngang ta được phương trình cân bằng lực của xe con lắc: x x+N=F
Chúng ta không cần tổng hợp lực theo phương thẳng đứng vì lúc này trọng lực cân bằng với lực thẳng đứng
Phương trình cân bằng lực của con lắc theo phương ngang được biểu diễn như sau: \( x \cdot \cos(2) \cdot \sin(m) + ml \cdot c \cdot \theta - ml \cdot \theta = N \) (2), trong đó \( l \) là chiều dài từ tâm con lắc đến gốc.
(M +m x) +bx+ml c os −ml2sin =F(3)
Tổng hợp các lực vuông gốc với thanh con lắc:
Hình 1 4 Hệ lực trên con lắc ngược
15 sin os -mg sin xcos
Phương trình momen tại tâm con lắc ta có: sin os
Thay phương trình (3) và (4) vào ta được:
Từ (4) và (5) ta có thể suy ra hệ phương trình mô tả đặc tính động học của con lắc ngược:
Dùng matlab ta giải được hệ phương trình trên:
( )( x-ml sin cos ) sin cos
( cos cos sin cos ( ) sin )
Chúng ta chọn mô hình con lắc là thanh đồng chất để thực hiện mô phỏng và làm mô hình thực nghiệm, vì lúc này khối lượng của con lắc và thanh chỉ còn là một, giúp đơn giản hóa việc tính toán và mô phỏng Nếu sử dụng con lắc có khối lượng riêng không đáng kể, việc bỏ qua khối lượng của thanh đòn sẽ dẫn đến kết quả không chính xác với thực tế.
Lý thuyết điều khiển PID
1.3.1 Giới thiệu bộ điều khiển PID
Bộ điều khiển PID là thiết bị điều khiển vòng kín phổ biến trong ngành công nghiệp, giúp điều chỉnh sai lệch giữa giá trị mong muốn và giá trị thực tế Nó hoạt động bằng cách tính toán và điều chỉnh giá trị đầu ra để đảm bảo hệ thống hoạt động hiệu quả.
Hình 1 5 Sơ đồ hệ thống điều khiển sử dụng PID
A PID controller consists of three components: Proportional (P), which generates a control signal proportional to the error; Integral (I), which produces a control signal based on the time integral of the error; and Derivative (D), which creates a control signal proportional to the time derivative of the error.
Khâu P tạo ra tín hiệu điều khiển tỷ lệ với giá trị sai lệch bằng cách nhân sai lệch e(t) với hằng số Kp, được gọi là hằng số tỷ lệ.
Khâu P được tính dựa trên công thức: out p
Với: Pout : giá trị ngõ ra
Kp: hằng số tỉ lệ
Hình 1 6 Sơ đồ khối khâu P
- Kp càng lớn thì tốc độ đáp ứng càng nhanh
- Kp càng lớn thì sai số xác lập càng nhỏ (nhưng không thể triệt tiêu)
- Kp càng lớn thì các cực của hệ thống có xu hướng di chuyển ra xa trục thực => Hệ thống càng dao động và độ vọt lố càng cao
- Nếu Kp tăng quá giá trị giới hạn thì hệ thống sẽ dao động không tắt dần => mất ổn định
Khâu I cộng thêm tổng các sai số trước đó vào giá trị điều khiển Việc tính tổng các sai số được thực hiện liên tục cho đến khi giá trị đạt được bằng với giá trị đặt, và kết quả là khi hệ cân bằng thì sai số bằng 0
Khâu I được tính theo công thức: t out i
Với: I out : giá trị ngõ ra khâu
K i : hệ số tích phân e : sai số t: thời gian hoặc thời gian tức thời (hiện tại)
:một biến tích phân trung gian
Hình 1 7 Sơ đồ khối khâu I
- Tín hiệu ngõ ra được xác định bởi sai số
- Ki càng lớn thì đáp ứng quá độ càng chậm
- Ki càng lớn thì sai số xác lập càng nhỏ
- Đặc biệt hệ số khuếch đại của khâu tích phân bằng vô cùng khi tần số bằng 0 => triệt tiêu sai số xác lập với hàm nấc
- Ki càng lớn thì độ vọt lố càng cao
Khâu D kết hợp tốc độ thay đổi của sai số với giá trị điều khiển ở ngõ ra Khi sai số thay đổi nhanh, nó tạo ra thành phần bổ sung vào giá trị điều khiển, từ đó cải thiện phản ứng của hệ thống Điều này giúp hệ thống nhanh chóng thay đổi trạng thái và đạt được giá trị mong muốn.
Khâu D được tính theo công thức: out d
Với: D out : ngõ ra khâu
K d : hệ số vi phân e: sai số
Hình 1 8 Sơ đồ khối khâu D
- Kd càng lớn thì đáp ứng quá độ càng nhanh
- Kd càng lớn thì độ vọt lố càng nhỏ
- Hệ số khuếch đại tại tần số cao là vô cùng lớn nên khâu hiệu chỉnh D rất nhạy với nhiễu tần số cao
- Khâu vi phân không thể sử dụng một mình mà phải dùng kết hợp với các khâu P hoặc I
❖ Tổng hợp 3 khâu điều khiển
Bộ điều khiển PID là cấu trúc ghép song song giữa 3 khâu P, I và D PID Phương trình vi phân của bộ lý tưởng:
K p : Hệ số khâu tỉ lệ (khâu khuếch đại)
Hình 1 9 Sơ đồ khối PID
Tác động của việc tăng một thông số độc lập Đáp ứng của hệ thống Thời gian tăng Vọt lố Thời gian ổn định
Sai lệch so với trạng thái bền
Kp Giảm Tăng Ít thay đổi Giảm
Ki Giảm Tăng Tăng Triệt tiêu
Kd Ít thay đổi Giảm Giảm Ít thay đổi
Khâu P có khả năng tác động nhanh nhưng không thể triệt tiêu sai lệch, dẫn đến việc tăng độ vọt lố của hệ thống Trong khi đó, khâu I giúp loại bỏ sai lệch nhưng tác động chậm hơn Khâu D phản ứng theo tốc độ biến thiên của sai lệch Để đảm bảo hệ thống đạt độ ổn định và độ chính xác mong muốn, việc xác định đúng các thông số Kp, Ki, Kd là rất quan trọng.
Bảng 1 Tác động của việc thay đổi thông số độc lập trong hệ thống
THỰC HIỆN MÔ PHỎNG
Xây dựng mô hình mô phỏng trong Matlab / Simulink
Từ phương trình động học của xe con lắc (x) và của con lắc (θ) ta đã có ở Cơ sở lý thuyết
( )( x-ml sin cos ) sin cos
( cos cos sin cos ( ) sin )
Ta xây dựng được mô hình mô phỏng bằng phần mềm Simulink như sau:
Các thông số đầu vào
Ký hiệu Mô tả Giá trị Đơn vị
M Khối lượng xe con lắc
0,5 Kg m Khối lượng con lắc 0,2 Kg
Hình 2 1 Sơ đồ mô phỏng bằng Simulink
I Momen quán tính quay của thanh đồng chất
Bảng 2 Bảng thông số đầu vào của hệ thống
Hiệu chỉnh thông số Kp, Ki, Kd và kết quả mô phỏng
Bộ điều khiển PID có thể được điều chỉnh thành các dạng P, PI hoặc PD tùy thuộc vào mục đích và đối tượng điều khiển Việc điều chỉnh các hệ số Kp, Ki, Kd thường được thực hiện thông qua phương pháp thử sai.
Chọn hệ số Kp trước, thử nghiệm bộ điều khiển P với đối tượng thực tế hoặc mô phỏng, và điều chỉnh Kp để đảm bảo thời gian đáp ứng nhanh, trong khi vẫn chấp nhận một độ vọt lố nhỏ.
Thêm thành phần D để loại độ vọt lố, tăng Kd từ từ, thử nghiệm và chọn giá trị thích hợp Sai số có thể sẽ xuất hiện
Để giảm sai số, hãy thêm thành phần I và tăng Ki từ mức thấp đến cao Điều này không chỉ giúp giảm sai số mà còn ngăn chặn hiện tượng độ vọt lố xuất hiện trở lại.
Mong muốn của hệ thống là đạt thời gian xác lập trong 2 – 3 giây, và duy trì ổn định trong khoảng thời gian 7 giây
Ta bắt đầu thử nghiệm với 3 thông số Kp, Ki, Kd như sau:
Bảng 3 Bảng thử nghiệm thông số PID lần 1
Kết quả mô phỏng thử nghiệm với thông số Kp, Ki, Kd trong Bảng 3:
Trong lần mô phỏng đầu tiên (Bảng 3), khi chọn hệ số Kp, hệ thống thể hiện sự xuất hiện của độ vọt lố, chưa đạt được sự ổn định và không có hiện tượng tắt dần.
Bảng 4 Bảng thử nghiệm thông số PID lần 2
Kết quả mô phỏng thử nghiệm với thông số Kp, Ki, Kd trong Bảng 4:
Hình 2 3 Kết quả mô phỏng lần 2
Chúng ta giữ nguyên hệ số Kp và bắt đầu tăng dần hai hệ số Ki và Kd, dẫn đến sự xuất hiện của hiện tượng tắt dần trong dao động Tuy nhiên, sự dao động vẫn chưa mượt mà, với biên độ và tần số dao động còn quá lớn, khiến thời gian xác lập ổn định kéo dài Do đó, bộ điều khiển PID hiện tại chưa đáp ứng yêu cầu đề ra Mục tiêu của các lần điều chỉnh tiếp theo là giảm biên độ và tần số dao động, đồng thời tăng độ dốc.
Kết quả mô phỏng thử nghiệm với thông số Kp, Ki, Kd trong Bảng 5:
Hình 2 4 Kết quả mô phỏng lần 3
Bộ số PID mới đã khắc phục hiệu quả những khuyết điểm của phiên bản trước, đạt được kết quả mô phỏng mong muốn Quá trình dao động diễn ra mượt mà với ít độ gãy khúc trong khoảng thời gian 0,05 giây đầu tiên, biên độ dao động giảm dần và tần số hoạt động đã được điều chỉnh giảm Do độ vọt lố của hệ thống vẫn quá cao, tham số Kp và Ki được giữ nguyên, trong khi tham số Kd được điều chỉnh.
Bảng 5 Bảng thử nghiệm thông số PID lần 3
Kết quả mô phỏng thử nghiệm với thông số Kp, Ki, Kd trong Bảng 6:
Hình 2 5 Kết quả mô phỏng lần 4
Trong lần hiệu chính cuối cùng, hệ thống đạt được sự ổn định tối ưu nhất với thời gian xác lập ổn định chỉ trong 2 – 3 giây Quá trình dao động tắt dần diễn ra mượt mà, không xuất hiện độ gãy khúc, và độ vọt lố không vượt quá mức cho phép Dựa trên những yếu tố này, chúng tôi đã lựa chọn bộ số Kp phù hợp.
Ki và Kd này sử dụng trong hệ thống điều khiển
Bảng 6 Bảng thử nghiệm thông số PID lần 4
THỰC HIỆN LẮP RÁP MÔ HÌNH CON LẮC NGƯỢC
Cấu tạo
Trong mô hình con lắc ngược, nhóm sử dụng các linh kiện cơ khí và điện tử như sau:
3.1.1 Gối đỡ và thanh trượt
Dùng để cố định hành trình di chuyển của con lắc
Hình 3 1 Gối đỡ và thanh trượt
Gối đỡ thanh trượt tròn: o Đường kính lỗ trục: 8mm o Chiều cao: 32,5mm o Chiều ngang: 42,5mm o Chiều rộng: 14mm o Đường kính lỗ bắt ốc ở chân đế: 5mm o Cân nặng: 24g
Thanh trượt mạ crom: o Đường kính trục: 8mm o Vật liệu: Thép không gỉ o Mạ Crom sáng bóng
Gối đỡ vòng bi dạng đứng: o Chất liệu: Hợp Kim o Khối lượng: 40g o Trục Vòng Bi: 8mm
Hình 3 2 Puly GT2 60 răng đường kính 37.76mm trục 6mm
Thông số kỹ thuật của sản phẩm bao gồm: trục có đường kính 6mm, trọng lượng 41g, với 60 răng và bề rộng đai cũng là 6mm Đường kính ngoài của sản phẩm là 42mm, trong khi đường kính bánh răng là 37.76mm Bước ren đạt 2mm và chiều cao của sản phẩm là 16.2mm Chất liệu cấu tạo là nhôm, đảm bảo độ bền và nhẹ cho sản phẩm.
Hình 3 3 Vòng đai GT 2 852mm
Thông số kỹ thuật: o Bước răng: 2mm o Chiều rộng đai: 6mm o Chiều dài: 852mm o Vật liệu: cao su và sợi PU mành tăng cường
Dùng để điều khiển con lắc di chuyển để ổn định được ở vị trí cân bằng
Hình 3 4 DC servo giảm tốc JGB37
Điện áp định mức của động cơ là 12VDC với dòng tối đa 3A Tốc độ động cơ trước hộp số giảm tốc đạt 10.000RPM, và với tỉ số truyền 1:56, tốc độ sau hộp số giảm tốc trên trục chính là 178RPM Đường kính trục của động cơ là 6mm.
Dùng để đọc được góc hiện tại của con lắc đưa về bộ xử lí điều chỉnh vị trí cân bằng mới
Thông số kỹ thuật: o Dòng gửi mặc định: 400
3.1.5 Gá đỡ Encoder và gá đỡ DC servo
Là phần dùng để cố định Servo và Encoder trong quá trình chuyển động
Hình 3 6 Gá đỡ Encoder và DC servo
Do mô hình yêu cầu sử dụng nhiều kênh ngắt và cần tốc độ phản hồi nhanh, nhóm đã quyết định chọn Arduino Mega 2560 làm bộ điều khiển cho các linh kiện.
Bảng thông số kỹ thuật của bo mạch bao gồm vi điều khiển chính ATmega2560, IC nạp và giao tiếp UART ATmega16U2, và IC giao tiếp USB Host MAX3421E Bo mạch được cấp nguồn 5VDC từ cổng USB, với 54 chân Digital (trong đó có 15 chân PWM) và 16 chân Analog Nó hỗ trợ giao tiếp UART với 4 bộ UART, giao tiếp SPI với 1 bộ (chân 50 đến 53) sử dụng thư viện SPI của Arduino, và giao tiếp I2C với 1 bộ Ngoài ra, bo mạch còn có 6 chân ngắt ngoài.
32 o Bộ nhớ Flash: 256 KB, 8KB sử dụng cho Bootloader o SRAM: 8 KB o EEPROM: 4 KB o Xung clock: 16 MHz
Dùng để điều khiển động cơ DC
Thông số kỹ thuật của mạch điều khiển động cơ bao gồm IC chính là L298, điện áp đầu vào từ 5 đến 30VDC, và công suất tối đa đạt 25W cho mỗi cầu Dòng tối đa cho mỗi cầu H là 2A, với mức điện áp logic thấp từ -0.3V đến 1.5V và cao từ 2.3V đến Vss Kích thước của mạch là 43x43x27mm.
Thông số kỹ thuật của model S-120-12 bao gồm điện áp đầu vào 180VAC hoặc 240VAC và điện áp đầu ra từ 9VDC đến 14VDC Sản phẩm có công suất 120W với dòng điện đầu ra tối đa 10A, tần số đầu vào từ 50-60Hz và nhiệt độ hoạt động trong khoảng 0 ℃ đến 40 ℃ Kích thước của sản phẩm là 190 * 99 * 42.5 mm, với cổng vào bao gồm dây nguội (N) và dây nóng (L), cùng cổng tiếp chất chống dòng rò Cổng ra có 2 đầu dương (+) và 2 đầu âm (-), trọng lượng sản phẩm là 416g.
Bảng vẽ con lắc ngược
Bảng vẽ 3D tổng thể của con lắc ngược:
Hình 3 10 Bảng vẽ 3D của con lắc ngược
Bảng vẽ 3D tách các bộ phận:
Hình 3 11 Bảng vẽ 3D các bộ phận của hệ thống con lắc ngược
Sơ đồ mạch điện
Hình 3 12 Sơ đồ mạch điện
Code lập trình
#define Sampling_time 0.004 // thoi gian lay mau
The code snippet defines a sampling time of 250 milliseconds and initializes several short integer variables for encoder counts and states It also sets high and low bit values for a timer register, with a specified time interval of 4 milliseconds Additionally, the code outlines the variables for a PID control function, including set points and output values, essential for controlling processes efficiently.
In a control system, the output is calculated by first determining the error between the set point and the current point The proportional term (up) is derived by multiplying the error (err) by a proportional gain (Kp) The derivative term (ud) is computed using the difference between the current and previous errors, scaled by the derivative gain (Kd) and the inverse of the sampling time The integral term (ui) is updated by adding the product of the integral gain (Ki), the current error, and the sampling time to the previous integral value (ui_p) Finally, the error is stored for future calculations, and the output (uout) is computed as the sum of the proportional, integral, and derivative terms, rounded to an integer value.
38 if (uout > 255) uout = 255; if (uout < -255) uout = -255; if (uout < 0)
{ analogWrite(PWM, abs(uout)); digitalWrite(DIR1, LOW); digitalWrite(DIR2, HIGH);
{ analogWrite(PWM, abs(uout)); digitalWrite(DIR1, HIGH); digitalWrite(DIR2, LOW);
{ case 0: if (Previous_State_Encoder == 1)
Count_Value_Encoder ; break; case 1: if (Previous_State_Encoder == 3)
Count_Value_Encoder ; break; case 2: if (Previous_State_Encoder == 0)
Count_Value_Encoder ; break; case 3: if (Previous_State_Encoder == 2)
} if (Count_Value_Encoder >= (4 * resolution_encoder))
} else if (Count_Value_Encoder = (4 * resolution_encoder))
} else if (Count_Value_Encoder