Tải bản đầy đủ (.pdf) (22 trang)

VXL Điều khiển tốc độ động cơ DC dùng 8051_PWM

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.03 MB, 22 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN

BÀI TẬP LỚN

VI XỬ LÝ

Đề tài: ĐO VÀ ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC
BẰNG PHƯƠNG PHÁP PWM
SỬ DỤNG VĐK 8051

Giảng viên hướng dẫn:
Mã lớp học:
Họ và tên sinh viên:
MSSV:
Lớp:

TS. Trần Thị Anh Xuân
102462
Đỗ Công Hiếu
20151307
Tự động hoá 3- K60

Hà Nội, 05-2018


MỤC LỤC
MỤC LỤC .............................................................................................................. 1
DANH MỤC HÌNH ẢNH ..................................................................................... 2
CHƯƠNG 1. LƯU ĐỒ THUẬT TOÁN ............................................................... 3


CHƯƠNG 2. MẠCH MÔ PHỎNG ....................................................................... 4
2.1. Các khối linh kiện ................................................................................ 4
2.2. Sơ đồ mạch mô phỏng.......................................................................... 7
2.3. Kết luận ................................................................................................ 7
CHƯƠNG 3. CHƯƠNG TRÌNH CHO VĐK ........................................................ 8
3.1. Khối khởi tạo........................................................................................ 8
3.2. Khối đo tốc độ .................................................................................... 11
3.3. Khối điều khiển .................................................................................. 12
3.4. Khối hiển thị tốc độ ............................................................................ 14
3.5. Chương trình tạo trễ ........................................................................... 15
3.6. Chương trình chính ............................................................................ 16
3.7. Kết luận .............................................................................................. 16
CHƯƠNG 4. CHẠY MÔ PHỎNG ...................................................................... 17
4.1. Kiểm tra thoạt động mức STOP ......................................................... 17
4.2. Kiểm tra hoạt động mức 10% đến 90% ............................................. 17
4.3. Kiểm tra hoạt động mức MAX .......................................................... 21
4.4. Kết luận .............................................................................................. 21

1


DANH MỤC HÌNH ẢNH
Hình 2.1. VĐK 89C51 trên Proteus ....................................................................... 4
Hình 2.2. Khối động cơ .......................................................................................... 4
Hình 2.3. LED7-3 số .............................................................................................. 5
Hình 2.4. Bảng điều khiển...................................................................................... 6
Hình 2.5. Mạch mã hoá 74LS147 .......................................................................... 6
Hình 2.6. Ngắt điều khiển ...................................................................................... 7
Hình 2.7. Sơ đồ mạch nguyên lý trên phần mềm mô phỏng Proteus..................... 7
Hình 4.1. Mô phỏng với mức điều khiển STOP .................................................. 17

Hình 4.2. Mô phỏng với mức điều khiển 10% ..................................................... 18
Hình 4.3. Thông số xung PWM ở mức điều khiển 10% ...................................... 18
Hình 4.4. Mô phỏng với mức điều khiển 50% ..................................................... 19
Hình 4.5. Thông số xung PWM ở mức điều khiển 50% ...................................... 19
Hình 4.6. Mô phỏng với mức điều khiển 80% ..................................................... 20
Hình 4.7. Thông số xung PWM ở mức điều khiển 80% ...................................... 20
Hình 4.8. Mô phỏng với mức điều khiển MAX ................................................... 21

2


CHƯƠNG 1. LƯU ĐỒ THUẬT TOÁN
Trong chương đầu tiên này, em sẽ trình bày lưu đồ thuật toán “Đo và điều khiển
tốc độ động cơ DC bằng phương pháp điều chế độ rộng xung sử dụng Vi Điều
Khiển 8051”.
STAR
T
Khởi tạo:
- Khởi tạo ngắt
- Khởi tạo giá trị
ngắt

Ngắt INT0?

Y

-

Nhận giá trị điều khiển
Xử lý, lưu giá trị điều khiển

Hiển thị giá trị đang điều khiển

N
Ngắt Timer0
50ms?

Y

- Đếm số lần ngắt
- Tại lần ngắt thứ 20 (1 giây):
+Trả về số xung và tính toán tốc độ
+ Reset biến đếm xung

