舵机&数据处理&stm32内存之堆栈溢出(遇到的问题)
Posted 947033916-fwh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了舵机&数据处理&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文件内核启动代码中的。规定栈的大小。局部变量的内存都分布在栈上,函数地调用也会在栈上,定义局部变量避免大数组,以防栈溢出。
栈的大小: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大小
/ ******************这里摘自网友博客**********************/
以上是关于舵机&数据处理&stm32内存之堆栈溢出(遇到的问题)的主要内容,如果未能解决你的问题,请参考以下文章
JSON数据格式C语言解析库(cJSON)的使用&在STM32上移植和使用
STM32CubeMX(09)MG90S舵机驱动实验
STM32CubeMX(09)MG90S舵机驱动实验
STM32CubeMX笔记--定时器生成PWM特定波形,控制舵机转动
STM32CubeMX-定时器产生PWM驱动舵机
STM32超声波模块测距控制舵机