Tải bản đầy đủ (.pdf) (21 trang)

Thiết kế mạch điểu khiển động cơ một chiều

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.01 MB, 21 trang )


TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN – ĐIỆN TỬ
  








BÀI TẬP LỚN
VI XỬ LÝ

Thiết kế mạch điều khiển tốc độ của động cơ một
chiều, bao gồm các chức năng điều khiển quay
thuận, nghịch, tăng tốc độ , giảm tốc độ, dừng.

Giáo viên hướng dẫn : Nhóm sinh viên:
TS. Trần Văn Hưng

: Ngyên Quý Tuấn Anh

: Cao Văn Đức
: Triệu Trung Hiếu
Lớp: Kỹ thuật viễn thông_K52







HÀ NỘI – 2013
MỤC LỤC
LỜI NÓI ĐẦU 1
I. Thiết kế sơ đồ nguyên lý 2
1. Yêu cầu 2
1.1. Nhiệm vụ 2
1.2. Linh kiện 2
2. Sơ đồ nguyên lý 6
II. Thiết kế mạch 7
1. Yêu cầu và nhiệm vụ 7
1.1. Yêu cầu 7
1.2. Nhiệm vụ 7
2. Sơ đồ khối toàn chương trình 13
3. Code 14
III. Kết quả 17
1. Mô phỏng 17
2. Mạch thật 18

BTL-VXL
Điều khiển động cơ một chiều.
1

LỜI NÓI ĐẦU

Động cơ 1 chiều có nhiều ứng dụng trong điều khiển và sản xuất nhất là
trong công nghiệp. Trong đó nó đòi hỏi là động cơ phải có nhiều cấp tốc độ có thể
tăng giảm dễ dàng.
Với sự ra đời và phát triển của vi xử lý thì vấn đề điều khiển động cơ 1 chiều

không còn là vấn đề khó khăn nữa. Động cơ có thể điều khiển với nhiều cấp tốc độ
khác nhau và điều khiển dừng, đảo chiểu, nhanh chậm dễ dàng được.
Vi xử lý 8501 là loại dòng vi xử lý khá là thông dụng đã có mặt từ rất lâu và
được ứng dụng vào nhiều các thiết bị điều khiển hay tự động hóa. Nên việc điều
khiển động cơ 1 chiều với dòng vi xử lý này là một phương pháp tối ưu và kinh tế
đối với bài toán điều khiển động cơ DC ngày nay.
Trên cơ sở những kiến thức đã học từ môn vi xử lý. Chúng em đã thực hiện
bài tập: Điều khiển động cơ một chiều (DC).
Chúng em cám ơn thầy Trần Văn Hưng đã hướng dẫn chúng em làm bài tập
này!













BTL-VXL
Điều khiển động cơ một chiều.
2

I. Thiết kế sơ đồ nguyên lý
1. Yêu cầu
1.1. Nhiệm vụ

Động cơ điện một chiều là động cơ điện hoạt động với dòng điện một
chiều, động cơ sẽ quay khi có dòng điện một chiều đi qua. Động cơ điện một
chiều trong dân dụng thường là các dạng động cơ hoạt động với điện áp thấp,
dùng với những tải nhỏ. Trong công nghiệp, động cơ điện một chiều được sử
dụng ở những nơi yêu cầu moment mở máy lớn hoặc yêu cầu thay đổi tốc
độ trong phạm vi rộng. Động cơ DC sử dụng trong dân dụng thường chỉ
hoạt động ở điện áp +24 VDC trở lại, ở đây ta sử dụng động cơ +12VDC có
đảo chiều quay. Vậy nhiệm vụ của chúng ta là phải thiết kế mạch điều khiển
thuận nghịch và điều khiển tốc độ động cơ.
1.2. Linh kiện
1.2.1. Chip AT89C52

BTL-VXL
Điều khiển động cơ một chiều.
3

