1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ RA LED MATRIX HỆ THỐNG NHÚNG( LẤY FILE CODE PIC+ MÔ PHỎNG PROTEUS LIÊN HỆ ZALO 0327697318)

17 14 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 522,25 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ RA LED MATRIX HỆ THỐNG NHÚNG( LẤY FILE CODE PIC+ MÔ PHỎNG PROTEUS LIÊN HỆ ZALO 0327697318)HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ RA LED MATRIX HỆ THỐNG NHÚNG( LẤY FILE CODE PIC+ MÔ PHỎNG PROTEUS LIÊN HỆ ZALO 0327697318)

Trang 1

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

KHOA ĐIỆN TƯ

BÁO CÁO TIỂU LUẬN

HỆ THỐNG NHÚNG

ĐỀ TÀI: HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ RA MÀN HÌNH LCD

GVHD : TĂNG CẨM NHUNG SVTH : Tạ Văn Linh (NT) MSSV : K175520114028 SVTH : Nguyễn Thanh Bình MSSV : K175520114005 LỚP: 53CDT1

Thái Nguyên, ngày 25 tháng 06 năm 2021

Trang 2

Hệ thống hiển thị tốc độ động cơ lên LCD

Hình 4: Sơ đồ khối tổng thể của bộ hiển thị tốc độ động cơ 11

Lưu đồ và chương trình Thiết kế bộ hiển thị tốc độ động cơ ra LCD 16

Trang 3

CHƯƠNG I: GIỚI THIỆU

I Tổng quan về đề tài

Đề tài của chúng em là sử dụng ngắt timer đo tốc độ của động cơ và hiện thị ra màn hình LCD Hiện chúng em đang thực hiện chương trình mô phỏng trên phần mềm proteus và code của chương trình mô phỏng được viết trên phần mềm CCS

II Phạm vi nghiên cứu

- Do điều kiện kinh tế thì trong phạm vi bài tiểu luận này, chúng em chỉ thiết kế bộ đọc tốc đọ động cơ ra màn hình LCD như sau:

+ Sử dụng nguồn pin(12V)

+ 01 vi điều khiển Pic 16f877a

+ 01 LCD(20x4) để hiển thị tốc độ động cơ

+ 01 động cơ encoder

- Xác định bài toán phải đạt các yêu cầu sau:

+) Hệ thống có khả năng đọc được tốc độ của động cơ

+) Hệ thống luôn làm việc ổn định khi nhiệt độ môi trường thay đổi

+) Kích thước nhỏ gọn, đơn giản…

III Yêu cầu chính của đề tài

- Sử dụng ngắt Timer để đo tốc độ động cơ

* Khái niệm về timer trong PIC18F77A

Thực chất Timer/Counter là một bộ đếm, đếm xung nhịp (xung clock)

Nó chứa các thanh ghi chứa giá trị đếm và thanh ghi điều khiển hoạt động đếm này Nguồn xung nhịp được chọn để đếm có thể là nguồn xung nhịp nội (bên trong vi điều khiển), hoặc có thể lập trình chọn nguồn xung nhịp bên ngoài (đưa vào trên một chân nào đó)

Người dùng có thể Lập trình Timer/Counter bắt đầu đếm từ 1 giá trị nào đó bằng cách ghi giá trị đó vào thanh ghi chứa giá trị đếm Khi giá trị đếm vượt quá giá trị tối đa mà thanh ghi chứa giá trị của Timer/Counter thì xuất hiện hiện tượng gọi là “tràn (over flow)”

- Trong PIC16f877a hiện có 3 bộ định thười gồm:

+ timer0

+timer 1

+timer 2

Trang 4

Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A Timer01 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn Bit TMR0IE (INTCON<5>) là bit điều khiển của Timer0 TMROID=1 cho phép ngắt Timer0 tác động, TMROIF= 0 không cho phép ngắt Timer0 tác động Sơ đồ khối của Timer0 như sau:

Hình 1: sơ đồ khối của Timer0

