.9 Giải thuật nỳt cơ sở

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Mạng cảm nhận không dây và đánh giá bằng thực nghiệm một số thông số qua điều khiển thâm nhập môi trường (Trang 56)

 Nỳt cảm nhận: Luụn ở trạng thỏi sẵn sàng nhận yờu cầu của nỳt cơ sở. Ngay sau khi nhận được yờu cầu sẽ tiến hành gửi dữ liệu trở về.

Ban đầu, nỳt cảm nhận sẽ luụn ở trong trạng thỏi nhận dữ liệu, nếu nhận khụng thành cụng thỡ nhận lại cho tới khi nhận được gúi dữ liệu thành cụng. Sau khi nhận được gúi, nỳt cảm nhận tiến hành tỏch từng trường dữ liệu của gúi đó nhận được và kiểm tra xem đú cú phải nỳt cơ sở yờu cầu chớnh nú hay khụng. Nếu đỳng thỡ nỳt cảm nhận sẽ trễ một khoảng thời gian ngắn rồi mới tiến hành gửi dữ liệu trở về cho nỳt cơ sở. Rồi sau đú lại quay trở lại quỏ trỡnh nhận yờu cầu để chờ tớn hiệu yờu cầu lần tiếp theo. Nếu gúi tin nhận được khụng phải gúi yờu cầu nú gửi dữ liệu thỡ cú 2 khả năng: hoặc đú là gúi tin yờu cầu của nỳt cơ sở tới một nỳt khỏc, hoặc đú là gúi tin dữ liệu của một nỳt cảm nhận khỏc đang truyền về. Khi đú, nú sẽ quay trở lại việc nhận dữ liệu từ mụi trường. Nhưng sau mỗi quỏ trỡnh nhận thỡ nỳt cảm nhận lại phải tiến hành tỏch cỏc trường dữ liệu trong gúi tin nhận được và kiểm tra cỏc trường đú. Cỏc cụng việc này sẽ tốn một khoảng thời gian và khiến cho nỳt cảm nhận quay trở lại quỏ trỡnh nhận yờu cầu muộn hơn nỳt cảm nhận vừa nhận được

Khởi tạo

Addr = 1

Gửi yờu cầu

Nhận dữ liệu Nhận ok? & tRx<0.8s Xử lý Trễ Addr++ Addr>max? Đ S S Đ

