久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17635|回復: 51
打印 上一主題 下一主題
收起左側

IAP15W4K58S4-小四軸飛行器 原理圖和程序等制作資料分享

  [復制鏈接]
回帖獎勵 2 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 40%)
跳轉到指定樓層
樓主
STC四軸接收原理圖.pdf (85.19 KB, 下載次數: 166)

STC四軸遙控原理圖.pdf (84.27 KB, 下載次數: 87)










四軸接收程序2.1.rar

263.39 KB, 下載次數: 162, 下載積分: 黑幣 -5

四軸遙控器程序 2.1.rar

53.58 KB, 下載次數: 113, 下載積分: 黑幣 -5

評分

參與人數 3黑幣 +60 收起 理由
渦輪增壓 + 5 很給力!
owl1521 + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏12 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2016-7-12 16:10 | 只看該作者
樓主的部分代碼:
  1. #include <STC15W4K60S4.H>
  2. #include <intrins.h>
  3. #include <NRF24L01.H>

  4. //*********************************************NRF24L01*************************************
  5. #define TX_ADR_WIDTH    5           // 5 uints TX address width
  6. #define RX_ADR_WIDTH    5           // 5 uints RX address width
  7. #define TX_PLOAD_WIDTH  20          // 20 uints TX payload
  8. #define RX_PLOAD_WIDTH  20          // 20 uints TX payload
  9. uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};        //本地地址
  10. uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};        //接收地址
  11. //***************************************NRF24L01寄存器指令*******************************************************
  12. #define READ_REG        0x00          // 讀寄存器指令
  13. #define WRITE_REG       0x20         // 寫寄存器指令
  14. #define RD_RX_PLOAD     0x61          // 讀取接收數據指令
  15. #define WR_TX_PLOAD     0xA0          // 寫待發數據指令
  16. #define FLUSH_TX        0xE1         // 沖洗發送 FIFO指令
  17. #define FLUSH_RX        0xE2          // 沖洗接收 FIFO指令
  18. #define REUSE_TX_PL     0xE3          // 定義重復裝載數據指令
  19. #define NOP             0xFF          // 保留
  20. //*************************************SPI(nRF24L01)寄存器地址****************************************************
  21. #define CONFIG2         0x00  // 配置收發狀態,CRC校驗模式以及收發狀態響應方式
  22. #define EN_AA           0x01  // 自動應答功能設置
  23. #define EN_RXADDR       0x02  // 可用信道設置
  24. #define SETUP_AW        0x03  // 收發地址寬度設置
  25. #define SETUP_RETR      0x04  // 自動重發功能設置
  26. #define RF_CH           0x05  // 工作頻率設置
  27. #define RF_SETUP        0x06  // 發射速率、功耗功能設置
  28. #define STATUS          0x07  // 狀態寄存器
  29. #define OBSERVE_TX      0x08  // 發送監測功能
  30. #define CD              0x09  // 地址檢測           
  31. #define RX_ADDR_P0      0x0A  // 頻道0接收數據地址
  32. #define RX_ADDR_P1      0x0B  // 頻道1接收數據地址
  33. #define RX_ADDR_P2      0x0C  // 頻道2接收數據地址
  34. #define RX_ADDR_P3      0x0D  // 頻道3接收數據地址
  35. #define RX_ADDR_P4      0x0E  // 頻道4接收數據地址
  36. #define RX_ADDR_P5      0x0F  // 頻道5接收數據地址
  37. #define TX_ADDR         0x10  // 發送地址寄存器
  38. #define RX_PW_P0        0x11  // 接收頻道0接收數據長度
  39. #define RX_PW_P1        0x12  // 接收頻道0接收數據長度
  40. #define RX_PW_P2        0x13  // 接收頻道0接收數據長度
  41. #define RX_PW_P3        0x14  // 接收頻道0接收數據長度
  42. #define RX_PW_P4        0x15  // 接收頻道0接收數據長度
  43. #define RX_PW_P5        0x16  // 接收頻道0接收數據長度
  44. #define FIFO_STATUS     0x17  // FIFO棧入棧出狀態寄存器設置
  45. //*****************************************長延時*****************************************
  46. void Delay(unsigned int s)
  47. {
  48.         volatile unsigned int i;
  49.         for(i=0; i<s; i++);
  50.         for(i=0; i<s; i++);
  51. }
  52. //******************************************************************************************
  53. uint         bdata sta;   //狀態標志
  54. sbit        RX_DR        =sta^6;
  55. sbit        TX_DS        =sta^5;
  56. sbit        MAX_RT        =sta^4;
  57. sbit  TX_FULL =sta^0;
  58. /******************************************************************************************
  59. /*延時函數
  60. /******************************************************************************************/
  61. void inerDelay_us(unsigned char n)
  62. {
  63.         for(;n>0;n--);
  64. }
  65. //****************************************************************************************
  66. /*NRF24L01初始化
  67. //***************************************************************************************/
  68. void init_NRF24L01(void)
  69. {
  70.         CE=0;    // chip enable
  71.         CSN=1;   // Spi  disable
  72.         SCK=0;   //
  73.         SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 寫本地地址       
  74.         SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 寫接收端地址
  75.         SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  頻道0自動        ACK應答允許       
  76.         SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允許接收地址只有頻道0,如果需要多頻道可以參考Page21  
  77.         SPI_RW_Reg(WRITE_REG + RF_CH, 0x6e);        //   設置信道工作為2.4GHZ,收發必須一致
  78.         SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設置接收數據長度,本次設置為32字節
  79.         SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x27);                   //設置發射速率為1MB/S,發射功率為最大值+7dB,由于有X2401L功放,實際+21dbm輸出
  80. }
  81. /****************************************************************************************************
  82. /*函數:uint SPI_RW(uint uchar)
  83. /*功能:NRF24L01的SPI寫時序
  84. /****************************************************************************************************/
  85. uint SPI_RW(uint uchar)
  86. {
  87.         uint bit_ctr;
  88.            for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
  89.            {
  90.                 MOSI = (uchar & 0x80);         // output 'uchar', MSB to MOSI
  91.                 uchar = (uchar << 1);           // shift next bit into MSB..
  92.                 SCK = 1;                      // Set SCK high..
  93.                 inerDelay_us(12);
  94.                 uchar |= MISO;                         // capture current MISO bit
  95.                 inerDelay_us(12);
  96.                 SCK = 0;                              // ..then set SCK low again
  97.            }
  98.     return(uchar);                             // return read uchar
  99. }
  100. /****************************************************************************************************
  101. /*函數:uchar SPI_Read(uchar reg)
  102. /*功能:NRF24L01的SPI時序
  103. /****************************************************************************************************/
  104. uchar SPI_Read(uchar reg)
  105. {
  106.         uchar reg_val;
  107.        
  108.         CSN = 0;                // CSN low, initialize SPI communication...
  109.         inerDelay_us(12);
  110.         SPI_RW(reg);            // Select register to read from..
  111.         inerDelay_us(12);
  112.         reg_val = SPI_RW(0);    // ..then read registervalue
  113.         inerDelay_us(12);
  114.         CSN = 1;                // CSN high, terminate SPI communication
  115.        
  116.         return(reg_val);        // return register value
  117. }
  118. /****************************************************************************************************/
  119. /*功能:NRF24L01讀寫寄存器函數
  120. /****************************************************************************************************/
  121. uint SPI_RW_Reg(uchar reg, uchar value)
  122. {
  123.         uint status;
  124.        
  125.         CSN = 0;                   // CSN low, init SPI transaction
  126.         status = SPI_RW(reg);      // select register
  127.         SPI_RW(value);             // ..and write value to it..
  128.         CSN = 1;                   // CSN high again
  129.        
  130.         return(status);            // return nRF24L01 status uchar
  131. }
  132. /****************************************************************************************************/
  133. /*函數:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
  134. /*功能: 用于讀數據,reg:為寄存器地址,pBuf:為待讀出數據地址,uchars:讀出數據的個數
  135. /****************************************************************************************************/
  136. uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
  137. {
  138.         uint status,uchar_ctr;
  139.        
  140.         CSN = 0;                                    // Set CSN low, init SPI tranaction
  141.         status = SPI_RW(reg);                       // Select register to write to and read status uchar
  142.        
  143.         for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
  144.                 pBuf[uchar_ctr] = SPI_RW(0);    //
  145.        
  146.         CSN = 1;                           
  147.        
  148.         return(status);                    // return nRF24L01 status uchar
  149. }
  150. /*********************************************************************************************************
  151. /*函數:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
  152. /*功能: 用于寫數據:為寄存器地址,pBuf:為待寫入數據地址,uchars:寫入數據的個數
  153. /*********************************************************************************************************/
  154. uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
  155. {
  156.         uint status,uchar_ctr;
  157.        
  158.         CSN = 0;            //SPI使能      
  159.         status = SPI_RW(reg);   
  160.         for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
  161.         SPI_RW(*pBuf++);
  162.         CSN = 1;           //關閉SPI
  163.         return(status);    //
  164. }
  165. /****************************************************************************************************/
  166. /*函數:void SetRX_Mode(void)
  167. /*功能:數據接收配置
  168. /****************************************************************************************************/
  169. void SetRX_Mode(void)
  170. {
  171.         CE=0;
  172.         SPI_RW_Reg(WRITE_REG + CONFIG2, 0x0f);                   // IRQ收發完成中斷響應,16位CRC        ,主接收
  173.         CE = 1;
  174. }
  175. /******************************************************************************************************/
  176. /*函數:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
  177. /*功能:數據讀取后放如rx_buf接收緩沖區中
  178. /******************************************************************************************************/
  179. unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
  180. {
  181.   unsigned char revale=0;
  182.         sta=SPI_Read(STATUS);        // 讀取狀態寄存其來判斷數據接收狀況
  183.         if(RX_DR)                                // 判斷是否接收到數據
  184.         {
  185.             CE = 0;                         //SPI使能
  186.                 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
  187.                 revale =1;                        //讀取數據完成標志
  188.         }
  189.         SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到數據后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志
  190.            CE=1;                                                                     //。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  191.         return revale;
  192. }
  193. /***********************************************************************************************************
  194. /*函數:void nRF24L01_TxPacket(unsigned char * tx_buf)
  195. /*功能:發送 tx_buf中數據
  196. /**********************************************************************************************************/
  197. void nRF24L01_TxPacket(unsigned char * tx_buf)
  198. {
  199.         SPI_RW_Reg(WRITE_REG+STATUS,0xff);
  200.         SPI_RW_Reg(0xE1,0xff);
  201.         CE=0;               
  202.         SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                              
  203.         SPI_RW_Reg(WRITE_REG + CONFIG2, 0x0e);                  
  204.         CE=1;                 
  205.         inerDelay_us(10);   //CE高電平大于10us才能進入發射模式
  206. }
