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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

2015年電賽控制類—STM32風力擺控制系統資料+源程序

  [復制鏈接]
跳轉到指定樓層
樓主
15年電賽已經過去四年了,19年電賽將至,在新一年的電賽到來之前給大家分享一份風力擺控制系統的全套資料(包括代碼、上位機、設計報告等)。在此我要感謝我的指導教師王師傅,您是我見過最負責的教師,下面我們切入正題。
風力擺控制系統主要應用了一個物理知識——李薩如圖形,李薩如圖形貫穿整個風力擺設計的始終。無論是畫直線還是畫圓都應用到了李薩如圖形,風力擺可以看成是XY兩個方向上的簡諧運動。當兩個簡諧運動的相位和周期相等、幅值不等時,風力擺會在下方畫出不同長度不同角度的直線;當兩個簡諧運動的幅值和周期相等、相位相差Π/2時,風力擺會在下方畫出不同半徑的圓(具體請多了解一下李薩如圖形)。風力擺的各種注意事項請大家仔細閱讀代碼中的READEME.txt文件,代碼框架和STM32F1的源代碼格式相同,方便大家理解。最后祝大家19年電賽都能取得一個好成績!

接線方式:
        OLED:
                SCL------PB5
                SDA------PB4
                RST------PB3
                D/C------PA15
        MPU6050:
                SCL------PB8
                SDA------PB9
        L298N:
                PWM1----PB1
                R_EN1----PB12
                L_EN1----PB13
                PWM2----PA1
                R_EN2----PB14
                L_EN2----PB15
        KEY:
                KEY1-----PA11
                KEY2-----PA12
                KEY3-----PB6
                KEY4-----PB7

如有疑問請QQ聯系:1183092619(注明來意否者不予通過驗證)

風力擺圖片:


上位機圖片:


風力擺控制系統是一種利用風力控制物體做簡諧運動的系統,風力的利用和控制技術在我國的發展尚未完善,國內正處于起步階段。風力擺的工作原理具有較為典型的自動化控制理論特點,其控制方法多種多樣。深入研究,在許多工程技術領域都有著廣闊的開發前景。風力擺系統的擺體由風扇構成,通過調整風扇的轉速實現擺動位置及擺動路線的控制,由于擺動機構的滯后性,實現精確控制具有一定難度。通過合理的擺結構設計,并利用擺線理論建模,設計并優化控制策略,利用閉環結構提升擺的軌跡運動準確性。其中的控制原理對于人們處理工業工程,同樣存在借鑒。系統對風擺控制參數設定、抗擾因素測試等慣性滯后問題解決具有借鑒意義,同時也為分析該類問題建立了直觀的測試平臺。風力擺是一種通過風機作為唯一動力驅動的裝置,深入研究該系統對空間飛行器、四旋翼無人機的運動狀態和衛星姿態控制具有重大意義。

三、主要研究內容

1. 基本要求
(1) 從靜止開始,15s 內控制風力擺做類似自由擺運動,使激光筆穩定地
在地面畫出一條長度不短于 50cm 的直線段,其線性度偏差不大于±
2.5cm,并且具有較好的重復性;
(2) 從靜止開始,15s 內完成幅度可控的擺動,畫出長度在 30~60cm 間可設置,長度偏差不大于±2.5cm 的直線段,并且具有較好的重復性;
(3) 可設定擺動方向,風力擺從靜止開始,15s 內按照設置的方向(角度)
擺動,畫出不短于 20cm 的直線段;
(4) 將風力擺拉起一定角度(30°~45°)放開,5s 內使風力擺制動達到靜止狀態。
2.發揮部分
(1) 以風力擺靜止時激光筆的光點為圓心,驅動風力擺用激光筆在地面畫圓,30s 內需重復 3 次;圓半徑可在 15~35cm 范圍內設置,激光筆畫出的軌跡應落在指定半徑±2.5cm 的圓環內;
(2) 在發揮部分(1)后繼續作圓周運動,在距離風力擺 1~2m 距離內用一臺 50~60W 臺扇在水平方向吹向風力擺,臺扇吹 5s 后停止,風力擺能
夠在 5s 內恢復發揮部分(1)規定的圓周運動,激光筆畫出符合要求的
軌跡;
(3) 其他。


