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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3075|回復(fù): 1
收起左側(cè)

這個(gè)是15電賽風(fēng)力擺STM32源碼的及上位機(jī)程序

[復(fù)制鏈接]
ID:496010 發(fā)表于 2019-3-30 16:01 | 顯示全部樓層 |閱讀模式
這個(gè)是當(dāng)年師兄給的程序,能用
0.png

一:基本收發(fā)
1:收碼和發(fā)碼格式均可設(shè)為HEX或者CHR。
2:定時(shí)發(fā)送功能可以精確到毫秒,但是不能太快(發(fā)送為獨(dú)占式,數(shù)據(jù)不發(fā)送完函數(shù)不會(huì)返回),如果上一幀數(shù)據(jù)還沒(méi)發(fā)送完畢就發(fā)送下一幀數(shù)據(jù)會(huì)出錯(cuò)。
3:請(qǐng)使用ft232串口芯片或支持高波特率的芯片,否則波特率無(wú)法設(shè)置過(guò)高。
    二:高級(jí)收碼
1:收碼顯示為HEX格式。
2:下位機(jī)發(fā)送自定義數(shù)據(jù),格式為:0x88+FUN+LEN+DATA+SUM
      FUN可以是 0xA1到0xAA,共10個(gè);LEN為DATA的長(zhǎng)度(不包括0x88、FUN、LEN、SUM)。
      SUM是0x88一直到DATA最后一字節(jié)的和,uint8格式。
    (記得打開需要使用幀的開關(guān),更改設(shè)置后點(diǎn)擊保存設(shè)置使設(shè)置生效)
3:數(shù)據(jù)可以是uint8、int16、uint16、int32、float這幾個(gè)常用格式,多字節(jié)數(shù)據(jù)高位在前。
4:共有20個(gè)數(shù)據(jù)存儲(chǔ)器,每個(gè)存儲(chǔ)器的數(shù)據(jù)可以分別設(shè)置為來(lái)自10個(gè)自定義幀的30個(gè)數(shù)據(jù)。
5:高速通訊時(shí)(2ms一幀數(shù)據(jù)或者更快),請(qǐng)關(guān)閉高級(jí)收碼頁(yè)面的數(shù)據(jù)顯示按鈕和基本收碼,否則更新過(guò)快有可能會(huì)造成程序卡死。
6:飛控顯示對(duì)應(yīng)的幀F(xiàn)UN為0xAF,(幀格式:0x88+0xAF+0x1C+ACC DATA+GYRO DATA+MAG DATA+ANGLE DATA+ 0x00 0x00 + 0x00 0x00+SUM,共32字節(jié),ACC/GYRO/MAG/ANGLE(roll/pitch/yaw)數(shù)據(jù)為int16格式,其中ANGLE的roll和pitch數(shù)據(jù)為實(shí)際值乘以100以后得到的整數(shù)值,yaw為乘以10以后得到的整數(shù)值,上位機(jī)在顯示時(shí)再 除以100和10)。
7:遙控,電機(jī)pwm,電壓顯示對(duì)應(yīng)的幀F(xiàn)UN為0xAE,(幀格式:0x88+0xAE+0x12+THROT YAW ROLL PITCH +AUX1 2 3 4 5 + PWM:1 2 3 4 + VOTAGE + SUM,共28字節(jié)),數(shù)據(jù)為uint16格式,遙控?cái)?shù)據(jù)最小在1000左右,最大在2000左右。數(shù)據(jù)都為uint16格式,其中pwm范圍1-100,votage為實(shí)際值*100。
      小技巧:如果高速通訊時(shí)是為了畫波形,就只開波形顯示,并只保留需要觀察的波形,如果是為了觀察數(shù)據(jù),就關(guān)閉波形顯示,只保留收碼顯示,這樣可以加快程序響應(yīng)速度。
7:最快通訊速度測(cè)試過(guò)下位機(jī)用500K波特率,每1ms發(fā)送32字節(jié)的數(shù)據(jù),上位機(jī)顯示其中6條波形,OK!(有可能和電腦配置有關(guān))
    三:波形顯示
1:共有20條波形,對(duì)應(yīng)20個(gè)數(shù)據(jù)存儲(chǔ)器。
2:雙擊波形繪制區(qū)域,可以打開波形顯示開關(guān)。
3:按住Ctrl用鼠標(biāo)左鍵點(diǎn)擊某一條波形,可以顯示數(shù)據(jù)標(biāo)簽,再次點(diǎn)擊隱藏。
4:按住鼠標(biāo)左鍵,在繪圖區(qū)域從一點(diǎn)向右下方拖動(dòng),然后松開,可以放大顯示框住的波形區(qū)域,可以多次放大;
5:按住鼠標(biāo)左鍵,在繪圖區(qū)域從一點(diǎn)向左上方拖動(dòng),然后松開,可以將放大后的波形還原。
6:按住鼠標(biāo)右鍵,在繪圖區(qū)域上下左右拖動(dòng),可以移動(dòng)波形。
7:顯示波形時(shí)按F9鍵,可以打開波形高級(jí)設(shè)置。
    四:DEBUG功能
1:在調(diào)試過(guò)程中可以將某些標(biāo)志位、寄存器、變量實(shí)時(shí)發(fā)回上位機(jī),并在DEBUG頁(yè)面顯示。
2:通訊格式為:0x88 + 0xAD + len + num + DATA + SUM,len為num與DATA的總長(zhǎng)度,num表示要改變哪個(gè)顯示狀態(tài),例如num=0x01即是要改變第一個(gè)LED,num=0x07即是改變第一個(gè)數(shù)字輸出顯示。當(dāng)要改變LED時(shí),DATA只需一字節(jié),DATA=0x00表示關(guān)閉LED,大于0x00表示點(diǎn)亮LED;當(dāng)要改變數(shù)字輸出時(shí),DATA需要兩字節(jié),
      表示 一個(gè)uint16數(shù)字,高字節(jié)在前。SUM為從0x88開始到SUM前一字節(jié)的和校驗(yàn),uint8格式。
      例如:發(fā)送 0x88 + 0xAD + 0x02 + 0x01 + 0x01 + 0x39    表示點(diǎn)亮第一個(gè)LED
            發(fā)送 0x88 + 0xAD + 0x03 + 0x07 + 0x00 + 0x05 + 0x44   表示在第一個(gè)數(shù)字輸出位置顯示 5 。
    五:鍵鼠控制
1:控制數(shù)據(jù)發(fā)送格式為:0x8A + 0x8A + 0X1C + THROT YAW ROLL PITCH AUX1 AUX2 AUX3 AUX4 AUX5 + 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + SUM,遙控?cái)?shù)據(jù)都為int16格式,中值1500,最小最大值為1000、2000。
2:發(fā)送頻率 50Hz。
3:鼠標(biāo)上下控制油門,左右控制YAW,鍵盤的WASD控制ROLL/PITCH,鍵盤12345控制AUX12345。共9通道。
    六:飛控參數(shù)
1:點(diǎn)擊3D模型顯示右下方的校正按鈕,上位機(jī)會(huì)發(fā)送0X8A 0X8B 0X1C 0XAA 0XA3 +無(wú)用數(shù)據(jù)+SUM給下位機(jī),其中0X8B表示飛控參數(shù),0XAA表示零偏,0XA3表示ACC GYRO都要校正。
2:點(diǎn)擊飛控參數(shù)界面?zhèn)鞲衅鞒C正功能里面的校正按鈕,分別表示ACC 和GYRO的校正,不會(huì)同時(shí)校正兩個(gè)傳感器,
      上位機(jī)校正ACC發(fā)送格式為:0X8A 0X8B 0X1C 0XAA 0XA1+無(wú)用數(shù)據(jù)+SUM
      上位機(jī)校正GYRO發(fā)送格式為:0X8A 0X8B 0X1C 0XAA 0XA2+無(wú)用數(shù)據(jù)+SUM(送有數(shù)據(jù)整個(gè)長(zhǎng)度都為32字節(jié))
3:上位機(jī)發(fā)送微調(diào)后的offset數(shù)據(jù)(僅為ACC的 X 和 Y ),格式為0X8A 0X8B 0X1C 0XAB + offset.x + offset.y +無(wú)用數(shù)據(jù) +SUM,數(shù)據(jù)為int16格式。
4:上位機(jī)發(fā)送讀offset的命令格式為:0X8A 0X8B 0X1C 0XAC + 無(wú)用數(shù)據(jù) + SUM
5:上位機(jī)發(fā)送讀PID數(shù)據(jù)的命令為:0X8A 0X8B 0X1C 0XAD + 無(wú)用數(shù)據(jù) + SUM
6:下位機(jī)發(fā)送offset數(shù)據(jù)給上位機(jī)的格式為:0X88 0XAC 0X1C 0XAC + 傳感器零偏數(shù)據(jù)ACC XYZ GYRO XYZ +無(wú)用數(shù)據(jù)+SUM,共六個(gè)int16型數(shù)據(jù)。
7:下位機(jī)發(fā)送PID數(shù)據(jù)給上位機(jī)的格式為:0X88 0XAC 0X1C 0XAD + PID數(shù)據(jù) + 無(wú)用數(shù)據(jù) + SUM
      PID數(shù)據(jù)為rol_p,rol_i,rol_d,pit_p..i..d,yaw_p,,i,,d,共9個(gè)uint16型數(shù)據(jù)。
8:上位機(jī)發(fā)送PID數(shù)據(jù)給下位機(jī)的格式為:0X8A 0X8B 0X1C 0XAE +PID數(shù)據(jù)+ 無(wú)用數(shù)據(jù) + SUM  
PID數(shù)據(jù)格式和下位機(jī)發(fā)送給上位機(jī)的格式一樣。
9:點(diǎn)擊飛控解鎖按鈕,上位機(jī)會(huì)發(fā)送0X8A 0X8B 0X1C 0XA1+無(wú)用數(shù)據(jù)+SUM給下位機(jī),如果下位機(jī)已經(jīng)解鎖,
      點(diǎn)擊此按鈕會(huì)發(fā)送0X8A 0X8B 0X1C 0XA0+無(wú)用數(shù)據(jù)+SUM給下位機(jī),鎖定飛控。

