搜索
bottom↓
楼主: rovershie

圆点博士微型四轴飞行器开工拉...有钱出钱,没钱出力

  [复制链接]

出0入0汤圆

 楼主| 发表于 2012-12-29 21:13:35 | 显示全部楼层
Andre.Gorz 发表于 2012-12-29 18:48
先支持一下圆点博士,在校大学生来学习呢,下学期也要开始做自己的四轴飞行器了。 ...

寒假就开始啊。

出0入0汤圆

发表于 2012-12-29 21:15:30 | 显示全部楼层
rovershie 发表于 2012-12-29 21:13
寒假就开始啊。

是!寒假我就开始收集资料,不过等到回校我才能开始干,毕竟春节嘛 - - 亲戚朋友都要相聚。。。到时注意力没那么集中咳咳。

出0入0汤圆

 楼主| 发表于 2012-12-29 22:23:19 | 显示全部楼层
圆点博士微型四轴飞行器高清大图(正面):



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-12-29 22:25:02 | 显示全部楼层
圆点博士微型四轴飞行器高清大图(反面):

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-12-30 12:14:44 | 显示全部楼层
期待期待楼主!!

出0入0汤圆

发表于 2012-12-30 15:10:59 | 显示全部楼层
博士到那里买散件呀?

出0入0汤圆

 楼主| 发表于 2012-12-30 15:45:28 | 显示全部楼层
jack3018 发表于 2012-12-30 15:10
博士到那里买散件呀?

从签名进入阿。

出0入0汤圆

 楼主| 发表于 2012-12-30 15:47:12 | 显示全部楼层
圆点博士微型四轴飞行器高清全套图:历时两个月,终于能够拿出可以给大家欣赏的图片。整个制作过程确实很苦,也很烧钱。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-12-30 15:50:25 | 显示全部楼层
要是没有这1000多楼的鼓励,楼主都要坚持不下去了。

出0入0汤圆

发表于 2012-12-30 20:31:06 | 显示全部楼层
rovershie 发表于 2012-12-8 11:16
再多等几天。

...等了这么多天也没看到啊,想着这上面的2.4G天线设计呢,麻烦共享下封装吧

出0入0汤圆

 楼主| 发表于 2012-12-30 21:21:08 | 显示全部楼层
sky_walker 发表于 2012-12-30 20:31
...等了这么多天也没看到啊,想着这上面的2.4G天线设计呢,麻烦共享下封装吧 ...

,要先处理完手头积压的套件订单。你再等等啊。

出0入0汤圆

 楼主| 发表于 2012-12-30 21:22:09 | 显示全部楼层
圆点博士微型四轴飞行器磁力传感器HMC5883L测试数据:

出0入0汤圆

发表于 2012-12-30 21:26:46 | 显示全部楼层
rovershie 发表于 2012-12-30 21:21
,要先处理完手头积压的套件订单。你再等等啊。

好的,谢谢了

出0入0汤圆

 楼主| 发表于 2012-12-30 22:25:26 | 显示全部楼层
本帖最后由 rovershie 于 2012-12-30 22:27 编辑

圆点博士微型四轴飞行器磁力传感器HMC5883L在自测试模式下的测试数据:

1)根据数据手册:
数值+951 左右的将被放置在X和Y 数据输出寄存器中,值+886 左右会放在Z 数据输出寄存器中。

2)在深圳本地的HMC5883L实际测试结果:
X=1260, Y=1192, Z=1177


3)参与活动的论友在湖南的HMC5883L实际测试结果:
X=1315, Y=1243, Z=1239


根据数据手册:

比例因数校准
使用上节SELF TEST OPERATION(自测操作)所述的方法,用户可校准传感器的灵敏度的比例以使相互匹配。
因为装置放置在正偏置模式(或相对的负偏置模式) 对所有三轴都应用了已知的人造磁场,因而数据输出寄
存器中的ADC 测量结果可被用于传感器的比例校准。
同样的,内置自测试程序可以用来定期地补偿由于温度变化而带来的比例误差。通过将自测试的数据输出与
在已知的温度下得到的数据进行比较,可以找到一个补偿因数。例如,如果室温下自测试数据输出是1130,
而在当前温度下数据输出是1150,那么(1130/1150)的比例因子应该应用于所有当前的磁场读数中。使用
这种方式无须用到温度传感器。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-12-30 23:09:49 | 显示全部楼层
两套四轴焊接完成,测试一切正常

C版散件的网友注意下5883处丝印,有轻微上焊盘,焊接时最好用小刀修改下,我刚开始没注意,重新焊了一次

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-12-31 00:20:18 | 显示全部楼层
博士焊好了,我报名要一套

出0入0汤圆

 楼主| 发表于 2012-12-31 00:45:09 | 显示全部楼层
liliuqun 发表于 2012-12-30 23:09
两套四轴焊接完成,测试一切正常

C版散件的网友注意下5883处丝印,有轻微上焊盘,焊接时最好用小刀 ...

很漂亮。

出0入0汤圆

 楼主| 发表于 2012-12-31 00:46:47 | 显示全部楼层
johnsonzzd 发表于 2012-12-31 00:20
博士焊好了,我报名要一套

好的。现在就是无线部分要调下。你可以TB先拍下。

===============
圆点博士微型四轴飞行器第四期活动报名快要结束啦,大家赶快阿(第四期提供焊接好的全部套件)。为了答谢大家的帮忙,在论坛报名的参加第四期活动的套件有优惠活动啊。
目前已经报名的坛友有:
bamsb/sjhk /sxljm888/luckyluke/niba /js200300953/gaoheng0906/K.O.Carnivist/flywings /jiangtc/CDWJ/zhuml2012/lylvcongyi/johnsonzzd

圆点博士微型四轴飞行器所提供的套件包括:
1)小四轴飞行器套件
2)  PC端USB遥控器套件
3)电源板(含STM32 SWD下载线)

出0入0汤圆

 楼主| 发表于 2012-12-31 01:25:13 | 显示全部楼层
Mark一下:原来STM32的int是32位的,差点搞错。

typedef unsigned          char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;
typedef unsigned       __int64 uint64_t;

出0入0汤圆

发表于 2012-12-31 09:12:42 来自手机 | 显示全部楼层
rovershie 发表于 2012-12-31 01:25
Mark一下:原来STM32的int是32位的,差点搞错。

typedef unsigned          char uint8_t;

咦int不是signed的么?

出0入0汤圆

发表于 2012-12-31 11:07:19 | 显示全部楼层
rovershie 发表于 2012-12-31 01:25
Mark一下:原来STM32的int是32位的,差点搞错。

typedef unsigned          char uint8_t;

这个不用自己定义啊,用#include <stdint.h>

出0入0汤圆

发表于 2012-12-31 13:06:05 | 显示全部楼层
有点意思。没有人考虑用nios吗?

出0入0汤圆

 楼主| 发表于 2012-12-31 21:53:35 | 显示全部楼层