四、總體思路與研究方案

1. 總體思路
風力擺控制系統是一個極其不穩定的系統,擺桿的長度、風機的安裝位置、萬向節的阻力等因素都會引起系統產生誤差,該系統中應用了一個物理知識——李薩如圖形。李薩如圖形貫穿整個風力擺控制系統的始終,畫直線時兩個方向上的簡諧運動相位相等,幅值不同就會畫出不同角度不同長度的直線;畫圓時兩個方向上的簡諧運動相位相差Π/2,幅值相同就會畫出不同半徑的圓。
設計整個系統時將角度傳感器mpu6050固定在擺桿上,傳感器返回的數據通過串口顯示在上位機上。在程序里設置兩條目標值曲線,根據上位機顯示的實際值波形與目標值曲線之間的差異進行PID參數的整定。實際上整個系統的目的就是讓實際值曲線沿著目標值曲線的軌跡運動。
2. 實施方案
(1)電機的論證和選擇
方案1:采用驅動、風機一體化的軸流風機
驅動、風機一體化的軸流風機有可以免去驅動的設計、節省結構空間、控制方法簡單,散熱快等優點,但是他的風力較小而且重量大,響應速度和其他電機相比也比較慢。
方案2:采用空心杯電機
空心杯電機重量小,風力大,起動、制動迅速,響應極快,能量轉換效率很高。但是他的抗干擾能力較弱容易受到很多外界因素的影響。

綜合以上兩種方案選擇方案2。
(2)驅動模塊的論證和選擇
方案1:采用TB6612FNG驅動模塊
TB6612FNG驅動模塊雙通道輸出,可同時驅動兩個電機。每個通道可以輸出最高1A的驅動電流,啟動峰值電流達2A。TB6612FNG是基于MOSFET的H橋集成電路,效率遠高于晶體管H橋驅動器。
方案2:采用L298N驅動模塊
L298N驅動模塊是一種高電壓、大電流的驅動模塊,它采用L298N雙H橋直流電機驅動芯片,單橋可以輸出的最大驅動電流為2A,驅動部分端子供電范圍為5V~35V。
綜合以上兩種方案選擇方案2。
(3)主控模塊的論證與選擇
方案1:采用STC89C51單片機
STC89C51單片機最高工作時鐘頻率為80MHz,內含8K Bytes的可反復擦寫1000次的Flash只讀程序存儲器,芯片內集成了通用8位 中央處理器和ISP Flash 存儲單元。
方案2:采用STM32單片機
STM32單片機是ST公司使用arm公司的cortex-M3為核心生產的32bit系列的單片機,他的內部資源非常豐富,基本上接近于計算機的CPU了,最高工作頻率72MHz。
綜合以上兩種方案選擇方案2。
(4)角度檢測模塊的論證與選擇
方案1:采用角度傳感器
由UZZ9001和KMZ41組成角度測量模塊,并使用矩形磁鐵進行配合測量磁鐵與KMZ41芯片之間的角度。UZZ9001將KMZ41輸出的正余弦角度信號轉換為數字信號,并通過SPI串口輸出。但KMZ41調試比較困難,不方便用于測量傾角。
方案2:采用MPU6050模塊
MPU6050測量角度集成了三軸MEMS陀螺儀,三軸MEMS加速度計。MPU6050對陀螺儀和加速度計分別用了3個16位的ADC,將其測量的模擬量轉化為可輸出的數字量。測量范圍可控,通信采用I2C總線,操作簡單。
綜合以上兩種方案選擇方案2。
(5)電源的論證和選擇
方案1:采用航模電池,
航模電池可以輸出12V的電壓,可反復充電。此方案的優點是風力擺與外界無需電源連線統安裝方便,但電壓會有波動,不能長時間穩定工作。
方案2:采用開關電源
利用開關電源雖然系統安裝較復雜,但功率較大,電壓穩定。
綜合以上兩種方案選擇方案2
五、主要研究結果