復制代碼

  1. #include <STC15W4K60S4.H>
  2. #include <EEPROM.h>
  3. #include <intrins.h>
  4. #include <NRF24L01.H>
  5. #include <MPU6050.H>
  6. #define CMD_IDLE    0            
  7. #define CMD_READ    1              
  8. #define CMD_PROGRAM 2               
  9. #define CMD_ERASE   3              

  10. #define ENABLE_IAP 0x80           //if SYSCLK<30MHz
  11. extern int g_x,g_y,g_z;            //陀螺儀矯正參數
  12. extern char a_x,a_y;               //角度矯正參數
  13. extern double Angle,Angley;
  14. void IapIdle()
  15. {
  16.     IAP_CONTR = 0;                 
  17.     IAP_CMD = 0;                    
  18.     IAP_TRIG = 0;                  
  19.     IAP_ADDRH = 0x80;              
  20.     IAP_ADDRL = 0;
  21. }
  22. unsigned char IapReadByte(unsigned int addr) //讀取1字節
  23. {
  24.     unsigned char dat;                  
  25.     IAP_CONTR = ENABLE_IAP;      
  26.     IAP_CMD = CMD_READ;           
  27.     IAP_ADDRL = addr;            
  28.     IAP_ADDRH = addr >> 8;         
  29.     IAP_TRIG = 0x5a;            
  30.     IAP_TRIG = 0xa5;            
  31.     _nop_();                     
  32.     dat = IAP_DATA;
  33.     IapIdle();       
  34.     return dat;                  
  35. }

  36. void IapProgramByte(unsigned int addr, unsigned char dat) //寫入1字節
  37. {
  38.     IAP_CONTR = ENABLE_IAP;        
  39.     IAP_CMD = CMD_PROGRAM;        
  40.     IAP_ADDRL = addr;            
  41.     IAP_ADDRH = addr >> 8;         
  42.     IAP_DATA = dat;               
  43.     IAP_TRIG = 0x5a;              
  44.     IAP_TRIG = 0xa5;               
  45.     _nop_();   
  46.     IapIdle();       
  47. }

  48. void IapEraseSector(unsigned int addr) //扇區擦除
  49. {
  50.     IAP_CONTR = ENABLE_IAP;        
  51.     IAP_CMD = CMD_ERASE;         
  52.     IAP_ADDRL = addr;            
  53.     IAP_ADDRH = addr >> 8;         
  54.     IAP_TRIG = 0x5a;              
  55.     IAP_TRIG = 0xa5;               
  56.     _nop_();
  57.     IapIdle();       
  58. }
  59. void IAP_Gyro()   //陀螺儀校準
  60. {
  61.         IapEraseSector(0xE200); //扇區擦除
  62.         g_y = GetData(GYRO_YOUT_H);  //讀取陀螺儀數據
  63.         g_x = GetData(GYRO_XOUT_H);
  64.         g_z = GetData(GYRO_ZOUT_H);
  65.         IapProgramByte(0xE200,g_y>>8);  //寫入數據至EEPROM
  66.         IapProgramByte(0xE201,g_y);
  67.         IapProgramByte(0xE202,g_x>>8);     //陀螺儀數據存放至114扇區
  68.         IapProgramByte(0xE203,g_x);
  69.         IapProgramByte(0xE204,g_z>>8);
  70.         IapProgramByte(0xE205,g_z);
  71.         IapProgramByte(0xE206,1);
  72. }
  73. void IAP_Angle()
  74. {
  75.         IapEraseSector(0xE400);           //加速度計數據存放至115扇區
  76.         a_x=(char)Angle;
  77.         a_y=(char)Angley;
  78.         IapProgramByte(0xE400,1);
  79.         IapProgramByte(0xE401,a_x);
  80.         IapProgramByte(0xE402,a_y);
  81. }
  82. void IAPRead()
  83. {
  84.         unsigned char i;
  85.         i=IapReadByte(0xE206);
  86.         if(i==1)      //判斷數據是否已經更新過,更新過才讀取數據
  87.         {
  88.         g_y=IapReadByte(0xE200)<<8|IapReadByte(0xE201);
  89.         g_x=IapReadByte(0xE202)<<8|IapReadByte(0xE203);
  90.         g_z=IapReadByte(0xE204)<<8|IapReadByte(0xE205);
  91.         }
  92.         i=IapReadByte(0xE400);
  93.         if(i==1)      //判斷數據是否已經更新過,更新過才讀取數據
  94.         {
  95.         a_x=IapReadByte(0xE401);
  96.         a_y=IapReadByte(0xE402);
  97.         }
  98. }

復制代碼
回復

使用道具 舉報

板凳
ID:129080 發表于 2016-7-13 13:52 | 只看該作者
這個是我們做飛行器不錯的參考資料了
回復

使用道具 舉報

地板
ID:130274 發表于 2016-7-19 10:15 | 只看該作者
haitao4675 發表于 2016-7-13 13:52
這個是我們做飛行器不錯的參考資料了

學習了,感謝分享
回復

使用道具 舉報

5#
ID:144374 發表于 2016-10-25 17:18 | 只看該作者
沒黑幣,什么都做不了
回復

使用道具 舉報

6#
ID:143758 發表于 2016-10-28 21:05 | 只看該作者
路過,看看
回復

使用道具 舉報

7#
ID:142588 發表于 2016-10-30 16:18 | 只看該作者

回帖獎勵 +1 黑幣

mark= =
回復

使用道具 舉報

8#
ID:147796 發表于 2016-11-14 23:18 來自手機 | 只看該作者
最小系統可不可以啊
回復

使用道具 舉報

9#
ID:154656 發表于 2016-12-14 12:33 | 只看該作者
頂一個不錯
回復

使用道具 舉報

10#
ID:137676 發表于 2017-1-7 15:10 | 只看該作者
學習了,感謝分享
回復

使用道具 舉報

