Giới thiệu về mô đun thu phát NRF24L01

Một phần của tài liệu Thiết kế hệ thống động lực cho tàu mô hình sử dụng năng lượng mặt trời (Trang 117)

NRF24L01- module là board mạch thiết kế cho giải pháp truyền dữ liệu không dây, sử dụng chip thế hệ mới nhất NRF24L01+ của hãng Nordic's bổ sung them một số Pipelines, Buffers, và chức năng Auto-Retranmist Feature, sử dụng băng tần

2.4GHz, sử dụng giao thức SPI để giao tiếp. Mô đun này rất lý tƣởng cho truyền dữ liệu Wireless, Multicast và Frequency-hopping Communication.

Hình 3.29: Modun thu phát dữ liệu không dây NRF24L01 - Các thông số cơ bản:

Phần phát: Hoạt động ở dải tần 2.4GHZ trên toàn thế giới. Dòng tiêu thụ thấp 11.3 mA tại công suất phát dB và 12.3mA tại tốc độ nhận 2Mbps, 6 luồng dữ liệu. Có 126 kênh. Tự động xử lý gói dữ liệu. Tốc độ truyền cao 1Mbps hoặc 2Mbps. Công suất phát : có thể cài đặt đƣợc 4 công suất nguồn phát:0,-6,-12,- 18dBm

Phần thu: Có bộ lọc nhiễu tạ đầu thu

Khếch đại bị ảnh hƣởng bởi nhiễu thấp

Nguồn cấp: Hoạt động từ 1.9-3.6V, các chân IO chạy đƣợc cả 3.3V lẫn 5V Giao tiếp: Pin SPI, tốc độ tối đa 8Mbps, 3-32 byte trên 1 khung truyền nhận

a. Sơ đồ cấu trúc và chức năng các chân của Mô đun NRF24L01

- Sơ đồ cấu trúc:

Hình 3.30: Sơ đồ cấu trúc Mô đun NRF24L01

Hình 3.32: Sơ đồ nguyên lý và các chân của chip NRF24L01

- Chức năng của các chân:

Bảng 3.21: Chức năng các chân chip NRF24L01

Pin NO. Pin name Chức năng

1 GND Ground

2 VCC Power input 3.3V

3 CE-chip Enable *Mức thấp: tải dƣ liệu lên Radio hoạc copy một gói tin nhận đƣợc

*Mức cao: thiết lập Radio sang Mode receive/transmit

4 CNS-SPI Clock Xung giao tiếp chuẩn SPI 5 MOSO-Master Out,

Slave in

Dữ liệu nối tiếp đƣợc truyền từ Master(CPU) qua chân này tới Slave(nRF24L01)

7 MOSO-Master int, Slave Out

Dữ liệu nối tiếp đƣợc truyền từ Slave(nRF24L01)qua chân này tới Master(CPU)

8 IRQ-Interrupt Request

Yêu cầu ngắt radio điều khiển chân này về mức thấp để kích hoạt interrupt

- Các thanh ghi:

Bảng 3.22 : Các thanh ghi trong NRF24L01

Địa chỉ Tên Bit Giá trị

mặc định

Kiểu Mô tả

00 CONFIG Thanh ghi cấu hình (adsbygoogle = window.adsbygoogle || []).push({});

Reserved 7 0 R/W Không sử dụng

MASK_RX_DR 6 0 R/W 0:Cho phép ngắt RX xảy ra

trên chân IQR

1: không cho phép ngắt

MASK_RX_DS 5 0 R/W Cho phép ngắt TX

EN_CRC 3 1 R/W Enable CRC

CRCO 2 0 R/W Số byte mã hóa

0:2 byte 1:1 byte

PWR_UP 1 0 R/W 1:POWER UP,0:POWER

DOWN

PRIM_RX 0 0 R/W RX/TX control-1:PRX,

0:PTX

02 EN_RXADDR Cho phép nhận địa chỉ

Reserved 7 :6 00 Không sử dụng

ERX_P5 5 1 R/W Cho phép nhận dữ liệu

luồng5

ERX_P4 4 1 R/W Cho phép nhận dữ liệu