N
Ngắt INT1?

Y

N
Ngắt Timer1
1ms?

N
-

Tăng biến đếm xung

-Đếm số lần ngắt, cứ 10 ngắt tạo thành
Y


1 chu kỳ PWM (10ms)
- So sánh biến đếm với giá trị điều
khiển, nếu biến đếm bằng giá trị điều
khiển thì tắt Xung PWM, đợi chu kỳ
PWM mới, nếu chưa bằng thì bật PWM
-Reset biến đếm tại lần ngắt thứ 10

Hiển thị tốc độ
Đợi các ngắt

Theo lưu đồ thuật toán trên, em sẽ sử dụng 4 ngắt: ngắt INT0 để nhận điều
khiển, ngắt Timer 0 kết hợp ngắt INT1 để đo tốc độ, ngắt Timer 1 dùng để để tạo
xung PWM. Trong bước tiếp theo em sẽ triển khai thiết kế mạch bằng cách dùng
phần mềm mô phỏng Proteus.
3


CHƯƠNG 2. MẠCH MÔ PHỎNG
Từ ý tưởng đã thể hiện trong lưu đồ thuật toán, trong chương này, em sẽ trình
bày sơ lược các linh kiện được sử dụng, cách ghép nối và phân tích các chức năng
của chúng. Sử dụng phần mềm mô phỏng: Proteus 8.5 SP0 build 22067.

2.1. Các khối linh kiện
2.1.1. Vi điều khiển 8051- 89C51

Hin
̀ h 2.1. VĐK 89C51 trên Proteus

Hình 1.1. là hình ảnh của VĐK 89C51 trên phần mềm mô phỏng Proteus.
VĐK 89C51 được cung cấp nguồn dao động bằng thạch anh có tần số 12MHz.

2.1.2. Động cơ DC- Encoder
Hình 1.2. Mô tả cách ghép nối các linh kiện của khối động cơ.

Hin
̀ h 2.2. Khối động cơ

Động cơ được sử dụng trong mạch với các thông số cơ bản sau:
-

Điện áp định mức: Uđm= 5V

-

Tốc độ định mức: Nđm= 20 vòng/ giây
4


Motor DC có cảm biến tốc độ với ba đầu ra, trong đó hai đầu ra có độ phân
giải: 12 xung/ vòng và một đầu ra có độ phân giải 1 xung/ vòng
Vì dòng ra từ VĐK nhỏ, chỉ tầm 15mA-20mA nên em đã sử dụng Transistor
để chịu được dòng tải của động cơ. Transistor là loại NPN, hoạt động ở trạng thái
bão hoà, động cơ hoạt động khi chân PWM của VĐK có mức logic 1
Điện trở và diode có chức năng tiêu tán dòng từ động cơ khi Transitor chuyển
thạng thái từ dẫn sang không dẫn.
2.1.3. Khối hiển thị
Khối hiển thị có chức năng hiện thì tốc độ của động cơ, đơn vị: Vòng/giây
LED 7 thanh được dùng là loại led 7 thanh- 3 số chung cực Dương (LED
này được chỉnh sửa thủ công từ LED 7- 4 số). LED có hình dạng và phân bố chân
như hình 1.3.


Hin
̀ h 2.3. LED7-3 số

Như trên hình 1.3, dữ liệu đưa vào LED và cổng P1. Ngoài ra còn sử dụng
3 chân P3.5 P3.6 P3.7 để chọn LED sáng (sử dụng phương pháp quét LED- Tần
số quét led là 666Hz)
2.1.4. Khối điều khiển
Khối điều khển có chức năng điều khiển tốc độ động cơ. Với bước nhảy cấp
là 10% (từ trạng thái đứng yên đến tốc độ định mức).
5


2.1.4.1. Bảng điều khiển

Hin
̀ h 2.4. Bảng điều khiển