11#
ID:149634 發表于 2017-1-9 17:15 | 只看該作者
發發發
回復

使用道具 舉報

12#
ID:205813 發表于 2017-5-29 13:23 | 只看該作者
和H啊哈哈哈哈哈哈哈哈哈哈哈,,,,學習
回復

使用道具 舉報

13#
ID:207443 發表于 2017-6-5 19:26 | 只看該作者
好長的程序呀
回復

使用道具 舉報

14#
ID:210531 發表于 2017-6-12 17:42 | 只看該作者
初學前來學習
回復

使用道具 舉報

15#
ID:212208 發表于 2017-6-18 10:43 | 只看該作者
樓主好人,謝謝樓主!
回復

使用道具 舉報

16#
ID:136713 發表于 2017-6-24 05:30 | 只看該作者
非常感謝分享
回復

使用道具 舉報

17#
ID:213318 發表于 2017-6-28 15:22 | 只看該作者
收藏先,以后好研究
回復

使用道具 舉報

18#
ID:197714 發表于 2017-6-30 10:54 來自手機 | 只看該作者
不知道,四軸都需要買什么東西?
回復

使用道具 舉報

19#
ID:218461 發表于 2017-7-11 15:18 | 只看該作者
很厲害的設計,值得學習
回復

使用道具 舉報