經過我們團隊的不懈努力,風力擺控制系統現在可以完成一下要求:
(1) 從靜止開始,15s 內控制風力擺做類似自由擺運動,使激光筆穩定地
在地面畫出一條長度不短于 50cm 的直線段,其線性度偏差不大于±
2.5cm,并且具有較好的重復性;
(2) 從靜止開始,15s 內完成幅度可控的擺動,畫出長度在 30~60cm 間可設置,長度偏差不大于±2.5cm 的直線段,并且具有較好的重復性;
(3) 可設定擺動方向,風力擺從靜止開始,15s 內按照設置的方向(角度)
擺動,畫出不短于 20cm 的直線段;
(4) 將風力擺拉起一定角度(30°~45°)放開,5s 內使風力擺制動達到靜止狀態。
(5) 以風力擺靜止時激光筆的光點為圓心,驅動風力擺用激光筆在地面畫圓,30s 內需重復 3 次;圓半徑可在 15~35cm 范圍內設置,激光筆畫出的軌跡應落在指定半徑±2.5cm 的圓環內;
(6) 在發揮部分(1)后繼續作圓周運動,在距離風力擺 1~2m 距離內用一臺 50~60W 臺扇在水平方向吹向風力擺,臺扇吹 5s 后停止,風力擺能
夠在 5s 內恢復要求(5)規定的圓周運動,激光筆畫出符合要求的軌跡;
六、存在的問題及今后努力方向

這個風力擺控制系統在畫圓的時候畫出來的圓不是太完美,即使理論值我都算出來了并且按照理論值設定各參數但是理論和實際之間總有差距,引起這一現象可能的因素有萬向節阻力、激光束是否和擺桿在一條直線上、MPU6050的安放位置等。我嘗試著改變兩個簡諧運動曲線的幅值和相位差,如果這幾個因素改變的程度過低風力擺表現得不太明顯,如果過高風力擺畫出來的就是一個橢圓,很難找到一個非常非常完美的參數。今后我會更加刻苦的學習PID算法、信號的分析和處理等知識,致知于行,學以致用,讓理論能很好的應用到實踐中。

