Thứ Hai, 9 tháng 2, 2015

Module nRF24L01 2.4G

Module nRF24L01 2.4G 
o Modul nRF24L01 hoạt động ở tần số sóng ngắn 2.4G nên Modul này khả năng truyền dữ liệu tốc độ cao và truyền nhận dữ liệu trong điều kiện môi trường có vật cản o Modul nRF24L01 có 126 kênh truyền. Điều này giúp ta có thể truyền nhận dữ liệu trên nhiều kênh khác nhau. o Modul khả năng thay đổi công suất phát bằng chương trình, điều này giúp nó có thể hoạt động trong chế độ tiết kiệm năng lượng.


1.Thông số kỹ thuật:
Radio
Hoạt động ở giải tần 2.4G
Có 126 kênh
Truyền và nhận dữ liệu
Truyền tốc độ 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.
Thu:
Có bộ lọc nhiễu tại đầu thu
Kếch đại bị ảnh hưởng bởi nhiễu thấp (LNA)
Nguồn cấp:
Hoạt động từ 1.9-3.6V.
Các chân IO chạy được cả 3.3 lẫn 5V.
Giao tiếp:
4 pin SPI
Tốc độ tối đa 8Mbps
3-32 bytes trên 1 khung truyền nhận
[IMG]
-Phân tích:
Modul nRF24L01 hoạt động ở tần số sóng ngắn 2.4G nên Modul này khả năng truyền dữ liệu tốc độ cao và truyền nhận dữ liệu trong điều kiện môi trường có vật cản
Modul nRF24L01 có 126 kênh truyền. Điều này giúp ta có thể truyền nhận dữ liệu trên nhiều kênh khác nhau.
Modul khả năng thay đổi công suất phát bằng chương trình, điều này giúp nó có thể hoạt động trong chế độ tiết kiệm năng lượng.
Chú ý: Điện áp cung cấp cho là 1.9à3.6V. Điện áp thường cung cấp là 3.3V. Nhưng các chân IO tương thích với chuẩn 5V. Điều này giúp nó giao tiếp rộng dãi với các dòng vi điều khiển.
2. Sơ đồ phần cứng:
[IMG]

Sơ đồ kết nối vi điều khiển:
[IMG]
Khi kết nối tới vi điều khiển bạn nhớ cấu hình chân đó là output hay input (AVR, PIC)
3.Phần mềm.
Bạn có thể tham khảo trong code của mình update theo Product. Mình sẽ giải thích cách cài đặt để hoạt động trong các chế độ.
Khung truyền:

[IMG]

a. - Địa chỉ truyền nhận:
Khung truyền của nRF24L01 từ 3-5 bytes dùng làm địa chỉ. Bạn có thể cấu hình, nhưng địa chỉ truyền như thế nào thì địa chỉ nhận của chip tương ứng phải giống như thế để có thể thu được tín hiệu. Trong chương trình mình dùng 5 byte cho địa chỉ truyền nhận.
HTML:
#define TX_ADR_WIDTH    5      // 5 uints TX address width
 
#define RX_ADR_WIDTH    5      // 5 uints RX address width
 
unsigned char const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};
 
unsigned char const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};
Hàm void init_NRF24L01(void)cấu hình truyền nhận :
HTML:
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
 
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); 
b. Khung dữ liệu
Khung dữ liệu từ 0-32 byte, hiện tại mình dùng 32 byte. Nếu bạn dùng số lượng byte khác thì có thể cấu hình trong biến.
HTML:
#define TX_PLOAD_WIDTH  32            // 32 uints TX payload
 
#define RX_PLOAD_WIDTH  32            // 32 uints TX payload
Hàm nRF24L01_TxPacket(unsigned char * tx_buf) gửi dữ liệu trong tx_buf
HTML:
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // gửi dữ liệu 32 byte 
Trong hàmvoid init_NRF24L01(void)cấu hình số byte nhận.
HTML:
  SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); // Do rong data nhận 32 byte
[IMG]

c. - Kênh truyền nhận và địa chỉ nhận.
nRF24L01 có 126 kênh truyền. Ban có thể lựa chọn kênh truyền nào bạn muốn bằng hàm.
HTML:
SPI_RW_Reg(WRITE_REG + RF_CH, 0);        // kênh 0, tần số RF = 2400 + RF_CH* (1or 2 M)
Trong 1 kênh truyền, nRF24L01 có thể nhận được 6 luồng dữ liệu. Do đó bạn phải lựa chọn 1 trong 6 luồng đó.
HTML:
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // 0x01 Luồng P0
 
      // 0x02 Luồng P1
 
      // 0x03 Luồng P2
 
      // 0x04 Luồng P3
 
      // 0x05 Luồng P4
 
      // 0x06 Luồng P5
 
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // 0x01 Enable  Luồng P0
 
                // 0x02 Enable  Luồng P1
 
                // 0x03 Enable Luồng P2
 
                // 0x04 Enable Luồng P3
 
                // 0x05 Enable Luồng P4
 
                // 0x06 Enable Luồng P5
d. Tốc độ đường truyền và công suất nguồn phát
HTML:
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);                        // 1M, 0dbm
e. Mã CRC, truyền nhận
Truyền:
HTML:
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0E);                            // Enable CRC, 2 byte CRC, Send
Nhận:
HTML:
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F);                            // Enable CRC, 2 byte CRC, Recive

f. Cách gửi dữ liệu:
Sau khi cấu hình các trạng thái hoạt động của nRF24L01 thông qua hàm:
void init_NRF24L01(void)
Để gửi dữ liệu đi bạn làm theo các bước sau.
Cho dữ liệu vào buffer, biến TxBuf[32]
Chọn nRF24L01 ở chế độ phát, gọi hàm void SetTX_Mode(void);
Gọi hàm void nRF24L01_TxPacket(unsigned char * tx_buf); để truyền dữ liệu trong TxBuf[32] đi
g. Cách nhận dữ liệu
Chọn nRF24L01 ở chế độ thu, gọi hàm void SetRX_Mode(void);
Độ dữ liệu trong bộ đệm sau khi gọi hàm unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);

1 nhận xét:

  1. Có một số em cũng chưa rõ lắm, có bác nào rảnh chỉ giúp em với không ạ???
    -----------------------------------------------------
    Điện tử cơ bản | Thiết kế tủ điện | Lập trình PLC S7 200 | Vi điều khiển Pic 16f877a

    Trả lờiXóa