舵機&數據處理&stm32內存之堆棧溢出(遇到的問題)

產品名稱:TOWER PRO(輝盛)大扭力舵機MG996R (MG995升級產品)6v/11Kg
廠家編號:MG996R
產品淨重: 55g
產品尺寸: 40.7*19.7*42.9mm
產品拉力: 9.4kg/cm(4.8V), 11kg/cm(6V)
反應速度: 0.17sec/60degree(4.8v) 0.14sec/60degree(6v)
工做電壓: 4.8-7.2V
工做溫度: 0℃-55℃
齒輪形式: 金屬齒輪
工做死區: 5us (微秒)
適合機型: 50級-90級甲醇固定翼機以及26cc-50cc汽油固定翼飛機等
算法

後又改用別的舵機:
硬件問題:
問題一
舵機的精準度和響應速度。
用按鍵調整舵機,
674-中值,  左極限:502-左29度, (674-502)/30=5.73。每度5.73。 5.73/10000*20=0.01146ms=11.46us.   工做死區:5us。右極限:(865-674)*  
可是我用按鍵調整時從中值。向右打舵時需加60  就是增長0.12ms脈衝寬度纔會第一次轉,左邊是好的。而後右打30度或者左打30度,回舵的時候,反應很慢,也是須要加50到60纔開始第一次回舵。以後就是正常的。
打算換一個舵機,來試試。
 
問題三:
攝像頭加濾光片後,攝像頭自動進入白平衡調節。此時應該將濾光片去掉,調好白平衡後,再戴上濾光片。
軟件問題:
問題一:
遇到的問題:測試各個模塊代碼都沒有問題,讀出全局變量的值被改變了。原來是函數嵌套太深了,把棧撐爆了。
stm32內存分佈-棧,堆,靜態存儲區。
棧:  Stack_Size      EQU     0x00000400  .s文件內核啓動代碼中的。規定棧的大小。局部變量的內存都分佈在棧上,函數地調用也會在棧上,定義局部變量避免大數組,以防棧溢出。
舵機stm32內存之棧溢出(遇到的問題) - 梔子花開 - 梔子花開
棧的大小:0x400=1024個字節大小。
堆: Heap_Size       EQU     0x00000200  規定堆的大小。malloc或者new來申請堆內存,用完後而後free或者delate釋放內存,若是未釋放則出現內存泄漏,
靜態存儲區:static關鍵字,全局變量,
解決辦法:咱們沒有用到堆內存malloc來申請內存。將堆內存改成0,那麼內存分佈就是靜態存儲區+棧了。
.c文件先彙編成.o文件,而後在連接成可執行文件,
 
問題二:
數據大小端的問題處理數據。
接受到的數據是高字節在前,低字節在後,得處理一下,
問題三:
舵機PD算法的參數肯定,
問題四:
攝像頭採集的數據有跳變,是由於攝像頭電源和mcu的電源必須統一。因而乎就採用軟件均值濾波。各類嘗試。。可是最後發現是硬件的供電問題。困擾很久。才解決了數據跳變的問題。(本身差點都準備換別的攝像頭了)。特別悲催。。坑爹。。。
 
檢查問題步驟:
1.先觀察攝像頭數據,是否輸出。
2.再看X,Y,編碼器計數。
 
 
/ ******************這裏摘自網友博客**********************/
編譯工程:
在Keil中編譯工程成功後,在下面的Bulid Ouput窗口中會輸出下面這樣一段信息:

Program Size: Code=6320  RO-data=4864  RW-data=44  ZI-data=1636  
表明的意思:
Code :是程序中代碼所佔字節大小
RO-data :程序中所定義的指令和常量大小 (我的理解 :Read Only)
RW-data :程序中已初始化的變量大小   (我的理解」:Read/Write)
ZI-Data :程序中未初始化的變量大小     (我的理解 :Zero Initialize)
數組

ROM(Flash) size = Code+RO-data+RW-data;函數

RAM size = RW-data+ZI-data測試

能夠經過.map查看佔用的flash和ram大小編碼

 
/ ******************這裏摘自網友博客**********************/
相關文章
相關標籤/搜索