Sơ đồ chân IC đệm dòng ULN2803

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, thiết kế, chế tạo hệ thống điều khiển thiết bị điện từ xa bằng tin nhắn SMS và ứng dụng trong lĩnh vực cơ điện tử (Trang 58)

Hình 2. 18 : M ạch n guy ên lý kh ối c ông su ất

Chƣơng 3. THIẾT KẾ PHẦN MỀM ĐIỀU KHIỂN

3.1. Giới thiệu phần mềm lập trình PIC C Complier

Chƣơng trình nhúng điều khiển đƣợc viết với trình dịch PIC C Complier. PIC C Compiler là ngôn ngữ lập trình bậc cao đƣợc sử dụng để lập trình cho PIC và đƣợc viết trên nền C. Chƣơng trình viết trên PIC C tuân thủ theo cấu trúc của ngôn ngữ lập trình C. Trình biên dịch của PIC C Compiler sẽ chuyển chƣơng trình C sang dạng mã Hexa (*.hex) để nạp vào bộ nhớ của PIC. Quá trình chuyển đổi đƣợc minh hoạ nhƣ sau:

File.c

(Chƣơng trình điều khiển viết cho Vi điều khiển PIC sử dụng ngôn ngữ lập trình C) File.hex (Chƣơng trình dƣới dạng mã Hex nạp cho Vi điều khiển PIC) Biên dịch Thiết bị nạp chƣơng trình Vi điều khiển PIC

Hình 3.1: Quy trình viết và nạp chƣơng trình cho Vi điều khiển

PIC C Compiler gồm có 3 phần riêng biệt là PCB, PCM và PCH. PCB dùng cho họ MCU với bộ lệnh 12-bit, PCM dùng cho họ MCU với bộ lệnh 14-bit và PCH dùng cho họ MCU với bộ lệnh 16 và 18-bit. Mỗi phần khác nhau trong PIC C Compiler chỉ dùng đƣợc cho họ MCU tƣơng ứng mà không cho phép dùng chung (ví dụ không thể dùng PCM hoặc PCH cho họ MCU 12-bit đƣợc mà chỉ có thể dùng PCB cho MCU 12- bit).

Chƣơng trình đƣợc viết trên PIC C Compiler gồm bốn phần chính. Trong mỗi phần sẽ bao gồm nhiều chi tiết để tạo nên chƣơng trình một chƣơng trình hoàn chỉnh. Cấu trúc chƣơng trình nhƣ sau:

- Phần ghi chú: Ở phần ghi chú, ngƣời lập trình sẽ ghi những chú thích cần thiết

cho chƣơng trình. Phần chú thích đƣợc bắt đầu từ dấu // (dung cho chú thích có chiều dài một dòng) hoặc cặp ký tự /* và */ (dùng cho một khối chú thích gồm nhiều dòng). Khi biên dịch, trình biên dịch sẽ bỏ qua phần ghi chú. Phần ghi chú có thể xuất hiện bất cứ chỗ nào trong chƣơng trình thậm chí có thể đặt ngay sau hàng mã lệnh để chú thích cho hàng lệnh.

- Chỉ định các tiền xử lý: Phần này sẽ chỉ định các tiền xử lý đƣợc sử dụng khi

biên dịch. Các tiền xử lý đƣợc bắt đầu bằng dấu #.

- Khai báo biến dữ liệu: Đây là phần khai báo hằng, khai báo biến và kiểu dữ

- Định nghĩa các hàm: Định nghĩa các hàm (Function) đƣợc dùng để thực hiện

giải thuật của chƣơng trình.

3.2. Tập lệnh AT và tin nhắn với định dạng PDU

3.2.1. Tập lệnh AT cơ bản

Để gửi nhận SMS, cần kết nối thiết bị mô-đun GSM vào cổng giao tiếp theo chuẩn RS232 của thiết bị điều khiển. Các thiết bị này trao đổi dữ liệu với nhau thông qua tập lệnh AT (Attention Commands) chuẩn. Tuy nhiên, tuỳ vào thiết bị của nhà sản xuất mà mỗi mô-đun có một tập lệnh AT mở rộng khác nhau nhằm tối ƣu và nâng cao khả năng kết nối của thiết bị GSM với các thiết bị điều khiển.

Bảng 3.1: Một số lệnh AT cơ bản

Lệnh AT Chú thích

AT Kiểm tra kết nối GSM