nengtiansh 发表于 2012-12-31 13:06
有点意思。没有人考虑用nios吗?

NOIS? FPGA里面包的ARM?

出0入0汤圆

 楼主| 发表于 2012-12-31 22:17:12 | 显示全部楼层
本帖最后由 rovershie 于 2012-12-31 22:19 编辑

圆点博士微型四轴飞行器“小四轴圈圈”活动:
活动内容:大家积极提供自己的飞行固件(编译后的hex文件),楼主会亲自测试这些hex,然后给大家下载。

到时候大家一定要积极提供自己的成果,供大家欣赏阿!!!!

出0入0汤圆

 楼主| 发表于 2012-12-31 23:06:46 | 显示全部楼层
在三角函数中,两个参数的函数atan2是正切函数的一个变种。对于任意不同时等于0的实参数x和y,atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度度。当y>0时,射线与x轴正方向的所得的角的角度指的是x轴正方向绕逆时针方向到达射线旋转的角的角度;而当y<0时,射线与x轴正方向所得的角的角度指的是x轴正方向绕顺时针方向达到射线旋转的角的角度。

出0入0汤圆

 楼主| 发表于 2013-1-1 12:12:58 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-1 13:38 编辑

今天我们来谈MPU6040加速度的自我测试:
先看数据手册:
7.12 Self-Test
Self-test allows for the testing of the mechanical and electrical portions of the sensors. The self-test for each
measurement axis can be activated by controlling the bits of the Gyro and Accel control registers.
When self-test is activated, the electronics cause the sensors to be actuated and produce an output signal.
The output signal is used to observe the self-test response.
The self-test response is defined as follows:
Self-test response = Sensor output with self-test enabled – Sensor output without self-test enabled
The self-test response for each accelerometer axis is defined in the accelerometer specification table
(Section 6.2). Similarly, for the gyro axes, self test allows the proof masses to be moved equivalent to a predefined
Coriolis force, resulting in a change in sensor output. The self-test response for each gyroscope axis
is defined in the gyroscope specification table (Section 6.1).
For further information regarding the Gyro & Accel control registers, please refer to the MPU-6050 Register
Map and Register Descriptions document.

谷歌翻译:
7.12自检
自检允许传感器的机械和电气部分的测试。为每个该自检
测量轴控制的陀螺仪和加速度控制寄存器的位可以被激活。
当自检被激活时,电子导致被致动的传感器,并产生一个输出信号。
的输出信号被用来观察自检响应。
自检响应被定义为如下:
自检响应具有自检功能的传感器的输出 - 传感器的输出未启用自我测试
自检响应被定义为每个加速度计的轴中的加速度计规格表
(6.2节)。类似地,对于陀螺仪轴,自检允许证明群众被移动相当于一个预定义的
科里奥利力,导致在传感器输出的变化。自检响应为每个陀螺仪轴
中定义的陀螺仪规格表(第6.1节)。
的陀螺仪和加速度控制寄存器的详细信息,请参阅MPU-6050的注册
地图和寄存器说明文件。

出0入0汤圆

 楼主| 发表于 2013-1-1 12:19:29 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-1 13:52 编辑

圆点博士微型四轴飞行器MPU6050的自我测试图:

圆点博士微型四轴飞行器MPU6050在非自我测试模式下的加速度读数:36mg,9mg, 958mg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-1 12:22:00 | 显示全部楼层
圆点博士微型四轴飞行器MPU6050的加速度校正图:

圆点博士微型四轴飞行器MPU6050在有校正下的加速度读数:607mg,561mg, 1554mg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-1 12:28:39 | 显示全部楼层
根据数据手册公式:
Self-test response = Sensor output with self-test enabled – Sensor output without self-test enabled

Self-test response =607mg-36mg=571mg
Self-test response =561mg-(- 9mg) =570mg
Self-test response =1554mg-958mg=596mg

从而可知,该次测试下MPU6050的重力加速度自我测试响应在570-596之间。

根据MPU6050数据手册:Self-test response数值在300mg到950mg之间。

实验说明:圆点博士微型四轴飞行器完美通过MPU6050重力加速度数据校正。






出0入0汤圆

 楼主| 发表于 2013-1-1 13:42:48 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-1 13:45 编辑

继续来谈圆点博士微型四轴飞行器MPU6040陀螺仪的自我测试:

圆点博士微型四轴飞行器MPU6050陀螺仪的自我测试模式下的读数:45.2度每秒,-45.8度每秒,46.1度每秒


圆点博士微型四轴飞行器MPU6050陀螺仪在非自我测试模式下的读数:1.1度每秒,-1.6度每秒,-1.0度每秒

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-1 13:50:10 | 显示全部楼层
根据数据手册公式:
Self-test response = Sensor output with self-test enabled – Sensor output without self-test enabled

Self-test response =45.2度每秒-1.1度每秒=44.1度每秒
Self-test response =-45.8度每秒-(-1.6度每秒) =-44.2度每秒
Self-test response =46.1度每秒-(-1.0度每秒)=47.1度每秒

根据MPU6050数据手册:Self-test response数值X,Z轴在10到105之间,Y轴在-10到-105之间

实验说明:圆点博士微型四轴飞行器完美通过MPU6050陀螺仪数据自我测试。

出0入0汤圆

 楼主| 发表于 2013-1-1 17:06:33 | 显示全部楼层
圆点博士微型四轴飞行器电机堵转的问题:

我们先来看电机电流参数:
1)额定电压: 直流3.7V
2)  空载电流: 130mA (最大)
3)负载电流: 1300mA(最大)
4)  堵转电流: 3100mA(最小)

也就是说,如果电机的浆给草或者其它东西缠住,那么它的电流高达 4*3.1A=12.4A.
当我们使用25C 400mA的电池的时候,它能提供不小于10A的电流。

由于圆点博士微型四轴飞行器的开关具有一定保险丝的作用,在高于10A的电流下,可能会烧坏开关,导致小四轴无法通电。

出0入0汤圆

发表于 2013-1-2 09:57:43 | 显示全部楼层
博士先生,你的上位机是用什么软件写的?

出0入0汤圆

发表于 2013-1-2 19:04:31 | 显示全部楼层
我也想加入。
我有意写控制程序,目前在学STM32。
建议用锂聚合电池,电调和无刷电机,只是建议。

出0入0汤圆

发表于 2013-1-2 20:01:13 | 显示全部楼层
jskb 发表于 2013-1-2 19:04
我也想加入。
我有意写控制程序,目前在学STM32。
建议用锂聚合电池,电调和无刷电机,只是建议。 ...

这个是小四轴啊!

出0入0汤圆

 楼主| 发表于 2013-1-3 00:31:08 | 显示全部楼层
ICPACHONG 发表于 2013-1-2 09:57
博士先生,你的上位机是用什么软件写的?

用VB写的,调用VC库函数。

出0入0汤圆

 楼主| 发表于 2013-1-3 00:33:01 | 显示全部楼层
