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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

四軸飛行器遙控器 PCB原理圖與單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
四軸飛行器遙控器相關程序及原理圖分享

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. // STCunio

  2. //**********************************遙控器程序Rev1.3正式版*************************
  3. //聲明:程序作者不會對本程序進行任何升級了,該程序就是該硬件的最終版本
  4. //          程序:SWUST 電氣自動化13級 LQM

  5. //          本程序適用于STC四軸的美國手遙控器(左手油門)
  6. //左手上下為油門,左右為旋轉
  7. //右手上下為俯仰,左右為橫滾
  8. //                                 MCU工作頻率28MHZ!!!
  9. #include <rtx51tny.h>
  10. #include <STC15F2K60S2.H>
  11. #include <NRF24L01.H>
  12. #include <AD.H>
  13. sbit RLED=P0^5;
  14. sbit GLED=P0^6;
  15. sbit LKEY=P4^7;
  16. sbit RKEY=P3^4;

  17. volatile int idata ay,ax,by,bx;
  18. volatile int idata cy,cx,dy,dx;
  19. volatile float idata battery;
  20. unsigned char idata TxBuf[20]={0};
  21. unsigned char idata RxBuf[20]={0};
  22. void IO_and_Init();

  23. void AD() _task_ 0 //獲取AD采樣數據
  24. {
  25.         IO_and_Init();   //初始化I/O口
  26.         os_create_task (1);  //啟動進程1
  27.         while(1)
  28.         {
  29.   cy=getADCResult(3);   //// 油門  //讀取4個搖桿通道每個通道的8位數據,取值范圍0-255
  30.         Delay(10);
  31.         cx=getADCResult(2);  //yaw
  32.         Delay(10);
  33.         dy=getADCResult(1);  //俯視
  34.   Delay(10);
  35.         dx=getADCResult(0);   //橫滾
  36.         Delay(10);
  37.         battery=(getADCResult(4)*5.05*100)/256;   //電池電壓檢測通道 低于3.7V亮紅燈
  38.         Delay(10);
  39.         if(battery<=370)
  40.   {
  41.         RLED=1;GLED=0;
  42.         }
  43.         else
  44.         {
  45.         RLED=0;GLED=1;
  46.         }
  47.         os_wait(K_IVL,3,0);//延時3個節拍
  48.   }
  49. }
  50. void NRF24L01()  _task_ 1
  51. {        
  52.         while(1)
  53.         {
  54.          TxBuf[0]++;
  55.          TxBuf[1]=128;
  56.          TxBuf[2]=128;
  57.          TxBuf[3]=128;
  58.          if(cy<20) {goto EXIT;}   //當油門拉至最低時遙控器解鎖
  59.          if(RKEY==0) {TxBuf[5]=1;} else {TxBuf[5]=0;}
  60.          if(LKEY==0) {TxBuf[6]=1;} else {TxBuf[6]=0;}
  61.          nRF24L01_TxPacket(TxBuf);//發送TxBuf數組的數據
  62.          os_wait(K_IVL,2,0);  //給一定延時讓數據發送完成
  63.         }
  64.         EXIT:
  65.         while(1)
  66.         {
  67.                 if((dy-by)>=255){TxBuf[1]=255;}  //用上電記錄的數據對采樣數據進行修正,保證搖桿中位時數據為128
  68.                 else if((dy-by)<=0){TxBuf[1]=0;}
  69.                 else{TxBuf[1]=dy-by;}
  70.                
  71.                 if((dx-bx)>=255){TxBuf[2]=255;}
  72.                 else if((dx-bx)<=0){TxBuf[2]=0;}
  73.                 else{TxBuf[2]=dx-bx;}
  74.                
  75.                 if((cx-ax)>=255){TxBuf[3]=255;}
  76.                 else if((cx-ax)<=0){TxBuf[3]=0;}
  77.                 else{TxBuf[3]=cx-ax;}
  78.                 //油門:TxBuf[4]
  79.     //Yaw:TxBuf[3]
  80.     //俯仰:TxBuf[1]
  81.     //橫滾:TxBuf[2]
  82.                 TxBuf[4]=cy;  //油門通道不需處理,直接發送AD檢測的8位數據即可,根據AD采樣原理易知讀取的AD采樣數據不可能為負也不可能大于255
  83.                 if(RKEY==0) {TxBuf[5]=1;} else {TxBuf[5]=0;}
  84.           if(LKEY==0) {TxBuf[6]=1;} else {TxBuf[6]=0;}
  85.                 TxBuf[0]++;
  86.           nRF24L01_TxPacket(TxBuf);//發射數據
  87.                 os_wait(K_IVL,2,0); //給一定延時讓數據發送完成
  88.         }
  89. }

  90. void IO_and_Init()
  91. {
  92.                 P1M0=0x00;  //P1設為高阻模式
  93.                 P1M1=0xFF;
  94.                 P0M0=0XFF;  //其他I/O口設置為準雙向,弱上拉模式
  95.                 P0M1=0X00;
  96.                 P2M0=0X00;
  97.                 P2M1=0X00;
  98.                 P3M0=0X00;
  99.                 P3M1=0X00;
  100.                 P4M0=0X00;
  101.                 P4M1=0X00;
  102.                 P5M0=0Xff;
  103.                 P5M1=0X00;
  104.                 LKEY=1;    //拉高按鍵檢測I/O口電平,按鍵為低電平觸發
  105.                 RKEY=1;
  106.                 init_NRF24L01();  //初始化無線模塊
  107.     adc_init();       //初始化AD檢測模塊
  108.           ax=getADCResult(0)-128;  //記錄上電時搖桿的數據作為中位修正,因為搖桿中位要為128即256/2
  109.           Delay(10);
  110.           by=getADCResult(3)-128;
  111.     Delay(10);
  112.           bx=getADCResult(2)-128;        
  113.           Delay(10);
  114. }
復制代碼

代碼PCB文件51hei附件下載:
STC飛行器.7z (796.35 KB, 下載次數: 36)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91电影| 亚洲免费三区 | 国产有码 | 在线国产一区 | 日韩淫片免费看 | 毛片久久久 | 免费观看黄a一级视频 | 国产免费xxx | 狠狠干狠狠操 | 在线免费观看成年人视频 | 久久综合一区 | 91久久久久久 | 免费中文字幕日韩欧美 | 国产一区二区三区四区三区四 | 人人射人人插 | 欧美日韩一本 | 亚洲天堂成人在线视频 | 国产视频1| 精品一二区 | 99精品国自产在线 | 成人在线视频免费观看 | 欧美福利在线 | 国产精品久久久久久238 | 亚洲毛片一区二区 | 中文字幕视频一区 | 久久久久久久91 | 国产精品一区在线播放 | 国产综合一区二区 | 日韩高清中文字幕 | 久久久久久国产精品免费免费狐狸 | 欧美视频在线一区 | 99久久精品国产麻豆演员表 | av大片 | 国产精品视频在线免费观看 | 国产免费视频 | 一级毛片在线播放 | 久久久久久成人 | 中文字幕亚洲欧美 | 桃色五月 | 久久久久久久久久影视 | 久久激情视频 |