Hình 1.4 là bảng điều khiển gồm 11 nút nhấn tướng ứng với 11 cấp tốc độ
của động cơ.
Bên cạnh các nút điều khiển là LED & 7 thanh có tác dụng hiển thị mức
đang điều khiển.
2.1.4.2. Mạch mã hoá
Mạch mã hoá được sử dụng là mạch giãi mã 9/4 (74LS147) giúp đơn giản
hơn trong việc xử lý dữ liệu nhận từ Bảng điều khiển. Tương ứng với 9 mức đầu
vào thì đầu ra bộ giải mã sẽ cho 9 dữ liệu có giá trị thập phân tương ứng từ 14 đến
6 (do đẩu ra Bộ giải mã tích cực mức thấp).

Hin
̀ h 2.5. Mạch mã hoá 74LS147


Như mô tả ở hình 1.5, mạch giải mã chỉ có 9 chân đầu vào nên 2 tín hiệu
STOP và MAX (tốc độ định mức) được đưa trực tiếp vào 2 chân P2.4 và P2.5.
6


Ngoài hai khối chính trên, để VĐK nhận biết được thời điểm thay đổi tốc
độ, trong khối này em còn sử dụng thêm mạch AND với 6 đầu vào và 1 đầu ra.
Trong đó, 6 đầu vào của phần tử AND nối với 4 đầu ra của Mạch giải mã và 2 tín
hiệu STOP và MAX. Đầu ra mạch AND nối vào ngõ vào ngắt INT0.

Hin
̀ h 2.6. Ngắt điều khiển

Hình 1.6 mô tả cách ghép nối phần tử AND.

2.2. Sơ đồ mạch mô phỏng.
Hình 2.7. là sơ đồ mạch nguyên lý trên phần mềm mô phỏng Proteus

Hin
̀ h 2.7. Sơ đồ mạch nguyên lý trên phần mềm mô phỏng Proteus

2.3. Kết luận
Từ sơ đồ nguyên lý đã vẽ, em đã có tiến hành viết chương trình cho VĐK
89C51.
7


CHƯƠNG 3. CHƯƠNG TRÌNH CHO VĐK
Trong chương này, em sẽ trình bày chương trình và giải thích hoạt động của
chương trình. Chương trình được viết và dịch trên Keil C C51 version 9.01

Chương trình đo được tốc độ tối đa: 20 vòng/giây.

3.1. Khối khởi tạo
3.1.1. Bắt đầu chương trình
3.1.1.1. Đặt tên gọi
Để thuận tiện trong khi lập trình, em đã đặt tên một số Byte và Bit được sử
dụng như sau:
; Tên các bit, byte liên quan đến điều khiển
level DATA P0; Đặt tên cổng P0 là level, cổng báo mức điều khiển
bdieukhien bit P3.2; Đặt tên bit P3.2 là bdieukhien, bit báo điều khiển
input DATA P2; Đặt tên cổng P2 là inout, cổng vào điều khiển khiển
bstop bit P2.4; Đặt tên bit P2.4 là bstop, bit điều khiển STOP
bmax bit P2.5; Đặt tên bit P2.5 là bmax, bit điều khiển MAX
bpwm bit P3.0; Đặt tên bit P3.0 là bpwm, bit ra PWM
;Tên bit vào ngắt INT1 (đo tốc độ)
btocdo bit P3.3; Đặt tên bit P3.3 là btocdo, bit xung động cơ
;Tên các bit, byte liên quan đến hiển thị tốc độ
led DATA P1; Đặt tên cổng P1 là led, cổng ra hiển thị LED
dot bit P1.7; Đặt tên bit P1.7 là dot, bit hiển thị dấu chấm
seled1 bit P3.5; Đặt tên bit P3.5 là seled1, bit chọn LED hàng chục
seled2 bit P3.6; Đặt tên bit P3.6 là seled2, bit chọn LED đơn vị
seled3 bit P3.7; Đặt tên bit P3.7 là seled3, bit chọn LED hàng thập phân

8


;Tên của các biến dùng để lưu giá trị
t DATA 00H; Đặt tên Byte có địa chỉ 00H (R0) là t, Byte đếm ngắt Timer 0
n DATA 01H; Đặt tên Byte có địa chỉ 01H (R1) là n, Byte lưu kết quả xung
count DATA 02H; Đặt tên Byte có địa chỉ 02H (R2) là count, Byte đếm ngắt INT1