jskb 发表于 2013-1-2 19:04
我也想加入。
我有意写控制程序,目前在学STM32。
建议用锂聚合电池,电调和无刷电机,只是建议。 ...

收到!因为是小四轴,所以暂时使用有刷电机。

============
圆点博士微型四轴飞行器第四期活动报名快要结束啦,大家赶快阿(第四期提供焊接好的全部套件)。为了答谢大家的帮忙,在论坛报名的参加第四期活动的套件有优惠活动啊。
目前已经报名的坛友有:
bamsb/sjhk /sxljm888/luckyluke/niba /js200300953/gaoheng0906/K.O.Carnivist/flywings /jiangtc/CDWJ/zhuml2012/lylvcongyi/johnsonzzd/skb

圆点博士微型四轴飞行器所提供的套件包括:
1)小四轴飞行器套件
2)  PC端USB遥控器套件
3)电源板(含STM32 SWD下载线)

出0入0汤圆

发表于 2013-1-3 19:27:44 | 显示全部楼层
今天板子到了,还没去拿。这几天在家考虑焊接好的调试问题,用USB接口要写驱动和上位机。用STM32虚拟串口,板子上的串口引脚都被占用了。就是不晓得STM32的USB端口被虚拟成串口后,原来那个串口的引脚是否就不能用作其他用途了(也就是是否USB和被虚拟的串口是否同时都有数据输出),请知道的高人解答下。

出0入0汤圆

发表于 2013-1-3 22:08:39 | 显示全部楼层
pp786702237 发表于 2012-11-21 15:36
传。。。得慢啊

标记,想学这咚咚,挺神奇的!

出0入0汤圆

发表于 2013-1-3 22:14:59 | 显示全部楼层
我也想加入,但是对STM32很陌生,博士您看行吗?

出0入0汤圆

 楼主| 发表于 2013-1-3 22:26:13 | 显示全部楼层
jack3018 发表于 2013-1-3 19:27
今天板子到了,还没去拿。这几天在家考虑焊接好的调试问题,用USB接口要写驱动和上位机。用STM32虚拟串口, ...

STM32虚拟串口 要同时用掉USB口和串口吧。小四轴上有拉 串口 出来的,你也可以先用那个 串口 调试

出0入0汤圆

 楼主| 发表于 2013-1-3 22:29:40 | 显示全部楼层
请叫我全名 发表于 2013-1-3 22:14
我也想加入,但是对STM32很陌生,博士您看行吗?

STM32不是很难的。跟51差不多。其实单片机编程,只要会一种,其他的很快就能会。比如楼主自己就会 51核的, PIC核的, STM32, ARM7的。。。。 哪个芯片合适就用那个。

出0入0汤圆

发表于 2013-1-3 22:37:05 | 显示全部楼层
一直潜水关注中......

出0入0汤圆

 楼主| 发表于 2013-1-3 22:49:00 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-3 23:12 编辑

圆点博士小四轴出厂测试固件:

bs001_main_no_st:正常测试模式固件
bs001_main_with_st:自我测试模式固件
bs001_ctrl: USB遥控器
flighter_V10:USB遥控器上位机软件

上位机软件界面:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-3 23:01:05 | 显示全部楼层
哎,郁闷阿,搞坏了几片HMC5883L,Z轴没有读数,不是0,就是-1,要不就是4096。 导致要推迟给已经订购的第四期活动的坛友的发货。
楼主在这里对你们表示深深的歉意:让你们久等了!!!

没有你们的支持,楼主坚持不下去了。调试,检查,补焊这些过程苦啊!!!! 楼主平时只是在电脑前画画图,写写程序的。 元旦这三天没休息,本来以为能把这些积压的订单全部发出去的。没想到出现这样的事情。

套件这2天要返厂补焊HMC5883L, 又要大家多等几天了。楼主再次对各位表示深深歉意。

出0入0汤圆

发表于 2013-1-3 23:56:05 | 显示全部楼层
博士,第一版的那个47uF贴片电容是什么封装啊?

出0入0汤圆

 楼主| 发表于 2013-1-4 00:00:07 | 显示全部楼层
create 发表于 2013-1-3 23:56
博士,第一版的那个47uF贴片电容是什么封装啊?

那个是坦电容。3.6mmx2.9mm

出0入0汤圆

 楼主| 发表于 2013-1-4 00:08:09 | 显示全部楼层
贴片钽电容封装、尺寸:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-4 00:09:08 | 显示全部楼层
看起来应该是B:  3528 (3.5mmx2.8mm)

出0入0汤圆

发表于 2013-1-4 08:32:23 | 显示全部楼层
顶一个!

出0入0汤圆

 楼主| 发表于 2013-1-4 11:59:33 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-4 21:15 编辑

再次提醒下大家: 收到套件的,请大家根据该图片安装电机. 这样出来的固件大家可以通用:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-4 13:33:19 来自手机 | 显示全部楼层
jack3018 发表于 2013-1-3 19:27
今天板子到了,还没去拿。这几天在家考虑焊接好的调试问题,用USB接口要写驱动和上位机。用STM32虚拟串口, ...

虚拟串口是usb外设,和串口外设是不影响的啊。虚拟串口是要写一个软件的fifo然后走usb包的

出0入0汤圆

 楼主| 发表于 2013-1-4 21:17:13 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-4 21:33 编辑

下面说下电源板: 如果烧录电源板上的SWD:
首先准备好V8. 然后飞出 VREF, SWCLK, SDATA, GND四根线。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-4 22:46:55 | 显示全部楼层
K.O.Carnivist 发表于 2013-1-4 13:33
虚拟串口是usb外设,和串口外设是不影响的啊。虚拟串口是要写一个软件的fifo然后走usb包的 ...

小四轴板子上的串口1的RX被定义为传感器中断,TX没有连接。如果我将串口1虚拟到USB口上去,在程序中是向串口1发送数据随后被传送到USB口上发送出去。那么串口1上是不是也会出现和USB上一样的数据。我看别人的列程上在虚拟串口时都配置了串口引脚和初始化了串口硬件。如果是这样会影响到传感器中断。板子焊好后实验一下,看看是不是这样的。

出0入0汤圆

 楼主| 发表于 2013-1-4 22:50:29 | 显示全部楼层
jack3018 发表于 2013-1-4 22:46
小四轴板子上的串口1的RX被定义为传感器中断,TX没有连接。如果我将串口1虚拟到USB口上去,在程序中是向 ...

你不如简单点,用遥控器板的COM口,遥控器和小四轴 NRF通讯。

出0入0汤圆

发表于 2013-1-5 00:30:53 | 显示全部楼层
jack3018 发表于 2013-1-4 22:46
小四轴板子上的串口1的RX被定义为传感器中断,TX没有连接。如果我将串口1虚拟到USB口上去,在程序中是向 ...

哦那是会从USART1上接收到这个值
不读出这个值就不能送到USB发送的程序啊

出0入0汤圆

发表于 2013-1-5 11:38:57 | 显示全部楼层
xuan.utopia 发表于 2012-10-31 18:55
在这里标记。想获得的是焊好的板子。。和原件。。付费就行。。程序自己来好了。。。。 ...

我们想参与,可以出钱,条件是得到电调的电路图和 飞控板的原理图和代码,以及这方面的高手进行下一步深入合作,我的qq 24453405,请楼主联系我。

出0入0汤圆

 楼主| 发表于 2013-1-5 11:59:51 | 显示全部楼层
mika米卡 发表于 2013-1-5 11:38
我们想参与,可以出钱,条件是得到电调的电路图和 飞控板的原理图和代码,以及这方面的高手进行下一步深 ...

飞控板的原理图是开源的。基本的操作代码也是开源的,你看前面帖子就可以啊。

出0入0汤圆

发表于 2013-1-5 13:29:01 | 显示全部楼层
rovershie 发表于 2013-1-5 11:59
飞控板的原理图是开源的。基本的操作代码也是开源的,你看前面帖子就可以啊。  ...

问题我要的不是“基本的操作代码”,而是能根据实际情况调试和修改代码的人和商品化的代码,希望能有商业合作,请加我qq 24453405 详聊

出0入0汤圆

 楼主| 发表于 2013-1-5 14:15:50 | 显示全部楼层
mika米卡 发表于 2013-1-5 13:29
问题我要的不是“基本的操作代码”,而是能根据实际情况调试和修改代码的人和商品化的代码,希望能有商业 ...

没有商业化计划,忙,没时间

出0入0汤圆

发表于 2013-1-5 14:49:50 | 显示全部楼层
关注这个四轴很久啦,今天总算注册上了
持续关注中

出0入0汤圆

 楼主| 发表于 2013-1-6 10:32:10 | 显示全部楼层
zxchzy 发表于 2013-1-5 14:49
关注这个四轴很久啦,今天总算注册上了
持续关注中

欢迎加入!

出0入0汤圆

 楼主| 发表于 2013-1-6 14:02:05 | 显示全部楼层
大家有进度吗?焊接进度也可以啊。

出0入0汤圆

 楼主| 发表于 2013-1-6 21:33:43 | 显示全部楼层
圆点博士微型四轴飞行器重要通知:在小批量过程中,由于HMC5883L焊接问题而引起小四轴的成品率偏低。因而楼主决定在圆点博士微型四轴飞行器成品中取消HMC5883L.
1)HMC5883L不是小四轴必须的器件
2)HMC5883L焊接比较困难
3)HMC5883L在维修过程中容易损坏,主要表现为Z轴读不出来数。

不过,PCB上还是保留HMC5883L的位置,方便焊接技术高超的坛友自己焊接。


出0入0汤圆

发表于 2013-1-6 22:11:52 | 显示全部楼层
今天我的5883突然从板子上面掉下来了

出0入0汤圆

 楼主| 发表于 2013-1-6 22:28:07 | 显示全部楼层
binham 发表于 2013-1-6 22:11
今天我的5883突然从板子上面掉下来了

这东西焊接确实难搞。 想了不少方法提高成品率,焊接稍微好点了,可惜人家容易坏。风枪多吹下,可能就会坏某个轴。

出0入0汤圆

发表于 2013-1-6 23:47:09 | 显示全部楼层
今天焊接好小四轴后用JLINK连接调试,发现连不上,最后在大家的帮助下解决了。在这里贴出来提醒下大家。有的JLINK必须要检测到板上电压才能连接。所以需要连接一个3.3V电压给JLINK的1脚。我的JLINK上2脚正好是3.3V。把这连个脚短接就OK了。大家在使用这招的时候要测量下2脚的电压是否和你的板子工作电压一样,有的是5V的,不能弄错了。具体的内容请看这里:http://www.amobbs.com/thread-5362506-1-1.html

出0入0汤圆

 楼主| 发表于 2013-1-7 16:30:07 | 显示全部楼层
jack3018 发表于 2013-1-6 23:47
今天焊接好小四轴后用JLINK连接调试,发现连不上,最后在大家的帮助下解决了。在这里贴出来提醒下大家。有 ...

记得上图片啊。
楼主被HMC5883L伤到,士气低落啊。估计要解决这个焊接问题,要投资一笔money才行。让希望拿到完整套件的坛友失望了。。。

出0入0汤圆

发表于 2013-1-7 16:46:17 | 显示全部楼层
5883就是焊好也不适用于小四轴,不装电机参数都正常,一装电机杯具了,角度全不对了,开始我还以为源码或硬件哪里出了故障,前几天我郁闷了好几个小时才发现这个问题,结果查啊查........原因找到了。5883受电机的磁场影响输出,拿小电机靠近5883数据变化非常明显。所以小四上面用这个属于摆设,我的飞控板子上面还多了一个BMP085也是个摆设,

出0入0汤圆

发表于 2013-1-7 17:59:55 | 显示全部楼层
rovershie 发表于 2012-12-23 21:24
一天的饭钱不够啊,要一个礼拜阿。  

等大家的平台都好了,就开始飞行算法研究。 这个东 ...

一个礼拜就一个礼拜的。 据说7天是人类忍耐饥饿的极限。

出0入0汤圆

发表于 2013-1-7 18:02:23 | 显示全部楼层
rovershie 发表于 2013-1-7 16:30
记得上图片啊。
楼主被HMC5883L伤到,士气低落啊。估计要解决这个焊接问题,要投资一笔money才行 ...

5883是不是不太适合4轴用哦。

出0入0汤圆

发表于 2013-1-7 18:03:29 | 显示全部楼层
rovershie 发表于 2013-1-3 00:33
收到!因为是小四轴,所以暂时使用有刷电机。

============

菜鸟可以加入么?完全菜。

出0入0汤圆

 楼主| 发表于 2013-1-7 21:06:48 | 显示全部楼层
plc_avr 发表于 2013-1-7 16:46
5883就是焊好也不适用于小四轴,不装电机参数都正常,一装电机杯具了,角度全不对了,开始我还以为源码或硬 ...

在论坛报名的参加第四期活动的坛友:
bamsb/sjhk /sxljm888/luckyluke/niba /js200300953/gaoheng0906/K.O.Carnivist/flywings /jiangtc/CDWJ/zhuml2012/lylvcongyi/johnsonzzd

套件不包括5883L,可以接受吗?不行的话,楼主发不出套件阿。plc_avr兄也觉得装了用处也不大。不装也可以接受的话,楼主就可以满足产能要求。


圆点博士微型四轴飞行器所提供的套件包括:
1)小四轴飞行器套件
2)  PC端USB遥控器套件
3)电源板(含STM32 SWD下载线)

出0入0汤圆

 楼主| 发表于 2013-1-7 21:09:56 | 显示全部楼层
hotibet 发表于 2013-1-7 18:03
菜鸟可以加入么?完全菜。

可以阿,也可以到群多学习。

