R88 发表于 2016-4-18 10:52:42

T宝上淘一个6050模块,学习下四轴程序

看论坛上很多四轴开源的程序,也很想学习一下。过完年回来之后一直想弄弄,于是在网上买了一个GY-521 MPU6050模块和一个24L01+以及stm32f103的最小系统,不到70元而已,加上大学时候买的jlink,硬件上就这些了。也想过在淘宝买个成品四轴不过一看价格都300多,还是先学学再看。利用了晚上的一点时间没事就看看,都是基础的东西,给后来人参考,适合刚入门四轴的。本人之前没弄过四轴也没用过stm32,这个学习过程也想将两者都学学。路漫漫兮修远兮。转入正题,下面是我stm32的最小系统原理图,后面所改的程序都是基于此sch:
首先学习的四轴程序就是匿名的,正好有个开源的帖子是各个硬件模块的编程测试,适合我这种没用过stm32的人,看起来也容易些:
http://www.amobbs.com/thread-5544053-1-1.html
应为所用处理器不一样,所以MDK软件target options里面的设置也需要更改,下面是第一个工程:

功能比较简单就是一个LED长亮短灭的闪烁,因为硬件不同所以初始化中更改对应点亮的LED引脚即可,程序流程:MCO引脚初始化--LED引脚初始化--while1中LED不断闪烁;

下面是第二个工程,为串口的测试:不过因为硬件晶振的不同,匿名的是16M,而我的硬件是8M;所以程序中需要改2处波特率才可以正确(MDK软件target options里面的设置也需要更改),否则串口以及后面的定时器测试都会有问题的:
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9);
#define HSE_VALUE    ((uint32_t)16000000)
改为:
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE | RCC_CFGR_PLLMULL9);
#define HSE_VALUE    ((uint32_t)8000000)

功能就是通过串口1发送一些字符,波特率256k,程序流程:MCO引脚初始化--串口1初始化--while1中串口1字符不断发送;

下面是第三个工程,为NRF24L01+的测试,通过这个工程可以学习一下NRF24L01+的简单配置使用,淘宝上的2401模块3元左右也够便宜了。正好我的硬件有24L01的接口,直接插上就行,功能简单:就是给2401的寄存器地址写入一个值在读出来对比,如果插上24L01后LED会闪,拔出后LED就不会闪。程序流程:MCO引脚初始化--LED引脚初始化----SPI引脚初始化--24L01初始化--while1中不断给2401写值在读出来对比,如果一样就LED闪烁:


下面是第四个工程,为定时器3的测试,定时器的理解比较重要,因为后面6050数据的读取以及姿态解算都是在定时器中断中进行的。下面的测试程序比较简单,每隔3S后LED闪烁一次,3S就是靠定时器实现的,程序流程:MCO引脚初始化--LED引脚初始化--定时器初始化--中断初始化--0.5ms定时器中断进入,如果3S达到LED闪烁一下:


下面是第五个工程,为MPU6050的测试,就是读取6050的原始数据发送到上位机上,注意这里AD0是接高电平的(SCL接PB6,SDA接PB7),波特率256K。程序流程:MCO引脚初始化--定时器初始化--串口初始化--中断初始化--硬件IIC初始化设置--MPU6050初始化--0.5ms定时器中断进入不断读取6050原始数据发送到上位机(上电初始会读取200次数据作为水平校准,之后读取的值都会减去这个初始值):

下面是匿名上位机显示的结果(因为是水平静止放置,所以Z轴加速度为1g,量程为正负4g,所以Z显示的10进制数据为8192,对应16进制是2000):


下面是所用的匿名上位机(软件帮助里面有通信协议):


下面是第六个工程,为MPU6050的测试以及姿态算法测试,最终解算出rol和pitch姿态角,匿名上位机3D显示。程序流程跟第五个工程差不多,就是最后中断函数中增加了一个姿态计算的步骤:


程序中增加了新旧上位机的通信协议,因为测试发现新的上位机显示3D时自旋的非常厉害,所以就用了老上位机显示的3D(老上位机比较稳定),下面是老上位机和效果(不传视频了):