+CMGF Chọn chế độ làm việc (TEXT hoặc PDU Mode)

+CPMS Chọn lƣu trữ

+CSMP Thiết đặt thông số trong chế độ văn bản +CMGR Đọc SMS xác định từ thiết bị

+CMGL Đọc tất cả SMS

+CMGS Gửi SMS

+CMGW Ghi SMS vào bộ nhớ

+CMSS Gửi SMS đã lƣu trong bộ nhớ

+CMGD Xóa bộ nhớ

Trong chƣơng trình điều khiển trƣớc tiên chúng ta cần khởi tạo một kết nối RS232 cho mô-đem, sau đó gửi những lệnh AT điều khiển tƣơng ứng. Cần kiểm tra kết nối với mô-đem bằng cách sử dụng nhóm lệnh: AT, +CPIN, +CSCA, +CGMI, +CGMM, +CMEE, +CSMS, +CSQ, +CBC trƣớc mỗi phiên làm việc.

Để đọc các trạng thái thiết lập hiện tại, chúng ta có thể dùng lệnh AT có thêm ký tự „?‟. Để xem những giá trị nào có thể thiết lập, dùng lệnh AT có thêm ký tự „=?‟. Để thiết lập giá trị thông số mới, dùng lệnh AT có thêm ký tự „=‟ và theo sau đó là những giá trị thông số mới. Để gửi một nội dung đến địa chỉ một ngƣời dùng, sử dụng lệnh +CMGS là tối ƣu nhất. Tuy nhiên, có những nội dung cần gửi đến nhiều thuê bao khác nhau. Trong trƣờng hợp này nên dùng lệnh +CMGW ghi SMS lên bộ nhớ của mô- đem, sau đó dùng lệnh +CMSS để gửi SMS đó đến địa chỉ các thuê bao khác nhau. Cách này cho phép nâng cao tốc độ làm việc của mô-đem nhờ giảm thiểu trao đổi thông tin giữa mô-đem và chƣơng trình.

Có thể gửi SMS theo 2 chế độ là chế độ văn bản (Text Mode, +CMGF = 1) và chế độ mặc định PDU (Protocol Data Unit, +CMGF = 0). Các giá trị thiết lập thông số cho Text Mode và PDU Mode có thể khác nhau ở một số lệnh AT. Chẳng hạn, với

lệnh đọc tất cả các tin nhắn +CMGL tiếp nhận các thông số "REC UNREAD", "REC READ", "STO UNSENT", "STO SENT" và "ALL" trong chế độ Text Mode; trong khi đó, trong chế độ PDU sẽ là các giá trị từ 0 tới 4. Ngoài ra, không phải tất cả các mô- đem GSM cũng đều hỗ trợ định dạng Text Mode. Thử nghiệm cho thấy không chỉ những điện thoại lạc hậu, mà một số điện thoại hiện đại hiện nay nhƣ W580, cũng không hỗ trợ định dạng Text Mode khi làm việc với các thiết bị điều khiển. Trong khi đó, PDU Mode thì tất cả các mô-đem đều hỗ trợ và chế độ này cho phép gửi các tin nhắn dạng hình ảnh và nhạc chuông. Vì vậy, khi xây dựng một chƣơng trình làm việc với các mô-đem GSM, cần phải nghiên cứu tài liệu kỹ thuật của từng loại mô-đem để có thể thiết lập đúng những thông số mà mô-đem đó hỗ trợ, và mô-đun làm việc với các mô-đem, cần xác định loại và mô-đen, sau đó sử dụng những thông số mà mô-đem đó hỗ trợ; hoặc dùng lệnh AT có thêm „=?‟ để kiểm tra, những giá trị nào các thông số tƣơng ứng của một lệnh AT cho một mô-đem cụ thể có thể tiếp nhận. Tất cả các mô- đem đều hỗ trợ tập lệnh AT chuẩn. Nếu mô-đun sử dụng tập lệnh AT chuẩn để làm việc với các mô-đem, thì hệ thống sẽ không bị phụ thuộc vào thiết bị đƣợc sử dụng.

3.2.2. Mã hoá và giải mã tin nhắn theo chế độ PDU