出0入0汤圆

 楼主| 发表于 2013-1-7 21:10:28 | 显示全部楼层
请叫我全名 发表于 2013-1-3 22:14
我也想加入,但是对STM32很陌生,博士您看行吗?

行啊,欢迎来学习。

出0入0汤圆

 楼主| 发表于 2013-1-7 21:12:28 | 显示全部楼层
在论坛报名的参加第四期活动的坛友:
bamsb/sjhk /sxljm888/luckyluke/niba /js200300953/gaoheng0906/K.O.Carnivist/flywings /jiangtc/CDWJ/zhuml2012/lylvcongyi/johnsonzzd

套件不包括5883L,可以接受吗?不行的话,楼主发不出套件阿。

plc_avr兄也觉得装了用处也不大。不装也可以接受的话,楼主就可以满足产能要求。

引用plc_avr兄的经验:
======================
5883就是焊好也不适用于小四轴,不装电机参数都正常,一装电机杯具了,角度全不对了,开始我还以为源码或硬件哪里出了故障,前几天我郁闷了好几个小时才发现这个问题,结果查啊查........原因找到了。5883受电机的磁场影响输出,拿小电机靠近5883数据变化非常明显。所以小四上面用这个属于摆设,我的飞控板子上面还多了一个BMP085也是个摆设,。

出0入0汤圆

发表于 2013-1-8 09:04:14 | 显示全部楼层
rovershie 发表于 2013-1-7 21:12
在论坛报名的参加第四期活动的坛友:
bamsb/sjhk /sxljm888/luckyluke/niba /js200300953/gaoheng0906/K.O. ...

这玩意不焊接上去是没问题的是吧~~

出0入0汤圆

 楼主| 发表于 2013-1-8 10:58:24 | 显示全部楼层
allanpk716 发表于 2013-1-8 09:04
这玩意不焊接上去是没问题的是吧~~

恩,正在研究的飞行算法,暂时不考虑启用它。

出0入0汤圆

发表于 2013-1-8 11:56:45 | 显示全部楼层
rovershie 发表于 2013-1-7 21:09
可以阿,也可以到群多学习。

那就木有问题了。求加群,求资料。

出0入0汤圆

 楼主| 发表于 2013-1-9 19:38:46 | 显示全部楼层
上传js200300953的小四轴调试视频:
http://v.youku.com/v_show/id_XNDk5NzM2NTM2.html

出0入0汤圆

 楼主| 发表于 2013-1-9 19:52:11 | 显示全部楼层
感谢js200300953的无私奉献,上传了整个程序工程文件,包括各部分的代码和PD算法到群空间。
楼主再次对js200300953对小四轴的贡献表达深深的感谢。希望使用该代码进行改进的后来者继续发扬开源精神。

出0入0汤圆

 楼主| 发表于 2013-1-9 20:22:34 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-9 20:25 编辑

坛友js200300953提供的圆点博士小四轴源程序所使用的通讯协议。源程序所使用的算法请参考 js200300953 的博客。
http://blog.sina.com.cn/js200300953 (贴上博客地址,博客包含算法讨论的很多精华,希望莫老大放行)

--------------------------------------------------------------
协议版本:0(调试)
帧类型:
    0x01 => 返回四元数姿态,参数:wxyz,4个32位浮点数。
    0x02 => 加速度计、罗盘校正,参数:xyz,3个浮点数。
    0x03 => 周期时间标记,没有参数。
    0x04 => 返回位置,参数:xyz,3个32位浮点数。
    0x05 => 设定目标姿态,参数:wxyz,4个32位浮点数。
    0x06 => 获取四元数姿态,无参数。
    0x07 => ping发送、心跳信号发送。
    0x08 => ping回应、心跳信号回应。
    0x09 => 获取位置,无参数。
    0x0A => 获取姿态角,无参数。
    0x0B => 返回姿态角,参数:[yaw(z),pitch(y),roll(x)],
            弧度,3个32位浮点数。
    0x0C => 动作-锁定姿态-当前姿态设为目标姿态。
    0x0D => 动作-锁定姿态-把当前姿态旋转一段时间然后恢复。
            参数:wxyzt,wxyz为4个32位浮点数,低字节在前,
            是世界坐标系的旋转。
            t为16位无符号数,低字节在前,单位:ms。
    0x0E => 动作-锁定姿态-设置油门基础值,
            参数:throttle,1个32浮点数,低字节在前,[0,1]。
    0x0F => 设置参数,参数:which+value。
            value是32位低字节在前的浮点数。
            which为8位无符号数。
            which=0x01,设置控制P参数。
            which=0x02,设置控制D参数。
            which=0x03,设置控制I参数。
    0x10 => 获取参数,参数:which,同上。
    0x11 => 返回参数,参数:which+value,同上。
    0x12 => 设置控制模式。参数:mode,1字节。
            mode=0x01,锁定油门模式。
            mode=0x02,锁定姿态模式。
    0x13 => 动作-锁定油门-设置油门。
            参数:th[4],四个电机的油门值,32位浮点数,[0,1]。
    0x14 => 获取xyz向量,参数:type,8位无符号整数,取值如下。
            type=0x01,加速度计原始值,
            type=0x02,加速度计校正值,
            type=0x03,陀螺仪原始值,
            type=0x04,陀螺仪校正值,
            type=0x05,罗盘原始值,
            type=0x06,罗盘校正值,
    0x15 => 返回xyz向量,参数:type+xyz。
            type为向量类型,取值同上;
            xyz为向量,32位浮点数,低字节在前。
    0x16 => 示波器,参数channel+value[]。
            chanel:uint8_t,通道号。
            value[]:通道值,对应通道号由channel开始递增。
    0x17 => 锁定姿态-设置目标姿态。
            参数:wxyzt,wxyz为4个32位浮点数,低字节在前,
            是世界坐标系的旋转。
    0x18 => 获取状态。参数:which[],uint8_t数组,
            表示需要获取的参数,取值如下:
            which=0x01,电池电压。
            which=0x02,当前电机油门值。
    0x19 => 返回状态。参数:which+value,which指定状态。
            value为状态值,根据不同类型不同。
            which=0x01,电池电压,value为float。
            which=0x02,当前电机油门值,value为float[4]。

出0入0汤圆

 楼主| 发表于 2013-1-9 22:57:00 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-9 23:22 编辑

圆点博士微型四轴飞行器参考源代码之 ----- 读取锂电池电压源码。

该代码由坛友js200300953提功,并在圆点博士微型四轴飞行器上测试通过
=================================================


// bsp/battery.c
// 2013-1-8 9:59:34
// js200300953
//博客: blog.sina.com.cn/js200300953

#include "stm32f10x.h"
#include "battery.h"

static volatile int16_t battery_voltage = 0;

