Tải bản đầy đủ (.docx) (26 trang)

ĐIỀU KHIỂN GIÁM SÁT VÀ THIẾT LẬP TỐC ĐỘ ĐỘNG CƠ SỬ DỤNG KEYPAD HỆ THỐNG NHÚNG( LẤY FILE CODE PIC+ FILE MÔ PHỎNG PROTEUS LIÊN HỆ ZALO 0327697318)

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 (1 MB, 26 trang )

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP
KHOA ĐIỆN TỬ

BÁO CÁO TIỂU LUẬN
Môn học: HỆ THỐNG NHÚNG
Đề tài: Giám sát và thiết lập tốc độ động cơ sử dụng Keypad
GVHD : Ths.Tăng Cẩm Nhung
SVTH :Nguyễn Trung Kiên (TN)
MSSV :K175520114094
SVTH : Trần Hữu Phúc
MSSV :K175520114107
SVTH : Cao Văn Huy
MSSV:K175520114091

Thái Nguyên, ngày
1

tháng năm 2021


Mục lục

Chương 1: GIỚI THIỆU
1.1 Giới thiệu đề tài.
Hiện nay nhiều hệ thống yêu cầu giám sát cũng như điều khiển tốc độ động cơ
nhằm phục công tác sản xuất theo từng điều khiện khác nhau.
Sau khi tham khảo một số phương pháp giám sát, điều khiển động cơ chúng em
quyết định chọn đề tài “Giám sát và thiết lập tốc độ động cơ sử dụng Keypad”
làm đề tài nghiên cứu cho bài tiểu luận cuối kỳ môn học Hệ thống nhúng.
Hệ thống giúp điều khiển tốc độ động cơ thông qua Keypad và hiển thị chế độ cơ
đã chọn lên màn hình Lcd.


Hướng thực hiện yêu cầu đề tài được đưa ra ở trên, nhóm em về cơ bản sẽ tóm tắt
như sau:
-

-

Sử dụng vi điều khiển PIC16F877A làm chip điều khiển trung tâm.
Sử dụng modul L298 để điều khiển tốc độ động cơ.
Xậy dựng keypad gồm:
+ 9 phím từ 1 đến 9 để chọn mức tốc độ động cơ.
+ Phím Enter để xác nhận mức tốc độ.
+ Phím Clear để xóa khi chọn sai.
Sử dụng LCD hiển thực mức tốc độ đã chọn.
Đối tượng điều khiển là động cơ.

1.2 Mục đích đề tài.
Mục đích chính là thiết kế các hệ thống điều khiển cho tốc độ quay của động cơ
sao cho thời gian để động cơ hoạt động ổn định từ lúc bắt đầu mở máy cũng như là độ
2


quá điều chỉnh tốc độ của động cơ so với tốc độ yêu cầu sai lệch tĩnh của nó phải nằm
trong giới hạn cho phép.
Nhằm đưa ra định hướng phát triển tối ưu nhất mà kết quả của nó mang lại thực
tiễn nhất.
Thường thì thời gian để ổn định tốc độ động cơ nhỏ hơn 2 giây, sai lệch tĩnh nhỏ
hơn 1% và độ quá điều chỉnh nhỏ hơn 5%

1.3 Phạm vi nghiên cứu
Về nội dung nghiên cứu: Đề tài tập trung nghiên cứu về điều khiển tốc độ động cơ

một chiều hoạt động theo thời gian thông việc sử dụng bàn phím keypad và hiển thị ra
LCD mức tốc độ đã thiết lập.
Về không gian: Sử dụng thông qua 2 phần mềm Proteus và phần mềm CCS để có
cái nhìn trực tiếp nhất về sản phẩm.

Chương 2: THIẾT KẾ
2.1 Yêu cầu của đề tài.
- Thiết lập mức tốc độ cho động cơ từ Keypad.
- Hiện thị mức tốc độ đã chọn lên màn hình Lcd.

2.2 Sơ đồ cấu trúc hệ thống.
Theo u cầu của đề tài thì nhóm chúng tôi tiến hành thiết kế sơ đồ khối của hệ
thống như hình :
Chức năng từng khối:






Khối điều khiển:
Modul điều khiển tốc độ:
Động cơ
Khối hiển thị
Khối xử lý.

2.2.1 Khối điều khiển.(keypad)


Nguyên tắc quét phím:


Cấu tạo ma trận phím: Ma trận phím được cấu tạo nên từ các phím nhấn đơn, phím
nhấn đơn hoạt động như sau:
-

Chân H0 được nối đến chân của vi điều khiển nên H0=1, chân còn lại được nối
Mass.

3


Hinh 2.1: Cấu trúc phím nhấn đơn


Khi nhấn phím, chân H0 sẽ được nối Mass và H0=0.
Cấu tạo ma trận phím từ các phím nhất đơn

Ma trận phím 1 hàng 4 cột 1x4 được cho như hình dưới đây:
Khi chưa được nhấn, các chân nối hàng H0 =1 và các chân nối cột C0C1C2C3 đều có
giá trị =1 (do đều được nhấn đến các chân của vi điều khiển)
Để kiểm tra phím nào được nhấn bằng cách cho 1 trong các chân nối đến cột từ C0 ÷
C3 lần lượt = 0. Ví dụ:
-

Nếu C0 = 0, phím số “0” được nhấn (do chân C0 được xem như nối Mass).
Nếu C1 = 0, phím số “1” được nhấn (do chân C1 được xem như nối Mass).
Nếu C2 = 0, phím số “2” được nhấn (do chân C2 được xem như nối Mass).
Nếu C2 = 0, phím số “3” được nhấn (do chân C3 được xem như nối Mass).

Hình 2.2: Cấu trúc 1 hàng của ma trận phím

• Ma trận phím 4 hàng 4 cột 4x4 được cho như hình dưới đây:

4


Hình 2.3: Cấu trúc ma trận phím 4x4
-

-

Cho hàng là ngõ vào và cột là ngõ ra. Khi chưa có phím nào được nhấn trạng thái
các chân tương ứng với các Hàng và các Cột như sau: H3H2H1H0C3C2C1C0 =
1111 1111
Thông thường, để kiểm tra phím ta sử dụng phương pháp quét Cột, đó là lần lượt
cho các cột từ C0 đến C3 bằng 0 và kiểm tra xem nếu Hàng nào có mức 0 thì phím
tương ứng sẽ được nhấn. Mã phím được tính theo cơng thức sau:
MP = Cột * 4+Hàng
Ví dụ:

Nếu H2 = 0 và C1 = 0, thì phím có mã “6” được nhấn (MP = 1*4+2=6)
Nếu H0 = 0 và C3 = 0, thì phím có mã “C” được nhấn (MP = 3*4+0=12=C)
• Phương pháp quét phím:
- Lần lượt kiểm tra 4 Cột, xem có phím nào được nhấn khơng?
- Nếu có trả về MP là 1 trong 15 phím (từ phím “0” đến phím “15 hay F”
- Nếu không trả về MP=0xFF.
-

2.2.2 Modul điều khiển tốc độ.(L298)
Mạch điều khiển tốc độ l298 có khả năng điều khiển động cơ dc cùng lúc. Sử dụng
IC chính là L298 có cấu tạo gồm hai mạch cầu H transitor.


5


Hình 2.4: Module L298 thực tế


-

Thơng số kỹ thuật:
Điện áp đầu vào từ 5 – 30V
Dòng điện tối đa cho mỗi động cơ là 2A
Điện áp của tín hiệu điều khiển: 5 – 7V
Dịng của u cầu của tín hiệu điều khiển 0 – 36 mA
Sơ đồ chân module L298
Chân12V Power cấp nguồn cho mạch L298 và là nguồn động lực cho động cơ.
Chân5V Power có thể dùng cấp nguồn cho Arduino, khi có Jumper 5V Enable.
Chân GND là chân cấp MASS cho mạch, khi sử dụng khi vi điều khiển thì cần nối
GND mạch với GND của vi điều khiển.
Chân Enable là chân cho phép ngỏ ra động cơ hoạt động hoặc dừng. Mặc định
mạch có Jumper A Enable va B Enable như hình là cho phép chạy.
Chân IN1, IN2 điều khiển chiều và tốc độ động cơ 1 thông qua ngỏ ra output A.
Chân IN3, IN4 điều khiển chiều và tốc độ động cơ 2 thông qua ngỏ ra output B.
Chân output A, output B chân ngỏ ra động cơ 1, 2.

2.2.3 Khối hiển thị.(Lcd 16x2)
Màn hình LCD 16×2 là một linh kiện được sử dụng rộng rãi trong trong các dự án
điện tử và lập trình.
Thơng số k thut LCD 16ì2:
ã


LCD 16ì2 cú 16 chõn trong ú 8 chân dữ liệu (D0 – D7) và 3 chân điều khiển
(RS, RW, EN).
• 5 chân cịn lại dùng để cấp nguồn và đèn nền cho LCD 16×2.
6




Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ
liệu.
• Chúng cịn giúp ta cấu hình ở chế độ đọc hoặc ghi.
LCD 16×2 có thể sử dụng ở chế độ 4 bit hoặc 8 bit tùy theo ứng dụng ta đang làm.

Hình 2.5: Màn hình LCD 16×2
LCD 16×2 có thể sử dụng ở chế độ 4 bit hoặc 8 bit tùy theo ứng dụng ta đang làm.
Module I2C Arduino

Hình 2.6: Module I2C LCD 16×2
7


LCD có quá nhiều nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng
nhiều chân trên vi điều khiển. Module I2C LCD ra đời và giải quyết vấn để này.
Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6,
D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối.
Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD 20×4,
…) và tương thích với hầu hết các vi điều khiển hiện nay.

