2021-09-20 13:24:25 索煒達電子 1184
項目編號:E1249
文件大小:2.99M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
風(fēng)力擺控制系統(tǒng)主要應(yīng)用了一個物理知識——李薩如圖形,李薩如圖形貫穿整個風(fēng)力擺設(shè)計的始終。無論是畫直線還是畫圓都應(yīng)用到了李薩如圖形,風(fēng)力擺可以看成是XY兩個方向上的簡諧運動。當兩個簡諧運動的相位和周期相等、幅值不等時,風(fēng)力擺會在下方畫出不同長度不同角度的直線;當兩個簡諧運動的幅值和周期相等、相位相差Π/2時,風(fēng)力擺會在下方畫出不同半徑的圓(具體請多了解一下李薩如圖形)。風(fēng)力擺的各種注意事項請大家仔細閱讀代碼中的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
風(fēng)力擺控制系統(tǒng)是一種利用風(fēng)力控制物體做簡諧運動的系統(tǒng),風(fēng)力的利用和控制技術(shù)在我國的發(fā)展尚未完善,國內(nèi)正處于起步階段。風(fēng)力擺的工作原理具有較為典型的自動化控制理論特點,其控制方法多種多樣。深入研究,在許多工程技術(shù)領(lǐng)域都有著廣闊的開發(fā)前景。風(fēng)力擺系統(tǒng)的擺體由風(fēng)扇構(gòu)成,通過調(diào)整風(fēng)扇的轉(zhuǎn)速實現(xiàn)擺動位置及擺動路線的控制,由于擺動機構(gòu)的滯后性,實現(xiàn)精確控制具有一定難度。通過合理的擺結(jié)構(gòu)設(shè)計,并利用擺線理論建模,設(shè)計并優(yōu)化控制策略,利用閉環(huán)結(jié)構(gòu)提升擺的軌跡運動準確性。其中的控制原理對于人們處理工業(yè)工程,同樣存在借鑒。系統(tǒng)對風(fēng)擺控制參數(shù)設(shè)定、抗擾因素測試等慣性滯后問題解決具有借鑒意義,同時也為分析該類問題建立了直觀的測試平臺。風(fēng)力擺是一種通過風(fēng)機作為唯一動力驅(qū)動的裝置,深入研究該系統(tǒng)對空間飛行器、四旋翼無人機的運動狀態(tài)和衛(wèi)星姿態(tài)控制具有重大意義。
三、主要研究內(nèi)容
1. 基本要求
(1) 從靜止開始,15s 內(nèi)控制風(fēng)力擺做類似自由擺運動,使激光筆穩(wěn)定地
在地面畫出一條長度不短于 50cm 的直線段,其線性度偏差不大于±
2.5cm,并且具有較好的重復(fù)性;
(2) 從靜止開始,15s 內(nèi)完成幅度可控的擺動,畫出長度在 30~60cm 間可設(shè)置,長度偏差不大于±2.5cm 的直線段,并且具有較好的重復(fù)性;
(3) 可設(shè)定擺動方向,風(fēng)力擺從靜止開始,15s 內(nèi)按照設(shè)置的方向(角度)
擺動,畫出不短于 20cm 的直線段;
(4) 將風(fēng)力擺拉起一定角度(30°~45°)放開,5s 內(nèi)使風(fēng)力擺制動達到靜止狀態(tài)。
2.發(fā)揮部分
(1) 以風(fēng)力擺靜止時激光筆的光點為圓心,驅(qū)動風(fēng)力擺用激光筆在地面畫圓,30s 內(nèi)需重復(fù) 3 次;圓半徑可在 15~35cm 范圍內(nèi)設(shè)置,激光筆畫出的軌跡應(yīng)落在指定半徑±2.5cm 的圓環(huán)內(nèi);
(2) 在發(fā)揮部分(1)后繼續(xù)作圓周運動,在距離風(fēng)力擺 1~2m 距離內(nèi)用一臺 50~60W 臺扇在水平方向吹向風(fēng)力擺,臺扇吹 5s 后停止,風(fēng)力擺能
夠在 5s 內(nèi)恢復(fù)發(fā)揮部分(1)規(guī)定的圓周運動,激光筆畫出符合要求的
軌跡;
(3) 其他。
四、總體思路與研究方案
1. 總體思路
風(fēng)力擺控制系統(tǒng)是一個極其不穩(wěn)定的系統(tǒng),擺桿的長度、風(fēng)機的安裝位置、萬向節(jié)的阻力等因素都會引起系統(tǒng)產(chǎn)生誤差,該系統(tǒng)中應(yīng)用了一個物理知識——李薩如圖形。李薩如圖形貫穿整個風(fēng)力擺控制系統(tǒng)的始終,畫直線時兩個方向上的簡諧運動相位相等,幅值不同就會畫出不同角度不同長度的直線;畫圓時兩個方向上的簡諧運動相位相差Π/2,幅值相同就會畫出不同半徑的圓。
設(shè)計整個系統(tǒng)時將角度傳感器mpu6050固定在擺桿上,傳感器返回的數(shù)據(jù)通過串口顯示在上位機上。在程序里設(shè)置兩條目標值曲線,根據(jù)上位機顯示的實際值波形與目標值曲線之間的差異進行PID參數(shù)的整定。實際上整個系統(tǒng)的目的就是讓實際值曲線沿著目標值曲線的軌跡運動。
2. 實施方案
(1)電機的論證和選擇
方案1:采用驅(qū)動、風(fēng)機一體化的軸流風(fēng)機
驅(qū)動、風(fēng)機一體化的軸流風(fēng)機有可以免去驅(qū)動的設(shè)計、節(jié)省結(jié)構(gòu)空間、控制方法簡單,散熱快等優(yōu)點,但是他的風(fēng)力較小而且重量大,響應(yīng)速度和其他電機相比也比較慢。
方案2:采用空心杯電機
空心杯電機重量小,風(fēng)力大,起動、制動迅速,響應(yīng)極快,能量轉(zhuǎn)換效率很高。但是他的抗干擾能力較弱容易受到很多外界因素的影響。
綜合以上兩種方案選擇方案2。
(2)驅(qū)動模塊的論證和選擇
方案1:采用TB6612FNG驅(qū)動模塊
TB6612FNG驅(qū)動模塊雙通道輸出,可同時驅(qū)動兩個電機。每個通道可以輸出最高1A的驅(qū)動電流,啟動峰值電流達2A。TB6612FNG是基于MOSFET的H橋集成電路,效率遠高于晶體管H橋驅(qū)動器。
方案2:采用L298N驅(qū)動模塊
L298N驅(qū)動模塊是一種高電壓、大電流的驅(qū)動模塊,它采用L298N雙H橋直流電機驅(qū)動芯片,單橋可以輸出的最大驅(qū)動電流為2A,驅(qū)動部分端子供電范圍為5V~35V。
綜合以上兩種方案選擇方案2。
(3)主控模塊的論證與選擇
方案1:采用STC89C51單片機
STC89C51單片機最高工作時鐘頻率為80MHz,內(nèi)含8K Bytes的可反復(fù)擦寫1000次的Flash只讀程序存儲器,芯片內(nèi)集成了通用8位 中央處理器和ISP Flash 存儲單元。
方案2:采用STM32單片機
STM32單片機是ST公司使用arm公司的cortex-M3為核心生產(chǎn)的32bit系列的單片機,他的內(nèi)部資源非常豐富,基本上接近于計算機的CPU了,最高工作頻率72MHz。
綜合以上兩種方案選擇方案2。
(4)角度檢測模塊的論證與選擇
方案1:采用角度傳感器
由UZZ9001和KMZ41組成角度測量模塊,并使用矩形磁鐵進行配合測量磁鐵與KMZ41芯片之間的角度。UZZ9001將KMZ41輸出的正余弦角度信號轉(zhuǎn)換為數(shù)字信號,并通過SPI串口輸出。但KMZ41調(diào)試比較困難,不方便用于測量傾角。
方案2:采用MPU6050模塊
MPU6050測量角度集成了三軸MEMS陀螺儀,三軸MEMS加速度計。MPU6050對陀螺儀和加速度計分別用了3個16位的ADC,將其測量的模擬量轉(zhuǎn)化為可輸出的數(shù)字量。測量范圍可控,通信采用I2C總線,操作簡單。
綜合以上兩種方案選擇方案2。
(5)電源的論證和選擇
方案1:采用航模電池,
航模電池可以輸出12V的電壓,可反復(fù)充電。此方案的優(yōu)點是風(fēng)力擺與外界無需電源連線統(tǒng)安裝方便,但電壓會有波動,不能長時間穩(wěn)定工作。
方案2:采用開關(guān)電源
利用開關(guān)電源雖然系統(tǒng)安裝較復(fù)雜,但功率較大,電壓穩(wěn)定。
綜合以上兩種方案選擇方案2
五、主要研究結(jié)果
經(jīng)過我們團隊的不懈努力,風(fēng)力擺控制系統(tǒng)現(xiàn)在可以完成一下要求:
(1) 從靜止開始,15s 內(nèi)控制風(fēng)力擺做類似自由擺運動,使激光筆穩(wěn)定地
在地面畫出一條長度不短于 50cm 的直線段,其線性度偏差不大于±
2.5cm,并且具有較好的重復(fù)性;
(2) 從靜止開始,15s 內(nèi)完成幅度可控的擺動,畫出長度在 30~60cm 間可設(shè)置,長度偏差不大于±2.5cm 的直線段,并且具有較好的重復(fù)性;
(3) 可設(shè)定擺動方向,風(fēng)力擺從靜止開始,15s 內(nèi)按照設(shè)置的方向(角度)
擺動,畫出不短于 20cm 的直線段;
(4) 將風(fēng)力擺拉起一定角度(30°~45°)放開,5s 內(nèi)使風(fēng)力擺制動達到靜止狀態(tài)。
(5) 以風(fēng)力擺靜止時激光筆的光點為圓心,驅(qū)動風(fēng)力擺用激光筆在地面畫圓,30s 內(nèi)需重復(fù) 3 次;圓半徑可在 15~35cm 范圍內(nèi)設(shè)置,激光筆畫出的軌跡應(yīng)落在指定半徑±2.5cm 的圓環(huán)內(nèi);
(6) 在發(fā)揮部分(1)后繼續(xù)作圓周運動,在距離風(fēng)力擺 1~2m 距離內(nèi)用一臺 50~60W 臺扇在水平方向吹向風(fēng)力擺,臺扇吹 5s 后停止,風(fēng)力擺能
夠在 5s 內(nèi)恢復(fù)要求(5)規(guī)定的圓周運動,激光筆畫出符合要求的軌跡;
六、存在的問題及今后努力方向
這個風(fēng)力擺控制系統(tǒng)在畫圓的時候畫出來的圓不是太完美,即使理論值我都算出來了并且按照理論值設(shè)定各參數(shù)但是理論和實際之間總有差距,引起這一現(xiàn)象可能的因素有萬向節(jié)阻力、激光束是否和擺桿在一條直線上、MPU6050的安放位置等。我嘗試著改變兩個簡諧運動曲線的幅值和相位差,如果這幾個因素改變的程度過低風(fēng)力擺表現(xiàn)得不太明顯,如果過高風(fēng)力擺畫出來的就是一個橢圓,很難找到一個非常非常完美的參數(shù)。今后我會更加刻苦的學(xué)習(xí)PID算法、信號的分析和處理等知識,致知于行,學(xué)以致用,讓理論能很好的應(yīng)用到實踐中。
目錄│文件列表:
└ 15年電賽控制類-風(fēng)力擺
│ MiniBalance波形顯示上位機.exe
│ 電子設(shè)計競賽項目報告.doc
└ 風(fēng)力擺
│ keilkilll.bat
├ CORE
│ │ core_cm3.c
│ │ core_cm3.h
│ │ startup_stm32f10x_cl.s
│ │ startup_stm32f10x_hd.s
│ │ startup_stm32f10x_hd_vl.s
│ │ startup_stm32f10x_ld.s
│ │ startup_stm32f10x_ld_vl.s
│ │ startup_stm32f10x_md.s
│ │ startup_stm32f10x_md_vl.s
│ └ startup_stm32f10x_xl.s
├ HARDWARE
│ ├ control
│ │ │ control.c
│ │ └ control.h
│ ├ DataScope_DP
│ │ │ DataScope_DP.C
│ │ └ DataScope_DP.h
│ ├ EXTI
│ │ │ exti.c
│ │ └ exti.h
│ ├ KEY
│ │ │ key.c
│ │ └ key.h
│ ├ OLED
│ │ │ oled.c
│ │ │ oled.h
│ │ └ oledfont.h
│ ├ show
│ │ │ show.c
│ │ └ show.h
│ └ TIMER
│ │ timer.c
│ └ timer.h
├ MyCode
│ ├ DMP
│ │ │ dmpKey.h
│ │ │ dmpmap.h
│ │ │ inv_mpu.c
│ │ │ inv_mpu.h
│ │ │ inv_mpu_dmp_motion_driver.c
│ │ └ inv_mpu_dmp_motion_driver.h
│ ├ IIC
│ │ │ IOI2C.c
│ │ └ IOI2C.h
│ ├ led
│ │ │ LED.c
│ │ └ LED.h
│ └ MPU6050
│ │ MPU6050.c
│ └ mpu6050.h
├ OBJ
│ └ main.hex
├ STM32_FWLIB
│ ├ inc
│ │ │ misc.h
│ │ │ stm32f10x_adc.h
│ │ │ stm32f10x_bkp.h
│ │ │ stm32f10x_can.h
│ │ │ stm32f10x_cec.h
│ │ │ stm32f10x_crc.h
│ │ │ stm32f10x_dac.h
│ │ │ stm32f10x_dbgmcu.h
│ │ │ stm32f10x_dma.h
│ │ │ stm32f10x_exti.h
│ │ │ stm32f10x_flash.h
│ │ │ stm32f10x_fsmc.h
│ │ │ stm32f10x_gpio.h
│ │ │ stm32f10x_i2c.h
│ │ │ stm32f10x_iwdg.h
│ │ │ stm32f10x_pwr.h
│ │ │ stm32f10x_rcc.h
│ │ │ stm32f10x_rtc.h
│ │ │ stm32f10x_sdio.h
│ │ │ stm32f10x_spi.h
│ │ │ stm32f10x_tim.h
│ │ │ stm32f10x_usart.h
│ │ └ stm32f10x_wwdg.h
│ └ src
│ │ misc.c
│ │ stm32f10x_adc.c
│ │ stm32f10x_bkp.c
│ │ stm32f10x_can.c
│ │ stm32f10x_cec.c
│ │ stm32f10x_crc.c
│ │ stm32f10x_dac.c
│ │ stm32f10x_dbgmcu.c
│ │ stm32f10x_dma.c
│ │ stm32f10x_exti.c
│ │ stm32f10x_flash.c
│ │ stm32f10x_fsmc.c
│ │ stm32f10x_gpio.c
│ │ stm32f10x_i2c.c
│ │ stm32f10x_iwdg.c
│ │ stm32f10x_pwr.c
│ │ stm32f10x_rcc.c
│ │ stm32f10x_rtc.c
│ │ stm32f10x_sdio.c
│ │ stm32f10x_spi.c
│ │ stm32f10x_tim.c
│ │ stm32f10x_usart.c
│ └ stm32f10x_wwdg.c
├ SYSTEM
│ ├ delay
│ │ │ delay.c
│ │ └ delay.h
│ ├ sys
│ │ │ sys.c
│ │ └ sys.h
│ └ usart
│ │ usart.c
│ └ usart.h
└ USER
│ JLinkSettings.ini
│ main.c
│ main.uvgui.Administrator
│ main.uvgui.adong
│ main.uvgui.Grenter
│ main.uvgui.HP
│ main.uvgui.yong
│ main.uvopt
│ main.uvproj
│ README.txt
│ stm32f10x.h
│ stm32f10x_conf.h
│ stm32f10x_it.c
│ stm32f10x_it.h
│ stm32f10x_spi.c
│ system_stm32f10x.c
└ system_stm32f10x.h