NHIỆM VỤ CỦA PHẦN MỀM

Một phần của tài liệu 239866 (Trang 72 - 110)

D. GIẢI THUẬT

G. NHIỆM VỤ CỦA PHẦN MỀM

H. GIẢI THÍCH HOẠT ĐỘNG I. CHƯƠNG TRÌNH

Chương 6 KẾT QUẢ

J. MẠCH THI CƠNG

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

A—SƠ ĐỒ: (Hình 3.1)

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 71 -

DANH SÁCH CÁC THÀNH PHẦN:

Thứ tự Số lượng Mơ tả linh kiện

01 1 IC, AT89C51, Microcontroller

02 1 12MHz Crystal 03 6 10uF Capacitor 04 4 Led 7 đoạn 05 4 BJT, 2N1015,PNP 06 1 IC, ADC0809 07 1 IC, 7447 08 1 IC, 74393 09 1 IC, MAX232 10 1 IC, LM7805 11 1 BJT, 2N1061, NPN 12 1 Biến trở 10KΩ

13 1 Cầu chỉnh lưu diode

14 2 Led thu-phát

15 2 Đầu nối DB-9 (đực, cái)

16 5 Tụ điện 10nF 17 10 Điện trở 470Ω 18 6 Điện trở 10KΩ 19 1 Điện trở 47KΩ 20 4 Điện trơ û1KΩ 21 2 Điện trở 4K7 22 1 Nút reset 23 1 Rơle 5V 8 chân 24 1 Tụ lọc nguồn, 2200uF 25V 25 2 Diode 1N4007, chống áp ngược 26 2 Tụ điện 30pF 27 2 BJT, 2N2222, NPN 28 1 BJT, D468, NPN 29 1 DC Motor 6V

B—CHỨC NĂNG CỦA TỪNG BỘ PHẬN:

KHỐI NGUỒN:

Hình 3.2 Cấu trúc mạch mguồn. Cung cấp nguồn nuơi cho mạch thi cơng.

Khối nguồn được thiết kế để cung cấp mức điện áp ổn định 5V cho mơ hình. Một biến áp 110V/220V sang 6V/9V/12V khoảng 1A; một cầu chỉnh lưu 1A; tụ điện nguồn 2200µF 25V và IC ổn áp 7805.

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 73 - KHỐI GIAO TIẾP MÁY TÍNH:

Hình 3.3 Khối giao tiếp PC-KIT Thiết lập quan hệ giao tiếp với máy tính.

Khối được thiết kế nhằm mở rộng khả năng điều khiển cho kit. Mạch giao tiếp ở đây đơn giản chỉ cĩ đầu cắm dây và bộ IC max232 và tụ điện làm tương thích điện áp giữa hai đơn vị giao tiếp là máy tính (~12V) và kit (~5V).

Hai khối giao tiếp nhau qua hai đường truyền nhận và phát, ngồi ra dây masse được nối chung.

KHỐI VI ĐIỀU KHIỂN AT89C51:

Hình 3.4 Khối điều khiển AT89C51.

Trung tâm điều khiển các chế độ làm việc của động cơ và tồn bộ mọi hoạt động khác : điều khiển động cơ chạy ở tốc độ mong muốn, đảo chiều, hãm ngược, điều khiển hoạt động mạch hiển thị led, đo tốc độ, giao tiếp với máy tính.

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 75 - KHỐI ĐẶT TỐC ĐỘ TRÊN KIT:

Hinh 3.5 Khối đặt tốc độ trên KIT. Khối điều khiển tốc độ động cơ bằng tay nằm trên kit.

Khối gồm cĩ IC ADC0809 làm chức năng chính là chuyển đổi tương tự/số, IC 74LS393 tạo xung nhịp cho ADC0809 và biến trở đặt tốc độ để chọn mức điện áp cho ADC0809.

KHỐI HIỂN THỊ:

Hình 3.6 Khối hiển thị tốc độ đo.

Dùng để hiển thị tốc độ đo được của động cơ trong mơ hình mạch thi cơng.

Khối gồm IC 7447 làm nhiệm vụ giải mã BCD sang bảy đoạn, bốn led bảy đoạn, bốn transistor A1015 kéo dịng cho bốn led bảy đoạn loại anode chung, bảy điện trở hạn dịng cho bảy đầu vào a, b, c, d, e, f và g (khơng vẽ trên hình ) và bộ điện trở phân cực transistor.

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 77 -

KHỐI MẠCH ĐỘNG CƠ:

Hình 3.7 Khối mạch động cơ.