void battery_init(void)
{
    //
    // 针脚配置。
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    //
    // 配置DMA。
    DMA_DeInit(DMA1_Channel1);
    DMA_InitTypeDef DMA_InitStructure;
    DMA_InitStructure.DMA_PeripheralBaseAddr    = (uint32_t)&(ADC1->DR);
    DMA_InitStructure.DMA_MemoryBaseAddr        = (uint32_t)&battery_voltage;
    DMA_InitStructure.DMA_DIR                   = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize            = 1;
    DMA_InitStructure.DMA_PeripheralInc         = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc             = DMA_MemoryInc_Disable;
    DMA_InitStructure.DMA_PeripheralDataSize    = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize        = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode                  = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority              = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M                   = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1,&DMA_InitStructure);
    DMA_Cmd(DMA1_Channel1,ENABLE);
    //
    // 配置ADC。
    ADC_InitTypeDef ADC_InitStructure;
    ADC_InitStructure.ADC_Mode                  = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode          = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode    = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv      = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign             = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel          = 1;
    ADC_Init(ADC1, &ADC_InitStructure);
    //
    // 连接并启动DMA和ADC。
    ADC_RegularChannelConfig(ADC1, ADC_Channel_9,1,ADC_SampleTime_239Cycles5);
    ADC_DMACmd(ADC1, ENABLE);
    ADC_Cmd(ADC1, ENABLE);
    //
    // 较正ADC。
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));
    //
    // 触发ADC,开始采样。
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

float battery_getVoltage(void)
{
    // 12位分辨率,3.3V基准电压。
    return battery_voltage*(3.3/(1<<(12-1)));
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-9 22:58:29 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-9 23:25 编辑

圆点博士微型四轴飞行器参考源代码之 ----- 点亮LED源码。

该代码由坛友js200300953提功,并在圆点博士微型四轴飞行器上测试通过
==============================================


// bsp/led.c
// 2013-1-7 13:12:46
// js200300953
//博客: blog.sina.com.cn/js200300953

#include "led.h"
#include "stm32f10x.h"

void led_init(void);
void led_on(void);
void led_off(void);
void led_reverse(void);

void led_init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    GPIO_SetBits(GPIOA,GPIO_Pin_15);
}

void led_on(void)
{
    GPIO_ResetBits(GPIOA,GPIO_Pin_15);
}

void led_off(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_15);
}

void led_reverse(void)
{
    GPIOA->ODR ^= GPIO_Pin_15;
}

出0入0汤圆

发表于 2013-1-9 23:00:31 | 显示全部楼层
支持楼主,但是没那个水平

出0入0汤圆

 楼主| 发表于 2013-1-9 23:02:35 | 显示全部楼层
圆点博士微型四轴飞行器参考源代码之 ----- I2C源码。

该代码由坛友js200300953和wangjt1988共同提功,并在圆点博士微型四轴飞行器上测试通过
==============================================

//#include "STM32_I2C.h"
#include "stm32f10x.h"

#define false 0
#define true  1

#define SCL_PIN GPIO_Pin_6
#define SDA_PIN GPIO_Pin_7

#define SCL_H         GPIOB->BSRR = SCL_PIN /* GPIO_SetBits(GPIOB , GPIO_Pin_10)   */
#define SCL_L         GPIOB->BRR  = SCL_PIN /* GPIO_ResetBits(GPIOB , GPIO_Pin_10) */

#define SDA_H         GPIOB->BSRR = SDA_PIN /* GPIO_SetBits(GPIOB , GPIO_Pin_11)   */
#define SDA_L         GPIOB->BRR  = SDA_PIN /* GPIO_ResetBits(GPIOB , GPIO_Pin_11) */

#define SCL_read      GPIOB->IDR  & SCL_PIN /* GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_10) */
#define SDA_read      GPIOB->IDR  & SDA_PIN /* GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_11) */

static void I2C_delay(void)
{
    volatile int i = 7;
    while (i)
        i--;
}

static int32_t I2C_Start(void)
{
    SDA_H;
    SCL_H;
    I2C_delay();
    if (!SDA_read)
        return false;
    SDA_L;
    I2C_delay();
    if (SDA_read)
        return false;
    SDA_L;
    I2C_delay();
    return true;
}

static void I2C_Stop(void)
{
    SCL_L;
    I2C_delay();
    SDA_L;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SDA_H;
    I2C_delay();
}

static void I2C_Ack(void)
{
    SCL_L;
    I2C_delay();
    SDA_L;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SCL_L;
    I2C_delay();
}

static void I2C_NoAck(void)
{
    SCL_L;
    I2C_delay();
    SDA_H;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SCL_L;
    I2C_delay();
}

static int32_t I2C_WaitAck(void)
{
    SCL_L;
    I2C_delay();
    SDA_H;
    I2C_delay();
    SCL_H;
    I2C_delay();
    if (SDA_read) {
        SCL_L;
        return false;
    }
    SCL_L;
    return true;
}

static void I2C_SendByte(uint8_t byte)
{
    uint8_t i = 8;
    while (i--) {
        SCL_L;
        I2C_delay();
        if (byte & 0x80)
            SDA_H;
        else
            SDA_L;
        byte <<= 1;
        I2C_delay();
        SCL_H;
        I2C_delay();
    }
    SCL_L;
}

static uint8_t I2C_ReceiveByte(void)
{
    uint8_t i = 8;
    uint8_t byte = 0;

    SDA_H;
    while (i--) {
        byte <<= 1;
        SCL_L;
        I2C_delay();
        SCL_H;
        I2C_delay();
        if (SDA_read) {
            byte |= 0x01;
        }
    }
    SCL_L;
    return byte;
}

void i2cInit(void)
{
    GPIO_InitTypeDef gpio;

    gpio.GPIO_Pin = SCL_PIN | SDA_PIN;
    gpio.GPIO_Speed = GPIO_Speed_2MHz;
    gpio.GPIO_Mode = GPIO_Mode_Out_OD;
    GPIO_Init(GPIOB, &gpio);
}

int32_t i2cWriteBuffer(uint8_t addr, uint8_t reg, uint8_t len, uint8_t * data)
{
    int i;
    if (!I2C_Start())
        return false;
    I2C_SendByte(addr << 1 | I2C_Direction_Transmitter);
    if (!I2C_WaitAck()) {
        I2C_Stop();
        return false;
    }
    I2C_SendByte(reg);
    I2C_WaitAck();
    for (i = 0; i < len; i++) {
        I2C_SendByte(data[i]);
        if (!I2C_WaitAck()) {
            I2C_Stop();
            return false;
        }
    }
    I2C_Stop();
    return true;
}

int32_t i2cWrite(uint8_t addr, uint8_t reg, uint8_t data)
{
    if (!I2C_Start())
        return false;
    I2C_SendByte(addr << 1 | I2C_Direction_Transmitter);
    if (!I2C_WaitAck()) {
        I2C_Stop();
        return false;
    }
    I2C_SendByte(reg);
    I2C_WaitAck();
    I2C_SendByte(data);
    I2C_WaitAck();
    I2C_Stop();
    return true;
}

