Đ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) Đ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)
Trang 1TRƯỜ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: TĂNG CẨM NHUNG SVTH1: NGÔ VĂN PHỤNG MSSV: K175520114040 SVTH2: LƯƠNG QUANG TRƯỜNG (TN) MSSV: K175520114059
Thái Nguyên, ngày tháng năm 2021
1
Trang 2MỤC LỤC
Chương I: GIỚI THIỆU YÊU CẦU GIỚI HẠN CỦA ĐỀ TÀI……… 3
1.Giới thiệu đề tài……….……3
2.Mục đích đề tài……….………….3
3.Phạm vi nghiên cứu……….…….….3
CHƯƠNG II: THIẾT KẾ……….…… 4
2.1 Giới thiệu ……….……….……….4
2.2 Thiết kế sơ đồ khối: ……….……….….4
2.2.1 Chức năng từng khối: ……….4
2.2.2Thiết kế sơ đồ nguyên lý……….….4
A Khối hiển thị: ……… ……….….…4
B Khối điều khiển………7
C Khối xử lý……….8
D Khối nguồn: ……….8
E Khối băm xung PWM……… ………8
F Khối động lực……….……….………….….8
2.2.3Nguyên lý hoạt động: ……….……… 10
CHƯƠNG 3: KẾT QUẢ THỰC HIỆN VÀ KẾT LUẬN…… ……… 11
1 Kết luận……….….……….…… 11
2 Hướng phát triển……… ………… 11
2
Trang 3CHƯƠNG I:
GIỚI THIỆU YÊU CẦU GIỚI HẠN CỦA ĐỀ TÀI
1.Giới thiệu đề tài
- Ngày nay thế giới đã bước vào một cuộc cách mạng khoa học kỹ thuật trong mọi lĩnh vực Con người biết ứng dụng khoa học kĩ thuật vào sản xuất để nâng cao năng suất chất lượng rút ngắn thời gian sản xuất Động cơ một chiều được sử dụng phổ biến và rộng rãi trong tất cả các lĩnh vực từ quân sự đến công nghiệp và dân dụng Những ứng dụng quan trọng của nó bao gồm: nhà máy cán, nhà máy giấy, nhà máy dệt, nhà máy in, máy công
cụ, máy xúc, cần cẩu và đặc biệt là lĩnh vực robotic…
- Các mạch điều khiển động cơ yêu cầu thay đổi tốc độ quay của động cơ nhịp nhàng
và điều khiển chính xác Phương pháp truyền thống để điều khiển tốc độ động cơ một chiều là thay đổi giá trị điện áp cung cấp cho động cơ Phương pháp đơn giản nhất là sử dụng biến trở và phương pháp điều khiển này không chính xác như mong muốn do đặc tuyến của biến trở, tầm hoạt động bị giới hạn, điều khiển không hiệu quả và gây ra hiện tượng quá nhiệt của cuộn dây dẫn đến hư động cơ
- Phương pháp PWM được biết đến từ những năm 1970 cải thiện được hạn chế của các phương pháp truyền thống, tuy nhiên mạch điều khiển dùng linh kiện rời BJT hoặc vi mạch số nên mạch điện phức tạp, khó đạt được độ chính xác cao Ngày nay việc sử dụng các vi mạch khả lập trình như vi xử lý trong các thiết bị điều khiển trở thành một xu thế quan trọng, mang lại hiệu quả cao, tốc độ xử lý nhanh, độ chính xác cao, mạch phần cứng tinh gọn, giảm giá thành sản phẩm, hạn chế rủi ro
2.Mục đích đề tài
- Trong bài này chúng em tập trung nghiên cứu phương pháp điều chế độ rộng xung PWM để điều khiển tốc độ động cơ DC sử dụng dòng vi điều khiển PIC 16F877A và các giải thuật tạo xung PWM sau đó lập trình cho vi điều khiển bằng ngôn ngữ C
3.Phạm vi nghiên cứu
-Trong bài này chúng em sử dụng keypad để xác định 9 trạng thái của động cơ và mỗi trạng thái có 1 tốc độ riêng và dùng 1 Led 7 đoạn để hiện thị trạng thái của động cơ đang quay ở tốc độ nào, sử dụng nguồn pin hoặc điện từ lưới 220V
3
Trang 4CHƯƠNG II:
THIẾT KẾ
2.1 Giới thiệu
- Với đề tài “giám sát và thiết lập tốc độ động cơ sử dụng keypad” chúng em sẽ thiết kế theo yêu cầu như sau:
+ Sử dụng 1 keypad để xác định 9 cấp tốc độ quay của động cơ
+ Hiển thị trạng thái của động cơ ra Led 7 đoạn (Đang quay ở tốc độ nào trong 9 cấp tốc độ)
2.2 Thiết kế sơ đồ khối:
Hình 2.1 Sơ đồ khối mạch đếm sản phẩm.
2.2.1 Chức năng từng khối:
+ Khối nguồn: có chức năng cấp nguồn cho toàn bộ hệ thống
+ Khối điều khiển: có chức năng điểu khiển chế độ làm việc hệ thống và là tín hiệu đầu vào của khối xử lý
+ Khối xử lý: có chức năng thu thập và xử lý tín hiệu (từ tín hiệu đầu vào của khối điều khiển và xuất ra tín hiệu cho khối hiển thị và khối phát xung PWM)
+ Khối hiển thị: có chức năng hiển thị cấp độ làm việc của động cơ
+ Khối băm xung PWM: có chức năng cấp xung cho động cơ chạy
+ Khối động lực: có chức năng vận hành động cơ theo xung được cấp
2.2.2Thiết kế sơ đồ nguyên lý
A Khối hiển thị:
-Led 7 đoạn có chức năng hiển thị số thập phân cho biết kết quả sau khi xử lý, trong mạch đếm sản phẩm sẽ cho biết kết quả đếm là số lượng sản phẩm Có 2 loại led 7 đoạn
là anode chung và cathode chung
-Led 7 đoạn có kí hiệu, sơ đồ chân như hình sau:
Trang 5Hình 2.2 Ký hiệu và hình ảnh led 7 đoạn
-Led 7 đoạn có cấu tạo là các led đơn được sắp xếp theo vị trí để khi sáng hoặc tắt tạo thành 1 số thập phân từ 0 đến 9
-Dòng cho mỗi đoạn từ 5 đếm 15 mA và điện áp cho các led nhỏ là 2V
-Em tiến hành chọn led loại anode chung
-Cách đấu nối LED 7 đoạn trong mạch mô phỏng
Hình 2.3 Sơ đồ đấu nối LED 7 đoạn trong mạch mô phỏng
-Chương trình điều khiển LED 7 đoạn:
+Khai báo mảng mã LED 7 đoạn từ 0-9:
int8 maled[]={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90
};
Hiển thị số trên led 7 đoạn:
void hthi(){// -QUET
LED -output_D(maled[j/100]);
output_HIGH(pin_A0);
Trang 6output_LOW(pin_A0);
output_D(maled[j%100/10]);
output_HIGH(pin_A1);
delay_ms(1);
output_LOW(pin_A1);
output_D(maled[j%10]);
output_HIGH(pin_A2);
delay_ms(1);
output_LOW(pin_A2);
}
- LCD
+Cách đấu nối LCD trong mạch mô phỏng
Hình 2.4 Sơ đồ đấu nối lcd trong mạch mô phỏng
+Khai báo LCD trong CCS
#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>
B Khối điều khiển
Trang 7-keypad
Cách đấu nối KEYPAD trong mạch mô phỏng
Hình 2.5 Sơ đồ đấu nối keypad trong mạch mô phỏng
-Khai báo trong CSS:
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)){
hthi();
mp=cot*1+1;
}
while(!input(pin_b1)){
hthi();
mp=cot*1+4;
}
while(!input(pin_b2)){
hthi();
mp=cot*1+7;
}
while(!input(pin_b3)){
hthi();
mp=cot*1+17;
}
}
return mp;
}
Trang 8C Khối xử lý
-Đây chính là khối trung tâm, có chức năng điều hành toàn bộ sự hoạt động của hệ thống, nhờ có vi điều khiển thông minh thì hệ thống mới hoạt động hiệu quả Các dòng
vi điều khiển thường được sử dụng như: Vi điều khiển ARM, AVR, vi điều khiển PIC, vi điều khiển 8051, Arduino
-Ở đây em sử dụng vi điều khiển PIC 16F877A để lập trình:
Hình 2.6: Cấu trúc tổng quát của PIC16F877A trong phần mềm Proteus
-Chức năng các chân sử dụng trong hệ thống:
+Ở đây, em sử dụng các chân vi điều khiển như sau:
+Chân RB của VDK là chân được nối với các chân của KEDPAD và RESPACK-8 +Chân RA3, RA4, RA5, RC4, RC5, RC6, RC7: được nối với các chân của LCD
+Chân RD và RA0, RA1, RA2 của VDK là chân sẽ được nối với các chân LED 7 đoạn +Chân RC1và RC2 nối vào chân IN1 và IN2 của L298
D Khối nguồn:
-Ở đây nguồn em sử dụng là nguồn điện 220V nối qua mạch giảm áp cấp điện áp hoạt động cho VDK
-Điện áp từ VDK cấp cho động cơ, LED7 đoạn, KEYPAD, LCD
E Khối băm xung PWM
- thay đổi độ rộng xung, tần số f
F Khối động lực
-Khối động lực có chức năng vận hành động cơ theo xung được cấp
- Lựa chọn: động cơ 1 chiều (Motor)
- Động cơ:
-Cách đấu nối động cơ trong mạch mô phỏng
Trang 9Hình 2.7 Sơ đồ đấu nối động cơ trong mạch mô phỏng
-Khai báo:
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; }
Set up:
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);
}
Trang 10-Sơ đồ nguyên lý mạch
Hình 2.8 Sơ đồ nguyên lý toàn mạch
2.2.3Nguyên lý hoạt động:
-Khi cấp nguồn 5-12V cho PIC16f8877a Chân RB của VDK là chân được nối với các chân của KEDPAD và RESPACK-8, chân RA3, RA4, RA5, RC4, RC5, RC6, RC7 được nối với các chân của LCD, chân RD và RA0, RA1, RA2 của VDK là chân sẽ được nối với các chân LED 7 đoạn Từ tín hiệu nhận được của KEYPAD được gửi tới chân RB của vi điều khiển PIC16f877a gửi tín hiệu theo cấp độ tới chân CP1 và CP2 của RC để điều khiển động cơ qua L298 cấp tốc độ được hiển thị lên LCD, tốc độ hiển thị lên LED
7 thanh (7SEG-MPX3-CA)
Trang 11CHƯƠNG 3:
KẾT QUẢ THỰC HIỆN VÀ KẾT LUẬN
1 Kết luận
-Mạch điều khiển động cơ sử dụng KEYPAD đã đạt được yêu cầu đặt ra Kết quả điều khiển chính xác Hoạt động đúng định mức.
-Module nguồn: Hoạt động ổn định, không có hiện tượng sự áp Đáp ứng được dòng điện cho toàn bộ mạch.
-Module điều khiển động cơ L298: Cấp xung vuông có chu kỳ xác định Ngõ ra chân OUT1 và OUT2 cấp xung cho động cơ điều khiển động cơ có độ chính xác cao
-Module hiển thị: LED 7 đoạn hiển tốc độ hiện tại của động cơ
-Module vi xử lý: PIC16F877A hoạt động tốt trong việc giao tiếp với các module mạch tạo xung vuông module hiển thị LED 7 đoạn, các chân VO hoạt động tốt Tần số để vi điều khiển PIC16F877A hoạt động 20MHz
-Mạch điều khiển động cơ ngày càng được sử dụng rộng rãi, và được ứng dụng trong các thiết bị như: máy bơm, quạt….
- Hạn chế của đề tài: Do thời gian có hạn và kiến thức còn hạn chế nên mạch chỉ dừng lại ở mức độ hiển thị tốc độ, giá thành cao.
2 Hướng phát triển
-Hướng phát triển đầu tiên là tăng thêm nhiều cấp tốc độ động cơ , và điều khiển nhiều động cơ giao tiếp LED 7 đoạn với Port ( Sử dụng phương pháp chốt dữ liệu cho LED 7 đoạn Vì vậy số lượng sản phẩm nhiều nhất là 1 động cơ
Hướng phát triển tiếp theo là điều khiển 2 động cơ thì giao tiếp LED 7 đoạn và sử dụng phương pháp quét LED hiển thị tốc độ
Hướng phát triển tiếp theo là điều khiển nhiều động động cơ khác nhau
Trang 12PHỤ LỤC
CODE:
#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>
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;
int8 maled[]={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; void hthi(){// -QUET
LED -output_D(maled[j/100]);
output_HIGH(pin_A0);
delay_ms(1);
output_LOW(pin_A0);
output_D(maled[j%100/10]);
output_HIGH(pin_A1);
delay_ms(1);
output_LOW(pin_A1);
output_D(maled[j%10]);
output_HIGH(pin_A2);
delay_ms(1);
output_LOW(pin_A2);
}
void setup(){ // -SETUP DIEU KHIEN DONG 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);
Trang 13set_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)){
hthi();
mp=cot*1+1;
}
while(!input(pin_b1)){
hthi();
mp=cot*1+4;
}
while(!input(pin_b2)){
hthi();
mp=cot*1+7;
}
while(!input(pin_b3)){
hthi();
mp=cot*1+17;
}
}
return mp;
}
void cap1(){// -KHAI BAO CAC CAP TOC DO -j=50;
}
void cap2(){
j=70;
}
void cap3(){
j=90;
}
void cap4(){
j=100;
}
void cap5(){
j=120;
}
void cap6(){
j=150;
}
void cap7(){
Trang 14}
void cap8(){
j=230;
}
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();
lcd_gotoxy(0,1);
printf(lcd_putc," DIEU KHIEN DONG CO");
lcd_gotoxy(1,0);
printf(lcd_putc,"GIAO DIEN NGUOI DUNG ");
delay_ms(2000);
lcd_putc('\f');
while(TRUE)
{
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO: TU 1->9");
Lcd_gotoxy(8,0);
printf(lcd_putc,"=>");
hthi();
int8 maphim=quet_phim();
if(maphim!=0xFF){
if(maphim==18){
maphim=0;
}
if(maphim==1){// -KHAI BAO PHIM SO i++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(i==1){
hthi();
int8 maphim1=quet_phim();
Trang 15if(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();
hthi();
i=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==2){// -KHAI BAO PHIM SO q++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(q==1){
hthi();
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();
hthi();
q=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==3){// -KHAI BAO PHIM SO e++;
Trang 16Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(e==1){
hthi();
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();
hthi();
e=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==4){// -KHAI BAO PHIM SO r++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(r==1){
hthi();
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();
hthi();
Trang 17r=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==5){// -KHAI BAO PHIM SO t++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(t==1){
hthi();
int8 maphim5=quet_phim();
if(maphim5!=0xFF){
}
if(maphim5==19){
t=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim5==17){
cap5();
hthi();
t=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==6){// -KHAI BAO PHIM SO y++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(y==1){
hthi();
int8 maphim6=quet_phim();
if(maphim6!=0xFF){
}
if(maphim6==19){
Trang 18y=0;
lcd_putc('\f');
lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
}
else if(maphim6==17){
cap6();
hthi();
y=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}
}
if(maphim==7){// -KHAI BAO PHIM SO u++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}
while(u==1){
hthi();
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){
cap7();
hthi();
u=0;
set_pwm1_duty(j);
set_pwm2_duty(0);
}}
if(maphim==8){// -KHAI BAO PHIM SO a++;
Lcd_gotoxy(3,1);
printf(lcd_putc,"CHON CAP TOC DO:");
lcd_gotoxy(11,0);
lcd_putc(maphim+0x30);
}