90798176-PWM

20
ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ---------- Phương pháp điều xung PWM điều khiển động cơ một chiều DC Nhóm 21 Sinh viên: TRẦN XUÂN TRƯỜNG 20092932

description

njnjk

Transcript of 90798176-PWM

Page 1: 90798176-PWM

ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

----------

Phương pháp điều xung PWM điều khiển động cơ

một chiều DC

Nhóm 21

Sinh viên: TRẦN XUÂN TRƯỜNG 20092932

Page 2: 90798176-PWM

MỤC LỤC

V. Điều xung (PWM) để điều khiển động cơ

1.Phương pháp điều xung PWM là gì?........................1

2.Nguyên lý của xung PWM …………………………..

3.Các cách tạo xung PWM để điều khiển……………

4.PWM trong điều khiển động cơ……………………

Page 3: 90798176-PWM

1.Phương pháp điều xung PWM là gì?

-Phương pháp điều chế PWM có tên tiếng anh là Pulse Width Modulation là phương pháp điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi xung vuông dẫm đếm sự thay đổi điện áp ra.

Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng của sườn dương hay hoặc là sườn âm

Trên là đồ thị dạng xung khi điều khiển bằng PWM. Với độ rộng xung đầu ra tương ứng và được tính bằng %. Tùy thích do chúng ta điều khiển.

2.Nguyên lý của xung PWM

Đây là phương pháp được thực hiện theo nguyên tắc đóng ngắt nguồn cới tải và một cách có chu kì theo luật điều chỉnh thời gian

Page 4: 90798176-PWM

đóng cắt. Phần tử thực hiện nhiện vụ đó trong mạch các van bán dẫn.

Xét hoạt động đóng cắt của một van bán dẫn. DÙng van đóng cắt bằng Mosfet

Giản đồ xung

Trên là mạch nguyên lý điều khiển tải bằng PWM và giản đồ xung của chân điều khiển và dạng điện áp đầu ra khi dùng PWM.

Page 5: 90798176-PWM

* Nguyên lý : Trong khoảng thời gian 0 - to ta cho van G mỏ toàn bộ điện áp nguồn Ud được đưa ra tải. Còn trong khoảng thời gian to - T cho van G khóa, cắt nguồn cung cấp cho tải. Vì vậy với to thay đổi từ 0 cho đến T ta sẽ cung cấp toàn bộ , một phần hay khóa hoàn toàn điện áp cung cấp cho tải.

+ Công thức tính giá trị trung bình của điện áp ra tải :

Gọi t1 là thời gian xung ở sườn dương (khóa mở ) còn T là thời gian của cả sườn âm và dương, Umax là điện áp nguồn cung cấp cho tải.

==> Ud = Umax.( t1/T) (V)

hay Ud = Umax.D

với D = t1/T là hệ số điều chỉnh và được tính bằng % tức là PWM

Như vậy ta nhìn trên hình đồ thị dạng điều chế xung thì ta có : Điện áp trùng bình trên tải sẽ là :

+ Ud = 12.20% = 2.4V ( với D = 20%)

+ Ud = 12.40% = 4.8V (Vói D = 40%)

+ Ud = 12.90% = 10.8V (Với D = 90%)

3.Các cách tạo xung PWM để điều khiển

Để tạo được ra PWM thì hiện nay có hai cách thông dụng : Bằng phần cứng và bằng phần mềm. Trong phần cứng có thể tạo bằng phương pháp so sánh hay là từ trực tiếp từ các IC dao động tạo xung vuông như : 555, LM556...Trong phần mền được tạo bằng các chip có thể lập trình được. Tạo bằng phần mền thì độ chính xác cao

Page 6: 90798176-PWM

hơn là tạo bằng phần cứng,nên người ta hay sử dụng phần mền để tạo PWM.Trong phạm vi yêu cầu của đề tài nhóm chúng em đã chọn cách hai,cụ thể là lập trình cho PIC 16F877A.

a) Tạo bằng phương pháp so sánh

Để tạo được bằng phương pháp so sánh thì cần 2 điều kiện sau đây :

+ Tín hiệu răng cưa : Xác định tần số của PWM

+ Tín hiệu tựa là tín hiệu xác định mức công suất điều chế (Tín hiệu DC)

Xét sơ đồ mạch sau :

Với tần số xác định được là f = 1/(ln.C1.(R1+2R2) nên chỉ cần điều chỉnh R2 là có thể thay đổi độ rộng xung dễ dàng. Ngoài 555 ra còn rất nhiều các IC tạo xung vuông khác.

c) Tạo xung vuông bằng phần mềm

Page 7: 90798176-PWM

Đây là cách tối ưu trong các cách để tạo được xung vuông. Với tạo bằng phần mền cho độ chính xác cao về tần số và PWM. Với lại mạch của chúng ta đơn giản đi rất nhiều. Xung này được tạo dựa trên xung nhịp của CPU.