Muốn Timer hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vào Timer0 bằng 4 tần số oscillator) Khi giá trị thanh ghi TMR0 từ FFh trở về 00h, ngắt Timer0 sẽ xuất hiện Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động

Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>) Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOCKI Bịt TOSE (OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào bột đếm Cạnh tác động sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1

Trang 5

Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ được set Đây chính là cơ ngắt của Timer0 Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thực hiện lại quá trình đếm Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độ sleep

Bộ chia tần số (prescaler) được chia sẻ giữa Timer0 và WDT (Watchdog Timer) Điều

đó có nghĩa là nếu prescaler được sử dụng cho Timer0 thì WDT sẽ không có được hỗ trợ của prescaler và ngược lại Prescaler được điều khiển bởi thanh ghi OPTION_REG Bit PSA (OPTION_REG<3>) xác định đối tượng tác động của prescaler Các bit PS2 PS0 (OPTION_REG<2:02) xác định tỉ số chia tần số của prescaler Xem lại thanh ghi OPTION_REG để xác định lại một cách chi tiết về các bit điều khiển trên,

Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler Khi đối tượng tác động là Timer), tác động lên giá trị thanh ghi TMR0 sẽ xóa prescaler nhưng không làm thay đổi đối tượng tác động của prescaler Khi đối tượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngưng tác vụ hỗ trợ cho WDT

Các thanh ghi điều khiển liên quan đến Timer) bao gồm:

TMR0 (địa chỉ 01h, 101h) : chứa giá trị đếm của Timer0

INTCON (địa chỉ (Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)

OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler

b) TIMER1

Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi (TMRTH:TMR1L) Cờ ngắt của Timer1 là bit TMRTIF (PIRI<0>) Bit điều khiển của Timer1 sẽ là TMRTIE (PIE<0>)

Tương tự như Timer0, Timer1 cũng có hại chế độ hoạt động: chế độ định thời (timer) với xung kích là xung clock của Oscillator (tần số của timer bằng 4 tần số của Oscillator) và chế độ đếm (counter) với xung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoài thông qua chân RC0/TiOSO/TICKI (cạnh tác động là cạnh lên) Việc lựa chọn xung tác động (tương ứng với việc lựa chọn chế độ hoạt động là timer hay counter) được điều khiển bởi bịt TMRICS (TICON<l>)

Trang 6

Hình 2: sơ đồ khối của Timerl:

Ngoài ra Timerl còn có chức năng reset input bên trong được điều khiển bởi một trong hai khối CCP (Capture/Compare/PWM)

Khi bịt T10SCEN (TICON<3>) được set, Timer1 sẽ lấy xung clock từ hai chân RCI/TIOSI/CCP2 và RCO/TiOSO/TICKI làm xung đếm Timer1 sẽ bắt đầu đếm sau cạnh xuống đầu tiên của xung ngõ vào Khi đó PORTC sẽ bỏ qua sự tác động của hai bịt TRISC<l:0> và PORTC2:> được gán giá trị 0 Khi clear bit T10SCEN Timer1 sẽ lấy xung đếm từ oscillator hoặc từ chân RC0/TiOSO/TICKI

Timer1 có hai chế độ đếm là đồng bộ (Synchronous) và bất đồng bộ (Asynchronous) Chế độ đếm được quyết định bởi bit điều khiển T1SYNC (TICON<2>)

Khi T1SYNC=1 xung đếm lấy từ bên ngoài sẽ không được đồng bộ hóa với xung clock bên trong, Timer1 sẽ tiếp tục quá trình đến khi vi điều khiển đang ở chế độ sleep và ngắt do Timerl tạo ra khi bị tràn có khả năng “đánh thức” vi điều khiển Ở chế độ đếm bất đồng bộ, Timer không thể được sử dụng để làm nguồn xung clock cho khối CCP (Capture/Compare/Pulse width modulation)

Khi TOSYNC50 xung đếm vào Timer1 sẽ được đồng bộ hóa với xung clock bên trong

Ở chế độ này Timer1 sẽ không hoạt động khi vi điều khiển đang ở chế độ sleep Các thanh ghi liên quan đến Timer1 bao gồm:

INTCON (địa chỉ OBh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)