1.2.2. Motor DC
Stator của động cơ điện một chiều thường là một hay nhiều cặp nam
châm vĩnh cửu, hay nam châm điện, rotor có các cuộn dây quấn và được nối
với nguồn điện một chiều, một phần quan trọng khác của động cơ điện một
chiều là bộ phận chỉnh lưu, nó có nhiệm vụ là đổi chiều dòng điện trong khi
chuyển động quay của rotor là liên tục. Thông thường bộ phận này gồm có
một bộ cổ góp và một bộ chổi than tiếp xúc với cổ góp.
1.2.3. Transistor
BTL-VXL
Điều khiển động cơ một chiều.
4

Các transistor được dùng để tạo “cầu H” đảo chiều động cơ.
Với các động cơ một chiều có thể đảo chiều quay, khi ta cấp dòng

theo chiều ngược lại với chiều đang được cấp dòng thì động cơ sẽ đổi chiều
quay. Tuy nhiên chú ý phải dừng động cơ, đợi trễ rồi mới đảo chiều quay
nếu không sẽ bị giật (rung lắc mạnh) ảnh hưởng tới mạch. Khi tác động
điều khiển chiều quay động cơ thuận hay nghịch, ta mở chéo dẫn thông
các cặp khoá (K1 và K4) hoặc (K2 và K3).
Chú ý:
Tác động nhầm khoá sẽ dẫn thông dòng thẳng từ nguồn xống GND
gây chập mạch.
Ta nên để thời gian trễ khi tác động các cặp khoá cỡ vài chục ms, ví
dụ để tác động động cơ quay thuận ta thực hiện 3 thao tác: mở K1, trễ, mở
K4.
1.2.4. Diot
Diode trong mạch cầu H mắc song song với cực CE để tránh hiện
tượng phóng điện làm hỏng khóa Q.
1.2.5. IC ổn áp
BTL-VXL
Điều khiển động cơ một chiều.
5

Với những mạch điện không đòi hỏi độ ổn định của điện áp quá cao,
sử dụng IC ổn áp thường được người thiết kế sử dụng vì mạch điện khá đơn
giản. Các loại ổn áp thường được sử dụng là IC 78xx, với xx là điện áp cần
ổn áp. Ví dụ 7805 ổn áp 5V, 7812 ổn áp 12V. Việc dùng các loại IC ổn áp
78xx tương tự nhau, dưới đây là minh họa cho IC ổn áp 7812 và 7805.
IC 7812

IC 7805
Sơ đồ phía dưới IC 78xx có 3 chân: chân số 1 là chân IN, chân số 2 là
chân GND và chân số 3 là chân OUT. Ngõ ra OUT luôn ổn định ở 5V/12V
dù điện áp từ nguồn cung cấp thay đổi. Mạch này dùng để bảo vệ những

mạch điện chỉ hoạt động ở điện áp 5V hoặc 12V. Nếu nguồn điện có sự cố
đột ngột: điện áp tăng cao thì mạch điện vẫn hoạt động ổn định nhờ có IC
7805/7812 vẫn giữ được điện áp ở ngõ ra OUT 5V/12V không đổi. Chú ý:
điện áp đặt trước IC78xx phải lớn hơn điện áp cần ổn áp từ 1.5V đến 2V.
1.2.6. Thạch anh
BTL-VXL
Điều khiển động cơ một chiều.
6

Thạch anh định tần cho xung nhịp.

1.2.7. Tụ điện
Tụ điện 33pF dùng trong mạch cùng với thạch anh tạo xung dao động
cho chip.
Tụ điện 10uF dùng trong mạch nguồn 5VDC cản trở dòng xoay chiều.
Tương tự tụ 1000uF dùng trong mạch nguồn 12VDC điều khiển động
cơ.
1.2.8. Điện trở

Trong mạch ta sử dụng điện trở 220 Ohm cho dèn báo hiệu bật công
tắc, điện trở 1K và 5.1K dùng trong mạch điều khiển Motor, điện trở10K cho
chân reset.
2. Sơ đồ nguyên lý
BTL-VXL
Điều khiển động cơ một chiều.
7


II. Thiết kế mạch
1. Yêu cầu và nhiệm vụ

