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

標題: 2015年電賽控制類—STM32風力擺控制系統資料+源程序 [打印本頁]

作者: 阿東哥    時間: 2019-7-19 13:49
標題: 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)

作者: 小匠人    時間: 2019-7-21 15:12
拿走了,表示非常感謝
作者: 1339337425    時間: 2019-7-21 17:08
好資料
作者: wyw123456    時間: 2019-7-22 10:49
給力
作者: 許你一世柔情    時間: 2019-7-22 10:57
謝謝分享!
作者: 古錦忠    時間: 2019-7-23 20:12
謝謝分享
作者: 1804889557    時間: 2019-7-25 18:33
謝謝樓主分享
作者: 一往而深    時間: 2019-7-27 15:35
感謝分享
作者: User_Ard    時間: 2019-7-27 21:34
謝謝,挺好的看起來
作者: 我是新手啊126    時間: 2019-7-29 14:56
今年準備做電設 ,作為參考不錯
作者: 我是新手啊126    時間: 2019-7-29 14:56
感謝樓主分享
作者: luojuan198780    時間: 2019-7-30 21:12
程序下載后解壓不了。解壓有錯誤!
作者: 1951075938    時間: 2019-7-31 10:26
這個是51的板寫的嗎?
作者: 阿東哥    時間: 2019-7-31 21:12
1951075938 發表于 2019-7-31 10:26
這個是51的板寫的嗎?

stm32f1

作者: nihaobu    時間: 2019-8-2 09:22
謝謝分享
作者: wuwentao    時間: 2019-8-2 16:30
謝謝分享

作者: 未完待續鳳    時間: 2019-8-5 12:03
你的OLED多大的喔
作者: 阿東哥    時間: 2019-8-6 14:27
未完待續鳳 發表于 2019-8-5 12:03
你的OLED多大的喔

0.96 六線SPI
作者: 21c電子科技    時間: 2019-9-5 16:12
樓主當年是東北賽區的嗎,同款架子
作者: 我叫漠    時間: 2020-4-3 19:01
想問一下 波形上位機用的是什么呀
作者: 羅程峰8200    時間: 2020-4-7 23:57
太給力了  樓主威武
作者: liqifff    時間: 2020-4-30 09:28


pb什么意思
作者: 看海111    時間: 2020-6-9 21:02

感謝分享
作者: 1804889557    時間: 2020-6-27 21:44
靠著樓主的代碼,19年電賽拿了區二,哈哈哈
作者: Faryon    時間: 2021-7-12 00:35
拿走了,表示非常感謝
作者: lcl00    時間: 2021-7-28 09:45
沒看明白,k1、k2、k3按鍵的作用是什么





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 99精品欧美一区二区三区 | 亚洲高清av | 久久99深爱久久99精品 | 亚洲精品一区二区在线观看 | 精品麻豆剧传媒av国产九九九 | 91视频免费 | 国产乱码精品1区2区3区 | 欧美日韩综合视频 | 久久精品亚洲精品国产欧美 | 亚洲日本欧美日韩高观看 | 中文字幕日韩欧美 | 日韩欧美在线一区 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | www.五月天婷婷.com | 一级特黄在线 | 亚洲福利一区二区 | 综合国产 | 精品亚洲视频在线 | 亚洲精品www | 中文在线a在线 | 欧美精品免费观看二区 | 午夜精品久久久久99蜜 | 欧美激情 一区 | 中文字幕视频在线看5 | 欧美在线小视频 | 粉嫩国产精品一区二区在线观看 | 97av视频在线观看 | 成人影 | 久久久精品网 | 久久精品电影 | 精品久久影院 | 国产精品一级 | 欧美福利一区 | 亚洲性爰| 欧美一区二区三区在线播放 | 日韩影院在线观看 | 国产精品99久久久久久动医院 | a级毛片免费高清视频 | 国产精品美女一区二区 | 激情一区二区三区 | 91久久国产综合久久 |