在传一个DMP解算姿态的,发现用这个新的上位机显示3D就非常稳:

最后上传一个完整版的,原始的正式程序:

整个简单的学习过程完毕了,至于PID部分因为没有执行机构所以也没测试(PID部分的实验可以在对应接电机的PWM IO接上LED,晃动6050看看LED的变化情况);不过单级的PID应该不难。不过我看PID部分貌似有问题:

比例部分相乘的不是遥控和姿态解算的差值而是直接乘以的姿态值?

对于手上没有四轴,又想学学四轴程序的人,可以参考参考哈。成本低廉。这两天晚上再把圆点的整理下。

stely 发表于 2016-4-18 11:15:19

很详细,赞一个。

AllEle 发表于 2016-4-18 12:18:16

MK了慢慢看

y1z2f4 发表于 2016-4-18 14:40:32

跟着学,谢谢楼主分享!

Flanker_c 发表于 2016-4-18 17:12:29

谢谢楼主想学四轴却没有方向正好看到这一篇!

R88 发表于 2016-4-18 22:42:11

整理一下圆点的程序,正好在圆点的官网找到了最新的四轴资料,这里就是最新的程序:http://pan.baidu.com/s/1mgqmhUK 为2015+那个文件夹;




测试效果:

上位机(第六个程序也用这个上位机测试通信协议):




每个压缩包里面都有一个read me文件,里面有程序说明,我就不一一说了;

还有一个遥控程序(把stm32的USB口虚拟成串口,安装驱动就可以用):

以后没时间看了,就算个学习总结了,共享下。

2005n2005 发表于 2016-4-18 23:37:33

好资料了,太强了

yangxizhong 发表于 2016-4-19 00:14:13

谢谢楼主的资料!

PCBBOY1991 发表于 2016-4-19 00:33:34

顶楼主!

411412 发表于 2016-4-19 08:46:37

楼主很强大,想学四轴一直没有时间,留个脚印,有时间了再学。

759648442@qq.co 发表于 2016-4-23 15:53:45

原来买过一个6050 ,不过用一段时间之后,有一个轴莫名其妙的一直在加角度,问下楼主您知道这种问题是硬件的事还是程序的问题

sup888 发表于 2016-4-23 18:35:55

PID从读书到现在一直没有搞明白过。

wangyj173 发表于 2016-4-23 19:33:58

很好用。。。。。。。。。。。。

videofun 发表于 2016-4-24 00:29:08

谢谢楼主分享!

brentcao 发表于 2016-4-25 18:07:54

楼主在哪家买的啊?做回伸手党哈

R88 发表于 2016-4-26 10:14:27

brentcao 发表于 2016-4-25 18:07
楼主在哪家买的啊?做回伸手党哈

哪家都行,都是一样的。

995971182 发表于 2016-5-4 20:43:42

R88 发表于 2016-4-26 10:14
哪家都行,都是一样的。

可以试一下我们四轴方案板子,发资料给你了解,加995971182

冷月无声 发表于 2016-5-4 20:50:55

mark下,有空回来

fengyunyu 发表于 2016-5-4 22:16:29

匿名四轴做得不错

fengyunyu 发表于 2016-5-4 22:17:00

匿名四轴做得不错

vivi_cq1982 发表于 2016-5-4 23:09:53

收藏,慢慢看

jueenkay 发表于 2016-5-7 22:58:05

mark 一个

ZHW0117 发表于 2016-5-9 17:38:31

能遇到楼主这些资料 我得少走多少弯路啊!谢谢 啊

智慧星 发表于 2017-3-27 10:20:27

谢谢分享,下载下来,学习一下。

nandi 发表于 2017-5-9 20:13:13

这两个开源的用的都是流行的方案,还是比较好上手的

shihezichen 发表于 2017-5-20 20:59:57

Mark, 十分感谢, 这块还是最难的。

liujq74193 发表于 2017-7-3 11:55:31

mark一下,最近很想学习这个
页: [1]
查看完整版本: T宝上淘一个6050模块,学习下四轴程序