int32_t i2cRead(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf)
{
    if (!I2C_Start())
        return false;
    I2C_SendByte(addr << 1 | I2C_Direction_Transmitter);
    if (!I2C_WaitAck()) {
        I2C_Stop();
        return false;
    }
    I2C_SendByte(reg);
    I2C_WaitAck();
    I2C_Start();
    I2C_SendByte(addr << 1 | I2C_Direction_Receiver);
    I2C_WaitAck();
    while (len) {
        *buf = I2C_ReceiveByte();
        if (len == 1)
            I2C_NoAck();
        else
            I2C_Ack();
        buf++;
        len--;
    }
    I2C_Stop();
    return true;
}

uint16_t i2cGetErrorCounter(void)
{
    // TODO maybe fix this, but since this is test code, doesn't matter.
    return 0;
}

出0入0汤圆

 楼主| 发表于 2013-1-9 23:05:09 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-9 23:10 编辑

圆点博士微型四轴飞行器参考源代码之 ----- 读取MPU6050。

该代码由坛友js200300953提功,并在圆点博士微型四轴飞行器上测试通过
=================================================

// bsp/mpu6050.c
// 2013-1-7 18:47:54
// js200300953
//博客: blog.sina.com.cn/js200300953

#include "mpu6050.h"
#include "i2c.h"
#include "time.h"

#define MPU6050_ADDRESS 0xD0
#define MPU6050_REG_RAW_DATA 0x3B
#define MPU6050_REG_ACC 0x3B
#define MPU6050_REG_TEM 0x41
#define MPU6050_REG_GYR 0x43

const static float MPU6050_ACC_OFFSET[3] =
{
    -24.161 ,
    -30.1335,
    281.5   ,
};
const static float MPU6050_ACC_GAIN[3] =
{
    0.00240318,
    0.00237744,
    0.00238118,
};
const static float MPU6050_GYR_OFFSET[3] =
{
    0,
    0,
    0,
};
const static float MPU6050_GYR_GAIN[3] =
{
    0.00106f,
    0.00106f,
    0.00106f,
};

static struct
{
    int16_t acc[3];
    int16_t tem;
    int16_t gyr[3];
}mpu6050_rawData;

int32_t mpu6050_init(void);
int32_t mpu6050_isDataReady(void);
int32_t mpu6050_read(void);
int32_t mpu6050_getRawAcc(int16_t acc[3]);
int32_t mpu6050_getRawGyr(int16_t gyr[3]);
int32_t mpu6050_getCalibratedAcc(float acc[3]);
int32_t mpu6050_getCalibratedGyr(float gyr[3]);

int32_t mpu6050_init(void)
{
    for(int i=0;i<sizeof(mpu6050_rawData);i++)
        ((uint8_t *)&mpu6050_rawData) = 0;
    //
    // 检查ID。
    uint8_t id = 0;
    if(i2c_read(MPU6050_ADDRESS,0x75,&id,1) != 0)
        return MPU6050_FAILED;
    if(id != 0x68)
        return MPU6050_FAILED;
    //
    // 设置MPU6050的参数。
    const uint8_t param[][2] =
    {
        // {寄存器地址,寄存器值},
        {0x6B,1     }, // 退出睡眠模式,设取样时钟为陀螺X轴。
        {0x19,4     }, // 取样时钟4分频,1k/4,取样率为25Hz。
        {0x1A,2     }, // 低通滤波,截止频率100Hz左右。
        {0x1B,3<<3  }, // 陀螺量程,2000dps。
        {0x1C,2<<3  }, // 加速度计量程,8g。
        {0x37,0x32  }, // 中断信号为高电平,推挽输出,直到有读取操作才消失,直通辅助I2C。
        {0x38,1     }, // 使用“数据准备好”中断。
        {0x6A,0x00  }, // 不使用辅助I2C。
    };
    for(int i=0;i<sizeof(param)/2;i++)
    {
        if(i2c_write(MPU6050_ADDRESS,param[0],&(param[1]),1) != 0)
            return MPU6050_FAILED;
        //
        uint8_t check = 0;
        if(i2c_read(MPU6050_ADDRESS,param[0],&check,1) != 0)
            return MPU6050_FAILED;
        if(check != param[1])
            return MPU6050_FAILED;
    }
    //
    return MPU6050_SUCCEED;
}

int32_t mpu6050_dataIsReady(void)
{
    static uint32_t target = 0;
    uint32_t now = time_nowMs();
    if(target <= now)
    {
        target = now + 3;//333Hz
        //
        return 1;
    }
    return 0;
}

int32_t mpu6050_read(void)
{
    if(i2c_read(MPU6050_ADDRESS,MPU6050_REG_RAW_DATA,&mpu6050_rawData
        ,sizeof(mpu6050_rawData)) != 0)
        return MPU6050_FAILED;
    //
    // 大端转小端。
    uint8_t * p = (uint8_t *)&mpu6050_rawData;
    for(int i=0;i<sizeof(mpu6050_rawData)/2;i++)
    {
        uint8_t tmp = p[2*i];
        p[2*i] = p[2*i + 1];
        p[2*i + 1] = tmp;
    }
    //
    return MPU6050_SUCCEED;
}

// acc : LSB
int32_t mpu6050_getRawAcc(int16_t acc[3])
{
    for(int i=0;i<3;i++)
        acc = mpu6050_rawData.acc;
    //
    return MPU6050_SUCCEED;
}

//gyr : LSB
int32_t mpu6050_getRawGyr(int16_t gyr[3])
{
    for(int i=0;i<3;i++)
        gyr = mpu6050_rawData.gyr;
    //
    return MPU6050_SUCCEED;
}

// acc : m/s²
int32_t mpu6050_getCalibratedAcc(float acc[3])
{
    for(int i=0;i<3;i++)
        acc = (MPU6050_ACC_OFFSET + mpu6050_rawData.acc) * MPU6050_ACC_GAIN;
    //
    return MPU6050_SUCCEED;
}

// gyr : rad/s
int32_t mpu6050_getCalibratedGyr(float gyr[3])
{
    for(int i=0;i<3;i++)
        gyr = (MPU6050_GYR_OFFSET + mpu6050_rawData.gyr) * MPU6050_GYR_GAIN;
    //
    return MPU6050_SUCCEED;
}




出0入0汤圆

 楼主| 发表于 2013-1-9 23:06:43 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-9 23:11 编辑

圆点博士微型四轴飞行器参考源代码之 ----- PWM控制。

该代码由坛友js200300953提功,并在圆点博士微型四轴飞行器上测试通过
==================================================
// bsp/motor.c
// 2013-1-8 11:43:58
// js200300953
//博客: blog.sina.com.cn/js200300953

#include "stm32f10x.h"
#include "motor.h"

#define MOTOR_ARR 72*100        // CCR重装值,用于设定周期,72M/(72*100)==10k。
#define MOTOR_CCR_MIN 0         // 最小油门对应的CCR值。
#define MOTOR_CCR_MAX MOTOR_ARR // 最大油门对应的CCR值。

