標(biāo)題: 風(fēng)力擺設(shè)計(jì)實(shí)例 [打印本頁(yè)]
作者: gdcdgvgsd 時(shí)間: 2017-8-1 11:31
標(biāo)題: 風(fēng)力擺設(shè)計(jì)實(shí)例
.風(fēng)機(jī)選用讀題可知, 題目要求使用風(fēng)機(jī)將受控部分自身吹起
我們組事先備有一些風(fēng)機(jī), 但是由于過(guò)于笨重, 只能將自身吹起10°度左右, 只好放棄.
之后尋找替代方案, 想到嘗試用空心杯電機(jī), 測(cè)試發(fā)現(xiàn)3.5V/1.5A可將自身吹起25°左右, 還是略勉強(qiáng).
只好狠心把手上現(xiàn)有的四軸飛行器拆了, 利用上面帶齒輪組的空心杯電機(jī)做
2.傳感器這是需要控制一個(gè)風(fēng)擺
要做到精確控制, 得做一個(gè)閉環(huán)系統(tǒng), 控制的同時(shí)觀測(cè)控制效果作為反饋改變控制量(常用算法是PID).
控制的是風(fēng)擺上的風(fēng)機(jī), 需要測(cè)的是當(dāng)前風(fēng)擺的姿態(tài), 自然能聯(lián)想到陀螺儀, 使用它可以得知擺的當(dāng)前姿態(tài).
手上有現(xiàn)成的MPU6050
3.結(jié)構(gòu)
p1.jpg (784.28 KB, 下載次數(shù): 128)
下載附件
2017-8-1 17:02 上傳
設(shè)計(jì)結(jié)構(gòu)時(shí), 材料都盡量選了輕的, 將主控板/驅(qū)動(dòng)板/電源都外置了,
擺子上, 只放置風(fēng)機(jī)+MPU6050.
擺的竿子, 用了鋁棒, 很輕, 容易加工, 運(yùn)動(dòng)中不會(huì)像塑料棒一樣左搖右晃更不會(huì)自旋, 省了不少事.
支架嘛…東拼西湊來(lái)的, 找了一截粗鋁棒, 拆了個(gè)抽屜取了軌道做支架, 借了個(gè)鉆臺(tái)的底座…
線材, 信號(hào)線統(tǒng)一用細(xì)的, 電機(jī)的線用了比較粗的2A的線, 用自緊塑料扎帶整理好.
這個(gè)結(jié)構(gòu)在后面的評(píng)測(cè)環(huán)節(jié)證明, 容易拆解, 還不容易出問(wèn)題…
4.電機(jī)驅(qū)動(dòng)電路
motor_driver.jpg (30.33 KB, 下載次數(shù): 121)
下載附件
2017-8-1 17:02 上傳
由于沒(méi)有正反轉(zhuǎn)的需求, 這里直接就用了mos管驅(qū)動(dòng).
5.電源一開(kāi)始用著實(shí)驗(yàn)室的穩(wěn)壓電源, 沒(méi)考慮電源的問(wèn)題.
后來(lái)?yè)Q了自制的4A電源發(fā)現(xiàn), 3個(gè)以上空心杯一起工作, 電源電壓就明顯下降了.
才意識(shí)到一個(gè)空心杯在3.5V時(shí), PWM滿(mǎn)調(diào)制電流會(huì)在2A以上.. 電源完全不達(dá)要求.
馬上使用萬(wàn)能的TB找到了本市的某個(gè)角落有賣(mài)開(kāi)關(guān)電源, 馬上打飛的購(gòu)回5V 10A(10%電壓可調(diào))的開(kāi)關(guān)電源, 丙把電壓調(diào)到3.8V.
6.主控這種比賽當(dāng)然是直接上平時(shí)用得多的..STM32F1.
P.S.完全確定這些架構(gòu)的時(shí)候 已經(jīng)是第三天的中午了…于是第三天的晚上只睡了3個(gè)小時(shí)…
程序部分題目要求那么多, 總之就是: 擺直線/制動(dòng)/畫(huà)圓
風(fēng)機(jī)調(diào)速使用MCU的TIMER提供的PWM功能
PID算法做這一題必須用到PID算法, 網(wǎng)上資料已經(jīng)很多了.
我們發(fā)現(xiàn), 做這題只用P參數(shù)就夠.
角度傳感器這里選用的MPU6050, 網(wǎng)上資料很多.
我們使用別人從MSP430移植到STM32上的DMP庫(kù), 能直接讀出四元數(shù), 轉(zhuǎn)換成歐拉角就能知道當(dāng)前姿態(tài).
詳見(jiàn)interface_mpu6050.c
程序框架這里使用一個(gè)平面狀態(tài)機(jī)做框架.
每輸入一個(gè)傳感器數(shù)據(jù), 都根據(jù)當(dāng)前系統(tǒng)狀態(tài), 進(jìn)行不同的處理.
制作了一個(gè)串口調(diào)試命令系統(tǒng), 可以使用串口, 輸入命令更改一些參數(shù), 幫助調(diào)試.
P.S. 以上是比賽前就做好的準(zhǔn)備工作
風(fēng)機(jī)控制程序
motor.jpg (15.27 KB, 下載次數(shù): 105)
下載附件
2017-8-1 17:02 上傳
風(fēng)機(jī)控制程序控制PWM輸出量,
以同在一個(gè)方向的1,3的電機(jī)為例,
當(dāng)風(fēng)機(jī)控制量為正, 1號(hào)轉(zhuǎn),3號(hào)停; 為負(fù)反之.
這里還有一個(gè)很必要的工作, 就是為每個(gè)電機(jī)設(shè)定一個(gè)運(yùn)行時(shí)可調(diào)的系數(shù), 每次運(yùn)行時(shí), 手動(dòng)把四個(gè)電機(jī)的風(fēng)速盡可能調(diào)平衡.
一般來(lái)說(shuō), 為了達(dá)到更好的控制效果, 會(huì)在這個(gè)程序中做一個(gè)PWM與風(fēng)速的擬合, 使控制量與風(fēng)速盡可能的呈線性關(guān)系.
我們沒(méi)做是因?yàn)轱L(fēng)速很難測(cè).
擺直線要求一.
畫(huà)不定長(zhǎng)直線段(超過(guò)50cm)
方案
開(kāi)始時(shí), 先給風(fēng)擺動(dòng)起來(lái), 具體做法是讓單邊電機(jī)工作, 然后停止, 之后進(jìn)入測(cè)控流程.
m1.jpg (40.83 KB, 下載次數(shù): 126)
下載附件
2017-8-1 17:02 上傳
測(cè)控流程:
若當(dāng)風(fēng)擺角度為正時(shí), PID目標(biāo)角度值也設(shè)為正;
若當(dāng)風(fēng)擺角度為負(fù)時(shí), PID目標(biāo)角度值也設(shè)為負(fù).
這樣做的目的是:
速度方向朝向目標(biāo)角位置時(shí), 遠(yuǎn)離目標(biāo)值時(shí)(就是底部)風(fēng)機(jī)速度最快, 在目標(biāo)值附近風(fēng)機(jī)不起作用;
速度方向背向目標(biāo)角位置時(shí), 風(fēng)擺由于重力會(huì)有向下的力, 風(fēng)機(jī)使風(fēng)擺下降速度變緩;
設(shè)定一個(gè)合適的目標(biāo)角, 讓畫(huà)出的直線段超過(guò)50cm即可.
要求二.
畫(huà)長(zhǎng)度可控的直線段
方案
同要求一方案, 但是需要標(biāo)定, 即確定目標(biāo)角與實(shí)際畫(huà)出的直線段間的關(guān)系.
根據(jù)用戶(hù)輸入長(zhǎng)度, 查表即可.
要求三.
在底圖上標(biāo)注的任意角度上畫(huà)直線
方案
依舊是方案一的擴(kuò)展.
只不過(guò)現(xiàn)在需要用兩個(gè)PID, 分別控制兩個(gè)方向的兩組螺旋槳.
然后依舊用標(biāo)定的方式, 調(diào)整
以下是我們做的標(biāo)定, 從0°測(cè)到40°(其余角度都可以根據(jù)這個(gè)推出來(lái)),
2
4
6
const uint32_t DATA_J3_pwm_table[][3] = {
{ 16000 , 5000 , 11}, /* 10 */
{ 16000 , 9200 , 11}, /* 30 */
};
|
第一個(gè)值為x方向PID的P參量,
第一個(gè)值為y方向PID的P參量,
第三個(gè)值為目標(biāo)角.
成功的關(guān)鍵, 是前面提到的電機(jī)必須調(diào)平衡….否則擺若干次后, 風(fēng)擺會(huì)開(kāi)始畫(huà)明顯的橢圓.
制動(dòng)題目要求5s內(nèi)達(dá)到靜止?fàn)顟B(tài)
方案
使用兩路PID用來(lái)控制兩個(gè)方向的兩組風(fēng)機(jī), 將目標(biāo)角設(shè)為0, p參數(shù)為負(fù)數(shù)(就是讓風(fēng)擺在下落時(shí)減速以趨向靜止)即可.
單以這樣的原理, 實(shí)際效果并不好, 在p參數(shù)不會(huì)引起自激的前提下, 只能做到在15s內(nèi)靜止.
于是我們讓PID的p參數(shù)在不斷接近靜止的過(guò)程中下降, 最后基本能做到5s內(nèi)靜止.
我們的具體做法是: 角度低于某數(shù)值一段時(shí)間后, 確定下降到一定高度, 調(diào)低一次p值.
畫(huà)圓原理: 讓風(fēng)機(jī)產(chǎn)生的合力為定值, 且力的方向與當(dāng)前風(fēng)擺抬起的方向相同.
方案
我們用了一個(gè)投機(jī)取巧的方法, 我們叫它”P(pán)WM值傳遞畫(huà)圓”
以初始PWM=3為例, 四個(gè)風(fēng)機(jī)的PWM值這樣變化:
[td]| 風(fēng)機(jī)1 | 風(fēng)機(jī)2 | 風(fēng)機(jī)3 | 風(fēng)機(jī)4 |
| 3 | 0 | 0 | 0 |
| 2 | 1 | 0 | 0 |
| 1 | 2 | 0 | 0 |
| 0 | 3 | 0 | 0 |
| 0 | 2 | 1 | 0 |
| 0 | 1 | 2 | 0 |
| 0 | 0 | 3 | 0 |
| 0 | 0 | 2 | 1 |
| 0 | 0 | 1 | 2 |
| 0 | 0 | 0 | 3 |
| 1 | 0 | 0 | 2 |
| 2 | 0 | 0 | 1 |
不斷循環(huán)執(zhí)行.
用這個(gè)偷懶的方法, 需要確定三個(gè)變量: 初始PWM, 每隔多少時(shí)間傳遞一次PWM值, 每次傳遞多少PWM值
慢慢調(diào)整這三個(gè)參數(shù), 就能調(diào)出不同直徑的圓…
這是一個(gè)省事又有效的方法..
如果畫(huà)的不夠圓, 先把風(fēng)機(jī)調(diào)平衡吧.
作者: admin 時(shí)間: 2018-2-16 23:01
好資料,51黑有你更精彩!!!
作者: lsh0001 時(shí)間: 2019-8-3 15:31
好厲害論壇,牛人的解析易懂
作者: 未完待續(xù)鳳 時(shí)間: 2019-8-5 19:17
代碼可以發(fā)來(lái)學(xué)習(xí)下嗎
作者: lzqdsfasfascxcc 時(shí)間: 2019-10-29 21:58
想買(mǎi)成品可以嗎
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |