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

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)

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.04 MB, 17 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

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


Hệ thống hiển thị tốc độ động cơ lên LCD
CHƯƠNG I: GIỚI THIỆU

7

I.

7

Tổng quan về đề tài

II .Phạm vi nghiên cứu

7

III . yêu cầu chính của đề tài
Hình 1: sơ đồ khối của Timer0
Hình 2: sơ đồ khối của Timerl:
Hình 3: sơ đồ khối của Timer2

7
8
9
10

CHƯƠNG II: THIẾT KẾ


11

I.

11
11
11
11
11
12
12
12
13
13
14
15

Thiết kế sơ đồ khối
Sơ đồ khối tổng thể
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ơ đồ:
2. Chức năng của từng khối:
a) Khối điều khiển:
Hình 5: Vi điều khiển Pic16F877A
b) Khối hiển thị
Hình 6: LCD LM044L
b) Động cơ encoder
Hình 7: Động cơ encoder
Hình 8: Nguyên lý làm việc của encoder
1.


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
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

16
16
16
17
18
18
18

CHƯƠNG 3 : KẾT QUẢ THỰC HIỆN VÀ KẾT LUẬN

21

6


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 tốn phải đạt các 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

a) TIMER0
7


Đâ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.

8



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>).

9


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
x́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

10


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.

11



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 tốn từ khới điều khiển.

12


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.

13



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 DB0DB7, 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à
14


DB7.
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 xun 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 vng. 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ơ.

15


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.
+ Điện áp: Encoder thường xuyên bị cháy do khi lắp đặt khơng chú ý nguồn cấp. Nếu
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: 3040mm, 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.
+ Ngõ ra: AB, ABZ, AB đảo, ABZ đảo. Bạn dễ dàng xác định tín hiệu ngõ ra bằng cách
xem số dây được kí hiệu trên tem
+ Dạng ngõ ra: Có nhiều dạng ngõ ra, liệt kê sơ sơ gồm: Open Collector, Voltage Output,
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

16


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

17


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

18


#include <16f877a.h>

//khai báo thư viện PIC 16F844A

#use delay(clock=20M)
#define LCD_ENABLE_PIN PIN_E2
#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 chân LCD

//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);
đếm xung ngoài

//cài đặt timer ở chế độ counter

enable_interrupts(INT_TIMER0);

//bật, ngắt timer

enable_interrupts(GLOBAL);


//bật, ngắt toàn cục

19


set_timer0(0);

//setup timer0 ở giá trị ban đầu

lcd_init();
while(TRUE)
{
set_timer0(0);

//setup timer0 ở giá trị ban đầu

delay_ms(1000);

// tạo trễ 1 giây

a= get_timer0() + c*256;

//công thức tính số xung trong 1 giây

c=0;

//reset c=0

lcd_gotoxy(2,1);


//thiết lập hiển thị trên LCD dịng 1

printf(lcd_putc,"xung: %lux/s", a);

// hiển thị sớ xung/giây dựa trên biến a

d= (a*60)/24;

//công thức tính tốc độ động cơ trong 1 phút

lcd_gotoxy(1,2);

//thiết lập hiển thị trên LCD dịng 2

printf(lcd_putc,"tocdo: %luv/p", d);

//// hiển thị tớc đợ đợng cơ dựa trên biến d

}
}

20


CHƯƠNG 3 : KẾT QUẢ THỰC HIỆN VÀ KẾT LUẬN
● Quá trình thực hiện mô phỏng chương trình chạy đúng theo dự kiến của đề tài
,trong khi thực hiện có gặp mợt sớ khó khăc nhưng chúng em đac khắc phục được.
● Mơ hình của chúng em có hướng phát triền rất tốt. Ví dụ như phát triển lên một hệ
thớng điều khiển có khới phát xung và mợt sớ nút bấm có chức năng tùy chỉnh đợng

tớc đợ

21



×