Cụ thể xét với PIC 16F877A:

3.1.2 Điều khiển tốc độ động cơ DC bằng phương pháp PWM

Đối với điều khiển tốc độ động cơ DC trong robot, phương pháp được sử dụng phổ biến nhất là điều chế độ rộng xung (Pulse Width Modulation) hay được gọi tắt là điều xung, băm xung hoặc PWM.

Nguyên lý của phương pháp này là bật tắt nhanh nguồn điện cấp vào động cơ tạo ra một tín hiệu xung. Khi việc bật tắt ở tần số đủ lớn (thường sử dụng từ 1kHz đến 20kHz), động cơ sẽ chạy với 1 tốc độ ổn định nhờ moment quay.

Thời gian cấp nguồn cho động cơ là T-on, thời gian tắt nguồn động cơ là T-off. Việc thay đổi thời gian T-on và T-off làm thay đổi điện áp hiệu dụng cấp cho động cơ. Đối với động cơ DC, tốc độ động cơ tương đối tỉ lệ thuận với điện áp cấp cho động cơ. Vì vậy, bằng cách thay đổi độ rộng của xung, ta đã thay đổi được tốc độ của động cơ DC.

Đại lượng biểu diễn mối quan hệ giữa T-on và T-off được gọi là duty cycle:

duty_cycle = Ton / ( Ton + Toff )

Ví dụ: Ta cấp nguồn động cơ trong 0.8ms, sau đó tắt 0.2ms.

Như vậy: T-on = 0.8ms; T-off = 1ms. Tần số PWM là:

f = 1 / ( Ton + Toff ) = 1 / ( 0.8ms + 0.2ms ) = 1/1ms = 1KHz

Page 8: 90798176-PWM

duty_cycle = Ton / ( Ton + Toff ) = 0.8 / ( 0.8 + 0.2 ) = 0.8 = 80%

Vì tốc độ động cơ DC tỉ lệ với duty cycle nên tốc độ động cơ đạt tương đương 80% tốc độ tối đa.

Tính toán duty cycle để điều khiển tốc độ động cơ DC

3.1.3 Điều xung PWM dùng vi điều khiển

• Điều xung PWM bằng phần mềm:

Điều xung PWM một cách đơn giản là đưa 1 chân nào đó của vi điều khiển lên mức 1, sau đó đưa xuống mức 0. Công việc này được lặp đi lặp lại liên tục sẽ tạo ra xung, và tốc độ của động cơ sẽ tương ứng với duty cycle.

Ví dụ: Điều xung trên chân A0 :

Code

RA0=1;

Delay_ms(Ton);

RA0=0;

Delay_ms(Toff);

Page 9: 90798176-PWM

Tuy nhiên, nếu thực hiện bằng cách này thì vi điều khiển sẽ luôn dành thời gian cho việc điều xung PWM. Do đó, các công việc khác như nhận tín hiệu từ cảm biến, điều khiển các cơ cấu sẽ bị ảnh hưởng.

• Điều xung PWM bằng phần cứng

Để giải quyết vấn đề việc điều xung PWM bằng phần mềm chiếm phần lớn thời gian hoạt động của vi điều khiển, PIC16F877A có hỗ trợ 2 kênh điều xung bằng phần cứng ở 2 chân C1 (CCP2) và C2(CCP1) sử dụng TIMER2. Nghĩa là, khi ta khai báo điều xung PWM ở một tần số và duty cycle nào đó thì vi điều khiển sẽ thực hiện công việc xuất xung một cách liên tục và tự động cho đến khi ta thay đổi các giá trị đã khai báo. Khi đó, ta có thể làm các công việc khác một cách dễ dàng mà không phải mất thời gian cho việc duy trì xung PWM.

Các hàm hỗ trợ việc điều xung bằng phần cứng của CCS:

Ghi chú: Chỉ đề cập đến các đối số của các hàm được phục vụ cho việc điều xung PWM.

o setup_timer_2 (mode, period, postscale)

mode: T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16

period: 0-255

postscale: 1

Tần số điều xung PWM:

Page 10: 90798176-PWM

f = fosc / [ 4*mode*(period+1) ]

o setup_ccp1(mode) và setup_ccp2(mode)

mode:

CCP_PWM: chọn chế độ PWM.

CCP_OFF: tắt chế độ PWM.

o set_pwm1_duty(value) và set_pwm2_duty(value)

Nếu value là giá trị kiểu int 8bit:

duty_cycle = value / ( period+1 )

Nếu value là giá trị long int 16bit:

duty_cycle = value&1023 / [4*( period+1 )]

Nếu không cần điều xung quá “mịn” thì nên điều xung ở giá trị value 8bit cho đơn giản.