KQ_Nguyen DATA 03H;Đặt tên Byte có địa chỉ 03H (R3) là KQ_Nguyen,
Byte lưu kết quả phần thập nguyên (Vòng/Giây)
KQ_ThPhan DATA 04H; Đặt tên Byte có địa chỉ 04H (R4) là KQ_ThPhan,
Byte lưu kết quả phần thập phân (Vòng/Giây)
Tx DATA 05H; Đặt tên Byte có địa chỉ 05H (R5) là Tx, Byte đếm thời gian
xung đầu ra PWM
REF DATA 06H; Đặt tên Byte có địa chỉ 06H (R6) là REF, Byte lưu giá trị dữ
liệu điều khiển
3.1.1.2. Bắt đầu chương trình
Bắt đầu chương trình:
ORG 000H; Điểm nhập hệ thống
LJMP MAIN; Nhảy đến nhãn MAIN
ORG 0003H; Vector ngắt INT0 (Ngắt điều khiển)
LJMP DIEUKHIEN; Nhảy đến chương trình ngắt INT0 (DIEU KHIEN)
ORG 000BH; Vector ngắt TIMER0 (Ngắt tạo thời gian thực 1 giây)
SJMP SECOND; Nhảy đến chương trình ngắt TIMER0 (SECOND)
ORG 0013H; Vector Ngắtt INT1 (Ngắt xung tốc độ động cơ)
SJMP DEMXUNG; Nhảy đến chương trình ngắt INT1 (DEMXUNG)
ORG 001BH; Vector ngắt TIMER0 (Ngắt tạo xung PWM)
LJMP PWM; Nhảy đến chương trình ngắt TIMER 1 (PWM)
ORG 30H; Điểm nhập chương trình
9


3.1.2. Khởi tạo giá trị
Trong chương trình này, em có sử dụng 4 ngắt bao gồm: Ngắt ngoài INT0; Ngắt
Timer 0; Ngắt ngoài INT1 và ngắt Timer 1 với thứ tự ưu tiên mặc định:
KHOITAO:
;Khởi tạo ngắt
SETB EA; Cho phép ngắt toàn cục

; Khởii tạo Ngắt Timer0/1
MOV TMOD,#11H; Timer 0 chế độ 1 và Timer 1 chế độ 1
SETB ET0; Cho phép ngắt Timer 0
MOV TH0, #3CH
MOV TL0, #0B0H; Đếm 50.000 xung (50ms)
SETB ET1; Cho phép ngắt Timer 1
MOV TH1,#0FCH
MOV TL1, #18H; Đếm 1.000 xung (1ms)
SETB TR0; Khởi động bộ định thời Timer 0
SETB TR1; Khởi động bộ định thời Timer 1
;Khởi tạo ngắt INT0/INT1
SETB bdieukhien; Khai báo bdieukhien là ngõ vào
SETB EX0; Cho phép ngắt ngoài INT 0
SETB IT0; INT0 ngắt theo chế độ sườn xuống
SETB btocdo;Khai báo btocdo là ngõ vào
SETB EX1; Cho phép ngắt ngoài INT 1
SETB IT1; INT1 ngắt theo chế độ sườn xuống
;Cài đặt các ngõ, cổng chế độ vào
MOV input, #0FFH; Khai báo input là cổng vào
SETB bstop; Khai báo bstop là ngõ vào
SETB bmax; Khai báo bmax là ngõ vào
;Khởi tạo các giá trị cần thiết
MOV DPTR, #ALED; Nạp giá trị Bảng mã ALED cho thanh ghi DPTR;
MOV level, #0C0H; Khởi tạo #0C0H cho level (Đèn báo điều khiển hiển thị số 0)
RET; Kết thúc chương trình con (KHOITAO)

10


3.2. Khối đo tốc độ

Khối này kết hợp ngắt Timer 0 và ngắt ngoài INT1 để đo tốc độ động cơ trên
nguyên lý đếm tần số trong 1 giây.
3.2.1. Khối đếm xung
Motor sử dụng có cảm biến đầu ra dạng xung, xung này được đưa vào ngõ ngắt
ngoài INT1, chế độ ngắt theo sườn xuống:
DEMXUNG:
INC count; Đếm xung tốc độ
RETI ; Kết thúc chương trình ngắt (DEMXUNG)