單片機源程序如下:
  1. #include "sys.h"

  2. int Position_Pwm,Moto_qb1,Moto_qb2,Count_Moto;
  3. double Count_qb;


  4. int myabs(int a)
  5. {                    
  6.           int temp;
  7.                 if(a<0)  temp=-a;  
  8.           else temp=a;
  9.           return temp;
  10. }

  11. int Position_PID1 (float Angle,float Target)
  12. {         
  13.          Last_Bias1=Bias1;                                        //保存上一次偏差
  14.          Bias1=Target-Angle;                                   //計算偏差
  15.          Integral_bias1+=Bias1;                                          //求出偏差的積分
  16.    Pwm1=-KP1*Bias1+KI1*Integral_bias1-KD1*(Bias1-Last_Bias1)*10;   //位置式PID控制器
  17.          return Pwm1;                                            //增量輸出        
  18. }

  19. int Position_PID2 (float Angle,float Target)
  20. {         
  21.          Last_Bias2=Bias2;                                                                                                                                                         //保存上一次偏差
  22.          Bias2=Target-Angle;                                   //計算偏差
  23.          Integral_bias2+=Bias2;                                          //求出偏差的積分
  24.    Pwm2=-KP2*Bias2+KI2*Integral_bias2-KD2*(Bias2-Last_Bias2)*10;   //位置式PID控制器                                       
  25.          return Pwm2;                                            //增量輸出        
  26. }

  27. void Set_Pwm1(int moto)
  28. {
  29.             if(moto<0)                        AIN2=1,                        AIN1=0;        
  30.                         else                   AIN2=0,                        AIN1=1;
  31.             TIM_SetCompare4(TIM3,myabs(moto));
  32. }
  33. void Set_Pwm2(int moto)
  34. {
  35.             if(moto<0)                        BIN2=1,                        BIN1=0;
  36.                         else                   BIN2=0,                        BIN1=1;  
  37.                         TIM_SetCompare2(TIM2,myabs(moto));
  38. }
  39. void balance(void)
  40. {
  41.         float balance1,balance2;
  42.         balance1=Position_PID1(500,500);
  43.         balance2=Position_PID2(500,500);
  44.         Set_Pwm1(balance1);Set_Pwm2(balance2);
  45. }
  46. void control(void)
  47. {
  48.         static float Count_Big_Angle=0.019635;
  49.                                           Count_qb+=Count_Big_Angle;   //自變量
  50.         
  51.                                                 Target_Position1=A*sin(Count_qb+X)+495-m;  //運動公式        
  52.                                                 Target_Position2=B*sin(Count_qb+Y)+500-n;  //運動公式
  53.         
  54.                                                  Moto_qb1=Position_PID1((Roll-42.4)*10,Target_Position1);  //位置閉環控制
  55.                                                 Moto_qb2=Position_PID2((Pitch+50)*10,Target_Position2);  //位置閉環控制
  56.                                                 Set_Pwm1(Moto_qb1);Set_Pwm2(Moto_qb2); //賦值給PWM寄存器

  57. }
復制代碼
  1. #include "sys.h"

  2. float Pitch,Roll,Yaw;
  3. float KP1=0,KD1=0,KI1=0,KP2=0,KD2=0,KI2=0;
  4. float Menu=1,A=0,B=0,X=0,Y=0,m=0,n=0;
  5. int EN=0;
  6. float Target_Position1=500,Target_Position2=500,Last_Bias1,Bias1,Pwm1,Integral_bias1,Last_Bias2,Bias2,Pwm2,Integral_bias2;
  7. int main(void)
  8. {        
  9.         delay_init();
  10.         IIC_Init();        
  11.         JTAG_Set(SWD_ENABLE);
  12.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  13.         uart_init(9600);         //串口初始化為9600
  14.         DMP_Init();
  15.         KEY_Init();
  16.         TIM4_Int_Init(49,7199);//10Khz的計數頻率,計數到30為3ms
  17.         TIM3_PWM_Init(1499,0);         //不分頻。PWM頻率=72000000/900=80Khz
  18.         TIM2_PWM_Init(1499,0);         //不分頻。PWM頻率=72000000/900=80Khz
  19.         OLED_Init();
  20.         LED_Init();
  21.         EXTIX_Init();
  22.         
  23.         while(1)
  24.         {        
  25.         DataScope();
  26.         oled_show();
  27.         }
  28.         
  29. }
復制代碼

所有資料51hei提供下載:
15年電賽控制類——風力擺.7z (2.84 MB, 下載次數: 434)

評分

參與人數 2黑幣 +55 收起 理由
1339337425 + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:463405 發表于 2019-7-21 15:12 | 只看該作者
拿走了,表示非常感謝
回復

使用道具 舉報

板凳
ID:435708 發表于 2019-7-21 17:08 | 只看該作者
好資料
回復

使用道具 舉報

地板
ID:570384 發表于 2019-7-22 10:49 | 只看該作者
給力
回復

使用道具 舉報

5#
ID:445996 發表于 2019-7-22 10:57 | 只看該作者
謝謝分享!
回復

使用道具 舉報

6#
ID:589206 發表于 2019-7-23 20:12 | 只看該作者
謝謝分享
回復

使用道具 舉報

7#
ID:555142 發表于 2019-7-25 18:33 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

8#
ID:411729 發表于 2019-7-27 15:35 | 只看該作者
感謝分享
回復