Thông thƣờng mỗi SMS có độ dài tối da 160 ký tự với mã hoá 7-bit. Các SMS với mã hoá 8-bit có độ dài tối đa 140 ký tự và thƣờng là những SMS thông minh chứa hình ảnh và nhạc chuông hoặc là các thiết lập WAP. Các SMS chứa thông điệp gồm các ký tự Unicode 16-bit (UCS2) có độ dài tối đa 70 ký tự. Các SMS có độ dài lớn hơn độ dài tối đa vẫn có thể đƣợc truyền tải dƣới dạng ghép nối nhiều SMS phân đoạn với độ dài chuẩn. SMS có thể phân chia thành các loại sau: SMS-SUBMIT, SMS- DELIVERY, SMS-STATUS-REPORT, SMS-SUBMIT-REPORT, SMS-DELIVERY- REPORT, SMS-COMMAND. Cấu trúc của một SMS đƣợc mô tả chi tiết theo từng loại. Có thể biết đƣợc lý do gửi nhận SMS không thành công thông qua hai loại SMS sau cùng.

Khi dùng chế độ PDU, thông tin đƣợc mã hoá với 7-bit (septet) thƣờng đƣợc mã hoá thành những octet để gửi đi. Và khi nhận, cần phải giải mã nó để hiển thị nội dung SMS cho ngƣời dùng. Sau đây là ví dụ mã hoá thông điệp “hello” gồm 5 ký tự 7 bit thành các octet.

Bảng 3.2. Mã hoã chuỗi dữ liệu bộ bảy (septet) thành chuỗi bộ tám (octet)

Ký tự h e l l o Decimal 104 101 108 108 111 Hex 0x68 0x65 0x6C 0x6C 0x6F Septet 1101000 1100101 1101100 1101100 1101111 8 bit 11101000 00110010 10011011 11111101 00000110 Octet E8 32 9B FD 06

Thông điệp “hello” đƣợc mã hoá thành E8329BFD06 bằng cách chuyển số lƣợng bit cần thiết từ cuối ký tự kế sau (bôi đậm) ở dạng mã hoá septet sang đầu của ký tự kế trƣớc để có thể tạo thành một octet 8-bit. Đối với ký tự „o‟ cuối cùng do không còn ký tự nào đứng sau nữa nên đƣợc thêm 5-bit có giá trị 0 vào trƣớc để tạo thành một octet.

Để giải mã thông tin dữ liệu đƣợc mã hoá dƣới định dạng PDU chúng ta hãy xem xét thông điệp “hello” nhƣ sau: Trƣớc tiên, chúng ta sẽ chuyển 1 bit đầu octet đầu tiên sang phía sau của octet thứ hai và bỏ đi 2 bit đầu của octet thứ hai. Làm theo cách tƣơng tự và khi tới octet cuối cùng (06) sẽ đƣợc thêm 4 bit (1111) từ octet trƣớc đó vào sau và bỏ đi 5 bit (00000) đầu tiên.

Bảng 3.3. Mã hoã chuỗi dữ liệu bộ tám (octet) thành chuỗi bộ bảy (septet)

Octet E8 32 9B FD 06

8-bit 11101000 00110010 10011011 11111101 00000110 Septet 1101000 1100101 1101100 1101100 1101111

Decimal 104 101 108 108 111

Ký tự h e l l o

Để xử lý SMS đƣợc đúng, đầu tiên phải xác định đó là loại SMS nào dựa vào lệnh đọc SMS từ mục nào và 2 bit số 0, 1 của octet đầu tiên (00 – SMS-DELIVER, 00 – SMS-DELIVER-REP, 10 – SMS-STATUS-REP, 10 – SMS-COMMAND, 01 – SMS-SUBMIT, 01 – SMS-SUBMIT-REP). Tuỳ theo cấu trúc của từng loại SMS, phân tích và so sánh SMS-SUBMT/SMS-SUBMIT-REP và SMS-DELIVER/SMS- DELIVER-REP theo từng cặp để kiểm tra độ chính xác khi gửi nhận. Tƣơng tự, SMS- SUBMIT/SMS-STATUS-REP để kiểm tra SMS đã đƣợc nhận thành công hay chƣa. Đối với SMS–SUBMIT, không cần các octet chứa thông tin về Trung tâm Dịch vụ Tin nhắn (SMSC) khi gửi SMS. Thay vào đó, octet độ dài của thông tin về SMSC sẽ chứa giá trị 0x00 vì thông tin về SMSC đã đƣợc cài đặt trong mô-đem. Và octet đó sẽ không đƣợc tính vào tổng số octet khi gửi SMS đến mô-đem. Tuy nhiên, thông tin này thƣờng đƣợc kèm theo khi đọc PDU của SMS đã gửi từ mô-đem. Ví dụ, thông điệp “hello” đƣợc gửi từ số điện thoại +84974610987 trong chế độ PDU là 06 91 4819200050 21 00 0C 91 4879640189F7 00 00 05 E8329BFD06 đƣợc phân tích nhƣ