3.2.2. Khối tạo thời gian thực
Khối này sử dụng ngắt Timer 0 để tạo thời gian thực 1s.
SECOND:
PUSH ACC; Sao lưu thanh ghi A vào ngăn xếp
PUSH B; Sao lưu thanh ghi B vào ngăn xếp
MOV TH0, #3CH
MOV TL0, #0B0H; Đếm 50.000 xung (50ms)
SETB TR0; Khởi động bộ định thời Timer 0
INC t; Tăng biến t đếm số lần ngắt Timer 0
MOV A, t; Chuyển dữ liệu của t vào A để chuẩn bị so sánh
CJNE A, #20, CONTINUE; Kiểm tra xem đã đủ 20 lần ngắt (1s) hay chưa
;Nếu chưa thì nhảy đến nhãn CONTINUE để kết thúc ngắt Timer 0.
;Nếu t=20 thì trả về kết quả, khởi tạo lại biến đếm, tính toán kết quả rồi thoát
MOV n, count; Trả về kết quả đếm xung
MOV count,#0H; Khởi tạo lại biến đếm xung
MOV t, #0H; Khởi tạo lại biến đếm số lần ngắt Timer 0
ACALL KETQUA; Gọi chương trình con tính kết quả
CONTINUE:
POP B; Khôi phục lại thanh ghi B từ ngăn xếp
POP ACC; Khôi phục lại thanh ghi A từ ngăn xếp
RETI ; Thoát khỏi chương trình ngắt Timer 0


11


3.3. Khối điều khiển
Khối điều khiển có nhiệm vụ nhận tín hiệu vào và đưa ra tín hiệu điều khiển
tương ứng. Trong khối này em dùng ngắt INT0 để nhận biết đang có tín hiệu điều
khiển và gọi hàm tính toán giá trị điều khiển. Ngắt Timer1 dùng để phát xung trên
cơ sở tín hiệu điều khiển đã nhận được.
3.3.1. Khối nhận giá trị điều khiển
Khối nhận tín hiệu điều khiển sử dụng cổng vào P2 và tín hiệu báo điều khiển
là ngắt INT0 theo sườn xuống, vì vậy khối này là chương trình ngắt INT0.
DIEUKHIEN:
PUSH ACC; Sao lưu thanh ghi A vào ngăn xếp
MOV A, P2;

Nhận giá trị điều khiển từ P2, đưa vào A

JNB bstop, STOP;

Kiểm tra xem có phải tín hiệu STOP

JNB bmax, MAX;

Kiểm tra xem có phải tín hiệu MAX

SJMP ADJ; Nhảy đến nhãn ADJ nếu không phải STOP hoặc MAX
STOP: ; Nếu là tín hiệu STOP
MOV REF, #0; Gán giá trị đặt REF bằng 0
MOV A, REF;Chuyển giá trị điều khiển REF cho A

MOVC A,@A+DPTR; Lấy số có thứ thự A trong Bảng ALED (DPTR chứa địa chỉ
đầu tiên bảng ALED đã khai báo ở chương trình khởi tạo) và lưu vào A.
MOV level, A; Xuất giá trị A (mức điều khiển) ra led báo mức điều khiển
POP ACC; Khôi phục lại thanh ghi A từ ngăn xếp
RETI; Kết thúc chương trình ngắt INT0 (DIEUKHIEN)
MAX:
MOV REF, #10; Gán giá trị đặt REF bằng 10
MOV A, REF;Chuyển giá trị điều khiển REF cho A
MOVC A,@A+DPTR; Lấy số có thứ thự A trong Bảng ALED
MOV level, A; Xuất giá trị A (mức điều khiển) ra led báo mức điều khiển
POP ACC; Khôi phục lại thanh ghi A từ ngăn xếp
RETI; Kết thúc chương trình ngắt INT0 (DIEUKHIEN)

12


ADJ: Nếu không phải là tín hiệu STOP hoặc START
CPL A; Hiệu chính kết quả do tín hiệu điều khiển tích cực mức thấp.
MOV REF, A; Chuyển giá trị điều khiển đã hiệu chỉnh vào REF
MOVC A,@A+DPTR; Lấy số có thứ thự A trong Bảng ALED
MOV level, A; Xuất giá trị A (mức điều khiển) ra led báo mức điều khiển
POP ACC; Khôi phục lại thanh ghi A từ ngăn xếp
RETI; Kết thúc chương trình ngắt INT0 (DIEUKHIEN)