Ví dụ: Ta muốn điều xung PWM với tần số 10kHz với tần số thạch anh (fosc) sử dụng là 20MHz (value 8bit).

f=fosc/[4*mode*(period+1)] <=> 10000 =20000000/[ 4*mode*(period+1) ] <=> mode(period+1) = 500

Với mode = [1,4,16] và period = 0-255 ta có thể chọn:

o mode = 4; period = 124

o mode = 16; period = 32

Để cho việc điều xung được “mịn” (chọn được nhiều giá trị duty cycle) ta chọn mode = 4 và period = 124.

Page 11: 90798176-PWM

Như vậy, để duty_cycle từ 0% đến 100% ta cho value từ 0 đến 125.

o value = 30 => duty_cycle = 30 / ( 124+1 ) = 0.32 = 32%

o value = 63 => duty_cycle = 63 / ( 124+1 ) = 0.504 = 50.4%

o value = 113 => duty_cycle = 113 / ( 124+1 ) = 0.904 = 90.4%

Code:

setup_timer_2(T2_DIV_BY_4,124,1);

setup_ccp1(CCP_PWM);

set_pwm1_duty(30);

Sử dụng CCP1 và CCP2 cho động cơ trái và động cơ phải, ta có thể điều khiển được tốc độ của 2 động cơ phù hợp trạng thái lệch khỏi vạch trắng của robot.

• Các chương trình con tham khảo:

Để việc lập trình được dễ dàng, ta nên tạo các chương trình con xử lý tốc độ. Sau đây là chương trình tham khảo của hàm speed.

o Speed (tốc độ động cơ trái, tốc độ động cơ phải)

Tốc độ: -100 đến 100 (chạy ngược 100% đến chạy thuận 100%)

Ví dụ: speed(80,60) => động cơ trái chạy 80%, phải 60%

// Các hàm hỗ trợ

Page 12: 90798176-PWM

void left_motor_forward(int value)

{

MOTOR_LEFT_DIR=0;

setup_timer_2(T2_DIV_BY_4,124,1); // Dieu xung 10kHz

setup_ccp2(CCP_PWM);

set_pwm2_duty(value);

}

void right_motor_forward(int value)

{

MOTOR_RIGHT_DIR=0;

setup_timer_2(T2_DIV_BY_4,124,1); // Dieu xung 10kHz

setup_ccp1(CCP_PWM);

set_pwm1_duty(value);

}

void left_motor_reverse(int value)

{

MOTOR_LEFT_DIR=1;

setup_timer_2(T2_DIV_BY_4,124,1); // Dieu xung 10kHz

setup_ccp2(CCP_PWM);

set_pwm2_duty(value);

}

Page 13: 90798176-PWM

void right_motor_reverse(int value)

{

MOTOR_RIGHT_DIR=1;

setup_timer_2(T2_DIV_BY_4,124,1); // Dieu xung 10kHz

setup_ccp1(CCP_PWM);

set_pwm1_duty(value);

}

void left_motor_stop()

{

setup_ccp1(CCP_OFF);

}

void right_motor_stop()

{

setup_ccp1(CCP_OFF);

}

// Chương trình xử lý tốc độ 2 động cơ

// 0:Stop,100:FORWARD 100%,-100:Reverse 100%

void speed (signed int left_motor_speed, signed int right_motor_speed)

{

int left_pwm_value=0,right_pwm_value=0;

Page 14: 90798176-PWM

/* Left motor */

if( left_motor_speed >= 0 )

{

left_pwm_value = 1.25*left_motor_speed; // (125*left_motor_speed/100)

left_motor_forward(left_pwm_value);

}

else

{

left_motor_speed = -left_motor_speed;

left_pwm_value = 1.25*left_motor_speed; // (125*left_motor_speed/100)

left_motor_reverse(left_pwm_value);

}

/* Right motor */

if( right_motor_speed >= 0 )

{

right_pwm_value = 1.25*right_motor_speed; // (125*left_motor_speed/100)

right_motor_forward(right_pwm_value);

}

else

Page 15: 90798176-PWM

{

right_motor_speed = -right_motor_speed;

right_pwm_value = 1.25*right_motor_speed; // (125*left_motor_speed/100)

right_motor_reverse(right_pwm_value);

}

}

4.PWM trong điều khiển động cơ

Trong động cơ : Điều mà chúng ta dễ nhận thấy rằng là PWM rất hay được sử dụng trong động cơ để điều khiển động cơ như là nhanh , chậm, thuận ,nghịch và ổn định tốc độ cho nó. Cái này được ứng dụng nhiều trong điều khiển động cơ 1 chiều. và sơ đồ nguyên lý của mạch điều khiển động cơ DC là :

Page 16: 90798176-PWM

Đây là mạch đơn giản điều khiển động cơ. Nếu muốn điều khiển động cơ quay thuận quay ngược thì phải dùng đến cầu H.