luồng4

ERX_P3 3 1 R/W Cho phép nhận dữ liệu

luồng3

ERX_P2 2 1 R/W Cho phép nhận dữ liệu

luồng2

ERX_P1 1 1 R/W Cho phép nhận dữ liệu

luồng1

ERX_P0 0 1 R/W Cho phép nhận dữ liệu

luồng0

05 RF_CH 3 1 R/W Chọn kênh truyền

Reserved 7 0 R/W Không sƣ dụng

6 :0 2 R/W Thiết lập tần số cho kênh truyền nhận

06 RF_SETUP Thiết lập truyền nhận (adsbygoogle = window.adsbygoogle || []).push({});

PLL_LOCK 4 0 R/W Khóa tín hiệu PLL chỉ sử dụng trong thử nghiệm RF_DR 3 1 R/W „0‟ :1M data rate „1‟ :2M data rate RF_PWR 2:1 11 R/W Chọn công suất phát „00‟ -18dBm „01‟ -12dBm „10‟ -6dBm „11‟ -0dBm

07 STATUS Thanh ghi trạng thái

Reserved 7 0 Không sử dụng

RX_DR 6 0 „0‟ có dữ liệu mới nhận

TX_DR 5 0 „0‟ có dữ liệu mới truyền

MAX_RT 4 0 RX_P_NO 3 :1 111 „111‟ dữ liệu RX là rỗng TX_FULL 0 0 „1‟bộ nhớ FIFO TX tràn 0A RX_ADDR_P0 39 :0 0xE7 E7E7 E7E7

R /W Địa chỉ nhận pipeo0=5 byte

10 TX_ADDR 39 :0 0xE7

E7E 7E7E 7

R /W Địa chỉ truyền pipeo0=5byte

- Sơ đồ kết nối với vi điều khiển: truyền thông chuẩn SPI

Hình 3.34: Sơ đồ kết nối với vi điều khiển

b. Cấu trúc khung truyền nhận dữ liệu :

Hình 3.35: Cấu trúc khung truyền nhận dữ liệu

Một khung truyền bao gồm:

- Phần mở đầu “Premble” 1 byte dùng để phát hiện chuỗi bit 0 hay 1 để thong báo dữ liệu đƣợc đƣa đến các thanh ghi.

- Phần địa chỉ “Address” bao gồm 3 đến 5 byte dùng để định địa chỉ thanh ghi.

- Phần dữ liệu điều khiển thanh ghi “Packet control” dùng để cấu hình thanh ghi .

- Phần data “Payload” tối đa 32 byte là dữ liệu truyền nhận.

- Phần kiểm tra lỗi “CRC” phát hiện lỗi truyền nhận.

Điều khiển đa luồng: Một chip NRF24L01 có thể nhận 6 luồng dữ liệu cùng một

lúc MCU CE CSN SCK MOSI MISO NRF24L01

Premble 1 byte Address 3-

5byte

Packet control pleld 9 bit

Peyload 0-32

Hình 3.36: Điều khiển đa luồng - Một Master(PRX) chứa 6 địa chỉ truyền nhận của 6 slaver

- Mỗi slave đảm nhiệm một luồng tƣơng ứng với một địa chỉ truyền và nhận.

- Mô đun giao tiếp với vi điều khiển theo giao thức SPI có dạng sơ đồ Timing nhƣ hình sau:

Hình 3.37: Giao tiếp SPI đọc dữ liệu từ mô đun NRF24L01 (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.38: Giao tiếp SPI gửi dữ liệu đến mô đun NRF24L01 - Giải quyết xung đột trong truyền dẫn:

Chip NRF24L01 hỗ trợ chức năng chống xung đột trong quá trinh truyền nhận. Quá trình xảy ra khi có cùng lúc hai mô đun đồng thời phát. Để tránh hiện tƣợng này chip NRF24L01 đã hỗ trợ chức năng ACK(Auto Acknowledgement) đây là chức năng tự động báo hiệu nhận dữ liệu thành công. Nhƣ vậy sau mỗi lần truyền dữ liệu chip kiểm tra tín hiệu ACK nếu không có tín hiệu trả lời ACK thì chip biết quá trình truyền bị lỗi và thực hiện truyền lại gói tin đó.

c. Ứng dụng NRF24L01:

Ứng dụng nhiều trong các thiết bị điều khiển từ xa nhƣ xe mô hình, máy bay mô hình, tàu mô hình… hoặc các thiết bị truyền dữ liệu không dây.

Hình 3.39: Xe, tàu mô hình điều khiển từ xa dùng NRF20L01 3.7.1.2. Chíp Atmega8 a. Các thông số kỹ thuật: - Tốc độ tối đa: 16MHz. - Dung lƣợng bộ nhớ chƣơng trình: 8 KB. - Bộ nhớ EEPROM: 512 Byte. - Dung lƣợng bộ nhớ RAM: 1 KB.

- Bộ nhớ chƣơng trình có khả năng ghi 10.000 lần, bộ nhớ EEPROM có thể ghi 100.000 lần. Hỗ trợ bootloader, có khả năng tự ghi vào bộ nhớ chƣơng trình, cập nhật chƣơng trình cho chip mà không cần mạch nạp.

- Timer 8 bit: 2.

- Timer 16 bit: 1.

- ADC: 6 kênh, 10 bit.

- Giao tiếp: TWI (I2C), UART, SPI

- Điện áp hoạt động: Atmega8L: 2.7V – 5.5V. Atmega8: 4.5V – 5.5V.

b. Sơ đồ cấu trúc, chân và chức năng các chân Atnega8:

Thuộc họ AVR có cấu trúc Harvard, trong đó đƣờng truyền cho bộ nhớ dữ liệu (data memory bus) và đƣờng truyền cho bộ nhớ chƣơng trình (program memory

bus) đƣợc tách riêng. Data memory bus chỉ có 8 bit và đƣợc kết nối với hầu hết các thiết bị ngoại vi, với register file. Trong khi đó program memory bus có độ rộng 16 bits và chỉ phục vụ cho instruction registers.

Hình 3.40: Sơ đồ cấu trúc AVR

Cấu trúc bộ nhớ:

- Bộ nhớ chƣơng trình:

Bộ nhớ chƣơng trình (Program memory): Là bộ nhớ Flash lập trình đƣợc, trong các chip AVR cũ (nhƣ AT90S1200 hay AT90S2313…) bộ nhớ chƣơng trình chỉ gồm 1 phần là Application Flash Section.

- Bộ nhớ dữ liệu (data memory):

Đây là phần chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho chip phần lớn là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên các chip AVR có độ lớn khác nhau tùy theo mỗi chip, tuy nhiên về cơ bản phần bộ nhớ này đƣợc chia thành 5 phần:

Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu, nhƣ mô tả trong hình 1, phần này bao gồm 32 thanh ghi có tên gọi là register file (RF), hay General Purpose

Rgegister – GPR, hoặc đơn giản là các Thanh ghi. Tất cả các thanh ghi này đều là thanh ghi 8 bít

Thanh ghi 8 bít

Tất cả các chip trong họ AVR đều bao gồm 32 thanh ghi Register File có địa chỉ tuyệt đối từ 0x0000 đến 0x001F. Mỗi thanh ghi có thể chứa giá trị dƣơng từ 0 đến 255 hoặc các giá trị có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó…Các thanh ghi này đƣợc đặt tên theo thứ tự là R0 đến R31. Chúng đƣợc chia thành 2 phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31

Thanh ghi R0 là thanh ghi duy nhất đƣợc sử dụng trong instruction LPM (Load Program Memory). Các thanh ghi R26, R27, R28, R29, R30 và R31 ngoài chức năng thông thƣờng còn đƣợc sử dụng nhƣ các con trỏ (Pointer register) trong một số instruction truy xuất gián tiếp. Chúng ta sẽ khảo sát vấn đề con trỏ sau này. Hình 3 mô tả các chức năng phụ của các thanh ghi.

Hình 3.41: Register file

Phần 2: là phần nằm ngay sau register file, phần này bao gồm 64 thanh ghi đƣợc gọi là 64 thanh ghi nhập/xuất (64 I/O register) hay còn gọi là vùng nhớ I/O (I/O Memory). Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Tất cả các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây.

Phần 3: RAM tĩnh, nội (internal SRAM), là vùng không gian cho chứa các biến (tạm thời hoặc toàn cục) trong lúc thực thi chƣơng trình, vùng này tƣơng tự các thanh RAM trong máy tính nhƣng có dung lƣợng khá nhỏ (khoảng vài KB, tùy thuộc vào loại chip).

Phần 4: RAM ngoại (external SRAM), các chip AVR cho phép ngƣời sử dụng gắn thêm các bộ nhớ ngoài để chứa biến, vùng này thực chất chỉ tồn tại khi nào ngƣời sử dụng gắn thêm bộ nhớ ngoài vào chip.

Phần 5: EEPROM (Electrically Ereasable Programmable ROM) là một phần quan trọng của các chip AVR mới, vì là ROM nên bộ nhớ này không bị xóa ngay cả (adsbygoogle = window.adsbygoogle || []).push({});

khi không cung cấp nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lƣu trữ dữ liệu. Nhƣ trong hình 1, phần bộ nhớ EEPROM đƣợc tách riêng và có địa chỉ tính từ 0x0000.

Các thanh ghi trang thái:

Nằm trong vùng nhớ I/O, thanh ghi SREG có địa chỉ I/O là 0x003F và địa chỉ bộ nhớ là 0x005F (thƣờng đây là vị trí cuối cùng của vùng nhớ I/O) là một trong số các thanh ghi quan trọng nhất của AVR. Thanh ghi SREG chứa 8 bit cờ (flag) chỉ trạng thái của bộ xử lí, tất cả các bit này đều bị xóa sau khi reset, các bit này cũng có thể đƣợc đọc và ghi bởi chƣơng trình. Chức năng của từng bit đƣợc mô tả nhƣ sau:

Thanh ghi trạng thái

- Bit 0 – C (Carry Flag: Cờ nhớ):

Là bit nhớ trong các phép đại số hoặc logic, ví dụ thanh ghi R1 chứa giá trị 200, R2 chứa 70, chúng ta thực hiện phép cộng có nhớ: ADC R1, R2, sau phép cộng, kết quả sẽ đƣợc lƣu lại trong thanh ghi R1, trong khi kết quả thực là 270 mà thanh ghi R1 lại chỉ có khả năng chứa tối đa giá trị 255 (vì có 8 bit) nên trong trƣờng hợp này, giá trị lƣu lại trong R1 thực chất chỉ là 14, đồng thời cờ C đƣợc set lên 1 (vì 270=100001110, trong đó 8 bit sau 00001110 =14 sẽ đƣợc lƣu lại trong R1).

- Bit 1 – Z (Zero Flag: Cờ 0):

Cờ này đƣợc set nếu kết quả phép toán đại số hay phép Logic bằng 0.

- Bit 2 – N (Negative Flag: Cờ âm):

- Bit 3 – V (Two‟s complement Overflow Flag: Cờ tràn của bù 2): cờ tràng

- Bit 4 – S (Sign Bit: Bit dấu):

Bit S là kết quả phép XOR giữa 1 cờ N và V, S=N xor V.

- Bit 5 – H (Half Carry Flag: Cờ nhờ nữa):

cờ H là cờ nhớ trong 1 vài phép toán đại số và phép Logic, cờ này hiệu quả đối với các phép toán với số BCD.

- Bit 6 – T (Bit Copy Storage):

đƣợc sử dụng trong 2 Instruction BLD (Bit LoaD) và BST (Bit STorage).

- Bit 7 – I (Global Interrupt Enable) :

Cho phép ngắt toàn bộ): Bit này phải đƣợc set lên 1 nếu trong chƣơng trình có sử dụng ngắt.