2.2.4 Khối xử lý(pic16f877a).

PIC16F877A là gì

Hình 2.7: Pic16F877A
PIC16F877A là một Vi điều khiển PIC 40 chân và được sử dụng hầu hết trong các
dự án và ứng dụng nhúng. Nó có năm cổng bắt đầu từ cổng A đến cổng E. Nó có ba bộ
định thời trong đó có 2 bộ định thời 8 bit và 1 bộ định thời là 16 Bit. Nó hỗ trợ nhiều giao
thức giao tiếp như giao thức nối tiếp, giao thức song song, giao thức I2C. PIC16F877A
hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời.


Sơ đồ chân PIC16F877A

Hình dưới đây là Sơ đồ chân PIC16F877A

8


Hình 2.8 :Sơ đồ chân của Pic16f877a


PIC16F877a có tổng cộng 5 Cổng là:

Cổng A: có tổng cộng 6 chân bắt đầu từ chân số 2 đến chân số 7. Các chân cổng A
được ký hiệu từ RA0 đến RA5 trong đó RA0 là ký hiệu của chân đầu tiên của Cổng A.
Cổng B: có tổng cộng 8 chân bắt đầu từ chân số 33 đến chân số 40. Các chân cổng B
được ký hiệu từ RB0 đến RB7 trong đó RB0 là ký hiệu của chân đầu tiên của cổng B.
Cổng C: có tổng cộng 8 Chân. Các chân của nó khơng được thẳng hàng với nhau. Bốn
chân đầu tiên của cổng C nằm ở chân số 15 đến chân số 18, còn bốn chân cuối cùng nằm
ở chân số 23 đến chân số 26.
Cổng D: có tổng cộng 8 chân. Các chân của nó cũng khơng thẳng hàng với nhau. Bốn

chân đầu tiên của cổng D nằm ở chân số 19 đến chân số 22, trong khi bốn chân cuối cùng
nằm ở chân số 27 đến chân số 30.
Cổng E: có tổng cộng 3 chân bắt đầu từ chân số 8 đến chân số 10. Các chân cổng E
được ký hiệu từ RE0 đến RE2 trong đó RE0 là ký hiệu của chân đầu tiên của cổng E.

9




Cổng nối tiếp PIC16F877a
PIC16F877a có một cổng nối tiếp trong đó được sử dụng để giao tiếp dữ liệu.
Chân số 25 cũng hoạt động như TX vì vậy nếu bạn muốn thực hiện giao tiếp nối tiếp
thì nó sẽ được sử dụng để gửi dữ liệu nối tiếp.
Chân 26 cũng hoạt động như RX, vì vậy nếu bạn muốn thực hiện giao tiếp nối tiếp thì
nó sẽ được sử dụng để nhận dữ liệu nối tiếp.