Khối này gồm mạch động lực cung cấp cơng suất cho động cơ. Bộ phận cảm biến tốc độ sử dụng kèm theo là một đĩa CD-ROM cĩ đục lỗ và cặp led thu-phát. Một thành phần nữa là relay tám chân cho mục đích đảo chiều động cơ dùng transistor D468 để điều khiển.

C—HOẠT ĐỘNG CỦA SƠ ĐỒ: 1. Các bước chuẩn bị: 1. Các bước chuẩn bị:

Kiểm tra nối dây;

Kiểm tra nối nguồn;

Chỉnh biến trở đặt tốc độ về zero để động cơ khơng chạy khi mới cấp nguồn.

2. Hoạt động của sơ đồ:

Sau khi cấp nguồn cho mạch hoạt động, trạng thái của các khối trên như sau:

Khối nguồn cho ra điện áp 5V ở ngõ ra.

Khối giao tiếp máy tính ở trạng thái chờ.

Khối vi điều khiển AT89C51 thực thi chương trình được nạp với các điều kiện đầu là tốc độ đặt bằng zero, tốc độ đo xuất ra led là khơng, tạo xung khởi động cho là tốc độ đặt bằng zero, tốc độ đo xuất ra led là khơng, tạo xung khởi động cho ADC0809.

Khối đặt tốc độ trên kit, lúc đầu vì chưa đặt tốc độ nên động cơ khơng chạy.

Khối hiển thị hiện bốn số khơng.

Khối mạch động cơ hở mạch.

Để điều khiển động cơ chạy ở tốc độ mong muốn, chỉnh biến trở đặt tốc độ theo chiều tăng điện áp. AT89C51 trong quá trình thực thi chương trình sẽ cập nhật tốc độ từ ADC0809, so sánh tốc độ cập nhật với tốc độ trước đĩ, nếu cĩ sự thay đổi, nĩ sẽ tự động cập nhật vào ơ nhớ tốc độ chuẩn, sau đĩ sẽ điều khiển phát xung định thời, tăng mức 1 liên tục khi tốc độ chuẩn lớn hơn tốc độ đo, cho tới khi bằng nhau và ngược lại giảm định thời mức 1 khi tốc độ chuẩn bé hơn tốc độ đo.

Việc tăng hay giảm khoảng định thời tuân thủ luật: lượng tăng khoảng định thời mức này đồng thời đi kèm giảm một lượng tương ứng khoảng định thời mức kia.

Sau khi tính tốn lượng chênh lệch giữa tốc độ chuẩn và tốc độ đo, ngắt do bộ định thời timer 0 nếu xuất hiện, AT89C51 sẽ kiểm tra bit dấu (trong chương trình là bit định địa chỉ 00H) để xác định bộ đếm timer 0 đang định thời trong khoảng định thời mức 1 ( nếu nội dung 00H bằng 1) hay mức 0 ( nếu nội dung 00H bằng khơng).

Nếu đang định thời mức 1 thì xĩa 00H, nạp nội dung trong ơ nhớ giá trị định thời mức 0 vào timer 0 và cho chạy.

Nếu ngắt của timer 0 chưa can thiệp thì AT89C51 sẽ xuất tốc độ đo được từ bộ cảm biến tốc độ (CD-ROM và cặp led thu-phát) cho khối hiển thị.

Trong chương trình thực thi của AT89C51, ta sử dụng ba ngắt cĩ độ ưu tiên theo thứ tự giảm dần là Timer 0, ngắt ngồi 0, ngắt do port nối tiếp.

Ngắt ngồi 0 sẽ làm việc với độ ưu tiên xếp sau ngắt do timer 0, nếu timer 0 tràn và gây ngắt thì ngắt ngồi 0 sẽ chờ và thực thi sau đĩ. Ngắt ngồi 0 sẽ liên tục tăng ơ

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 79 -

nhớ tốc độ mỗi khi cĩ xung cạnh âm đặt vào chân /INT0 của AT89C51. Ơ nhớ tốc độ bị xĩa mỗi khi timer 0 gây ngắt.

Tiếp theo là ngắt do port nối tiếp và cách đặt tốc độ cho động cơ từ máy tính. Trên máy tính, trên panel điều khiển, ta chọn tốc độ mong muốn, nhấn nút Start, 8-bit dữ liệu sẽ truyền sang kit AT89C51. Kết thúc quá trình nhận dữ liệu từ kit gây ra ngắt. Ngắt do port nối tiếp cĩ độ ưu tiên thứ ba sau timer 0 và ngắt ngồi 0.