3.3.2. Khối tạo xung PWM
Khối tạo xung có chức năng dựa vào dữ liệu ở REF để đưa ra tín hiệu PWM
tương ứng. Khối này sử dụng ngắt Timer 0, tần số PWM là 100Hz (cứ 10 ngắt
Timer lại tạo 1 xung). Vì vậy có thể chia xung PWM với 10 độ rộng khác nhau.
PWM:
PUSH ACC; Sao lưu thanh ghi A vào ngăn xếp

MOV TH1,#0FCH
MOV

TL1,#18H; Đếm 1.000 xung (1ms)

SETB TR1; Khởi động lại Timer1
LOOP:
MOV A, Tx; Chuyển dữ liệu từ Tx vào A
INC Tx; Tăng biến đếm thời gian PWM lên 1.
CHECK1: ;
CJNE A, #9, CHECK2; Nếu Tx khác 9 (chưa bằng 9) thì nhảy đển CHECK2
MOV Tx, #0

; Nếu Tx bằng 9 (lần ngắt thứ 10) thì khởi tạo lại biến đếm Tx

CHECK2:
CJNE A, REF, CHECK3; Kiểm tra xung PWM đạt độ rộng điều khiển chưa
CLR bpwm; Xung ra PWM ở mức thấp
POP ACC; Khôi phục lại thanh ghi A từ ngăn xếp
RETI; Kết thúc chương trình ngắt Timer 1
CHECK3:
JNZ EXIT; Kiểm tra xem có phải chu kỳ PWM mới, (Tx=0)( A đang bằng Tx)
SETB bpwm; Xung ra PWM ở mức cao
EXIT:

;Nếu chưa bắt đầu chu kỳ mới (Tx khác 0)

POP ACC; Khôi phục lại thanh ghi A từ ngăn xếp
RETI; Kết thúc chương trình ngắt Timer 1


13


3.4. Khối hiển thị tốc độ
Khối này có nhiệm vụ hiển thị tốc độ ra LED 7 thanh (Đơn vị: Vòng/Giây).
3.4.1. Khối xử lý tốc độ
Vì tín hiệu đo được là số xung/giây (lưu ở n), vì vậy khối này có nhiệm vụ quy
đổi tốc độ từ đơn vị xung/giây sang đơn vị vòng/giây.
KETQUA:
;Tính phần nguyên
MOV A,n; Nạp giá trị xung đã đo n vào thanh ghi A
MOV B, #12; Nạp giá trị 12 cho B vì Động cơ có 12 xung/vòng
DIV AB; Quy đổi đơn vị xung/giây ra vòng/giây
MOV KQ_Nguyen, A; Lưu giữ kết quả phần nguyên (Lớn nhất là 255/12=21)
;Lấy thêm 1 số thập phân
MOV A, #10; Nạp giá trị 10 cho A
MUL AB; Nhân A với B (Nhân phần dư ở B với 10)
MOV B,#12; Nạp giá trị 12 cho B vì Động cơ có 12 xung/vòng
DIV AB; Quy đổi đơn vị xung/giây ra vòng/giây
MOV KQ_ThPhan, A; Lưu giữ kết quả phần thập phân (Lớn nhất là 110/12=9)
RET ; Kết thúc chương trình con (KETQUA)

3.4.2. Khối hiển thị tốc độ
Sau khối xử lý tốc độ, kết quả đo tốc độ đã có đơn vị vòng trên giây, được chia
thành 2 phần là phần nguyên (giá trị lớn nhất là 21) và phần thập phân (giá trị lớn
nhất là 9). Vì vậy phần hiển thị sẽ hiển thị 3 số: hàng chục, đơn vị và thập phân
HIENTHI:
;Hàng chục
MOV A,KQ_NGUYEN; Nạp giá trị phần nguyên tốc độ cho A
MOV B, #10; Nạp giá trị 10 cho B