使用道具 舉報

9#
ID:428195 發表于 2019-7-27 21:34 | 只看該作者
謝謝,挺好的看起來
回復

使用道具 舉報

10#
ID:590486 發表于 2019-7-29 14:56 | 只看該作者
今年準備做電設 ,作為參考不錯
回復

使用道具 舉報

11#
ID:590486 發表于 2019-7-29 14:56 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

12#
ID:32305 發表于 2019-7-30 21:12 | 只看該作者
程序下載后解壓不了。解壓有錯誤!
回復

使用道具 舉報

13#
ID:592923 發表于 2019-7-31 10:26 | 只看該作者
這個是51的板寫的嗎?
回復

使用道具 舉報

14#
ID:313027 發表于 2019-7-31 21:12 | 只看該作者
1951075938 發表于 2019-7-31 10:26
這個是51的板寫的嗎?

stm32f1
回復

使用道具 舉報

15#
ID:593598 發表于 2019-8-2 09:22 | 只看該作者
謝謝分享
回復

使用道具 舉報

16#
ID:593792 發表于 2019-8-2 16:30 | 只看該作者
謝謝分享
回復

使用道具 舉報

17#
ID:300443 發表于 2019-8-5 12:03 | 只看該作者
你的OLED多大的喔
回復

使用道具 舉報

18#
ID:313027 發表于 2019-8-6 14:27 | 只看該作者

0.96 六線SPI
回復

使用道具 舉報

19#
ID:382816 發表于 2019-9-5 16:12 | 只看該作者
樓主當年是東北賽區的嗎,同款架子
回復

使用道具 舉報

20#
ID:698986 發表于 2020-4-3 19:01 | 只看該作者
想問一下 波形上位機用的是什么呀
回復

使用道具 舉報

21#
ID:89217 發表于 2020-4-7 23:57 | 只看該作者
太給力了  樓主威武
回復

使用道具 舉報

22#
ID:643165 發表于 2020-4-30 09:28 | 只看該作者


pb什么意思
回復

使用道具 舉報

23#
ID:770154 發表于 2020-6-9 21:02 | 只看該作者

感謝分享
回復

使用道具 舉報

24#
ID:555142 發表于 2020-6-27 21:44 | 只看該作者
靠著樓主的代碼,19年電賽拿了區二,哈哈哈
回復

使用道具 舉報

25#
ID:899778 發表于 2021-7-12 00:35 | 只看該作者
拿走了,表示非常感謝
回復

使用道具 舉報

26#
ID:955477 發表于 2021-7-28 09:45 | 只看該作者
沒看明白,k1、k2、k3按鍵的作用是什么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩高清在线观看 | 中文字幕乱码一区二区三区 | 国产精品无 | 黄色片在线看 | 国产精品视频一二三区 | 国产精品久久久久久久久免费高清 | 国产精品视频免费观看 | 日韩淫片免费看 | 欧美精品乱码99久久影院 | 欧美黄色免费网站 | 欧美性大战久久久久久久蜜臀 | av资源中文在线天堂 | 精品久久久久久一区二区 | 亚洲美女视频 | 91精品久久久久久久 | 91影院| 日本黄色影片在线观看 | 一区二区高清不卡 | 一级黄色片一级黄色片 | 中文字幕在线不卡播放 | 久久久久久国产精品 | 一区二区三区四区av | 国产激情在线看 | 一区二区三区视频在线观看 | 最新中文字幕在线 | 国产精品久久久久久久久久久新郎 | a在线观看 | 精品欧美激情精品一区 | 成人在线不卡 | 日韩av免费在线电影 | 国产精品久久久久999 | 亚洲国产精品久久久 | 亚洲中午字幕 | 久久综合影院 | 亚洲精品国产成人 | 天天干.com| 男插女下体视频 | 天天操天天干天天透 | 97人人超碰| 久久综合九色综合欧美狠狠 | 国产福利91精品 |