Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 19

TRƯỜ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
I/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:
2 Nm
K 1= =142 Nm/mm
0,014 mm

2
Tí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:
1 0 Nm
K 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à


1 1 1
= +
K K1 K 2
= 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
Từ đó ta tính được hệ số giảm chấn
Hệ số giảm chấn cả hệ:
B=2.k xi.√ mK = 23
Thay các đại lượng vừa tìm được vào phương trình động học
2
Bdy (t ) d y (t )
+ Ky ( t ) + m. 2 =M (t)
dt d 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)
B . S + K +m . S2

Thay số ta có hàm truyền cả cơ hệ:


1
=¿M(S)
23 . S+83,3+ 4,9. S 2

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ệ:

4
Khô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
Sử dụng tiêu chuẩn Bode để khảo sát tính ổn định ta có:

6
GM>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
2.2/Mô phỏng động cơ:

8
Mô 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:
d i a (t)
V(t)+ L . + R a i a ( t ) =K e ϴ̇
dt

Phương trình momen điện từ:


M(t)= K t i a ( t )
Phương trình cân bằng momen:
2
d ωM
J 2
+ B m ϴ̇=M ( t )
d t
d ωM
Và V(t)= K e .
dt
Ea =K e ϴ̇

Với Ea là điệnáp ở lõi động cơ


Ra là điện trở ở lõi động cơ . Ra=11,4 Ω

9
La làđộ tự cảm ở lõi động cơ , La =0,1214 H

i a là dòng điện ở lõi động cơ

M (t ) làmomen tải
Bm là hệ số cản nhớt . B m=0,002953 Nm/rad

K t là hằng số tỉ lệ momen tải . K t =1,28 Nm / A

K e là hằng số tỉ lệ điện áp . K e =0,0045 Vs /rad


2
J m làmomen quán tính . J m=0,02215 Kg m

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
Và đơ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:
Vận Thời
tốc gian
0 0
3.35 2
6.43 4
8.86 6
10.78 8
12.35 10
13.63 12
14.69 14
15.58 16
16.33 18

11
16.97 20
17.51 22
17.97 24
18.35 26
18.68 28
18.96 30
19.19 32
19.38 34
19.54 36
19.67 38
19.78 40
19.87 42
19.94 44
20 46
20 48
20 50
20 52
20 54
20 56
20 58

Từ bảng dữ liệu đã thiết lập sẵn em sử dụng system identfication để vẽ biểu đồ

12
Em 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
Từ 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
15
Dự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
Bằ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>
#define encodPinA1 2
#define encodPinB1 8
#define M1 9
#define M2 10

double kp = 5 , ki = 1 , kd = 0.01;
double input = 0, output = 0, setpoint = 0;
long temp;
volatile long encoderPos = 0;

17
PID 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
}
else {
analogWrite(M1, 0);
analogWrite(M2, abs(out));
}
}

void encoder() {
if (PINB & 0b00000001) encoderPos++;
else encoderPos--;
}

19

You might also like