1.1. Yêu cầu
Thiết kế mạch điều khiển động cơ một chiều với yêu cầu: quay
thuận, quay nghịch và 3 tốc độ khác nhau nhưng nhóm chúng em đã tối
ưu bằng cách thiết kế mạch với yêu cầu: “dừng, quay thuận, quay nghịch,
tăng tốc và giảm tốc”.
1.2. Nhiệm vụ
Thiết kế 5 node với 5 chế độ: Dừng-Thuận-Nghịch-Tăng tốc-
Giảm tốc.
BTL-VXL
Điều khiển động cơ một chiều.
8

Để thay đổi tốc độ ta sử dụng phương pháp điều chế độ rộng xung
PWM, hoạt động dựa theo nguyên tắc cấp nguồn cho mô tơ bằng chuỗi
xung đóng mở với tốc độ nhanh. Nguồn DC được chuyển đổi thành tín hiệu
xung vuông rồi cấp cho động cơ. Dòng điều khiển tốc độ quay sẽ là đường
điện áp trung bình của dãy xung này. Nếu tấn số chuyển mạch đủ lớn mô
tơ sẽ chạy với tốc độ đều đặn phụ thuộc vào mô men của trục quay. Với
phương pháp PWM điều chỉnh tốc độ của mô tơ thông qua việc điều chế
độ rộng của xung, tức là thời gian “đầy xung” (“on”) của chuỗi xung
vuông cấp cho mô tơ. Việc điều chỉnh này sẽ tác động đến công suất trung
bình cấp cho mô tơ và do đó sẽ thay đổi tốc độ của mô tơ cần điều khiển.
Như trên hình, với dãy xung điều khiển trên cùng, xung ON có độ
rộng nhỏ nên động cơ chạy chậm. Nếu độ rộng xung ON càng lớn (như dãy
xung thứ 2 và thứ 3) động cơ DC chạy càng nhanh. Cụ thể, muốn thay đổi
tốc độ ta sử dụng Timer cấp điện đóng mở các cặp khoá theo dạng xung với
chu kỳ cố định.
- Muốn tăng tốc động cơ ta cho tác động sườn dương nhiều,
sườn âm ít.
- Muốn giảm tốc động cơ ta cho tác động sườn dương ít, sườn

âm nhiều.
Điện áp điều khiển là đường trung bình của các xung phát ra, vì vậy
khi thay đổi biên độ xung ta sẽ tạo ra sự thay đổi của đường điện áp trung
bình theo ý muốn.
Tạo PWM từ ngắt Timer 0
Tạo hàm ngắt

Để tạo được hàm ngắt ta phải làm những công việc sau đây:

BTL-VXL
Điều khiển động cơ một chiều.
9

Khởi tạo hàm ngắt
Dùng ngắt nào thì cho phép ngắt đó hoạt động bằng cách gán giá trị cho
thanh ghi cho phép ngắt IE
Cấu hình ngắt
Trong 1 ngắt có nhiều chế độ. Với ngắt Timer0 cấu hình cho nó chạy ở chế
độ nào, chế độ timer hay counter, chế độ 8bit, 16bit … bằng cách gán cho giá trị
tương ứng TMOD.

Bắt đầu chương trình có ngắt
Trước khi chạy chương trình ngắt ta phải cho phép ngắt toàn cục được xẩy ra
bằng cách gán EA =1 thì ngắt mới xảy ra.
BTL-VXL
Điều khiển động cơ một chiều.
10

Các giá trị thanh ghi TCON


Tạo PWM có chu kì max: 100us
Tạo timer 0
Do yêu cầu của bài toán là điều khiển tốc độ động cơ quay nhanh và quay
chậm trong khi chạy thuận nghịch nên dữ nguyên chu kì và thay đổi thời gian mở.
Yêu cầu như:
Động cơ quay thuận nghịch bình thường: 1000us
Động cơ tăng tốc lớn nhất: 100us
Động cơ giảm tốc lớn nhất: 2000us
Khi bắt đầu cho timer 0 chạy thì bộ đếm của timer sẽ đếm dao động thạch
anh, cứ 12 dao động cửa thạch anh thì bộ đếm timer 0 TL0 sẽ đếm tăng 1 , có thể
nói timer 0 đếm chu kì máy đối với chế độ 8bit
TL0 là thanh ghi 8 bit nó đếm từ 0 đến 255. Nếu nó đếm đến 256 thì nó tràn
bộ đếm. TL0 lại quay về 0 và cờ ngắt TF0 tự động nạp lại giá trị 1 và ngắt được xảy
ra.
BTL-VXL
Điều khiển động cơ một chiều.
11