單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "key.h"  
  6. #include "mpu6050.h"
  7. #include "pwmset.h"
  8. #include "niming.h"
  9. #include "pid.h"
  10. #include "usmart.h"   
  11. #include "inv_mpu.h"
  12. #include "inv_mpu_dmp_motion_driver.h"

  13. volatile float pitch,roll,yaw;                 //歐拉角
  14. volatile u8 mode = 1;                                                        //當(dāng)前工作方式
  15. volatile float step = 0;

  16. int main(void)
  17. {               
  18.          Stm32_Clock_Init(9);                //系統(tǒng)時(shí)鐘設(shè)置
  19.         uart_init(72,500000);                //串口初始化為500000
  20.         delay_init(72);                                    //延時(shí)初始化
  21.         usmart_dev.init(72);                //初始化USMART
  22.         LED_Init();                                                  //初始化與LED連接的硬件接口
  23.         KEY_Init();                                                        //初始化按鍵
  24.         MPU_Init();                                                        //初始化MPU6050
  25.         TIM3_PWM_Init(999,8);          //初始化脈寬波輸出        
  26.         TIM2_Int_Init(4999,71);        //初始化定時(shí)器2,每5ms產(chǎn)生一次中斷


  27.         while(mpu_dmp_init())
  28.         {
  29.                 delay_ms(20);        
  30.         }               

  31.          while(1)
  32.         {               
  33.                 key=KEY_Scan(0);
  34.                 if(key==KEY2_PRES)                                                //測(cè)試發(fā)送pid數(shù)據(jù)給上位機(jī)
  35.                 {
  36.                         pid_send_data(rol_p,rol_i,rol_d,pit_p,pit_i,pit_d);
  37.                 }
  38.                
  39.                 if(key==KEY0_PRES)                                                //開啟或關(guān)閉下位機(jī)數(shù)據(jù)發(fā)送開關(guān)
  40.                 {
  41.                         report=!report;
  42.                 }        

  43.                 if(key==KEY1_PRES)                                                //開啟或關(guān)閉下位機(jī)數(shù)據(jù)發(fā)送開關(guān)
  44.                 {
  45.                         Rol_SumError = 0;
  46.                 }               

  47.                 if(key == KEY8_PRES)                                        //PE8按下
  48.                 {
  49.                         rol_p += 1;
  50.                         LED0 = ~LED0;
  51.                 }
  52.                 if(key == KEY9_PRES)
  53.                 {
  54.                         rol_i += 0.1;
  55.                         LED0 = ~LED0;
  56.                 }
  57.                 if(key == KEY10_PRES)
  58.                 {
  59.                         R += 0.05;
  60.                         LED0 = ~LED0;
  61.                 }
  62.                 if(key == KEY11_PRES)                                        //模式切換
  63.                 {
  64.                         mode++;
  65.                         LED0 = ~LED0;
  66.                 }

  67.                 if(key == KEY12_PRES)
  68.                 {
  69.                         rol_p -= 1;
  70.                         LED0 = ~LED0;
  71.                 }
  72.                 if(key == KEY13_PRES)
  73.                 {
  74.                         rol_i -= 0.1;
  75.                         LED0 = ~LED0;
  76.                 }
  77.                 if(key == KEY14_PRES)
  78.                 {
  79.                         R -= 0.05;
  80.                         LED0 = ~LED0;
  81.                 }
  82.                 if(key == KEY15_PRES)
  83.                 {
  84.                         mode--;                                                                                        //模式切換
  85.                         LED0 = ~LED0;
  86.                 }
  87.                
  88.                 if(USART_RX_STA == 1)                                        //檢測(cè)是否接收到了數(shù)據(jù)。
  89.                 {
  90.                         USART_RX_STA = 0;                                                //清除接收標(biāo)志,防止多次判斷。
  91.                         LED1 = ~LED1;
  92.                         rol_p = (USART_RX_BUF[4]<<8)|USART_RX_BUF[5];
  93.                         rol_i = (USART_RX_BUF[6]<<8)|USART_RX_BUF[7];
  94.                         rol_d = (USART_RX_BUF[8]<<8)|USART_RX_BUF[9];
  95.                         pit_p = (USART_RX_BUF[10]<<8)|USART_RX_BUF[11];
  96.                         pit_i = (USART_RX_BUF[12]<<8)|USART_RX_BUF[13];
  97.                         pit_d = (USART_RX_BUF[14]<<8)|USART_RX_BUF[15];                                       
  98.                 }        
  99.                         
  100.         }         
  101. }
復(fù)制代碼
0.png
所有資料51hei提供下載:
15電賽風(fēng)力擺源碼及上位機(jī).7z (3.26 MB, 下載次數(shù): 55)
回復(fù)

使用道具 舉報(bào)

ID:1026348 發(fā)表于 2022-5-13 23:17 | 顯示全部樓層
厲害啊啊啊啊啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 作爱视频免费观看 | 久久国色| 国产一区二区三区久久久久久久久 | 日韩精品视频在线观看一区二区三区 | 色视频网站免费 | 欧美aⅴ在线观看 | 国产精品99久久免费观看 | 日韩国产一区二区三区 | 日韩中文在线观看 | 亚洲欧美日韩系列 | 99欧美精品| 成人深夜福利 | 久久久久久综合 | 国产精品一区二区在线播放 | 精品欧美一区二区在线观看视频 | 精品久久国产 | 欧美中文字幕一区 | 国产色视频网站 | 国产99免费视频 | 日韩精品区 | av在线一区二区 | 91成人午夜性a一级毛片 | 国产美女一区二区 | 91在线视频在线观看 | 看特级黄色片 | 国产精品jizz在线观看老狼 | 中文字幕一区二区三区乱码图片 | 91人人爽 | 亚洲精品888 | 国产成在线观看免费视频 | www一级片 | 一区二区三区国产精品 | 国产成人精品一区二区三区网站观看 | 超级乱淫av片免费播放 | 欧美精品一区二区三区在线 | 色播久久 | 欧美日韩a | 北条麻妃99精品青青久久 | 精品美女久久久 | 久久婷婷国产香蕉 | 国产一区二区三区不卡av |