DIV AB; Tìm hàng chục (Thanh ghi A)
MOVC A,@A+DPTR; Lấy số có thứ thự A trong Bảng ALED.
MOV led,A; Xuất giá trị A (hàng chục) ra led
SETB seled1; Bật LED hàng chục;
ACALL DELAY; Trễ LED hàng chục sáng
CLR seled1; Tắt LED hàng chục

14


;Hàng đơn vị
MOV A, B; Chuyển hàng đơn vị từ B đến A (B chứa dư phép chia KQ_Nguyen với 10)
MOVC A,@A+DPTR; Lấy số có thứ thự A trong Bảng ALED và lưu vào A
MOV led, A; Xuất giá trị A (hàng đơn vị) ra LED
CLR dot; Hiển thị dấu chấm ngăn cách hàng đơn vị và hàng thập phân
SETB seled2; Bật LED hàng đơn vị
ACALL DELAY ; Trễ LED hàng đơn vị sáng
CLR seled2;

Tắt LED hàng đơn vị

;Hàng thập phân
MOV A, KQ_ThPhan; Chuyển hàng thập phân vào A
MOVC A,@A+DPTR; Lấy số có thứ thự A trong Bảng ALED và lưu vào A
MOV led, A; Xuất giá trị A (hàng thập phân) ra LED
SETB

seled3; Bật LED hàng thập phân

ACALL DELAY


; Trễ LED hàng thập phân sáng

CLR seled3;

Tắt LED hàng thập phân

SJMP HIENTHI ; Lặp lại chương trình hiển thị (Chạy vô tận)
RET; Kết thúc chương trình hiển thị

3.5. Chương trình tạo trễ
Chương trình tạo trễ có nhiệm vụ tạo trễ cho LED ở chương trình hiển thị sáng.
Chương trình này có độ trễ 500uS, tần số quét LED:
DELAY:
MOV R7, #248 ; Nạp giá trị 248 cho R7 (Bank mặc định 0)- (1 chu kỳ)
BACK:
DJNZ R7, BACK; Giảm R7 rồi nhảy đến BACK nếu R7 khác 0; (2 chu kỳ)
NOP; Không làm gì (1 chu kỳ)
RET; Kết thúc chương trình Delay 500us (2 chu kỳ)
 Thời gian trễ: Tđ=1 +248*2+1+2= 500uS
15


3.6. Chương trình chính
MAIN:
ACALL KHOITAO; Gọi chương trình khởi tạo
ACALL HIENTHI; Gọi chương trình hiển thị (chạy vô tận)
ALED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,89H;
;Bảng mã chuyển đổi để hiển thị LED 7 thanh chung ANOT (Từ 0 đến 9 và H
dùng để báo mức điều khiển là mức MAX)

END; Kết thúc biên dịch.

3.7. Kết luận
Chương trình viết cho động cơ một chiều có độ phân giải cảm biến đo tốc độ
là 12 xung/vòng đã hoàn chính. Qua chương trình đã viết, em rút ra một số kết luận
sau đây.
3.7.1. Giới hạn đo tốc độ
Vì chương trình sử dụng biến đếm 1 byte để đếm xung tốc độ trong 1 giây, vì
vậy giới hạn tốc độ là:

𝑁𝑚𝑎𝑥 =

255
12

= 21.2 vòng/ giây (1272 vòng/ phút). Để

đảm bảo tính dự phòng khi có sai số, tốc độ tối đa khuyên dùng không vượt quá
20 vòng/giây (1200 vòng/phút).
Khi vượt quá giới hạn tốc độ tối đa, tốc độ đo được là số dư của tốc độ thực tế
khi chia cho 21.2:

𝑁𝐻𝑖ể𝑛 𝑡ℎị = 𝑁𝑇ℎự𝑐 𝑡ế − 𝐾 ∗ 21.2 với K nguyên, K ≥ 2.

3.7.2. Giới hạn điều khiển
Chương trình không có giới hạn về điều khiển, giới hạn điều khiển phục thuộc
vào các linh kiện phần cứng.
Đặc tính điều khiển: Điều khiển nhảy cấp, bước nhảy 10%.

16



CHƯƠNG 4. CHẠY MÔ PHỎNG
Trong chương này em sẽ tiến hành kiểm tra hoạt động của mạch mô phỏng,
kiểm tra xem chương trình đã chạy đúng như mong muốn hay chưa.