yờu cầu và đó gửi dữ liệu đi. Và cũng chớnh vỡ quỏ trỡnh xử lý mất một khoảng thời gian nờn nỳt cơ sở phải trễ đi một khoảng để khi gửi tin yờu cầu thỡ cỏc nỳt cảm nhận khỏc cú thể nhận được. Giải thuật nỳt cảm nhận: Hỡnh 3.10 Giải thuật nỳt cảm nhận while (TRUE) { do{ tbcReceive(); }while(RXI.status != SPP_RX_FINISHED); if((nỳtTarget[n]==1)&& (nỳtType[n]==0xFF)) { delay(20000); // Trễ để tbcTransmit(0xFFFF,0xFF00); } } Ơ Đ Khởi tạo Nhận yờu cầu Nhận ok?

Kiểm tra địa chỉ

Trễ Truyền dữ liệu Đ S S Nỳt cơ sở RS232

b. Lập lịch tập trung kết hợp với lịch ngủ:

Trờn thực tế, mạng cảm nhận khụng dõy là mạng cú tần suất truyền nhận thấp. Cỏc gúi tin truyền trong mạng khụng đũi hỏi phải cú tốc độ nhanh. Trong một số ứng dụng như theo dừi thụng tin từ mụi trường thỡ thậm chớ cũn được sắp xếp một lịch hoạt động và lịch ngủ đều đặn theo chu kỳ. Việc đưa lịch ngủ vào quỏ trỡnh hoạt động với thời gian hợp lý sẽ giải quyết được vấn đề tiết kiệm năng lượng mà lại khụng ảnh hưởng tới việc giỏm sỏt thụng tin mụi trường của mạng.

í tưởng cho mụ hỡnh này như sau: Nỳt cơ sở sẽ cú một lịch hoạt động và lịch nghỉ đan xen nhau và cố định về mặt thời gian. Cỏc nỳt cảm nhận khỏc sẽ phải cú biện phỏp nào đú để cú thể hoạt động và nghỉ gần như trựng khớp với lịch hoạt động và lịch nghỉ của nỳt cơ sở. Như vậy thỡ toàn mạng sẽ cú một khoảng thời gian hoạt động và thơi gian nghỉ tương đối là đều đặn. Trong thời gian hoạt động, mạng sẽ hoạt động dựa trờn cơ chế lập lịch tập trung mà ta đó giới thiệu ở trờn. Trờn thực tế, khoảng thời gian hoạt động và nghỉ của cỏc nỳt mạng sẽ phụ thuộc vào cỏc yếu tố: yờu cầu đũi hỏi của ứng dụng cho phộp thời gian nghỉ là bao lõu, số lượng nỳt mạng cảm nhận là bao nhiờu sẽ yờu cầu một khoảng thời gian hoạt động tối thiểu đủ để nỳt cơ sở thu thập dữ liệu cú thể thu thập dữ liệu từ tất cả cỏc nỳt trong mạng.

Giải quyết bài toỏn: Ta thấy, nỳt cơ sở sẽ một quỏ trỡnh hoạt động khỏ đơn giản, đan xen giữa làm việc và nghỉ. Vấn đề khú khăn ở đõy đú là làm sao để cỏc nỳt cảm nhận cú thể cựng làm việc và cựng nghỉ với nỳt cơ sở một cỏch tương đối chớnh xỏc. Cỏc nỳt cảm nhận hoàn toàn tỏch biệt với nỳt cơ sở và chỉ cú thể giao tiếp bằng truyền

nhận khụng dõy khiến cho việc đồng bộ thời gian giữa cỏc nỳt mạng ở đõy gặp nhiều khú khăn. Giản đồ mụ tả quỏ trỡnh hoạt động của cỏc nỳt trong mạng như sau sẽ giải quyết được vấn đề khú khăn đú:

Hỡnh 3.11. Thời gian hoạt động và ngủ của nỳt mạng Master và Slaver

- Quỏ trỡnh làm việc của nỳt cơ sở: nỳt cơ sở sẽ hoạt động đều đặn với thời gian làm việc là tactive và sẽ nghỉ một khoảng tsleep. Sau đú lại lặp lại quỏ trỡnh làm việc và nghỉ. Trong quỏ trỡnh làm việc, nỳt cơ sở sẽ hoạt động với cơ chế lập lịch tập trung như đó đưa ra ở trờn.

Giải thuật cho nỳt cơ sở:

N tx tsl tactive tsleep T Master Slaver

Hỡnh 3.12 Giải thuật nỳt cơ sở trong lập lịch tập trung kết hợp với lịch ngủ

Đoạn chương trỡnh viết cho chu trỡnh hoạt động, sau chu trỡnh này là chuyển sang chế độ nghỉ: Thời gian nhận tối đa dành cho một nỳt là khụng quỏ 800ms, tổng số nỳt cảm nhận là max, tổng thời gian làm việc là time_active.

t3 = (int)sppGetTime(); do{ for(i=1;i<max;i++) { tbcTransmit(i,0xFF); Đ Khởi tạo Addr = 1 Gửi yờu cầu Nhận dữ liệu Nhận ok? & tRx<0.8s Xử lý Trễ Addr++ S Đ Addr > N Nghỉ tsleep S

t2 = (int) sppGetTime(); do{

tbcReceive();

}while((RXI.status != SPP_RX_FINISHED)&&( ((int) sppGetTime()- t2)<80)); tbcPrintTable(); delay(10000); if(((int)sppGetTime()-t3)>time_active) break; }

}while( ((int)sppGetTime()-t3) < time_active );

- Nỳt cảm nhận: cũng sẽ cú khoảng thời gian làm việc và khoảng nghỉ đan xen lẫn nhau. Tuy nhiờn để cú thể đồng bộ thời gian với hoạt động của nỳt cơ sở thỡ nỳt cảm nhận sẽ phải mất một khoảng thời gian làm việc nhiều hơn chu kỳ làm việc bỡnh thường để xỏc định điểm làm việc trựng với nỳt cơ sở.

Ngay sau khi được khởi động, nỳt cơ sở sẽ tiến hành việc bỏm vào chu trỡnh làm việc của nỳt cơ sở. Nỳt cảm nhận sẽ tiến hành nhận gúi tin, nếu nhận lỗi thỡ nhận lại, tới khi nào nhận thành cụng (cú thể là nỳt mạng cơ sở gửi yờu cầu một nỳt nào đú, cú thể là một nỳt mạng cảm nhận đang truyền dữ liệu về) thỡ chứng tỏ mạng đang trong khoảng thời gian làm việc. Lỳc này nỳt cơ sở đú mới bắt đầu đi vào một chu trỡnh làm việc cụ thể.

Chu trỡnh làm việc của nỳt cảm nhận sẽ được chia làm N chu trỡnh làm việc nhỏ. Trong đú cú chu kỳ đầu tiờn sẽ khỏc biệt so với cỏc chu kỳ cũn lại và (N-1) cỏc chu kỳ tiếp theo sẽ giống nhau.

Chu kỳ đầu tiờn: nỳt cảm nhận sẽ nhận gúi tin yờu cầu và đỏp ứng cỏc yờu cầu nhận được theo đỳng như cơ chế lập lịch tập trung cho nỳt mạng cảm nhận đó giới thiệu ở trờn. Tuy nhiờn, đõy chớnh là chu kỳ làm việc để nỳt cảm nhận cú thể xỏc định được thời điểm làm việc và thời điểm nghỉ của mỡnh trong cỏc chu kỳ tiếp theo. Việc xỏc định được làm như sau: Nỳt cảm nhận hoạt động bỡnh thường, nhưng nếu khi nhận yờu cầu lỗi thỡ bắt đầu lấy thời gian tại thời điểm đú lưu vào một biến t1. Sau mỗi một lần nhận gúi tin khụng thành cụng thỡ sẽ tiến hành kiểm tra xem lần nhận trước đú cú thành cụng hay khụng. Nếu cú thỡ tiến hành lấy thời gian tại thời điểm hiện tại vào t1. Nếu trước đú cũng khụng nhận thành cụng thỡ tiến hành kiểm tra khoảng thời gian hiện tại so với t1, nếu như vượt tx thỡ

chuyển qua trạng thỏi ngủ. Như vậy tx là khoảng thời gian mà nỳt cảm nhận liờn tiếp khụng nhận thành cụng một gúi tin nào. Điều đú cũng cú nghĩa là cỏc nỳt mạng đó trong trạng thỏi nghỉ được một khoảng tx. Sau đú nỳt cảm nhận sẽ chuyển sang trạng thỏi ngủ, nhưng sẽ ngủ với một khoảng thời gian tsl = tsleep – tx.

Khi hết thời gian ngủ cũng là hết chu kỳ làm việc đầu tiờn. Khi nỳt cảm nhận này thức dậy, lỳc đú cỏc nỳt mạng khỏc cũng thức dậy cựng lỳc. Như vậy chu kỳ này đó hoàn thành được nhiệm vụ xỏc định mốc thời gian.

N-1 chu kỳ hoạt động tiếp theo: Nỳt cảm nhận sẽ hoạt động đều đặn với tactive và tsleep giống như nỳt cơ sở.

Ta cú thể thấy ở đõy cỏc khoảng thời gian giữa nỳt cơ sở và nỳt cảm nhận chỉ được xỏc định chớnh xỏc ở chu kỳ đầu tiờn và cỏc chu kỳ sau sẽ là tương đối. Sau một lượng lớn chu kỳ làm việc sẽ cú thể dẫn tới một sai số lớn về mặt thời gian giữa cỏc nỳt. Chớnh vỡ thế mà sau mỗi N chu kỳ làm việc mà lại phải tiến hành lặp lại việc xỏc định mốc thời gian. Với việc làm này, ta đó giải quyết được hoàn toàn vấn đề đồng bộ thời gian giữa cỏc nỳt cảm nhận và nỳt cơ sở.

Chương trỡnh cho nỳt mạng cảm nhận với một số giỏ trị cụ thể: do{ tbcReceive(); }while(RXI.status != SPP_RX_FINISHED); while (TRUE) { do{ tbcReceive(); if(RXI.status != SPP_RX_FINISHED) { if(i==0) t1 = (int)sppGetTime(); i++; } }while((RXI.status != SPP_RX_FINISHED)&&(((int)sppGetTime()- t1)<1000)); //tx = 10s i=0;

tbcPrintTable(); //xử lý, nếu đỳng yờu cầu thỡ gủi dữ liệu.

if( ( (int)sppGetTime()-t1 )>1000 ) { t2 = (int)sppGetTime(); do{}while( ((int)sppGetTime()-t2)<1000); //tsl = 10s for(i=1;i<30;i++) //N = 30 { t1 = (int)sppGetTime(); do{ t2 = (int)sppGetTime(); do{ tbcReceive(); }while((RXI.status != SPP_RX_FINISHED)&&(((int)sppGetTime()-t2)<80)); tbcPrintTable(); }while(((int)sppGetTime()-t1)<2000); //tactive = 20s t2 = (int)sppGetTime();

do{}while( ((int)sppGetTime()-t2)<2000); //tsleep = 20s }

} }

Giải thuật cho nỳt cảm nhận như sau:

Khởi tạo Nhận Nhận ok? Đ S S Nhận yờu cầu S

Hỡnh 3.15 Giải thuật nỳt cảm nhận trong lập lịch tập trung kết hợp với lịch ngủ

c. Đo dũng điện tiờu thụ của nỳt mạng trong chế độ lập lịch tập trung

* Cỏc bước chuẩn bị thớ nghiệm

 Nạp phần mềm lập lịch cho cỏc nỳt mạng

 Chuẩn bị đồng hồ đo Hioki 3803 Digital Hitester sai số 1.5%  Osillo…

* Tiến hành đo đạc

Ta sẽ bố trớ tiến hành đo dũng điện tiờu thụ của nỳt mạng ở cỏc trạng thỏi ngủ, truyền, nhận và khụng truyền, khụng nhận tớn hiệu.

- Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng nhận dữ liệu - Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng truyền dữ liệu - Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng ngủ

- Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng khụng truyền khụng nhận dữ liệu

a. Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng nhận dữ liệu

Cho nỳt mạng hoạt động ở chế độ nhận dữ liệu, nạp chương trỡnh cho nú luụn ở chế độ nhận, sau đú tiến hành đo cường độ dũng điện.

Bao gồm cỏc thủ tục:

+ Thiết đặt chế độ hoạt động cho module RF

+ Cho phộp module RF bắt đầu thu tớn hiệu (khụng quan tõm đến dữ liệu thu được) + Chương trỡnh lặp vụ hạn include <chipcon/hal.h> void main() { // X-tal frequency: 14.745600 MHz // RF frequency A: 868.277200 MHz Rx // RF frequency B: 868.277200 MHz Tx // RX Mode: Low side LO

// Frequency separation: 64 kHz // Data rate: 2.

#include <chipcon/reg1010.h>

#include <chipcon/cc1010eb.h> #4 kBaud

// Data Format: Manchester // RF output power: 4 dBm // IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0x4B, 0x2F, 0x15, // Modem 0, 1 and 2: Manchester 0x75, 0xA0, 0x00, // Freq A

0x58, 0x32, 0x8D, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x40, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW => 4 dBm 0x00, // MATCH 0x00, // PRESCALER };

// Căn chỉnh vựng nhớ con trỏ dữ liệu

RF_RXTXPAIR_CALDATA xdata RF_CALDATA;

WDT_ENABLE(FALSE);

// Set optimum settings for speed and low power consumption MEM_NO_WAIT_STATES();

FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS);

// Calibrate

halRFCalib(&RF_SETTINGS, &RF_CALDATA);

// Kớch hoạt modum RF trong chế độ nhận

halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA); RF_START_RX();// Bắt đầu nhận dữ liệu

// Endless loop

while (TRUE);// Lặp nhận vụ hạn. }

Cỏch đo dũng điện trờn sơ đồ mạch :

CC1010 sử dụng nguồn nuụi 3V3, điện ỏp này được tạo ra từ jump test1 (được đỏnh dấu đỏ trờn sơ đồ) và đất.

Trong sơ đồ CC1010MB thỡ chỉ cú chip CC1010 sử dụng nguồn nuụi 3V3 nờn dũng qua jump test 1 cũng chớnh là dũng tiờu thụ của chip CC1010.

Để đo dũng này ta đặt một đồng hồ đo dũng nối tiếp tại test1 như sơ đồ sau:

Hỡnh 3.16 Sơ đồ chip CC1010, vị trớ đỏnh dấu màu đỏ đo dũng điện tiờu thụ

Đồng thời nạp chương trỡnh cho CC1010 chạy trong từng chế độ riờng biệt, ta sẽ đo được dũng tiờu thụ của CC1010 trong chế độ tương ứng.

Vị trớ đo cường độ dũng điện tại TEST1

Hỡnh 3.17 Thực hiện đo dũng điện trờn chip CC1010

b. Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng truyền dữ liệu

Cho nỳt mạng hoạt động ở chế độ nhận dữ liệu, nạp chương trỡnh cho nú luụn ở chế độ nhận, sau đú tiến hành đo cường độ dũng điện.

Bao gồm cỏc thủ tục:

+ Thiết đặt chế độ hoạt động cho module RF

+ Cho phộp module RF phỏt tớn hiệu (khụng quan tõm đến dữ liệu phỏt ra) + Nhảy tại chỗ #include <chipcon/reg1010.h> #include <chipcon/cc1010eb.h> #include <chipcon/hal.h> void main() { // X-tal frequency: 14.745600 MHz // RF frequency A: 868.277200 MHz Rx // RF frequency B: 868.277200 MHz Tx // RX Mode: Low side LO

// Frequency separation: 64 kHz // Data rate: 2.4 kBaud

// Data Format: Manchester // RF output power: 4 dBm // IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0x4B, 0x2F, 0x15, // Modem 0, 1 and 2: Manchester 0x75, 0xA0, 0x00, // Freq A

0x58, 0x32, 0x8D, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x40, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW => 4 dBm 0x00, // MATCH 0x00, // PRESCALER }; // Calibration data

RF_RXTXPAIR_CALDATA xdata RF_CALDATA; // Disable watchdog timer

WDT_ENABLE(FALSE);

// Set optimum settings for speed and low power consumption MEM_NO_WAIT_STATES();

FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS); halRFCalib(&RF_SETTINGS, &RF_CALDATA);