20#
ID:220748 發表于 2017-7-19 12:21 | 只看該作者
我正在學習制作遙控飛機模型,很需要的資料,謝謝無私奉獻!!
回復

使用道具 舉報

21#
ID:220748 發表于 2017-7-19 12:24 | 只看該作者
我正在做遙控飛機模型,正好需要這方面的技術資料!感謝奉獻!
回復

使用道具 舉報

22#
ID:220748 發表于 2017-7-20 13:11 | 只看該作者
樓主!能否用方框圖描述一下“MPU6050”的程序設計思路。
謝謝!!
回復

使用道具 舉報

23#
ID:220748 發表于 2017-7-29 11:51 | 只看該作者
用的什么軟件編譯?
回復

使用道具 舉報

24#
ID:233528 發表于 2017-9-16 19:27 | 只看該作者
要幣下載呀
回復

使用道具 舉報

25#
ID:135728 發表于 2017-9-17 12:00 | 只看該作者
mark
回復

使用道具 舉報

26#
ID:234347 發表于 2017-9-23 15:42 | 只看該作者
66666,老鐵
回復

使用道具 舉報

27#
ID:142499 發表于 2018-1-5 18:54 | 只看該作者
感謝分享
回復

使用道具 舉報

28#
ID:276347 發表于 2018-1-15 20:09 | 只看該作者
初學者,一點也看不懂。嘿嘿
回復

使用道具 舉報

29#
ID:324648 發表于 2018-5-8 08:05 | 只看該作者

很厲害的設計,值得學習
回復

使用道具 舉報

30#
ID:272104 發表于 2018-5-16 12:47 | 只看該作者
感謝分享
回復

使用道具 舉報

31#
ID:370052 發表于 2018-7-12 11:36 | 只看該作者
學習了,感謝分享
回復

使用道具 舉報

32#
ID:336691 發表于 2018-7-19 18:47 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

33#
ID:350791 發表于 2018-8-2 09:56 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

34#
ID:435813 發表于 2018-11-30 09:54 | 只看該作者
贊一個
回復

使用道具 舉報

35#
ID:431575 發表于 2018-12-21 08:57 | 只看該作者
想看囈
回復

使用道具 舉報

36#
ID:456412 發表于 2018-12-27 14:19 | 只看該作者
電調也是自己做的嗎
回復

使用道具 舉報

37#
ID:318672 發表于 2019-1-9 20:12 來自手機 | 只看該作者
非常感謝分享
回復

使用道具 舉報

38#
ID:472519 發表于 2019-1-24 15:41 | 只看該作者
很好的資料 謝謝分享 最近研究四軸
回復

使用道具 舉報

39#
ID:498382 發表于 2019-3-26 02:52 | 只看該作者
感謝樓主分享。W習了!!
回復

使用道具 舉報

40#
ID:377919 發表于 2019-5-29 16:01 | 只看該作者
過來看看,學習一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: h视频在线观看免费 | 国产成人精品在线播放 | 国产精品久久 | 五月天激情电影 | 久久久精品视频一区二区三区 | 黄色网址大全在线观看 | 国产成人免费在线 | 成人性生交a做片 | 久久久久亚洲 | 日本一卡精品视频免费 | 视频精品一区 | 亚洲三级视频 | www.国产91 | www四虎影视 | 精品福利视频一区二区三区 | 亚洲欧美视频一区 | 成人影院免费视频 | 一区二区三区免费 | 波多野吉衣在线播放 | 午夜影院免费体验区 | 精品香蕉一区二区三区 | 中文字幕一区二区三区四区不卡 | 国精品一区 | 成人欧美一区二区三区黑人孕妇 | 免费在线观看成人 | 国产精品一区二区三区在线 | 欧美mv日韩mv国产网站91进入 | 福利精品 | 国内精品免费久久久久软件老师 | 全免费a级毛片免费看视频免费下 | 国产在线精品一区二区三区 | 亚洲欧美视频 | 男女视频在线观看免费 | 特黄色一级毛片 | 久草资源网站 | 超碰免费在线观看 | 熟女毛片 | 激情网站在线 | 国产欧美日韩一区 | 日韩视频精品 | 亚洲综合视频一区 |