thiết kế mạch điều khiển động cơ một chiều gồm: quay thuận, quay nghịch, dừng, tăng tốc, giảm tốc. Mạch được mô phỏng trực tiếp trên proteus 7.8 cùng với code sử dụng keilc viết. Mạch đã được kiểm nghiệm và chạy tốt trên cả mạch lắp ráp thật. Có ứng dụng trong thang máy, công nghệ tời.
Trang 1TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN – ĐIỆN TỬ
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
Trang 2MỤ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
Trang 3LỜ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!
Trang 4I 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
Trang 51.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
Trang 6Cá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
Trang 7Vớ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
Trang 8Thạch anh định tần cho xung nhịp
2 Sơ đồ nguyên lý
Trang 10tốc-Để 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:
Trang 11Khở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
Trang 12Cá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
Trang 13Như đố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ó:
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
Trang 14TH0=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
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
Trang 152 Sơ đồ khối toàn chương trình
Phục vụ ngắt Timer 0
Trang 16bit 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
TR0=0; // Dung chay timer0
TF0=0; // Xoa co, o che do co tu duoc xoa
dem++;
if(dem>=phantram_PWM)
{ PWM=1;
Trang 17} // 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 quay thuan dong co
// Hàm quay nghich dong co
// Ham dieu khien tang toc do
unsigned char tangtoc(void)
Trang 18phantram_PWM ;
delay(100);
if(phantram_PWM<1)
{ phantram_PWM=1;
} return (phantram_PWM);
}
// Ham dieu khien giam toc do
unsigned char giamtoc(void)
delay(100);
if(phantram_PWM>20)
{ phantram_PWM=20;
} }
}
Trang 19// Chuong trinh chinh
void main()
{ khoitaohethong();
while(1) //lap vo han {
Trang 202 Mạch thật