// Kớch hoạt chế độ truyền dữ liệu

halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA); RF_START_TX(); // Bắt đầu truyền dữ liệu

// Lặp vụ hạn while (TRUE); }

Cỏch đo cường độ dũng điện trờn sơ đồ mạch giống trường hợp cường độ dũng điện nhận.

c. Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng ngủ

Thiết lập nỳt mạng hoạt động ở chế độ ngủ, nạp chương trỡnh cho nú luụn ở chế độ ngủ, sau đú tiến hành đo cường độ dũng điện.

CC1010 đi vào chế độ ngủ ngay sau khi bắt đầu chạy. #include <chipcon/hal.h>

#include <chipcon/cc1010eb.h> void main() {

// Disable watchdog timer WDT_ENABLE(FALSE);

// Startup macros for speed and low power consumption MEM_NO_WAIT_STATES();

FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS); ENTER_SLEEP_MODE();// Đưa nỳt mạng về trạng thỏi ngủ

}

d. Tiến hành đo dũng điện tiờu thụ của nỳt mạng lỳc nỳt mạng khụng truyền khụng nhận dữ liệu

Bao gồm cỏc thủ tục:

+) Thiết lập chế độ cho module ADC và kớch hoạt ADC. +) Chương trỡnh nhảy tại chỗ.

// khụng kớch hoạt modeum RF, chỉ cho CPU chạy ở chế độ chạy lệnh

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Mạng cảm nhận không dây và đánh giá bằng thực nghiệm một số thông số qua điều khiển thâm nhập môi trường (Trang 56)

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

(101 trang)