Từ đó ta tính được hệ số giảm chấnHệ số giảm chấn cả hệ: Thay các đại lượng vừa tìm được vào phương trình động học Bdy t + Ky t+ m... Không có hiện tượng vọt lố nhưng thời gian đáp ứng
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Viện Cơ Khí
Báo cáo thiết kế hệ thống điều khiển
Giáo viên hướng dẫn: PGS.TS.Hoàng Vĩnh Sinh
sinh viên thực hiện: Đào Quang Trường
MSSV: 20187503
1
Trang 2I/Tìm hàm truyền theo các thông số có sẵn của cơ hệ
Z1=Z2=20
Tỉ số truyền cả cơ hệ = 1
Bánh răng Z1 được làm từ gang xám
Z2 được làm từ thép C45
Tính độ cứng của bánh răng 1:
Ta tính được hệ số độ cứng dựa trên biến dạng của bánh răng 1:
=142 Nm/ mm 0,014 mm
2
Trang 3Tính độ cứng của bánh răng 2:
Ta tính được hệ số độ cứng dựa trên biến dạng của bánh răng 2:
=222,2 Nm/ mm 0,045 mm
Tổng hợp lại ta tính được hệ số độ cứng của cả cơ hệ là
K1 = K11 + K12 = 0,012Nm/mm ¿ 12 Nm / μm
¿> K =83,3 Nm/ μm
Tra bảng hệ số phụ thuộc vật liệu là k xi=0,57
Dựa theo thông số của solidwork ta có:
Bánh răng 1 nặng 2,3 (kg)
Bánh răng 2 nặng 2,6 (kg)
Dựa theo thông số của solidwork,ta có khối lượng cả hệ = 4,9 (kg)
3
Trang 4Từ đó ta tính được hệ số giảm chấn
Hệ số giảm chấn cả hệ:
Thay các đại lượng vừa tìm được vào phương trình động học
Bdy (t )
+ Ky (t)+ m. d
2 y (t )
=M (t)
dt
d2 t
Từ phương trình động học ta thu được hàm truyền nhờ phương pháp Laplace
1
= ¿M(S)
Thay số ta có hàm truyền cả cơ hệ:
1
= ¿M(S)
II/Mô phỏng động cơ và cơ hệ:
2.1/mô phỏng hàm truyền của cơ hệ:
Ta dùng hàm Step để kiểm tra cơ hệ:
Trang 54
Trang 6Không có hiện tượng vọt lố nhưng thời gian đáp ứng lâu.
Khi chưa có bộ phản hồi sai số ta có đồ thị được hiển thị như hình:
Ta thu được đồ thị từ scope:
5
Trang 7Sử dụng tiêu chuẩn Bode để khảo sát tính ổn định ta có:
6
Trang 8GM>0 và ϕM<0
=>Hệ chưa ổn định
Để hệ ổn định ta thêm bộ phản hồi sai số PID controller:
7
Trang 92.2/Mô phỏng động cơ:
8
Trang 10Mô hình hệ truyềnn động của động cơ DC Theo lý thuyết ta có phương trình trạng thái:
Phương trình điện:
V(t)+L d i a ( t ) + R i (t)=K ϴ˙
Phương trình momen điện từ:
M(t)=K t i a ( t)
Phương trình cân bằng momen:
J d2 ω M + B m ϴ˙=M (t ) d2 t
Và V(t)= K e d
dt ω M
E a =K e ϴ˙
Với Ea là điệnáp ở lõiđộng cơ
R a làđiện trở ở lõi động cơ R a=11,4Ω
9
Trang 11L a làđộ tự cảm ở lõi động cơ , L a =0,1214 H
i a là dòng điện ở lõi động cơ
M (t ) làmomen tải
B m làhệ số cảnnhớt B m =0,002953 Nm/ rad
K t là hằng số tỉ lệ momentải K t =1,28 Nm / A
K e là hằng số tỉ lệ điệnáp K e =0,0045 Vs /rad
J m làmomenquán tính J m =0,02215 Kg m2
Sử dụng matlab ta mô phỏng được động cơ dưới dạng sơ đồ khối như sau:
Đơn giản hoá khối ta có:
Kết nối động cơ với hệ đã có ta được khối:
10
Trang 12Và đơn giản hoá khối đó ta lại thu được:
Ta thu được đồ thị vân tốc đầu ra
III/Xử lý thông số đầu ra và kiểm nghiệm lại hàm truyền của hệ thống:
11
Trang 1316.97 20
Từ bảng dữ liệu đã thiết lập sẵn em sử dụng system identfication để vẽ biểu đồ
12
Trang 14Em sử dụng chức năng tìm hàm truyền ổn định cho biểu đồ trên và thu được
biểu đồ dưới đây:
13
Trang 15Từ system identification ta thu được hàm truyền cuối cùng, sử dụng hàm step
và bode để kiểm tra lại cơ hệ:
14
Trang 17Dựa vào khảo sát ta có
GM>0 và ϕM>0
=>hệ đã ổn định
IV/Sử dụng ardruino để điều khiển động cơ
Mô phỏng và điều khiển bằng ardruino
16
Trang 18Bằng cách đặt giá trị vận tốc cần đạt trên matlab-simulink ta có thể điều
khiển được chính xác vận tốc thực tế của động cơ thông qua arduino
Ta sử dụng mạch cầu H để kết nối arduino với động cơ và nguồn điện
12V.Bằng cách sử dụng một biến trở ta có thể điều khiển vị trí của động cơ.Sử
dụng thêm encoder để có thể đo chính xác vị trí phản hồi về của động cơ
Lập trình arduino:
#include <PinChangeInt.h>
#include <PID_v1.h>
double kp = 5 , ki = 1 , kd = 0.01;
double input = 0, output = 0, setpoint = 0;
long temp;
volatile long encoderPos = 0;
17
Trang 19PID myPID(&input, &output, &setpoint, kp, ki, kd, DIRECT);
void setup() {
pinMode(encodPinA1, INPUT_PULLUP);
pinMode(encodPinB1, INPUT_PULLUP);
attachInterrupt(0, encoder, FALLING);
TCCR1B = TCCR1B & 0b11111000 | 1;
myPID.SetMode(AUTOMATIC);
myPID.SetSampleTime(1);
myPID.SetOutputLimits(-255, 255);
Serial.begin (115200);
}
void loop() {
setpoint = analogRead(0) / 5;
input = encoderPos ;
/ Serial.println(encoderPos);
myPID.Compute();
pwmOut(output);
}
void pwmOut(int out) {
if (out > 0) {
analogWrite(M1, out);
analogWrite(M2, 0);
18
Trang 20else {
analogWrite(M1, 0);
analogWrite(M2, abs(out));
}
}
void encoder() {
if (PINB & 0b00000001) encoderPos++;
}
19