Dữ liệu đầu tiên khi nhập vào sẽ được kiểm tra xem liệu đĩ cĩ phải là ký tự yêu cầu đảo chiều hay khơng. Nếu phát hiện dữ liệu vừa nhận được từ máy tính là tín hiệu yêu cầu đảo chiều thì AT89C51 sẽ điều khiển đảo chiều động cơ và thốt khỏi chế độ ngắt port nối tiếp.

Nếu lệnh yêu cầu khơng phải là đảo chiều, tốc độ đặt từ máy tính sau đĩ sẽ được kiểm tra xem cĩ thay đổi so với tốc độ hiện hành hay khơng. Trường hợp khơng thay đổi sẽ phản hồi tốc độ cho máy tính.

Trường hợp khác khi tốc độ đặt khác tốc độ chuẩn, tốc độ chuẩn sẽ bị thay thế bằng chính tốc độ mới đặt này, để kết thúc quá trình ngắt của port nối tiếp, AT89C51 sẽ phản hồi tốc độ hiện hành cho máy tính. Quá trình định thời cho động cơ chạy sẽ giống như của ADC0809.

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 81 - D—GIẢI THUẬT:

Bảng danh sách các lưu đồ giải thuật được sử dụng:

Tên lưu đồ Nhiệm vụ Trang

TIMER 0_ISR Trình phục vụ ngắt do Timer 0

INT0_ISR Trình phục vụ ngắt do đếm tốc độ

SP_ISR Trình phục vụ ngắt do port nối tiếp

MAIN Chương trình chính

HIENTHITOCDO Hiển thị tốc độ đo

DELAYMS Làm trễ 1 mili giây

BINTOBCD Đổi số nhị phân 16-bit thành mã BCD nén

DIV_16_8 Chia số nhị phân 16-bit cho số 8-bit

Chức năng các ơ nhớ được dùng trong chương trình:

Ơ nhớ Chức năng

7FH Byte cao của giá trị khoảng định thời mức 1 (byte cao của TH)

7EH Byte thấp của giá trị khoảng định thời mức 1 (byte thấp của TH)

7DH Byte cao của giá trị khoảng định thời mức 0 (byte cao của TL)

7CH Byte thấp của giá trị khoảng định thời mức 0 (byte thấp của TL)

7BH Bộ nhớ cập nhật tốc độ đo theo chu kỳ làm việc của Timer 0 (~50ms)

7AH Ơ nhớ tốc độ đo (cập nhật gián tiếp qua 7BH)

79H Ơ nhớ tốc độ chuẩn

78H Ơ nhớ lưu tốc độ đặt của máy tính (cập nhật gián tiếp qua 76H)

77H Ơ nhớ lưu tốc độ đặt của ADC0809 (cập nhật gián tiếp qua 75H)

76H Ơ nhớ cập nhật tốc độ đặt từ máy tính

75H Ơ nhớ cập nhật tốc độ đặt từ ADC0809

74H Tương tự thanh ghi R7

73H Tương tự thanh ghi R6

Chức năng thanh ghi trong bank thanh ghi default:

Thanh ghi Chức năng

R2 Để đếm số lần dịch bit khi chia số 16-bit cho số 8-bit

R3 Để phát hiện tín hiệu yêu cầu đảo chiều động cơ

R5 Làm bộ đếm trong chương trình con DELAYMS

R6 Ở dạng nhị phân chứa byte thấp, BCD thì chứa hàng chục-đơn vị của giá trị tốc độ đo

TIMER 0_ISR PUSH ACC CLR TR0 Đọc tốc độ từ ADC vào ơ nhớ 75H Bit dấu: 00H = #0 ? Yes No (75H) ≠ (77H) ? Yes No Nạp (75H) vào (77H) Nạp (75H) vào (79H) Y1:

Xĩa bit dấu: 00H = #0 Nạp (7DH) vào TH0 Nạp (7CH) vào TL0 Xĩa bit P3.7 Khởi động ADC0809 Nạp (7BH) vào (7AH) Xĩa (7BH) Set bit dấu: 00H = #1

Nạp (7FH) vào TH0 Nạp (7EH) vào TL0 Set bit P3.7 SKIP_1: Khởi động timer 0: TR0=1 POP ACC RETI Y2: TIMER 0_ISR:

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 83 -

INT0_ISR

SP_ISR

Tăng nội dung bộ đếm tốc độ 7BH RETI