PIR1 (địa chỉ (Ch): chứa cờ ngắt Timer1 (TMRTIF)

PIER( địa chỉ 8Ch): cho phép ngắt Timer1 (TMRIIE)

TMRIL (địa chỉ (Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1

TMR1H (địa chỉ IEh): chứa giá trị 8 bit cao của bộ đếm Timer1

c) TIMER2

Trang 7

Timer2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần số prescaler va postscaler Thanh ghi chứa giá trị đếm của Timer2 là TMR2 Bit cho phép ngắt Timer2 tác động là TMR2ỘN (T2CON<2>) Cờ ngắt của Timer2 là bit TMR2IF (PIRI<l>) Xung ngõ vào (tần số bằng 4 tần số oscillator) được đưa qua bộ chia tần số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và được điều khiển bởi các bit T2CKPS1:T2CKPS0

Hình 3: sơ đồ khối của Timer2

Timer2 còn được hỗ trợ bởi thanh ghi PR2 Giá trị đếm trong thanh ghi TMR2 sẽ tăng

từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về 00h Kh I reset thanh ghi PR2 được nhận giá trị mặc định FFh

Ngõ ra của Timer2 được đưa qua bộ chia tần số postscaler với các mức chia từ 1:1 đến 1:16 Postscaler được điều khiển bởi 4 bit T20ỤTPS3:T2OUTPS4, Ngõ ra của postscaler đóng vai trò quyết định trong việc điều khiển cờ ngắt

Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 còn đóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP

Các thanh ghi liên quan đến Timer2 bao gồm:

INTCON (địa chỉ (Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE và PEIE) PIR1 (địa chỉ ( Ch): chứa cờ ngắt Timer2 (TMR2IF)

PIE1 (địa chỉ 8Ch): chứa bit điều khiển Timer2 (TMR2IE)

TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2

T2CON (địa chỉ 12h): xác lập các thông số cho Timer2

Trang 8

CHƯƠNG II: THIẾT KẾ

I Thiết kế sơ đồ khối

1 Sơ đồ khối tổng thể

Sau khi nghiên cứu thì theo yê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 máy tính cầm tay như hình sau:

Hình 4: Sơ đồ khối tổng thể của bộ hiển thị tốc độ động cơ

Nguyên lý hoạt động của sơ đồ:

Khi hệ thống được đảm bảo lúc đó hệ thống sẽ được cấp nguồn và bắt đầu hoạt động Khi khối xử lý được cấp điện, khối này sẽ lấy các thông tin, dữ liệu được cài sẵn trong thiết bị để phân tích và đưa ra tín hiệu Lúc này tín hiệu sẽ được xuất ra động cơ làm cho động cơ quay và xuất ra khối hiển thị để hiển thị kết quả thu được

2 Chức năng của từng khối:

+) Khối nguồn: cung cấp điện áp chuẩn 12V cho PIC hoạt động

+) Khối điều khiển: Xử lý các thông tin nhập vào từ khối nhập dữ liệu mã hóa và đưa ra khối hiển thị

+) Khối hiển thị: hiển thị dữ liệu được nhập và kết quả đưa ra vào LCD(20x4)sau khi được tính toán từ khối điều khiển

Trang 9

a) Khối điều khiển:

Có thể sử dụng các loại VĐK như AVR, 8051, ARM, PIC mà có khả năng đáp ứng cho việc thực hiện các phép tính toán ( + - * / ) đáp ứng yêu cầu của bài toán Tuy nhiên trong hệ thống này lựa chọn PIC 18F877A:

Hình 5: Vi điều khiển Pic16F877A

− Ưu điểm của vi điều khiển này:

+ Họ vi điều khiển này có thể dễ dàng mua trên thị trường

+ Tính phổ biến cao

+ Giá thành hợp lí

+ Có đầy đủ các tính năng của một vi điều khiển hoạt động độc lập

+ Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, ngôn ngữ lập trình khá phổ biến

+ Không quá phức tạp trong lập trình

+ Lập trình trên LCD đơn giản hơn nhiều so với các họ vi điều khiển khác

b) Khối hiển thị

Có thể sử dụng rất nhiều thiết bị hiển thị có khả năng đáp ứng cho hệ thống này như: LED 7 thanh, LED ma trận, LED đơn, LCD

Nhưng trong bài này, chúng ta chỉ nghiên cứu về LCD LM044L

a) LCD LM044L

Đây là thiết bị hiển thị có độ phân giải cao, hiển thị kết quả rõ ràng, giá thành không quá đắt Vì thế nó là thiết bị đáp ứng cho hệ thống này là tốt nhất

Trang 10

Hình 6: LCD LM044L

Chức năng các chân:

● VSS: Chân nối đất cho LCD

● VDD: Chân cấp nguồn cho LCD

● VEE: Điều chỉnh sự tương phản cho LCD

● RS: Chân chọn thanh ghi (Register select) Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi

+) Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ

“ghi” -write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)

+) Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD

● RW: Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc

● E: Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E

+) Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E +) Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp

● D0-D7: Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU

Có 2 chế độ sử dụng 8 đường bus này :

+) Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7 +) Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là

Trang 11

b) Động cơ encoder

Theo yêu cầu đề tài đặt ra thì chúng em sử dụng động cơ encoder, loại động cơ chuyên dùng để điều khiển và đọc tốc độ của động cơ theo yêu cầu đề tài

Hình 7: Động cơ encoder

Nguyên lý hoạt động của encoder

− Encoder hoạt động trên nguyên lý đĩa quay quanh trục, trên đĩa có các rãnh để tín hiệu quang chiếu qua đĩa (Led) Chỗ có lỗ (rãnh) thì ánh sáng xuyên qua được, chỗ không

có lỗ (rãnh) ánh sáng không xuyên qua được.Với các tín hiệu có, hoặc không có ánh sáng chiếu qua, người ta ghi nhận được đèn led có chiếu qua lỗ hay không Số xung đếm được và tăng lên nó tính bằng số lần ánh sáng bị cắt Cảm biến thu ánh sáng sẽ bật tắt liên tục => tạo ra các xung vuông Việc sử dụng các bộ mã hóa sẽ ghi nhận lại số xung và tốc độ xung Tín hiệu dạng xung sẽ được truyền về bộ xử lý trung tâm như : vi xử lý hoặc PLC,… người điều khiển sẽ biết được vị trí và tốc độ của động cơ

Trang 12

Hình 8: Nguyên lý làm việc của encoder

− Thông số cần quan tâm khi chọn Encoder:

+ Độ phân giải: hay còn gọi là số xung – tương ứng số tín hiệu encoder đếm được khi quay 1 vòng Encoder có số xung càng cao thì giá càng cao Thang máy thường dùng xung 1024p/r, chế tạo máy vào khoảng 360p/r, 1000p/r Ngoài ra còn có các xung lên đến 6000p/r hoặc 6pr

encoder có dãy điện áp:5~24V thì rất dễ Tuy nhiên với một số encoder trục lớn: 30-40mm, encoder theo máy sẽ thường gặp điện áp xác định: 5V, 12V hoặc 15V Do đó phải đọc kỹ lại trước khi lắp Vì encoder cháy rồi thì bắt buộc thay thế cả con, rất tốn tiền

xem số dây được kí hiệu trên tem

Complemental, Totem Pole, Line Driver Dạng ngõ ra quy định nguồn cấp, đầu đọc thông tin …

− Như vậy hệ thống sẽ sử dụng các linh kiện cơ bản sau:

+ PIC 16F877A

+ LCD1 LM044L

+ Động cơ encoder

Trang 13

II.Lưu đồ và chương trình Thiết kế bộ hiển thị tốc độ động cơ ra LCD

a Lưu đồ cho biết trình tự điều khiển

Hình 9: Lưu đồ trình tự làm việc

b Chương trình PIC C

Trang 14

Hình 10: Chương trình code PIC C

c Sơ đồ mô phỏng đề tài trên Proteus

Hình 11: Hình mô phỏng toàn bộ mạch của đề tài

d Giải thích code

Trang 15

#include <16f877a.h> //khai báo thư viện PIC 16F844A

#use delay(clock=20M)

#define LCD_ENABLE_PIN PIN_E2 //khai báo chân LCD

#define LCD_RS_PIN PIN_E0

#define LCD_RW_PIN PIN_E1

#define LCD_DATA4 PIN_D4

#define LCD_DATA5 PIN_D5

#define LCD_DATA6 PIN_D6

#define LCD_DATA7 PIN_D7 #include <lcd.c> //khai báo thư viện LCD unsigned int16 a=0,c=0,d; //Khai báo các biến sử dụng #int_TIMER0 //cờ tràn timer0 void ngat1() //hàm ngắt { c++; // tăng biến c lên 1 đơn vị } void main()

{

set_tris_C(0xff); //Setup chân C input

set_tris_D(0xff); //Setup chân D

set_tris_E(0xff); //Setup chân E

SETUP_COUNTERS(T0_EXT_L_TO_H,T0_DIV_1); //cài đặt timer ở chế độ counter đếm xung ngoài

enable_interrupts(INT_TIMER0); //bật, ngắt timer

enable_interrupts(GLOBAL); //bật, ngắt toàn cục

Ngày đăng: 05/01/2022, 17:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w