sau:

Bảng 3.4: Cấu trúc cơ bản tin nhắn PDU Mode

Thông số OCTET Chú thích

Header

SMSC Info

06

Độ dài của thông tin về SMSC là 6 octet, bao gồm kiểu và số điện thoại

91 Kiểu số điện thoại quốc tế 4819200050 Số điện thoại của SMSC là

Thông số OCTET Chú thích

+8491020005

PDU Stri

ng

First Octet 21 SMS–SUBMIT, 0x21 = 0010

0001 TP–Message–Reference 00

TP–Recipient–Address

0C Độ dài của số điện thoại là 12 chữ số

91 Kiểu số điện thoại quốc tế 4879640189F7 Số điện thoại của ngƣời gửi là

+84974610987 TP–Protocol–Identifier 00 SMS thông thƣờng TP–Data–Coding–Scheme 00

Mã hóa dữ liệu theo bảng chữ cái 7 bit. Nếu là 04 ứng với 8 bit, 08 ứng với UCS2

TP–User–Data–Length 05 Độ dài dữ liệu ngƣời dùng là 0x05 septet

TP–User–Data E8329BFD06 Dữ liệu ngƣời dùng: hello

Số điện thoại và thời gian đƣợc mã hoá dƣới dạng semi-octet đảo ngƣợc theo từng cặp 84 97 46 10 98 7 thành 48 79 64 01 89 F7. Nếu octet kiểu số điện thoại có giá trị 81, số điện thoại sẽ là 0974610987. Nếu số chữ số của số điện thoại là 11 số thì F sẽ đƣợc thêm vào số điện thoại (4879640189F7).

Báo cáo trạng thái SMS đƣợc gửi có từ định danh trong chế độ văn bản là:

+CMGL:23,"RECUNREAD",6,136,"08/08/07,00:54:54+28","08/08/07,00:54:54+28"

,0 và trong chế độ PDU có dạng nhƣ sau: 06 91 4819200050 06 88 0C 91

4879640189F7 808070 00454582 808070 00454582 00. MCDVSMS có thể xác định

một SMS gửi đi đã đƣợc nhận thành công hay chƣa dựa vào từ định danh n=0x88 (13610) mà lệnh AT+CMGS đã trả lại khi gửi SMS và giá trị của TP-Status. TP-Status = 00 có nghĩa ngƣời nhận đã nhận SMS, 01 – không thể xác định đã nhận. Và SMS với thông điệp “hello” nhận từ số điện thoại +84974610987 trong chế độ văn bản:

+CMGL: 5,"REC UNREAD","+84974610987","08/08/07,00:04:29+28",hello còn

trong chế độ PDU sẽ là: 06 91 4819200050 24 0C 91 4879640189F7 00 00 808070

00409282 05 E8329BFD06. Trong đó E8329BFD06 chính là nội dung “hello” đã đƣợc

gửi đi.

3.3. Cấu trúc tin nhắn điều khiển và phản hồi trạng thái thiết bị

Muốn điều khiển hay kiểm tra trạng thái của các thiết bị điện ta nhắn tin SMS tới mô-đun GPRS/GSM SIM900. Sau khi mô-đun GSM đƣợc tin nhắn, trƣớc tiên bộ điều khiển trung tâm sẽ tiến hành gửi lệnh để đọc tin nhắn, phân tích lấy ra số điện thoại

khiển. Nếu hai giá trị này không giống nhau (mật khẩu sai) thì hệ thống sẽ gửi tin nhắn báo cho ngƣời đang cố gắng điều khiển biết rằng mật khẩu truy cập là sai. Nếu mật khẩu truy cập là đúng thì bộ điều khiển sẽ tiếp tục phân tích xem tin nhắn là lệnh điều khiển bật/tắt hay là kiểm tra trạng thái của thiết bị và sẽ đƣa ra các quyết định điều khiển phù hợp.

3.3.1. Cấu trúc tin nhắn điều khiển thiết bị

Chú ý: Trong các lệnh thì Mật khẩu chính là số điện thoại của ngƣời có quyền điều khiển.