Như đối với bài toán này thì ta chỉ cần tạo timer 0 là 100us nên ta tính theo công
thức ta có:
Timer0 = (255 – TL0) * 1us
Như vậy để tạo được timer0 là 100us thì cần phải gán giá trị TL0=155 thì nó
đếm từ 155 – 255 tức là 100 lần thì ngắt mới xẩy ra
Để điều khiển nhanh chậm của động cơ ta phải tạo ra các xung có độ rộng là
5%, 10% 95%, 100%.

Như trên ta có khoảng thời gian kéo lên 5V là T1. Xung có độ rộng 10% tức
là T1/T=10%
Nguyên lý hoạt động PWM
PWM: Đưa ra để mở các transitor, xung có độ rộng lớn hơn thì transitor sẽ

mở lâu hơn động cơ sẽ quay nhanh hơn nhưng mà không tuyến tính. Không có xung
thì động cơ sẽ không quay, xung có độ rộng 100% thì động cơ quay là lớn nhất. Tuy
nhiên xung phải lớn hơn 1 mức nào đó mới đủ khởi động động cơ.
Để có thể thay đổi được độ rộng xung theo 10 cấp khác nhau (lấy giá trị quay
thuận nghịch lúc bình thường là 1000us) với chu kì là 2000us ta phải khởi tạo timer
cứ 1000us lại ngắt 1 lần.
Hàm khởi tạo timer0
Như đã nói ở trên muốn có giá trị timer0 nào chỉ cần gán cho TL0 để cho
thanh ghi đếm sau đó tràn nhưng ở đây do tạo timer là 100us nên ta dùng chế độ 2:
8 bit tự nạp lại giá trị đầu.
void khoitaotimer0(void) // Ham khoi tao
{
EA=0; // Cam ngat toan cuc
TMOD=0x02; // Timer 0 che do 2 8 bit auto reload
BTL-VXL
Điều khiển động cơ một chiều.
12

TH0=0x9B; // Gia tri nap lai 155 doi ra so hex
ET0=1; // Cho phep ngat timer0
EA=1; // Cho phep ngat toan cuc
TR0=1; // Chay timer 0 bat dau dem so chu ki may
}

Hàm ngắt
bit PWM;
unsigned char dem=0; // Khai bao bien dem de dem tu 1 den
10
unsigned char phantram_PWM =10 ; // Bien chua phan tram
xung(0 10)

void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0; // Dung chay timer0
TF0=0; // Xoa co, o che do co tu duoc xoa
dem++;
if(dem<phantram_PWM)
PWM=1; // Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else PWM=0; // Neu dem = phan tram xung
if(dem==20) dem=0; // Neu dem du 20 thi gan lai bang 0 de bat
dau chu ki moi
TR0=1; // Cho chay timer0
}
Do yêu cầu bài toán là điều khiển thuận nghịch nên ta cần phải lưu biến
PWM này. Do PWM có chu kì không đổi nên do đó ta chỉ cần thay đổi
phantram_PWM là có thể thay đổi được độ rộng xung.







BTL-VXL
Điều khiển động cơ một chiều.
13

2. Sơ đồ khối toàn chương trình



Phục vụ ngắt
Timer 0
Dem++
Dem >
phantram_PWM
PWM=1
Chương trình
chính
PWM=0
Dem
=2
0
Dem=0
Exit
Begin
Stop
Thuận
Nghịch
P1_
P0_0=PWM;
P0_1=0;
P0_2=0;
P0_3=PWM;
Khai báo các biến
Khởi động Timer0
P0_0=0;
P0_1=0;
P0_2=0;
P0_3=0;