MAIN PUSH ACC RI = 1 ? No Yes Nạp SBUF vào (76H) Nạp (76H) vào R3 R3 ≠ 100 ? No Yes CLR RI Nạp (7AH) vào SBUF

SKIP_2: CLR TI POP ACC RETI EXIT: (76H) = (79H) ? No Yes SKIP_4: Nạp (76H) vào (79H) Nạp (76H) vào (78H) CPL P3.6 SP_ISR:

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 85 -

HIENTHITOCDO

Nạp 50 000µs(thời gian mức 0 của tín hiệu điều khiển động cơ) vào hai byte: Cao: 7DH, thấp: 7CH;

Nạp 00000µs(thời gian mức 1 của tín hiệu điều khiển động cơ) vào hai byte: Cao: 7FH, thấp: 7EH;

Khởi động ADC0809

Nạp SCON, TH1,SP Nạp TMOD, TCON, IE, IP

Set bit: TR1 = 1 Set bit: TR0 = 1 (79H) > (7AH) (Chuẩn > Đo) ? Yes No

Giảm ơ nhớ 7EH, nếu tràn 00→FF thì giảm ơ nhớ 7FH.

Tăng ơ nhớ 7CH, nếu tràn FF→00 thì tăng ơ nhớ 7DH.

Tăng ơ nhớ 7EH, nếu tràn FF→00 thì tăng ơ nhớ 7FH. Giảm ơ nhớ 7CH, nếu tràn 00→FF thì giảm ơ nhớ 7DH. X1: HIENTHITOCDO X2: (79H) < (7AH) (Chuẩn < Đo) ? Yes No X0: MAIN:

DELAYMS

Nạp (7AH) vào thanh ghi A Nạp 60 vào thanh ghi B

Nhân A với B Nạp B vào R7 Nạp A vào R6 Nạp B vào (74H) Nạp A vào (73H) BINTOBCD Nạp R7 vào 74H Nạp R6 vào 73H Nạp (73H) vào thanh ghi A Nạp số BCD đơn vị trong A (ANL) Chọn led đơn vị: ACC.4 = 0 (ORL)

DELAYMS (6 lần) Xuất A ra port 0

Nạp (73H) vào thanh ghi A Hốn vị hai nible trong A Nạp số BCD chục trong A (ANL) Chọn led chục: ACC.5 = 0 (ORL)

DELAYMS (6 lần) Xuất A ra port 0

Nạp (74H) vào thanh ghi A Nạp số BCD trăm trong A (ANL) Chọn led trăm: ACC.6 = 0 (ORL)

DELAYMS (6 lần) Xuất A ra port 0

Nạp (74H) vào thanh ghi A Hốn vị hai nible trong A Nạp số BCD ngàn trong A (ANL) Chọn led ngàn: ACC.7 = 0 (ORL)

DELAYMS (6 lần) Xuất A ra port 0

RET

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 87 -

BINTOBCD

Xĩa thanh ghi R5

NOP

Tăng thanh ghi R5 lên 1

LOOPA: RET R5 = 255 ? Yes No DELAYMS: PUSH ACC PUSH B Nạp 10 vào thanh ghi B

DIV_16_8 BINTOBCD:

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 88 -

DIV_16_8

Cất nội dung A vào STACK Cất nội dung R2 vào STACK

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

E—CHỨC NĂNG CỦA TỪNG CHƯƠNG TRÌNH CON:

TIMER 0_ISR

Đây là chương trình phục vụ ngắt dành cho ngắt do Timer 0 gây ra.

Như đã đề cập ở phần trên [dịng thứ 9 từ trên xuống, trang 55]; nguyên lý tạo xung cĩ độ rộng mức cao hay thấp thay đổi cho điều khiển tốc độ động cơ như sau :

Trong đĩ:

TL là khoảng thời gian định thời ở mức 0 (tương ứng với điện áp 0V). TH là khoảng thời gian định thời ở mức 1 (tương ứng với điện áp 5V).

Giá trị nạp của khoảng định thời TH được lưu vào các ơ nhớ cĩ địa chỉ:( high: 7FH, low : 7EH ) và cho TL : ( high : 7DH, low : 7CH ).

Tốc độ chuẩn được lấy vào từ ADC0809 hoặc máy tính nạp vào ơ nhớ địa chỉ : (79H).

So sánh giữa ơ nhớ cập nhật trực tiếp với ơ nhớ cập nhật gián tiếp để cập nhật vào ơ nhớ tốc độ chuẩn 79H sự thay đổi trễ nhất xuất hiện của hai phần điều khiển đặt tốc độ ADC và máy tính. Trong đĩ, các ơ nhớ dùng đến là:

78H : ơ nhớ tốc độ đặt từ máy tính (78H cập nhật gián tiếp qua 76H).

76H : ơ nhớ tốc độ đặt cập nhật trực tiếp từ máy tính.

77H : ơ nhớ tốc độ đặt từ ADC0809 (77H cập nhật gián tiếp qua 75H).

75H : ơ nhớ tốc độ đặt cập nhật trực tiếp từ ADC0809. Bit đánh dấu đếm, chọn là bit định địa chỉ 00H.

Bit 00 cĩ giá trị :

1 : tức là xung điều khiển động cơ đang ở định thời mức 1 (5V). 0 : tức là xung điều khiển động cơ đang ở định thời mức 0 (0V). Sử dụng Timer 0, mode 1, khi tràn thì interrupt (sau khoảng 50ms).

TH TL

T cố định = 50ms = 50 000 µs TH thay đổi tùy ý theo tốc độ

động cơ

- nếu tốc độ động cơ > tốc độ chuẩn

giảm TH

- nếu tốc độ động cơ < tốc độ chuẩn

tăng TH High 7FH

TÀI LIỆU ĐƯỢC SHARE TRÊN WEBSITE KYSUBACHKHOA.COM

- 91 -

Timer 0 : bộ định thời 16-bit cĩ bốn mode hoạt động.

Mode 1 : Timer 0 đặt hoạt động ở mode 1, các bit M1 = 0, M0 = 1 trong thanh ghi TMOD => thiết lập định thời 16-bit, để Timer 0 bắt đầu đếm thì đồng thời phải set bit TR0 = 1 trong thanh ghi TCON.

Interrupt timer 0: TF0 = 1 trong thanh ghi TCON khi Timer 0 đếm tới giá trị đặt và vịng về giá trị 0.

Với các diễn giải trên, hoạt động của TIMER 0_ISR tĩm tắt như sau: Khi ngắt xảy ra, dừng timer 0, kiểm tra bit dấu 00H, cĩ hai trường hợp:

Bit dấu 00H bằng 1: các hoạt động tiếp theo sẽ là

Xĩa bit dấu 00H;

Nạp lại dung lượng đếm (TL) cho Timer 0;

Hạ tín hiệu điều khiển động cơ xuống mức thấp;

Cho chạy lại Timer 0.

Bit dấu 00H bằng 0:

Cập nhật tốc độ đặt từ ADC0809. Hai trường hợp:

Phát hiện cĩ sự thay đổi tốc độ đặt từ ADC, cập nhật tốc độ đĩ.

Tốc độ nhận về từ ADC khơng thay đổi, khơng cập nhật.

Khởi động lại ADC0809;

Set bit dấu 00H;

Nạp lại dung lượng đếm (TH) cho Timer 0;

Nâng tín hiệu điều khiển động cơ lên mức cao;

Cho phép Timer 0 hoạt động.

INT0_ISR

Trình phục vụ ngắt gây ra do ngắt ngồi 0.

Chương trình con này phục vụ việc đếm tốc độ quay của động cơ. Nĩ được viết ngay sau vector ngắt của ngắt ngồi 0 (lệnh vi xử lý: ORG 0003H).

Trình này chỉ thực hiện mỗi động tác là tăng nội dung ơ nhớ tốc độ đo 7BH lên một. Quá trình đếm tốc độ này diễn ra trong khoảng 50ms (chu kỳ của xung điều khiển tốc độ động cơ) và sau đĩ được tái lập (vịng về 0 và đếm lại trong chu kỳ tiếp).

Trình phục vụ ngắt này khơng hiện diện rõ ràng trong chương trình, nĩ được đặt nối tiếp ngay sau lệnh gọi địa chỉ vector ngắt và được trình bày ở đây cĩ tên là INT0_ISR chỉ nhằm mục đích mơ tả rõ hơn các hoạt động diễn ra bên trong bộ vi điều khiển.

SP_ISR

Đây là trình phục vụ ngắt, phục vụ việc thu – phát dữ liệu của port nối tiếp.

Trình phục vụ port nối tiếp hoạt động theo cơ chế thu trước và phản hồi sau. Tĩm tắt quá trình hoạt động của trình phục vụ ngắt port nối tiếp như sau:

Ban đầu chờ nhận dữ liệu gửi qua từ máy tính, khi nhận đủ 1 byte dữ liệu, cờ RI

Một phần của tài liệu 239866 (Trang 72 - 110)

Tải bản đầy đủ (PDF)

(190 trang)