- Chức năng các chân:

Bảng 3.23: Chức năng các chân Atmega8

Chân Tên Chức năng

1 PC.6 Chân reset 2 PD.0 Chân nhận dữ liệu(RXD) 3 PD.1 Chân truyền dữ liệu(TXD) 4 PD.2 Chân ngắt 1(INT0) 5 PD.3 Chân ngắt 2(INT1) 6 PD.4 Nhập/xuất 7 VCC Nguồn cấp 8 GND Nối đất

9 PB.6 Chân nối thạch anh 1

10 PB.7 Chân nối thạch anh 2

11 PD.5 Nhâp/xuất 12 PD.6 Nhập/xuất 13 PD.7 Nhập/xuất 14 PB.0 Đọc Input capture 15 PB.1 OCA1 kênh PWM 1 16 PB.2 OC1B kênh PW 2

17 PB.3 MOSI chuẩn giao tiếp SPI

18 PB.4 MISO chuẩn giao tiếp SPI

19 PB.5 SCK chuẩn giao tiếp SPI

20 AVCC Nguồn cấp cho ADC

21 AREF Điện áp tham chiếu ADC (adsbygoogle = window.adsbygoogle || []).push({});

22 GND Chân nối đất

23 PC.0 Nhập xuất, ADC0

25 PC.2 Nhập xuất, ADC2