Giao tiếp I2C PIC16F877a
PIC16F877a cũng có một cổng I2C có thể dễ dàng thực hiện giao tiếp I2C.
- Chân số 18 hoạt động như SCL, viết tắt của Serial Clock Line.
- Chân số 23 hoạt động như SDA, là chữ viết tắt của Serial Data Line.
- Bây giờ bạn có thể thấy chúng ta có cổng nối tiếp và cổng I2C trong cổng C, vì
vậy chúng ta có thể sử dụng cổng C như một cổng đơn giản nhưng cũng có thể
thực hiện hai giao tiếp này với các chân của nó, vì vậy nó hồn tồn phụ thuộc vào
lập trình viên.


Ngắt PIC16F877a
PIC16F877a có tổng cộng 8 nguồn ngắt. Nguồn ngắt là một số sự kiện tạo ra ngắt,

nguồn này có thể là bộ đếm thời gian như các ngắt được tạo sau mỗi 1 giây hoặc cũng có
thể là sự kiện thay đổi trạng thái chân, chẳng hạn như nếu trạng thái chân bị thay đổi sau
đó ngắt sẽ được tạo ra.
Vì vậy, ngắt PIC16F877a có thể được tạo ra bằng 8 cách sau:
-

Ngắt ngoài.Ngắt bộ định thời (Timer0 / Timer1).
Thay đổi trạng thái cổng B.
Cổng SlaveSong song Đọc / Ghi.
Bộ chuyển đổi A / D.
Nhận / Truyền nối tiếp.PWM (CCP1 / CCP2).
Thao tác ghi EEPROM.

10


2.3 Lưu đồ và chương trình.
2.3.1 Lưu đồ.
2.3.2 Chương trình.

Hinh 2.8 : Mạch mơ phỏng trên Proteus


Code CCS

#include <16F877A.h>
#device ADC=10;
#use delay(clock=20M)
#define LCD_ENABLE_PIN PIN_A5
#define LCD_RS_PIN PIN_A3

#define LCD_RW_PIN PIN_A4
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
#include <lcd.c>
11


