1. Trang chủ
  2. » Thể loại khác

Điều khiển vị trí động cơ DC servo

12 2,2K 6

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 473,56 KB
File đính kèm code.zip (650 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Điều Khiển Vị Trí Động Cơ DC Servo GVHD: TS.. Giới thiệu Động cơ servo được thiết kế cho những hệ thống hồi tiếp vòng kín..  Đặc tính vận hành của một động cơ servo phụ thuộc rất nhiều

Trang 1

Điều Khiển Vị Trí Động Cơ DC Servo

GVHD: TS Võ Tường Quân

Trang 2

Giới thiệu

1

Mạch nguyên lý

2

Thuật toán PID

3

Thuật toán điều khiển

4

Nội Dung

Trang 3

1 Giới thiệu

 Động cơ servo được thiết kế cho những hệ thống hồi tiếp vòng kín

 Đặc tính vận hành của một động cơ servo phụ thuộc rất nhiều vào đặc tính từ và phương pháp điều khiển động cơ servo

 Tín hiệu ra của động cơ được nối với một mạch điều khiển

 Khi động cơ quay, vận tốc và vị trí sẽ được hồi tiếp về mạch điều khiển này

 Nếu có bất kỳ lý do nào ngăn cản chuyển động quay của động cơ, cơ cấu hồi tiếp sẽ nhận thấy tín hiệu ra chưa đạt được vị trí mong muốn

 Mạch điều khiển tiếp tục chỉnh sai lệch cho động cơ đạt được điểm chính xác

Trang 4

2 Mạch nguyên lý

Trang 5

3 Thuật toán PID

 Bộ điều khiển PID là bộ điều khiển sử dụng kỹ thuât điều khiển theo vòng lặp có hồi tiếp được sử dụng rộng rãi trong các hệ thống điều khiển tự động

 Một bộ điều khiển PID hiệu chỉnh sai lệch giữa tín hiệu ngõ ra và ngõ vào sau đó đưa ra mt một tín hiệu điều khiển để điều chỉnh quá trình cho phù hợp

Trang 6

3 Thuật toán PID

Chọn các thông số động của động cơ để điều khiển:

 Trở kháng R = 2.75Ω

 Cảm kháng L = 0.035H

 Hệ số sức điện động cảm ứng Kb=1,2 (Vol/rad/s)

 Hệ sô momen Kt=0,04689 (Nm/Amp)

 Monen quán tính của roto J = 0,022 (Kgm2/rad)

 Hệ số ma sát b = 0,0005(Nm/rad/s)

Trang 7

3 Thuật toán PID

Hàm truyền:

Ta tìm được các hệ số:

KP = 0.3 KI = 0.06 KD = 0.3

 

Trang 8

4 Thuật toán điều khiển

Dùng ngắt ngoài đếm xung encoder:

Nối kênh A của encoder với 1 ngắt ngoài và kênh B với một chân bất kỳ Cứ mỗi lần ngắt ngoài xảy ra, tức có 1 xung xuất hiện trên ở kênh A thì trình phục vụ ngắt ngoài tự động được gọi Trong trình phục vụ ngắt này, sẽ kiểm tra mức của kênh B, tùy theo mức của kênh B chúng ta sẽ tăng biến đếm xung lên 1 hoặc giảm đi 1

#int_EXT

void ngat_ngoai()

{ if(!input(PIN_B1)) //Khi co tin hieu thi xung tang len 1

Pulse++;

else Pulse ;

}

Trang 9

4 Thuật toán điều khiển

Code giải thuật PID:

void Motor_Position_PID(int16 des_Pulse)

{ Err= des_Pulse - Pulse; //Tinh sai so

pPart=Kp*Err;

dPart=Kd*(Err-pre_Err)*inv_Sampling_time;

iPart+=Ki*Sampling_time*(Err+pre_Err)/1000;

Output=pPart+dPart+iPart;

if (Output>=500) Output = 500; //(0<= Output <=500)

if (Output<=0) Output = 0;

set_pwm1_duty(Output);

pre_Err=Err; //Luu lai gia tri Err

}

Trang 10

#include <16F877a.h>

#device ADC=10

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT 

#use delay(clock=20000000)

#use RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7)

#byte PR2=0x92

#bit RC2=0x07.2

#define LCD_ENABLE_PIN  PIN_D3

#define LCD_RS_PIN PIN_D1  

#define LCD_RW_PIN PIN_D2 

#define LCD_DATA4 PIN_D4 

#define LCD_DATA5 PIN_D5 

#define LCD_DATA6 PIN_D6 

#define LCD_DATA7 PIN_D7 

#define Sampling_time 10 //ms

#define inv_Sampling_time 100

#include <lcd.c>

unsigned int16 Pulse=0, des_Pulse=50;

signed long Err=0, pre_Err=0;

float Kp=0.3, Ki=0.06, Kd=0.3, pPart=0, dPart=0, iPart=0;

signed int16 Output;

void Motor_Position_PID(int16 des_Pulse);

Trang 11

#include <16F877a.h>

#device ADC=10

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT 

#use delay(clock=20000000)

#use RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7)

#byte PR2=0x92

#bit RC2=0x07.2

#define LCD_ENABLE_PIN  PIN_D3

#define LCD_RS_PIN PIN_D1  

#define LCD_RW_PIN PIN_D2 

#define LCD_DATA4 PIN_D4 

#define LCD_DATA5 PIN_D5 

#define LCD_DATA6 PIN_D6 

#define LCD_DATA7 PIN_D7 

#define Sampling_time 10 //ms

#define inv_Sampling_time 100

#include <lcd.c>

unsigned int16 Pulse=0, des_Pulse=50;

signed long Err=0, pre_Err=0;

float Kp=0.3, Ki=0.06, Kd=0.3, pPart=0, dPart=0, iPart=0;

signed int16 Output;

void Motor_Position_PID(int16 des_Pulse);

Trang 12

Thank you

Ngày đăng: 07/01/2016, 16:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w