<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 航模遙控器改裝---PPM波形產(chǎn)生

          航模遙控器改裝---PPM波形產(chǎn)生

          作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          最近接觸航模,很有興趣,拆了一個(gè)航模遙控器,準(zhǔn)備改裝下。對航模不太了解,首先從遙控入手,需要了解輸出信號,可以用遙控器結(jié)合電腦的模擬軟件來練習(xí)調(diào)試。首先用好的遙控器來測試輸出的PPM波形,連續(xù)的發(fā)射波形和部分波形如下圖所示:


          于是用單片機(jī)編寫了一個(gè)同樣的波形,6通道的PPM波形,一個(gè)周期的總時(shí)間20ms,6個(gè)PPM波形,高電平每個(gè)波形最大1.4ms,最小0.6ms,低電平固定0.4ms。

          臨時(shí)焊接了一個(gè)電路,比較丑,哈哈,但是效果還是可以的。

          根據(jù)遙控器內(nèi)部空間結(jié)構(gòu),昨天剛畫完整的PCB板子,主控單片機(jī)換成了PIC16F917,無線遙控模塊先用NRF2401測試,等OK了再換成距離遠(yuǎn)一點(diǎn)的無線模塊;最多8通道,PCB還在打樣中。部分原理圖和PCB如下圖所示:




          手頭上隨便找了一個(gè)單片機(jī)板子,是STC12C5410AD的,編寫了一個(gè)航模遙控器AD采集和PPM發(fā)射的最簡單程序,具體程序如下:
          /************ STC12C5410AD學(xué)習(xí)板 ******************/
          /*功能描述:STC12C5410AD內(nèi)部AD使用 */
          /*作者: ClimberWin */
          /*外部晶振22.1184 MHZ */
          /*L7805穩(wěn)壓在4.88-4.98V之間,根據(jù)實(shí)際測量確定電壓 */
          /**************************************************/
          /*修改時(shí)間: */
          /*修改內(nèi)容: */
          //2011.7.28
          //AD采集產(chǎn)生PPM波形
          //實(shí)際調(diào)試OK
          #include
          #include
          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          #define ulong unsigned long
          sbit PPM_OUT = P2^5; //溫度測量,測量熱敏電阻的參數(shù)?
          uint ad_temp; //AD數(shù)據(jù)保存的地址
          uint ad0_data; //AD數(shù)據(jù)保存的地址
          uint ad1_data; //AD數(shù)據(jù)保存的地址
          uint ad2_data; //AD數(shù)據(jù)保存的地址
          uint ad3_data; //AD數(shù)據(jù)保存的地址
          uint ad4_data; //AD數(shù)據(jù)保存的地址
          uint ad5_data; //AD數(shù)據(jù)保存的地址
          void Delay1ms(unsigned int count);
          void STC12C5410AD_int(void); //AD初始化
          void Delay1ms(unsigned int count);
          void Delay1ms(unsigned int count)
          {
          unsigned int i,j;
          for(i=0;i
          for(j=0;j<120;j++);
          }
          void delay(unsigned int count)
          {
          unsigned int i;
          for(i=0;i
          }
          /*STC12C5410AD的AD初始化程序*/
          // ADC_CONTR=[ADC_POWER] [SPEED1] [SPEED0] [ADC_FLAG] [ADC_START] [CHS2] [CHS1] [CHS0]
          // ADC_DATA 高8位 ADC_LOW2 //低2位
          void STC12C5410AD_int(void)
          {
          ADC_CONTR=0x80 ; //開轉(zhuǎn)換電源 設(shè)置轉(zhuǎn)換速度為1080個(gè)時(shí)鐘周期轉(zhuǎn)換一次,選擇AD0通道
          Delay1ms(20); //稍做延時(shí),大于1ms就可以
          /*I/O口作為AD使用,設(shè)置漏極開路模式*/
          P1M0=1;
          P1M1=1;
          }
          /*******************************************/
          //一個(gè)波形20ms,6個(gè)PPM波形,高電平每個(gè)波形最大1.4ms,最小0.6ms,低電平固定0.4ms
          /*
          */
          void PPW_Sent(uchar Channel1,Channel2,Channel3,Channel4,Channel5,Channel6) // PPM波形產(chǎn)生
          {
          uint cc;
          cc=1000;
          PPM_OUT=1;
          //delay(5000); //20ms
          delay(cc-ad0_data);//
          delay(cc-ad1_data);//
          delay(cc-ad2_data);//
          delay(cc-ad3_data);//
          delay(cc-ad4_data);//
          delay(cc-ad5_data);//
          PPM_OUT=0;
          delay(220);//0.4ms
          //通道1
          PPM_OUT=1;
          delay(330);//0.6ms
          delay(ad0_data);//1ms
          PPM_OUT=0;
          delay(220);//0.4ms
          //通道2
          PPM_OUT=1;
          delay(330);//0.6ms
          delay(ad1_data);//1ms
          PPM_OUT=0;
          delay(220);//0.4ms
          //通道3
          PPM_OUT=1;
          delay(330);//0.6ms
          delay(ad2_data);//1ms
          // delay(770);//1.4ms
          PPM_OUT=0;
          delay(220);//0.4ms
          //通道4
          PPM_OUT=1;
          delay(330);//0.6ms
          delay(ad3_data);//1ms
          PPM_OUT=0;
          delay(220);//0.4ms
          //通道5
          PPM_OUT=1;
          delay(330);//0.6ms
          delay(ad4_data);//1ms
          PPM_OUT=0;
          delay(220);//0.4ms
          //通道6
          PPM_OUT=1;
          delay(330);//0.6ms
          delay(ad5_data);//1ms
          PPM_OUT=0;
          delay(220);//0.4ms
          PPM_OUT=1;
          }
          /*****************主程序************************/
          main()
          { //main start
          uint aa;
          ad0_data=220;
          ad1_data=220;
          ad2_data=220;
          ad3_data=220;
          ad4_data=220;
          ad5_data=220;
          aa=220;
          STC12C5410AD_int(); //AD初始化
          while(1)
          {
          ADC_CONTR=0xe0 ; //開轉(zhuǎn)換電源 設(shè)置轉(zhuǎn)換速度
          delay(aa);//
          ///////AD0轉(zhuǎn)換
          ADC_CONTR|=0x08; //開始AD轉(zhuǎn)換(ADC_START=1)
          ADC_CONTR|=0x00; //選擇AD0通道
          while(!(ADC_CONTR & 0x10)); //判斷AD是否轉(zhuǎn)換結(jié)束
          ADC_CONTR&=0xef;//轉(zhuǎn)換結(jié)束后標(biāo)志位ADC_FLAG清零
          ad_temp=ADC_LOW2;
          ad_temp=(ad_temp+ ((uint)ADC_DATA)<<2); //最大0.8ms delay(440)
          ad0_data=ad_temp/2.3;
          ///////AD1轉(zhuǎn)換
          ADC_CONTR=0xe0 ; //開轉(zhuǎn)換電源 設(shè)置轉(zhuǎn)換速度
          delay(aa);//
          ADC_CONTR|=0x08; //開始AD轉(zhuǎn)換(ADC_START=1)
          ADC_CONTR|=0x01; //選擇AD1通道
          while(!(ADC_CONTR & 0x10)); //判斷AD是否轉(zhuǎn)換結(jié)束
          ADC_CONTR&=0xef;//轉(zhuǎn)換結(jié)束后標(biāo)志位ADC_FLAG清零
          ad_temp=ADC_LOW2;
          ad_temp=(ad_temp+ ((uint)ADC_DATA)<<2); //最大0.8ms delay(440)
          ad1_data=ad_temp/2.3;
          ///////AD2轉(zhuǎn)換
          ADC_CONTR=0xe0 ; //開轉(zhuǎn)換電源 設(shè)置轉(zhuǎn)換速度
          delay(aa);//
          ADC_CONTR|=0x08; //開始AD轉(zhuǎn)換(ADC_START=1)
          ADC_CONTR|=0x02; //選擇AD2通道
          while(!(ADC_CONTR & 0x10)); //判斷AD是否轉(zhuǎn)換結(jié)束
          ADC_CONTR&=0xef;//轉(zhuǎn)換結(jié)束后標(biāo)志位ADC_FLAG清零
          ad_temp=ADC_LOW2;
          ad_temp=(ad_temp+ ((uint)ADC_DATA)<<2); //最大0.8ms delay(440)
          ad2_data=ad_temp/2.3;
          ///////AD3轉(zhuǎn)換
          ADC_CONTR=0xe0 ; //開轉(zhuǎn)換電源 設(shè)置轉(zhuǎn)換速度
          delay(aa);//
          ADC_CONTR|=0x08; //開始AD轉(zhuǎn)換(ADC_START=1)
          ADC_CONTR|=0x03; //選擇AD3通道
          while(!(ADC_CONTR & 0x10)); //判斷AD是否轉(zhuǎn)換結(jié)束
          ADC_CONTR&=0xef;//轉(zhuǎn)換結(jié)束后標(biāo)志位ADC_FLAG清零
          ad_temp=ADC_LOW2;
          ad_temp=(ad_temp+ ((uint)ADC_DATA)<<2); //最大0.8ms delay(440)
          ad3_data=ad_temp/2.3;
          /*
          ///////AD4轉(zhuǎn)換
          ADC_CONTR=0x83 ;
          delay(aa);//
          ADC_CONTR|=0x08; //開始AD轉(zhuǎn)換(ADC_START=1)
          ADC_CONTR|=0x04; //選擇AD4通道
          while(!(ADC_CONTR & 0x10)); //判斷AD是否轉(zhuǎn)換結(jié)束
          ADC_CONTR&=0xef;//轉(zhuǎn)換結(jié)束后標(biāo)志位ADC_FLAG清零
          ad_temp=ADC_LOW2;
          ad_temp=(ad_temp+ ((uint)ADC_DATA)<<2); //最大0.8ms delay(440)
          ad4_data=ad_temp/2.3;
          ///////AD5轉(zhuǎn)換
          ADC_CONTR=0x83 ;
          delay(aa);//
          ADC_CONTR|=0x08; //開始AD轉(zhuǎn)換(ADC_START=1)
          ADC_CONTR|=0x05; //選擇AD5通道
          while(!(ADC_CONTR & 0x10)); //判斷AD是否轉(zhuǎn)換結(jié)束
          ADC_CONTR&=0xef;//轉(zhuǎn)換結(jié)束后標(biāo)志位ADC_FLAG清零
          ad_temp=ADC_LOW2;
          ad_temp=(ad_temp+ ((uint)ADC_DATA)<<2); //最大0.8ms delay(440)
          ad5_data=ad_temp/2.3;
          */
          PPW_Sent();
          }
          }


          關(guān)鍵詞: 航模遙控器PPM波

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();