3. Họ và tên giáo viên hướng dẫn: TS Nguyễn Trường Thịnh
3.4. Thiết kế phần cứng cho khối vi điền khiển ATMEGA32
Mạch điều khiển ATMEGA32 dùng để giao tiếp với module phát tiếng nói thông qua chuẩn truyền SPI và giao tiếp với quang báo qua cổng COM
72
Hình 3.12 Sơ đồ nguyên lí của vi điều khiển ATMega32
Hình 3.13 Sơ đồ nguyên lí giao tiếp cổng COM 3.5. Khối nguồn cung cấp
Mặc dù nguồn cung cấp không chính thức tham gia vào quá trình truyền dữ liệu hay xử lý dữ liệu, nhưng để hệ thống hoạt động ổn định thì khối nguồn đóng vai trò hết sức quan trọng. Vấn đề đặt ra là làm sao thiết kế khối nguồn ngoài việc cung cấp
73
đúng điện áp , đủ dòng cho các khối trong hệ thống, nó phải đảm bảo yêu cầu tính ổn định.
Trong quá trình thiết kế phần cứng cho hệ thống ta có thể chia ra các nguồn cung cấp sau :
Thứ nhất : Nguồn cung cấp cho phần GSM/GPRS : - Nguồn cung cấp cho chân VBAT.
- Nguồn cung cấp cho chân VRTC. - Nguồn cung cấp cho chân VCHG. Thứ hai : Nguồn cung cấp cho phần GPS : - Nguồn cung cấp cho chân GPS_VCC. - Nguồn cung cấp cho chân GPS_VRTC.
Thứ ba : Nguồn cung cấp cho vi điều khiển ATMega128.
3.5.1. Nguồn cung cấp cho phần GSM/GPRS
Như đã đề cập ở trên ta biết rằng nguồn cung cấp cho chân VBAT vào khoảng 3.4V ÷ 4.5V , trung bình là 4V. Trong một số trường hợp sụt áp lớn do xung truyền tăng lên, lúc đó dòng tiêu thụ lên tới 2A. Vì vậy nguồn cung cấp cho chân VBAT phải đủ dòng lên tới 2A.
Hình 3.14 Sự sụt áp đã làm cho dòng tiêu thụ phải tăng lên 2A
Để tối ưu bộ nguồn cấp cho chân VBAT, chúng em đã sử dụng nguồn pin 3.7V Li-Ion được kết nối thẳng tới chân VBAT của phần GSM/GPRS như
74
Hình 3.15 Sơ đồ chân kết nối Pin Li-Ion cung cấp nguồn cho GSM/GPRS
Chân nguồn VBAT của phần GSM/GPRS được nối thẳng với dương nguồn của Pin .Chân TEMP_BAT dùng để đo nhiệt độ của Pin .
Chân VCHG được sử dụng để phát hiện nguồn sạc cho Pin và cung cấp phần lớn dòng sạc cho Pin thông qua phần GSM/GPRS. Yêu cầu chân VCHG được nối với điện áp 5V, ta có thể sử dụng ngay điện áp 5V cấp cho vi điều khiển để cấp cho chân này.
Khi phần GSM/GPRS của module phát hiện ra nguồn sạc và Pin thì quá trình sạc Pin sẽ xảy ra ngay, ngược lại thì quá trình sạc Pin sẽ không xảy ra.
Nguồn cung cấp cho chân VRTC trong phần GSM/GPRS trong khoảng 1.2V÷2.0V, điện áp trung bình 1.8V với dòng tiêu thụ I(max) =20uA. Do đó việc sử dụng Pin CMOS 3.0V là thích hợp nhất, vì chân VRTC có nhiệm vụ là backup dữ liệu : thời gian,…ngay cả khi hệ thống mất nguồn. Pin CMOS 3.0V được mắc nối tiếp với 2 điốt 1N4007 để giảm điện áp ra, khi đó điện áp ra theo định luật Kiefhof : 3 - 0.7x2 = 1.6V.
75
3.5.2. Nguồn cung cấp cho phần GPS và khối ATMega128
Yêu cầu nguồn cung cấp cho khối vi điều khiển ATMega128 là 5V với dòng tiêu thụ trong khoảng 200 ÷ 400 mA. Như vậy sử dụng IC LM7805C/TO với điện áp đầu vào khoảng 5 ÷ 35V là rất thích hợp.
Yêu cầu nguồn cung cấp cho chân GPS_VCC vào khoảng 3.0V ÷ 5.0V, điện áp trung bình là 3.0V với dòng tiêu thụ lớn hơn 150mA. Ta sử dụng con IC LM117 ổn áp 3.3V, với điện áp cố định đầu ra là 3.3V rất phù hợp với yêu cầu của chân GPS_VCC.
Hình 3.17 Khối nguồn cung cấp cho phần GPS và ATMega128
Nguồn cung cấp cho chân GPS_VRTC trong phần GPS vào khoảng 2.7V ÷ 3.3V, điện áp trung bình 3.0V nên ta có thể chích lấy chân Pin CMOS cung cấp cho VRTC trong phần GSM/GPRS (không nối tiếp với 2 điốt 1N4001) để cung cấp cho chân GPS_VRTC.
3.6. Khối hiển thị
Khối hiển thị có chức năng hiển thị các giá trị: kinh độ, vĩ độ, tốc độ, các dữ liệu nhận được từ server, và các thông tin khác.
76
3.7. Khối tiếng nói
Khối tiếng nói được đặt trên xe buýt có chức năng phát ra âm thanh thông báo: thông báo xe khởi hành, sắp đến trạm chờ xe buýt, thời gian xe đến trạm kế.
77
CHƯƠNG 4: LẬP TRÌNH ĐIỀU KHIỂN
Ngôn ngữ sử dụng là C, viết trên phần mềm biên dịch Codevision. Đây là phần mềm hiệu quả trong việc viết các lệnh điều khiển vi điều khiển AVR, ngoài ra phần mềm hỗ trợ việc biên dịch, sửa lỗi…
Ngoài phần mềm biên dịch, việc điều khiển module từ vi điều khiển còn sử dụng tập lệnh AT. Đây là tập lệnh chuyên dùng để điều khiển các thiết bị liên lạc trong mạng di động, sử dụng giao tiếp nối tiếp.
4.1 Tập lệnh AT
Các thiết bị GSM chuẩn được điều khiển bằng tập lệnh AT thông qua giao diện kết nối nối tiếp. Ngoài tập lệnh AT chuẩn bao gồm GSM07.05, GSM07.07 và ITU-T V.25, các thiết bị SIM300CZ và SIM548CZ được mở rộng thêm một số lệnh AT phát triển bởi nhà sản xuất SIMCOM.
Cú pháp của lệnh AT
Các câu lệnh luôn bắt đầu với tiền tố “AT” hay “at”, và kết thúc bởi ký tự enter <CR>
Các lệnh AT thường được phản hồi lại bằng cấu trúc: <CR><LF><phản hồi><CR><LF>
Các câu lệnh AT chỉ được thực hiện khi các thiết bị được cấp nguồn và sẵn sàng với mã thiết bị trả về “RDY” nhận được qua cổng nối tiếp. Nếu mã trả về là “SCKS” báo hiệu không nhận dạng được thẻ SIM
Các câu lệnh AT có thể chia làm 3 loại cú pháp chính: “cơ bản”, “tham số S” và “mở rộng”
Cú pháp cơ bản
Câu lệnh AT có cú pháp: “AT<x><n>” hoặc “AT&<x><n>”, trong đó <x> là câu lệnh, <n> là một hay nhiều tham số của câu lệnh
Cú pháp tham số S
Câu lệnh AT có cú pháp: “ATS<n>=<m>”, trong đó <n> là chỉ số trong tập S, <m> là giá trị gán cho nó. <m> là tùy chọn, nếu thiếu, giá trị mặc định sẽ được sử dụng
78
Các câu lệnh AT này có thể được sử dụng ở một vài chế độ theo bảng dưới đây:
Bảng 4.1 Bảng phân loại các câu lệnh AT mở rộng
Câu lệnh kiểm tra AT+<x>=? Thiết bị di động sẽ trả về danh sách các tham số và dải giá trị tương ứng
Câu lệnh đọc AT+<x>? Câu lệnh này trả về giá trị hiện tại của các tham số tương ứng Câu lệnh ghi AT+<x>=<…> Câu lệnh này thiết đặt các
tham số theo giá trị được truyền vào
Câu lệnh thi hành AT+<x> Câu lệnh này đọc các tham số cố định ảnh hưởng bởi các quá trình bên trong thiết bị GSM
Thực thi lệnh AT
Các lệnh AT có thể được kết hợp trong cùng một dòng lệnh hoặc thực hiện từng câu lệnh trên từng dòng riêng.
Khi kết hợp nhiều câu lệnh trên một dòng, chúng ta không cần thêm các tiền tố “AT” hay “at” trên mỗi câu lệnh, ngoại trừ ở đầu dòng lệnh. Các câu lệnh cần được ngăn cách nhau bằng dấu chấm phẩy. Mỗi dòng lệnh có bộ nhớ đệm có khả năng chưa tối đa 256 ký tự. Nếu dòng lệnh vượt quá giới hạn này, sẽ không có lệnh nào được thực hiện và thiết bị trả về chuỗi “ERROR”.
Khi thực hiện mỗi lệnh AT trên một dòng, chúng ta buộc phải đợi trả lời cuối cùng cho câu lệnh đó (ví dụ như OK, CME Error, CMS Error) trước khi gửi lệnh tiếp theo.
Các tập ký tự hỗ trợ
Giao diện câu lệnh AT của các thiết bị SIM548CZ và SIM300CZ mặc định là tập ký tự IRA. Nó hỗ trợ đầy đủ các tập ký tự sau:
Định dạng GSM - UCS2
79 - HEX
- IRA - PCCP437
Tập ký tự có thể được thiết đặt lại hoặc truy vấn sử dụng câu lệnh “AT+CSCS” (GSM07.07). Các tập ký tự được định nghĩa trong bản thông số kỹ thuật GSM 07.05
Tập ký tự sẽ ảnh hưởng tới quá trình gửi và nhận tin nhắn nhanh (SMS), các tin nhắn SMS quảng bá, hiển thị các trường văn bản trong danh bạ và các chuỗi ký tự trong bộ công cụ ứng dụng của thẻ SIM.
4.2 Tập lệnh AT sử dụng điều khiển module GSM và GPS
4.2.1 Cấu hình cho phần cứng: module simcom548 truy cập GPRS
Khởi tạo cấu hình mặc định cho module
(MT: module. TE: máy tính hoặc thiết bị điều khiển module)
80 (1)ATZ<CR>
Reset modem, kiểm tra modem dã hoạt động bình thường chưa. Gửi nhiều lần cho đến khi nhận được chuỗi ATZ<CR><CR><LF>OK<CR><LF>.
(2) ATE0<CR> Tắt chế độ echo lệnh. Chuỗi trả về có dạng ATE0<CR><CR><LF>OK<CR><LF>.
(3) AT+CLIP=1<CR>
Định dạng chuỗi trả về khi nhận cuộc gọi.
Thông thường, ở chế độ mặc định, khi có cuộc gọi đến, chuỗi trả về sẽ có dạng: <CR><LF>RING<CR><LF>
Sau khi lệnh AT+CLIP=1<CR> đã được thực thi, chuỗi trả về sẽ có dạng: <CR><LF>RING<CR><LF>
81
Chuỗi trả về có chứa thông tin về số điện thoại gọi đến. Thông tin này cho phép xác định việc có nên nhận cuộc gọi hay từ chối cuộc gọi.
Kết thúc các thao tác khởi tạo cho quá trình nhận cuộc gọi. Các bước khởi tạo tiếp theo liên quan đến các thao tác truyền nhận tin nhắn.
(4) AT&W<CR>
Lưu cấu hình cài đặt được thiết lập bởi các lệnh ATE0 và AT+CLIP vào bộ nhớ.
(5) AT+CMGF=1<CR>
Thiết lập quá trình truyền nhận tin nhắn được thực hiện ở chế độ text (mặc định là ở chế độ PDU).
Chuỗi trả về sẽ có dạng: <CR><LF>OK<CR><LF> (6) AT+CNMI=2,0,0,0,0<CR>
Thiết lập chế độ thông báo cho TE khi MT nhận được tin nhắn mới. Chuỗi trả về sẽ có dạng:
<CR><LF>OK<CR><LF>
Sau khi lệnh trên được thiết lập, tin nhắn mới nhận được sẽ được lưu trong SIM, và MT không truyền trở về TE bất cứ thông báo nào. TE sẽ đọc tin nhắn được lưu trong SIM trong trường hợp cần thiết.
(7) AT+CSAS<CR>
Lưu cấu hình cài đặt được thiết lập bởi các lệnh AT+CMGF và AT+CNMI. (8) AT+CIPMODE=0<CR>
Lựa chọn phương thức giao tiếp với modem để điều khiển quá trình truyền nhận dữ liệu bằng GPRS. Có hai phương thức:
AT+CIPMODE=0: dùng lệnh AT.
AT+CIPMODE=1: TE truyền nhận dữ liệu trực tiếp với mạng GSM, modem chỉ đóng vai trò là thiết bị trung chuyển dữ liệu, mà không thực hiện thêm bất cứ thao tác nào khác.
Phương pháp dùng lệnh AT được lựa chọn vì tính đơn giản, dễ điều khiển, vì các thao tác với dữ liệu ở các lớp trên sẽ được modem thực hiện thay cho TE.
82 (9) AT+CDNSORIP=0<CR>
Lựa chọn phương thức định địa chỉ cho Server. Có hai phương thức: AT+CDNSORIP=0: định địa chỉ trực tiếp bằng địa chỉ IP của Server. AT+CDNSORIP=1: định địa chỉ gián tiếp thông qua tên miền của Server. Địa chỉ IP của Server sẽ được truy vấn thông qua hệ thống tên miền DNS (Domain Name Server).
Để đơn giản và tăng tốc độ kết nối và giảm rủi ro, phương thức định địa chỉ trực tiếp bằng địa chỉ IP được lựa chọn.
(10) AT+CIPCSGP=1,”m-wap”,”mms”,”mms”<CR> Thiết lập phương thức thực hiện kết nối GPRS.
Có hai phương thức kết nối dữ liệu: đó là kết nối thông qua hệ thống chuyển mạch CSD (Circuit Switch Data) dựa trên đường truyền vô tuyến của mạng GSM (tương tự như việc thực hiện một cuộc gọi data call) và phương pháp chuyển mạch gói GPRS. CSD có lợi thế về vùng phủ sóng, nhưng giá cước đắt (giá cước được tính theo thời gian kết nối), tốn băng thông vô tuyến (chiếm trọn kênh truyền vô tuyến) và module SIM548 không hỗ trợ TCP stack cho phương thức kết nối trên, điều đó gây nhiều khó khăn cho quá trình truyền nhận dữ liệu. Phương thức kết nối bằng GPRS tuy gặp phải sự hạn chế về vùng phủ sóng nhưng lại có được mọi ưu thế khác so với CSD. Đó cũng là nguyên nhân GPRS được lựa chọn trong phạm vi ứng dụng của hệ thống.
Phương thức kết nối GPRS và các tham số được thiết lập tương ứng với các tham số của dịch vụ GPRS của nhà cung cấp dịch vụ mạng di động GSM Vina Fone tại Việt Nam.
AT+CIPCSGP=1,”m3-world”,”mms”,”mms”<CR> (11) AT+CIPHEAD=1<CR>
Thêm phần header “+IPDx:” (x là số byte dữ liệu nhận được) vào phía trước phần dữ liệu nhận được.
(12) AT+CIPSPRT=1<CR>
Thiết lập định dạng cho quá trình truyền dữ liệu bằng lệnh AT+CIPSEND. (13) AT+CIPSRIP=1<CR>
83 (14) AT+CIPSCONT<CR>
Lưu lại cấu hình thiết lập dùng cho quá trình kết nối và truyền nhận dữ liệu bằng GPRS.
Các lệnh trên chỉ cần được thực thi 1 lần, sau đó lưu lại và trở thành cấu hình mặc định của modem. Cấu hình mặc định này không thay đổi, kể cả khi mất nguồn. Phần khởi tạo này không liên quan đến quá trình hoạt dộng sau này của modem. Do đó có thể khởi tạo riêng trước khi đưa vào vận hành trong hệ thống.
4.2.2 Truyền nhận thông báo về tình trạng GPRS
Các thông số này cần được cấu hình mỗi khi module bị reset.
Bảng 4.3 Tập lệnh tra cứu trạng thái GPRS
(3) AT+CGREG=1<CR>
84
Khi vị trí của modem thay đổi từ vùng phủ sóng GPRS sang vùng chưa phủ sóng GPRS, modem sẽ gửi về chuỗi
<CR><LF>+CGREG: 0<CR><LF>
Trong trường hợp modem ở ngoài vùng phủ sóng GPRS một thời gian đủ lâu, kết nối GPRS sẽ bị ngắt, và modem gửi về chuỗi:
<CR><LF>+PDP: DEACT<CR><LF>
Ngược lại, khi modem trở về vùng phủ sóng GPRS, modem sẽ gửi về chuỗi: <CR><LF>+CGREG: 1<CR><LF>
Việc xác định trạng thái kết nối GPRS tại vị trí hiện tại của modem cho phép chuyển đổi linh hoạt hơn phương thức truyền nhận dữ liệu (ví dụ như chuyển sang truyền nhận bằng SMS) giúp bảo đảm kết nối được liên tục.
Trong trường hợp cần khảo sát vùng phủ sóng GPRS, có thể khởi tạo bằng lệnh:
AT+CGREG=2<CR>
Ngoài thông tin về trạng thái sóng GPRS, khi lệnh trên được khởi tạo, khi modem chuyển từ cell này sang cell khác, hoặc từ vùng phủ sóng này sang vùng phủ sóng khác, chuỗi trả về sẽ có dạng:
<CR><LF>+CGREG:<stat>,<lac>,<ci><CR><LF>
Ngoài thông tin về trạng thái vùng phủ sóng GPRS, các thông tin khác như Cell ID (<ci>) và vùng phủ sóng (<lac>) cũng được modem gửi về, cho kết quả khảo sát chi tiết hơn.
4.2.3 Thiết lập kết nối
85 (1) AT+CIPSHUT<CR>
Hủy bỏ kết các nối trước đó, đưa trạng thái kết nối của module SIM548 về trạng thái ban đầu (IP INITIAL).
Nếu lệnh trên được thực hiện thành công, chuỗi trả về sẽ có dạng: <CR><LF>OK<CR><LF>
Trong trường hợp module trước đo đã ở trạng thái IP INITIAL, chuỗi trả về sẽ có dạng:
<CR><LF>ERROR<CR><LF>
(2) AT+CIPSTART=”TCP”,”222.252.96.179”,”2505”<CR>
Thiết lập kết nối với Server có địa chỉ IP là“222.252.96.179”, port 2505 với phương thức truyền nhận là TCP. Server này được thiết lập dựa trên phần mềm TCP server đã đề cập ở trên.
Chuỗi trả về sẽ có dạng: <CR><LF>OK<CR><LF>
Nếu kết nối được thực hiện thành công, trong khoảng từ 3 đến 4 giây, module sẽ gửi về một chuỗi thông báo kết nối được thực hiện thành công:
<CR><LF>CONNECT OK<CR><LF>
Nếu sau khoảng thời gian trên mà không nhận được chuỗi thông báo kết nối thành công, kết nối chắc chắn sẽ không thực hiện được, cần xem lại các trường hợp sau trước khi bắt đầu khởi tạo lại kết nối từ bước 1:
Module đang ở trạng thái PDP Deactiviated: do không có dữ liệu truyền đi trên một đường truyền đã được thiết lập trong một thời gian dài (khoảng vài giờ đồng hồ), hệ thống mạng sẽ tự động hủy kết nối và đưa module trở về trạng thái PDP Deactiviated. Trong trường hợp này cần reset lại module (dùng lệnh “AT+CFUN=0” và “AT+CFUN=1”) trước khi bắt đầu thiết lập kết nối.
Chương trình ứng dụng Server chưa được kích hoạt.
Các chương trình bảo mật chạy trên máy tính đang chạy ứng dụng Server chưa được tắt đi.
4.2.4 Truyền nhận gói
86 (1) AT+CIPSEND=18<CR>
Truyền một gói dữ liệu có số kí tự cần truyền đi là 18. Số kí tự tối đa có thể truyền trong một gói là 160 kí tự. Nếu số kí tự cần truyền lớn hơn 160 kí tự, module sẽ tự động tách thành hai hay nhiều gói dữ liệu và truyền đi.
Khi nhận được lệnh trên, module sẽ trả về chuỗi: <CR><LF>>
Định dạng của chuỗi trả về là “>”, định dạng này có thể thay đổi bằng lệnh khởi tạo “AT+CIPSPRT”.
Sau khi nhận được chuỗi trên, dữ liệu truyền đi cần được đưa vào, module sẽ tự động truyền gói dữ liệu đi sau khi đã nhận đủ số kí tự cần truyền (không cần kí tự kết thúc chuỗi). ( ở đây dữ liệu truyền là dòng Login, 29N1234,1234)
Thời gian truyền dữ liệu khoảng 1 đến 2 giây, tùy theo số byte cần truyền. Nếu