- Cấu trúc tin nhắn điều khiển bật (tắt) tất cả các thiết bị tại tất cả các tầng.

Mật khẩu OA (FA)

- Cấu trúc tin nhắn điều khiển bật (tắt) tất cả các thiết bị tại một tầng cụ thể.

Mật khẩu Fn ON (OFF)

Trong đó, n là số thứ tự của tầng muốn điều khiển.

Ví dụ, nếu chúng ta muốn bật tất cả các thiết bị tại Tầng 1 (Floor 1) thì câu lệnh điều khiển sẽ là: F1 ON

Nếu chúng ta muốn tắt tất cả các thiết bị tại Tầng 2 (Floor 2) thì câu lệnh điều khiển sẽ là: F2 OFF

- Cấu trúc lệnh điều khiển bật/tắt từng thiết bị riêng biệt tại một tầng cụ thể.

Mật khẩu Fn CT Ai Bi Ci Di Ei Fi Gi Hi

Trong đó, i có giá trị 1 (bật thiết bị) và 0 (tắt thiết bị); n là số thứ tự của tầng muốn điều khiển.

Ví dụ, nếu chúng ta muốn bật thiết bị 1, 2, 3 và tắt các thiết bị 4, 5, 6, 7, 8 tại Tầng 1 (Floor 1) thì câu lệnh điều khiển sẽ là: F1 CT A1B1C1D0E0F0G0H0

- Cấu trúc tin nhắn kiểm tra trạng thái các thiết bị tại một tầng cụ thể.

Mật khẩu Fn ST

Trong đó, n là số thứ tự của tầng muốn điều khiển.

Ví dụ, nếu chúng ta muốn kiểm tra trạng thái các thiết bị tại Tầng 2 (Floor 2) thì câu lệnh điều khiển sẽ là: F2 ST

3.3.2. Cấu trúc tin nhắn phản hồi thông tin trạng thái thiết bị

Khi nhận đƣợc tin nhắn điều khiển, bộ điều khiển tiến hành điều khiển theo yêu cầu và sau đó sẽ gửi tin nhắn tới ngƣời điều khiển để báo cáo trạng thái các thiết bị.

- Cấu trúc tin nhắn phản hồi khi nhận được tin nhắn điều khiển bật (tắt) tất cả

Devices on all floor are turned on (off)

- Cấu trúc tin nhắn phản hồi khi nhận được tin nhắn điều khiển bật (tắt) tất cả

các thiết bị tại một phòng cụ thể nào đó.

Devices on floor n are turned on (off)

Trong đó, n là số thứ tự của tầng điều khiển.

Ví dụ, tin nhắn phản hồi ứng với tin nhắn điều khiển bật tất cả các thiết bị tại Tầng 1 (Floor 1) là:

Devices on floor 1 are turned on

- Cấu trúc tin nhắn phản hồi khi nhận được tin nhắn điều khiển bật (tắt) thiết bị

hoặc tin nhắn truy vấn trạng thái thiết bị tại một tầng cụ thể nào đó.

Floor n: AiBiCiDiEiFiGiHi

Trong đó, i có giá trị 1 (thiết bị đƣợc bật) và 0 (thiết bị đƣợc tắt); n là số thứ tự của tầng đƣợc điều khiển.

Ví dụ, tin nhắn phản hồi ứng với tin nhắn điều khiển bật thiết bị 1, 2, 3 và tắt các thiết bị 4, 5, 6, 7, 8 tại Tầng 1 (Floor 1) là:

Floor 1: A1B1C1D0E0F0G0H0

- Khi xảy ra tình trạng không điều khiển bật/tắt hay kiểm tra trạng thái của các

thiết bị được thì hệ thống sẽ gửi tin nhắn thông báo cho người điều khiển biết với nội dung:

Devices do not control 3.4. Danh sách các file mã nguồn

Mã nguồn đƣợc viết bằng ngôn ngữ C sử dụng phần mềm PIC C Complier. Chƣơng trình có thể chỉnh sửa để phù hợp với mục đích điều khiển của ngƣời sử dụng.

Bảng 3.5: Liệt kê các file mã nguồn sử dụng cho hệ thống đƣợc thiết kế.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, thiết kế, chế tạo hệ thống điều khiển thiết bị điện từ xa bằng tin nhắn SMS và ứng dụng trong lĩnh vực cơ điện tử (Trang 58)

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

(95 trang)