4.1. Kiểm tra thoạt động mức STOP
Khi bật nguồn hoặc ấn STOP, qua mô phỏng, động cơ đều không hoạt động.
Xung đầu ra PWM luôn ở mức thấp. Vì vậy điều khiển mức STOP hoạt động tốt.
Kết quả thu được khi mô phỏng mức STOP thể hiện trên hình 4.1 sau:

Hin
̀ h 4.1. Mô phỏng với mức điều khiển STOP

4.2. Kiểm tra hoạt động mức 10% đến 90%
Vì mức từ 10% đến 90% sử dụng chung mạch mã hoá và sử dụng chung đoạn
lệnh trong chương trình, vì vậy em sẽ kiểm tra hoạt động đồng thời của các mức
điều khiển này.
Trong quá trình chạy kiểm tra, kết hợp đồng hồ Oscilloscope để đo xem tần số
xung, độ rộng xung có đúng như mong muốn hay không để phát hiện và sửa chữa
các lỗi còn tồn đọng.
Vì khi kiểm tra các mức này, kết quả nhận được tương tự nhau, vì vậy em sẽ
báo cáo ở một só mức điều khiển ngẫu nhiên là 10%, 50% và 80%
17


4.2.1. Mức điều khiển: 10%
Mô phỏng với mức điều khiển 10% (Hình 4.2):

Hin

̀ h 4.2. Mô phỏng với mức điều khiển 10%

Khi dùng Oscilloscope kiểm tra, thu được như hình 4.2:

Hin
̀ h 4.3. Thông số xung PWM ở mức điều khiển 10%

Theo hình 4.3, em thấy xung PWM có:
-

Chu kỳ xung: 10.15ms

-

Thời gian xung mức cao: 1.05ms

 Tần sô xung: 98.5Hz, độ rộng xung: 10.3%
 Sai số tần số điều khiển là 1.5%, sai số độ rộng xung là 0.3%
18


4.2.2. Mức điều khiển 50%
Mô phỏng với mức điều khiển 50% (Hình 4.4):

Hin
̀ h 4.4. Mô phỏng với mức điều khiển 50%

Kiểm tra với Oscilloscope (Hình 4.5):

Hin

̀ h 4.5. Thông số xung PWM ở mức điều khiển 50%

Theo hình 4.5, em thấy xung PWM có:
-

Chu kỳ xung: 10.10ms

-

Thời gian xung mức cao: 5.05ms

 Tần sô xung: 99Hz, độ rộng xung: 50%
Sai số tần số điều khiển là 1.0%, sai số độ rộng xung là 0%
19


4.2.1. Mức điều khiển 80%
Mô phỏng với mức điều khiển 80% (Hình 4.6):

Hin
̀ h 4.6. Mô phỏng với mức điều khiển 80%

Kiểm tra với Oscilloscope (Hình 4.7):

Hin
̀ h 4.7. Thông số xung PWM ở mức điều khiển 80%

Theo hình 4.7, em thấy xung PWM có:
-


Chu kỳ xung: 10.10ms

-

Thời gian xung mức cao: 8.05ms

 Tần sô xung: 99Hz, độ rộng xung: 79.7%
Sai số tần số điều khiển là 1.0%, sai số độ rộng xung là 0.3%
20


4.3. Kiểm tra hoạt động mức MAX
Tương tự mức STOP, mức MAX cũng dùng ngõ tín hiệu điều khiển riêng biệt.
Đối với mức này, yêu cầu xung có độ rộng 100% (luôn ở mức cao).
Kết quả thu được khi mô phỏng mức MAX thể hiện trên hình 4.8 sau:

Hin
̀ h 4.8. Mô phỏng với mức điều khiển MAX

Khi mô phỏng, xung nhận được luôn giữ ở mức cao, phù hợp với mục đích
điều khiển.

4.4. Kết luận
Qua việc kiểm tra hoạt động của mạch trên phần mềm mô phỏng Proteus, em
nhận thấy mạch đã hoạt động cho ra kết quả tương đối tốt, sai số đầu ra tương đối
nhỏ (sai số độ rộng xung PWM dưới 1%).

21




×