1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

22 540 2

Đ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 22
Dung lượng 1,03 MB

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

Nội dung

Đây là BTL môn VXL cô Thuỳ ĐHBKHN, Để lấy code cũng như mạch mô phỏng, liên hệ mình qua FB: https:www.facebook.comHieu2705 Ngoài ra mình còn có đề tài về Đèn GT cũng như nhận làm các đề tài khác theo yêu cầu.

Trang 1

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

Hà Nội, 05-2018

Trang 2

1

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

Trang 3

2

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

Trang 4

3

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”

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

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

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

Tăng biến đếm xung

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

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

Trang 5

4

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

Trang 6

5

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

Hi ̀nh 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)

Trang 7

6 (do đẩu ra Bộ giải mã tích cực mức thấp)

Hi ̀nh 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

Trang 8

7

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

Hi ̀nh 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

Hi ̀nh 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

Trang 9

8

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

Trang 10

9

;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

Trang 11

10

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

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)

Trang 12

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

Trang 13

12

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)

Trang 14

13

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

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

Trang 15

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

Trang 16

15

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

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

Trang 17

16

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)

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%

Ngày đăng: 23/04/2019, 19:29

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