P0_0=0;
P0_1=PWM;
P0_2=PWM;
P0_3=0;
exit
Tăng tốc
Giảm tốc


phantram_PWM


phantram_PWM++
Phục vụ ngắt
Timer0
P1_
exit

P1_
exit

P1_
exit

P1_
exit

BTL-VXL
Điều khiển động cơ một chiều.
14


3. Code
#include <REGX52.H>

// Dinh nghia cac nut nhan
#define stop P3_0
#define thuan P3_1
#define nghich P3_2
#define tang P3_3
#define giam P3_4

bit PWM; // Dang bien 'bit' co hai mien gia tri la: 0 va 1
unsigned char dem=0; // Khai bao bien dem de dem tu 1 den 10
unsigned int phantram_PWM=10; // Bien chua phan tram xung(0 10)

// Ham tao thoi gian tre ms
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<100;i++)
for(j=0;j<t;j++);
}

// Khoi tao Timer 100us
void khoitaohethong()
{
EA=0; // cam tat ca cac ngat khong bi che
TMOD=0x02; // timer0 che do 2: 8 bit tu nap lai gia tri dau
TH0=0x9B; // nap gia tri 155 vao 8bit cao: 255-155=100
EA=1; // cho phep tat ca cac ngat khong bi che

TR0=1; // cho timer0 chay
ET0=1; // cho phep ngat timer0
}

// Ngat tao ra PWM
void ngat_timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0; // Dung chay timer0
TF0=0; // Xoa co, o che do co tu duoc xoa
dem++;
if(dem>=phantram_PWM)
{
PWM=1;
BTL-VXL
Điều khiển động cơ một chiều.
15

} // Neu bien dem < phan tram xung thi dua gia
tri 1 ra chan, xung 5V
else
{
PWM=0;
}
if(dem==20) dem=0; // Neu dem du 20 thi gan
lai bang 0 de bat dau chu ki moi
TR0=1; // Cho chay timer0
}

// Ham stop dong co
void stopdc(void)

{
P0=0x00;
}

// Ham quay thuan dong co
void quaythuan(void)
{
P0_0=PWM;
P0_1=0;
P0_2=0;
P0_3=PWM;
}

// Hàm quay nghich dong co
void quaynghich(void)
{
P0_0=0;
P0_1=PWM;
P0_2=PWM;
P0_3=0;
}

// Ham dieu khien tang toc do
unsigned char tangtoc(void)
{
if(tang==0) // nếu nút tăng được ấn
{
while(tang==0)// trong khi nút tăng được ấn
{
;//không làm j cả

}
BTL-VXL
Điều khiển động cơ một chiều.
16

phantram_PWM ;
delay(100);
if(phantram_PWM<1)
{
phantram_PWM=1;
}
}
return (phantram_PWM);
}

// Ham dieu khien giam toc do
unsigned char giamtoc(void)
{
if(giam==0)
{
while(giam==0)
{
;
} //khong lam gi ca
phantram_PWM++;
delay(100);
if(phantram_PWM>20)
{
phantram_PWM=20;
}

}
return (phantram_PWM);
}

// Lua chon che do cua dong co
unsigned char n;
unsigned char chonchedo(void)
{
if(stop==0) n=1;
if(thuan==0) n=2;
if(nghich==0) n=3;
switch(n)
{
case 0: {break;}
case 1: {stopdc();break;}
case 2: {quaythuan();break;}
case 3: {quaynghich();break;}
}
return (n);
}
BTL-VXL
Điều khiển động cơ một chiều.
17

// Chuong trinh chinh
void main()
{
khoitaohethong();
while(1) //lap vo han
{

tangtoc();
giamtoc();
chonchedo();
}
}

III. Kết quả
1. Mô phỏng
Quay thuận
Quay nghịch:

BTL-VXL
Điều khiển động cơ một chiều.
18

Dừng:

2. Mạch thật
BTL-VXL
Điều khiển động cơ một chiều.
19


×