26 PC.3 Nhập xuất, ADC3

27 PC.4 Nhập xuất, ADC4

28 PC.5 Nhập xuất, ADC8

Mô đun NRF24L01 giao tiếp với AVR theo chuẩn SPI:

SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves đƣợc điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi đƣợc gọi là chuẩn truyền thông “4 dây” vì có 4 đƣờng giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select).

Hình 3.43: Liên kết SPI giữa một chip Master và 3 chip Slave thông qua 4 đường.

Chân SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đƣờng giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn

UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao. Xung nhịp chỉ đƣợc tạo ra bởi chip Master.

Chân MISO– Master Input / Slave Output: nếu là chip Master thì đây là đƣờng

Input còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves đƣợc nối với nhau.

Master Output / Slave Input: nếu là chip Master thì đây là đƣờng Output còn

nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves đƣợc nối trực tiếp với nhau.

Chân SS – Slave Select: SS là đƣờng chọn Slave cần giap tiếp, trên các chip

Slave đƣờng SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đƣờng SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đƣờng SS trên mỗi Slave nhƣng có thể có nhiều đƣờng điều khiển SS trên Master, tùy thuộc vào thiết kế của ngƣời dùng

Hoạt động: mỗi chip Master hay Slave có một thanh ghi dữ liệu 8 bits. Cứ mỗi xung nhịp do Master tạo ra trên đƣờng giữ nhịp SCK, một bit trong thanh ghi dữ liệu của Master đƣợc truyền qua Slave trên đƣờng MOSI, đồng thời một bit trong thanh ghi dữ liệu của chip Slave cũng đƣợc truyền qua Master trên đƣờng MISO. Do 2 gói dữ liệu trên 2 chip đƣợc gởi qua lại đồng thời nên quá trình truyền dữ liệu này đƣợc gọi là “song công”.

Hình 3.44: Mô tả quá trình truyền 1 gói dữ liệu thực hiện bởi module SPI trong AVR, bên trái là chip Master và bên phải là Slave.

Cực của xung giữ nhịp, phase và các chế độ hoạt động: cực của xung giữ nhịp (Clock Polarity) đƣợc gọi tắt là CPOL là khái niệm dùng chỉ trạng thái của chân SCK ở trạng thái nghỉ. Ở trạng thái nghỉ (Idle), chân SCK có thể đƣợc giữ ở mức cao (CPOL=1) hoặc thấp (CPOL=0). Phase (CPHA) dùng để chỉ cách mà dữ liệu đƣợc lấy mẫu (sample) theo xung giữ nhịp. Dữ liệu có thể đƣợc lấy mẫu ở cạnh lên của SCK (CPHA=0) hoặc cạnh xuống (CPHA=1). Sự kết hợp của SPOL và CPHA làm nên 4 chế độ hoạt động của SPI. Nhìn chung việc chọn 1 trong 4 chế độ này

Một phần của tài liệu Thiết kế hệ thống động lực cho tàu mô hình sử dụng năng lượng mặt trời (Trang 117)