long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
int8 i=0,j=0,q=0, e=0,r=0,t=0,y=0,u=0,a=0,h=0;
void setup(){ ----------------SETUP DIEU KHIEN DONG CO---------------set_tris_c(0xff);
setup_adc(ADC_CLOCK_DIV_32);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_us(100);
setup_timer_2(T2_DIV_BY_16,254,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(0);
set_pwm2_duty(0);
}
int quet_phim(){ ----------------QUETPHIM---------------int8 mp=0xFF;
int8 quet[]={0xEF,0xDF,0xBF,0x7F};
for(int8 cot=0;cot<=3;cot++){
OUTPUT_B(quet[cot]);
while(!input(pin_b0)){

mp=cot*1+1;
}
while(!input(pin_b1)){
mp=cot*1+4;
}
12


while(!input(pin_b2)){
mp=cot*1+7;
}
while(!input(pin_b3)){
mp=cot*1+17;
}
}
return mp;
}
void cap1(){ -------------KHAI BAO CAC CAP TOC DO---------------j=55;
}
void cap2(){
j=80;
}
void cap3(){
j=95;
}
void cap4(){
j=110;
}
void cap5(){
j=125;

}
void cap6(){
j=155;
}
void cap7(){
13


j=210;
}
void cap8(){
j=235;
}
void cap9(){
j=250;
}
void main()
{
setup();
set_tris_a(0xf0);
set_tris_d(0x00);
set_tris_b(0x0F);
set_tris_e(0xfF);
OUTPUT_c(0x00);
lcd_init(); ------------------HIEN THI LCD------------lcd_gotoxy(0,1);
printf(lcd_putc,"

DIEU KHIEN DONG CO");

lcd_gotoxy(1,0);

printf(lcd_putc,"

DE TAI ");

delay_ms(2000);
lcd_putc('\f');
while(TRUE)
{
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
int8 maphim=quet_phim();
14


if(maphim!=0xFF){
if(maphim==18){
maphim=0;
}
if(maphim==1){ ---------------KHAI BAO PHIM SO 1---------------i++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(i==1){
int8 maphim1=quet_phim();
if(maphim1!=0xFF){
}
if(maphim1==19){
i=0;

lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim1==17){
cap1();
i=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}

15


}
if(maphim==2){ --------------KHAI BAO PHIM SO 2---------------q++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(q==1){
int8 maphim2=quet_phim();
if(maphim2!=0xFF){
}
if(maphim2==19){
q=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");

}
else if(maphim2==17){
cap2();
q=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==3){ ---------------KHAI BAO PHIM SO 3---------------e++;
Lcd_gotoxy(3,1);
16


printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(e==1){
int8 maphim3=quet_phim();
if(maphim3!=0xFF){
}
if(maphim3==19){
e=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim3==17){
cap3();
e=0;

set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==4){ --------------KHAI BAO PHIM SO 4---------------r++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
17


while(r==1){
int8 maphim4=quet_phim();
if(maphim4!=0xFF){
}
if(maphim4==19){
r=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim4==17){
cap4();
r=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}

if(maphim==5){ -------------KHAI BAO PHIM SO 5---------------t++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(t==1){
int8 maphim5=quet_phim();
if(maphim5!=0xFF){
18


}
if(maphim5==19){
t=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim5==17){
cap5();
t=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==6){ ---------------KHAI BAO PHIM SO 6---------------y++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);

lcd_putc(maphim+0x30);
}
while(y==1){
int8 maphim6=quet_phim();
if(maphim6!=0xFF){
}
if(maphim6==19){
y=0;
lcd_putc('\f');
19


lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim6==17){
cap6();
y=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==7){ ---------------KHAI BAO PHIM SO 7---------------u++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(u==1){
int8 maphim7=quet_phim();

if(maphim7!=0xFF){
}
if(maphim7==19){
u=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim7==17){
20


cap7();
u=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==8){ ---------------KHAI BAO PHIM SO 8---------------a++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(a==1){
int8 maphim8=quet_phim();
if(maphim8!=0xFF){
}
if(maphim8==19){
a=0;

lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim8==17){
cap8();
a=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
21


}
}
if(maphim==9){ ---------------KHAI BAO PHIM SO 9---------------h++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(h==1){
int8 maphim9=quet_phim();
if(maphim9!=0xFF){
}
if(maphim9==19){
h=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}

else if(maphim9==17){
cap9();
h=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
}
}
22


}

Chương 3: KẾT QUẢ THỰC HIỆN VÀ KẾT LUẬN
3.1 Kết quả thực hiện.

Hình 3.1: Bắt đầu khởi động hệ thống

23


Hình 3.2 : Chọn mức tốc độ số 1

Hình 3.3 ; Chọn mức tốc độ số 5

24


Hình 3.4: Chọn mức tốc độ số 9


3.2 Đánh giá và hướng phát triển
3.2.1 Đánh giá.
Sau quá trình nghiên cứu với đề tài: “Giám sát và thiết lập tốc độ động cơ sử dụng
Keypad” đến nay nhóm em đã hồn thành xong với kết quả thu được


Phần kiến thức:
- Tìm hiểu về động cơ điện một chiều.
- Tìm hiểu về LCD, L298, Keypad.
- Vận dụng phần mềm: Proteus, CCS, Visio.
• Phần thiết kế:
- Xây dựng sơ đồ khối
- Xây dựng sơ đồ tồn mạch.
- Thiết kế chương trình code.

3.2.2 Hướng phát triển.
Đề tài: “Giám sát và thiết lập tốc độ động cơ sử dụng Keypad” của nhóm em đã hồn
thành những nội dung yêu cầu đặt ra. Tuy nhiên, phần mơ phỏng có thể phát triển và kết
hợp thêm các nội dung sau:
1. Có thể sử dụng các nút bấm thay thế Keypad.
2. Thêm các chế độ làm việc đa dạng hơn.
3. Phát triển tối đa tốc độ chạy và phần điều khiển nhạy bén hơn.

25


×