#define ESC_PSC     (1-1) // 72M分频,1分频。

void motor_init(void)
{
    // 设置GPIO功能。
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    //
    // 复位定时器。
    TIM_DeInit(TIM2);
    //
    // 配置计时器。
    TIM_TimeBaseInitTypeDef param;
    TIM_TimeBaseStructInit(&param);
    param.TIM_Prescaler = ESC_PSC;
    param.TIM_Period = MOTOR_ARR;
    param.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2,&param);
    //
    // 配置PWM。
    TIM_OCInitTypeDef pwmParam;
    TIM_OCStructInit(&pwmParam);
    pwmParam.TIM_OCMode = TIM_OCMode_PWM1;
    pwmParam.TIM_OutputState = TIM_OutputState_Enable;
    pwmParam.TIM_Pulse = MOTOR_CCR_MIN;
    pwmParam.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM2,&pwmParam);
    TIM_OC2Init(TIM2,&pwmParam);
    TIM_OC3Init(TIM2,&pwmParam);
    TIM_OC4Init(TIM2,&pwmParam);
    TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
    //
    // 启动计时器。
    TIM_Cmd(TIM2,ENABLE);
}

void motor_setForce(const float force[4])
{
    uint16_t f[4];
    for(int32_t i=0;i<4;i++)
    {
        if(force < MOTOR_FORCE_MIN)
            f = MOTOR_CCR_MIN;
        else if(force > MOTOR_FORCE_MAX)
            f = MOTOR_CCR_MAX;
        else
            f = (uint16_t)(force * (MOTOR_CCR_MAX - MOTOR_CCR_MIN)) + MOTOR_CCR_MIN;
    }
    //
    TIM_SetCompare1(TIM2,f[2]);
    TIM_SetCompare2(TIM2,f[3]);
    TIM_SetCompare3(TIM2,f[0]);
    TIM_SetCompare4(TIM2,f[1]);
}

出0入0汤圆

发表于 2013-1-9 23:30:27 | 显示全部楼层
   支持开源。学习了

出0入0汤圆

发表于 2013-1-10 12:24:32 | 显示全部楼层
有程序了 慢慢学习

出0入0汤圆

 楼主| 发表于 2013-1-10 21:48:19 | 显示全部楼层
zxchzy 发表于 2013-1-10 12:24
有程序了 慢慢学习

,看看来给大家解读啊。

出0入0汤圆

发表于 2013-1-10 21:53:31 | 显示全部楼层
管他是啥,先围观再说!

出0入0汤圆

发表于 2013-1-10 22:38:37 | 显示全部楼层
liliuqun 发表于 2012-12-10 15:53
今天我也试了下祼飞,但没成功,电池是1200ma的手机电池,四个电机全开,电机转动一定速度后,程序重启,试 ...

见过的最nb的启动方式 我的学学

出0入0汤圆

 楼主| 发表于 2013-1-10 22:48:27 | 显示全部楼层
Mark下wangjt1988的硬件类似的项目:
http://www.amobbs.com/thread-5515784-1-1.html
开源自己的微型四轴—全套原理图.程序.上位机.欢迎交流

共同研究。hehe

出0入0汤圆

发表于 2013-1-11 10:35:24 | 显示全部楼层
博士 你的电机驱动是用的MOS的什么型号啊

出0入0汤圆

 楼主| 发表于 2013-1-11 10:38:43 | 显示全部楼层
淡定的小笨猪 发表于 2013-1-11 10:35
博士 你的电机驱动是用的MOS的什么型号啊

看线路图和BOM表阿。

出0入0汤圆

发表于 2013-1-11 10:39:48 | 显示全部楼层
rovershie 发表于 2013-1-11 10:38
看线路图和BOM表阿。

BOM 表 我没有找到啊 呵呵

出0入0汤圆

 楼主| 发表于 2013-1-12 00:41:19 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-12 01:12 编辑

圆点博士微型四轴飞行器PCB制板文件版权和免责声明:

本圆点博士微型四轴飞行器PCB制板文件仅为使用者提供参考,而圆点博士不对该PCB制板文件提供任何明示或暗含的担保。
圆点博士不对在使用该PCB制板文件中可能出现的意外或者损失负责,也不对因使用该PCB制板文件而引起的第三方索赔负责。
该PCB制板文件有可能会被随时变更,相关信息的更新恕不另行通知。

该PCB制板文件仅以学习的形式发布,并受版权保护, 未经书面授权, 请勿以商业的目的使用或者修改该PCB制板文件。
圆点博士对该PCB制板文件保留最终解释权。



1. 圆点博士微型四轴飞行器PCB制板文件: 顶层
2. 圆点博士微型四轴飞行器PCB制板文件: 底层
3.圆点博士微型四轴飞行器PCB制板文件: 印丝顶层
4.圆点博士微型四轴飞行器PCB制板文件: 印丝底层
5.圆点博士微型四轴飞行器PCB制板文件:阻焊顶层
6.圆点博士微型四轴飞行器PCB制板文件:阻焊底层
7.圆点博士微型四轴飞行器PCB制板文件:钻孔尺寸层
8.圆点博士微型四轴飞行器PCB制板文件:钻孔层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-12 00:43:23 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-12 00:49 编辑

圆点博士微型四轴飞行器PCB制板文件: 顶层





圆点博士微型四轴飞行器PCB制板文件版权和免责声明:

本圆点博士微型四轴飞行器PCB制板文件仅为使用者提供参考,而圆点博士不对该PCB制板文件提供任何明示或暗含的担保。
圆点博士不对在使用该PCB制板文件中可能出现的意外或者损失负责,也不对因使用该PCB制板文件而引起的第三方索赔负责。
该PCB制板文件有可能会被随时变更,相关信息的更新恕不另行通知。

该PCB制板文件仅以学习的形式发布,并受版权保护, 未经书面授权, 请勿以商业的目的使用或者修改该PCB制板文件。
圆点博士对该PCB制板文件保留最终解释权。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-12 00:43:44 | 显示全部楼层
本帖最后由 rovershie 于 2013-1-12 00:49 编辑

圆点博士微型四轴飞行器PCB制板文件: 底层





圆点博士微型四轴飞行器PCB制板文件版权和免责声明:

本圆点博士微型四轴飞行器PCB制板文件仅为使用者提供参考,而圆点博士不对该PCB制板文件提供任何明示或暗含的担保。
圆点博士不对在使用该PCB制板文件中可能出现的意外或者损失负责,也不对因使用该PCB制板文件而引起的第三方索赔负责。
该PCB制板文件有可能会被随时变更,相关信息的更新恕不另行通知。

该PCB制板文件仅以学习的形式发布,并受版权保护, 未经书面授权, 请勿以商业的目的使用或者修改该PCB制板文件。
圆点博士对该PCB制板文件保留最终解释权。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 15:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表