amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 22731|回复: 131

STM32F103 硬件I2C ADXL345 L3G4200 LSM303 调试成功

  [复制链接]
发表于 2012-8-20 12:49:11 | 显示全部楼层 |阅读模式
本帖最后由 john800422 于 2012-8-20 12:50 编辑

STM32F103之前调试成功了
I2C DMA部分是使用
"相信这是ouravr共享中,目前最完美的STM32读写EEPROM驱动,硬件I2C中断加DMA方式(原创)"
做修改的

目前在制作4轴

打算换成STM32F405
请问有人有成功调试过STM32F4的I2C吗??
试了几个礼拜
模拟I2C 硬件I2C ( 从STM21F1移植 )
都失败

不知道是不是因为是自己焊的关系
是否有人可以提供STM32F4 I2C可运行的程式做测试吗??




本帖子中包含更多资源

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

x
 楼主| 发表于 2012-8-22 00:00:10 | 显示全部楼层
本帖最后由 john800422 于 2012-8-22 00:02 编辑

上传一下STM32F1 ADXL345的完整测试程序

做初始化和ID验证

没有人调试STM32F4的I2C成功过吗??

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-8-27 22:01:29 | 显示全部楼层
wuguoyan 发表于 2012-8-23 21:22
在你下的 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0\Project\STM32F4xx_StdPeriph_Examples\I2C\EEPROM这个就 ...

已经可以了

谢谢~

在这里把官方范例修改后的档案上传

STM32F4 硬件I2C 使用DMA

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-4-17 00:11:52 | 显示全部楼层
本帖最后由 john800422 于 2013-4-17 00:19 编辑
oldbreadman 发表于 2013-4-16 22:19
楼主啊,请教一下你的飞控开发成功了吗?

我也是用的stm32f103rct6+l3g4200d+adxl345,但IMU和PID算法始终 ...


最近要考試和交報告沒什麼時間
所以我就附上我自己的資料, 自己參考吧

------------------------------------------------------
******飛控板
MCU:STM32F405RG
RF:nRF24L01P + PA + LNA
Sensor:L3G4200 + LSM303


******遙控板
MCU:STM32F407VG
RF:nRF24L01P + PA + LNA
TFT:4.3' SSD1963(奮鬥板的4.3")






******四軸
980KV
1045槳
11.1v 25C 2200mAh



四軸目前還需要調整PID

以下是資料
因為是測試, 所以程式還蠻亂的



本帖子中包含更多资源

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

x
发表于 2012-8-20 16:30:46 | 显示全部楼层
想用STM32啊。
 楼主| 发表于 2012-8-21 13:03:35 | 显示全部楼层
js200300953 发表于 2012-8-20 16:30
想用STM32啊。

那就用阿
STM32的资料蛮多的
自学容易
发表于 2012-8-21 16:46:33 | 显示全部楼层
很好~模拟的太低效了~
发表于 2012-8-21 17:00:12 | 显示全部楼层
顶  一下   
发表于 2012-8-22 01:52:28 | 显示全部楼层
绑定一下                                                                                                                                                 
发表于 2012-8-23 12:40:17 来自手机 | 显示全部楼层
楼主好人totally!
 楼主| 发表于 2012-8-23 19:10:51 | 显示全部楼层
lxl_lw 发表于 2012-8-23 12:40
楼主好人totally!


可以正常读取了吗??
发表于 2012-8-23 19:26:56 | 显示全部楼层
请问楼主lsm303如何手工焊  我焊hmc5883焊坏了三块板子的焊盘了
发表于 2012-8-23 19:34:37 | 显示全部楼层
STM32F4和F1的I2C有点不一样的,ST对I2C改进过,可以参照库里面自带的例程~
 楼主| 发表于 2012-8-23 21:07:43 | 显示全部楼层
40342zz 发表于 2012-8-23 19:26
请问楼主lsm303如何手工焊  我焊hmc5883焊坏了三块板子的焊盘了

lsm303是买焊好的
 楼主| 发表于 2012-8-23 21:18:09 | 显示全部楼层
wuguoyan 发表于 2012-8-23 19:34
STM32F4和F1的I2C有点不一样的,ST对I2C改进过,可以参照库里面自带的例程~


ST官方的F4例程
除了CPAL的之外
找不到其他I2C的...

是否提供明确的地方??
发表于 2012-8-23 21:22:16 | 显示全部楼层
john800422 发表于 2012-8-23 21:18
ST官方的F4例程
除了CPAL的之外
找不到其他I2C的...

在你下的 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0\Project\STM32F4xx_StdPeriph_Examples\I2C\EEPROM这个就是I2C操作EEPROM的例程
实际还到的文件有
\STM32F4xx_DSP_StdPeriph_Lib_V1.0.0\Utilities\STM32_EVAL\STM3240_41_G_EVAL 目录下的 stm324xg_eval_i2c_ee.c
匿名  发表于 1970-1-1 08:00:00
post_deleted
 楼主| 发表于 2012-8-24 13:11:35 | 显示全部楼层
wuguoyan 发表于 2012-8-23 21:22
在你下的 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0\Project\STM32F4xx_StdPeriph_Examples\I2C\EEPROM这个就 ...

谢谢你
我试试看
这个EXAMPLE没有建好的PROJECT吗?
 楼主| 发表于 2012-8-24 13:13:59 | 显示全部楼层
seanwood 发表于 2012-8-24 09:03
用CPAL吧,I2C开最高中断。否则会出问题的。
开DMA,尽量减少I2C对其他中断的影响。
官方的驱动,总觉得牢 ...

CPAL看不是很懂...
 楼主| 发表于 2012-8-24 13:16:17 | 显示全部楼层
seanwood 发表于 2012-8-24 09:07
另外F4里面要注意的是GPIO必须用GPIO_PinAFConfig初始化成I2C功能。不象F1开了I2C时钟就行了。 ...


STM32F1移植到STM32F4
ADC EXTI SPI FSMC ... 等等都成功过
就是I2C不行

应该不是GPIO_PinAFConfig的问题

不过还是谢谢回复
发表于 2012-8-27 22:46:31 | 显示全部楼层
john800422 发表于 2012-8-27 22:01
已经可以了

谢谢~

很好,恭喜楼主~~
发表于 2012-9-20 17:24:26 | 显示全部楼层
john800422 发表于 2012-8-27 22:01
已经可以了

谢谢~

你好,我直接用你的stm32f4的这两个文件,系统的RTT

其中stm32f4_system.h找不到,请问这个文件是什么啊?
把stm32f4_system.h改为stm32f4xx.h,编译通过
可是运行到这句的时候出问题:         DMA_ClearFlag(DMA1_Stream0, DMA_FLAG_FEIF0 | DMA_FLAG_DMEIF0 | DMA_FLAG_TEIF0 |
                                                                                                                DMA_FLAG_HTIF0 | DMA_FLAG_TCIF0);
错误为: Wrong parameter value detected on

            file  Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c

            line  1059
仿真跟踪发现是在对DMA_Flag参数进行检修的时候出错的:assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG));

请问这是什么原因呢?

对I2C不是很了解,模拟的能用,一直想用硬件的,对于硬件的那个应答机制不了解,能和我讲讲吗,谢谢
 楼主| 发表于 2012-9-20 18:19:39 | 显示全部楼层
本帖最后由 john800422 于 2012-9-20 18:22 编辑
苦行僧 发表于 2012-9-20 17:24
你好,我直接用你的stm32f4的这两个文件,系统的RTT

其中stm32f4_system.h找不到,请问这个文件是什么啊 ...

void I2C1_Send_DMA_IRQ( void )
void I2C1_Recv_DMA_IRQ( void )
以上两个副程式是否有分别放至DMA的发送&接收中断里吗??

如以下
void DMA1_Stream0_IRQHandler( void )
{
        I2C1_Recv_DMA_IRQ();
}
void DMA1_Stream6_IRQHandler( void )
{
        I2C1_Send_DMA_IRQ();
}

stm32f4_system 的功能是引用官方的函式库
发表于 2012-9-20 18:28:46 | 显示全部楼层
顶一下~~~
发表于 2012-9-20 18:46:21 | 显示全部楼层
john800422 发表于 2012-9-20 18:19
void I2C1_Send_DMA_IRQ( void )
void I2C1_Recv_DMA_IRQ( void )
以上两个副程式是否有分别放至DMA的发送 ...

好的,我再试试,谢谢
发表于 2012-9-20 19:06:49 | 显示全部楼层
额...好像发送完地址,然后查询I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED,
之后就TIme Out了,对这个应答什么的不是很了解
 楼主| 发表于 2012-9-21 11:41:48 | 显示全部楼层
苦行僧 发表于 2012-9-20 19:06
额...好像发送完地址,然后查询I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED,
之后就TIme Out了,对这个应 ...

有设定正确I2C的IO吗

这里用的是I2C1
I2C_Config( void )是设定

还有I2C的IO要加上拉电阻
发表于 2012-9-21 12:09:20 | 显示全部楼层
john800422 发表于 2012-9-21 11:41
有设定正确I2C的IO吗

这里用的是I2C1

设置了,哎...没逻辑分析仪,有的话可以看看,我在研究研究
发表于 2012-9-24 22:43:54 | 显示全部楼层
本帖最后由 cctsao1008 于 2012-9-24 22:46 编辑

STM32_CPAL_Driver for stm2f4.

PS : do not forget to define  STM32F4XX



本帖子中包含更多资源

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

x
发表于 2012-9-24 23:38:04 | 显示全部楼层
40342zz 发表于 2012-8-23 19:26
请问楼主lsm303如何手工焊  我焊hmc5883焊坏了三块板子的焊盘了

L883焊接不难,先把焊盘上锡,再把元器件反过来也上锡,对准放好,热风枪开260度,吹一下,大约3秒,搞定收工!
发表于 2012-10-26 13:00:23 | 显示全部楼层
学习了!
发表于 2012-10-27 03:24:55 | 显示全部楼层
好贴顶上去
发表于 2012-10-27 12:03:16 | 显示全部楼层
期待mark
发表于 2012-11-4 16:57:03 | 显示全部楼层
cctsao1008 发表于 2012-9-24 22:43
STM32_CPAL_Driver for stm2f4.

PS : do not forget to define  STM32F4XX

请问F4部分是自己改的,还是ST公司提供的。
我在ST网站下载的驱动包里,只有F1和F2没有F4的。
发表于 2012-11-4 17:02:53 | 显示全部楼层
lwqhdzx 发表于 2012-11-4 16:57
请问F4部分是自己改的,还是ST公司提供的。
我在ST网站下载的驱动包里,只有F1和F2没有F4的。 ...

自己改的
发表于 2013-3-1 16:37:23 | 显示全部楼层
这块硬骨头终于有人来啃了!楼主V5!
发表于 2013-3-1 21:28:32 | 显示全部楼层
Thanks for sharing!
发表于 2013-3-5 13:33:03 | 显示全部楼层
中文显示乱码怎么解决?
发表于 2013-3-5 22:10:43 | 显示全部楼层
能再问一下基础的问题么,配置ADXL345的寄存器后,为什么还要延时1ms
 楼主| 发表于 2013-3-6 02:07:17 | 显示全部楼层
darcyju1 发表于 2013-3-5 22:10
能再问一下基础的问题么,配置ADXL345的寄存器后,为什么还要延时1ms

註解是用繁體寫的, 改編碼看看吧

延遲是為了確保寄存器設定成功
发表于 2013-3-9 14:42:51 | 显示全部楼层
john800422 发表于 2012-8-22 00:00
上传一下STM32F1 ADXL345的完整测试程序

做初始化和ID验证

能给我lsm303和l3g4200d的完整测试程序吗??我也刚刚开始搞这个没多久!我对lsm303的加速度和测磁场不是很了解,而且我还不知道怎么转换数据啊!求大师指点迷津!!
我邮箱913339741@qq.com,  可以发我邮箱也可以放到论坛里来!  最好加qq一起讨论吧 ! Thank you very much!
发表于 2013-3-11 14:24:21 | 显示全部楼层
好东西,谢谢了,特别要是我早发现就好了,搞了好几个晚上才搞好。
发表于 2013-3-11 17:55:03 | 显示全部楼层
顶一下,,太好了哦,,,
发表于 2013-3-27 11:56:42 | 显示全部楼层
mark
发表于 2013-3-27 22:11:08 | 显示全部楼层
mark
发表于 2013-3-28 21:47:42 | 显示全部楼层
好东西,谢谢了,
发表于 2013-3-29 15:05:44 | 显示全部楼层
谢谢楼主,正好需要i2c的adl345
发表于 2013-4-6 16:16:18 | 显示全部楼层
楼主你测得的head准确么,有没有经过校正?
 楼主| 发表于 2013-4-6 16:34:18 | 显示全部楼层
lyballack 发表于 2013-4-6 16:16
楼主你测得的head准确么,有没有经过校正?

不懂你的意思
head??
发表于 2013-4-6 16:50:00 | 显示全部楼层
john800422 发表于 2013-4-6 16:34
不懂你的意思
head??

就是x轴正方向与正北方向的夹角,定位用的
 楼主| 发表于 2013-4-6 16:54:20 | 显示全部楼层
发表于 2013-4-7 22:32:10 | 显示全部楼层
john800422 发表于 2013-4-6 16:54
參考下這兩個吧
http://www.amobbs.com/thread-5524913-1-1.html
http://www.amobbs.com/thread-5526236-1- ...


那你的在没有校正前是不是测的head也是不准的?就那种偏差很大的?我没有校准直接测当Xb指向正北的时候居然是-45度……另外我想问,读出来的原始值是不是应该除以对应量程的灵敏度值才会得到以gauss为单位的值?就那个表格里给的这些:

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-4-8 00:33:51 | 显示全部楼层
lyballack 发表于 2013-4-7 22:32
那你的在没有校正前是不是测的head也是不准的?就那种偏差很大的?我没有校准直接测当Xb指向正北的时候居 ...

那你的在没有校正前是不是测的head也是不准的?就那种偏差很大的?
→是的,因為磁場不是水平的,會有磁傾角,還有其他干擾

读出来的原始值是不是应该除以对应量程的灵敏度值才会得到以gauss为单位的值?就那个表格里给的这些
→沒錯,依選用的靈敏度做轉換
发表于 2013-4-8 10:43:03 | 显示全部楼层
john800422 发表于 2013-4-8 00:33
那你的在没有校正前是不是测的head也是不准的?就那种偏差很大的?
→是的,因為磁場不是水平的,會有磁 ...

那校正后的数据怎么样?我试着用说明书上给的方法,用matlab软件处理了一下,发现到了矩阵求逆那一块就计算不下去了……可能也是我的方法有误,你提供的资料我也想好好研读一下
 楼主| 发表于 2013-4-8 10:53:40 | 显示全部楼层
lyballack 发表于 2013-4-8 10:43
那校正后的数据怎么样?我试着用说明书上给的方法,用matlab软件处理了一下,发现到了矩阵求逆那一块就计 ...

主要是需要先做偏移校正
因為假設數據永遠都大於零或永遠都小於零的話
使用atan求出來的角度就會不準
所以需要先校正到原點

另外是磁場變形的問題
理想上是圓形的(使用磁力計的X, Y軸值當成座標)
帶實際上就會受硬磁與軟磁干擾, 就不是圓形了

最近自己做的校正, 有附推導

使用橢圓擬合做電子羅盤校正
http://www.amobbs.com/thread-5527851-1-1.html
发表于 2013-4-8 10:59:52 | 显示全部楼层
john800422 发表于 2013-4-8 10:53
主要是需要先做偏移校正
因為假設數據永遠都大於零或永遠都小於零的話
使用atan求出來的角度就會不準

十分感谢,先研读你的资料有问题再请教你
发表于 2013-4-8 19:10:38 | 显示全部楼层
好帖,留名。
发表于 2013-4-9 12:33:49 | 显示全部楼层
本帖最后由 lyballack 于 2013-4-9 12:50 编辑
john800422 发表于 2013-4-8 10:53
主要是需要先做偏移校正
因為假設數據永遠都大於零或永遠都小於零的話
使用atan求出來的角度就會不準


不过在校正前我还有个疑问,说明书上规定数据输出是F800-07FF,不管我选择哪个量程,我拿它测的数据三个方向中其中两个方向一般都达到比如FEA9这么大的,经过int符号强制转化后成-343,这么超过它规定的范围也对么?还是我对它的范围理解有错了?

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-4-9 15:38:26 | 显示全部楼层
lyballack 发表于 2013-4-9 12:33
不过在校正前我还有个疑问,说明书上规定数据输出是F800-07FF,不管我选择哪个量程,我拿它测的数据三个方 ...

之前沒有考慮後面的Range
只有乘上量程(Guess/LSB)
就直接處理了

发表于 2013-4-9 17:03:12 | 显示全部楼层
john800422 发表于 2013-4-9 15:38
之前沒有考慮後面的Range
只有乘上量程(Guess/LSB)
就直接處理了

哦,那也基本上不超过正负400多了?出来的结果准确么,用校正后的数据算的航向角?
 楼主| 发表于 2013-4-9 18:20:11 | 显示全部楼层
本帖最后由 john800422 于 2013-4-9 18:21 编辑
lyballack 发表于 2013-4-9 17:03
哦,那也基本上不超过正负400多了?出来的结果准确么,用校正后的数据算的航向角? ...


資料是16Bit的
出來就是+-15bit=+-2^15

校正後航向還蠻正確的
发表于 2013-4-9 23:55:19 | 显示全部楼层
john800422 发表于 2013-4-9 18:20
資料是16Bit的
出來就是+-15bit=+-2^15

之前我没注意到它Y轴Z轴两个数据寄存器是反的,今天再测发现误差沒那么大, 最多十多度的样子,最小三度,说明还是需要校正的
发表于 2013-4-10 15:22:48 | 显示全部楼层
john800422 发表于 2013-4-9 15:38
之前沒有考慮後面的Range
只有乘上量程(Guess/LSB)
就直接處理了

不过得出来的数据是xyz三维的,用椭圆拟合的方法是怎么能协调三个轴的使得原来的椭球变成一个圆球,像说明书上的那样?
发表于 2013-4-10 16:51:27 | 显示全部楼层
john800422 发表于 2013-4-8 10:53
主要是需要先做偏移校正
因為假設數據永遠都大於零或永遠都小於零的話
使用atan求出來的角度就會不準

我感觉官方给的校正方法其实蛮繁琐的……现在才看懂,收集三个轴转360度XYZ的数据再放到那个矩阵里,话说matlab已经是处理矩阵这方面的好手了只是不知道那么大个矩阵能不能处理得过来……
 楼主| 发表于 2013-4-10 18:06:32 | 显示全部楼层
lyballack 发表于 2013-4-10 15:22
不过得出来的数据是xyz三维的,用椭圆拟合的方法是怎么能协调三个轴的使得原来的椭球变成一个圆球,像说 ...

橢圓擬合目前只有做2維的
3維會複雜許多
发表于 2013-4-12 21:35:57 | 显示全部楼层
john800422 发表于 2013-4-10 18:06
橢圓擬合目前只有做2維的
3維會複雜許多

你的误差在校正后一般都在几度内?
发表于 2013-4-15 22:50:00 | 显示全部楼层
john800422 发表于 2013-4-10 18:06
橢圓擬合目前只有做2維的
3維會複雜許多

说明书上说一旦在加速度计上存在加速度的话对磁场的倾角补偿影响就比较大,因为俯仰角跟横滚角测不准了,为了解算准确的俯仰角跟横滚角是要陀螺仪跟加速度计互相补偿么?我不大明白陀螺仪测出的角加速度跟加速度计测出的数据是怎么互补的,望指点一二
 楼主| 发表于 2013-4-16 02:12:45 | 显示全部楼层
lyballack 发表于 2013-4-12 21:35
你的误差在校正后一般都在几度内?

之前測好像是3度內, 不太確定
 楼主| 发表于 2013-4-16 02:15:48 | 显示全部楼层
lyballack 发表于 2013-4-15 22:50
说明书上说一旦在加速度计上存在加速度的话对磁场的倾角补偿影响就比较大,因为俯仰角跟横滚角测不准了, ...

可以參考下這篇
http://www.amobbs.com/thread-5492189-1-1.html

或是搜尋下互補濾波
发表于 2013-4-16 22:19:13 | 显示全部楼层
楼主啊,请教一下你的飞控开发成功了吗?

我也是用的stm32f103rct6+l3g4200d+adxl345,但IMU和PID算法始终没有找到过合适的,试过三种开源飞控的算法了,但一直没飞起来,到底是原因想了好久也没想明白。
电调我已经升级到支持200hz PWM信号了,震动的问题我请教了其他的朋友,也和他们的差不多,算法上想起来好像也没有什么问题,但就是工作不太正常,如果可能的话,可否介绍介绍你的算法或者分享一下有关IMU和PID的相关程序?
发表于 2013-4-17 21:44:39 | 显示全部楼层
谢谢楼主,资料已下载了,非常感谢楼主的无私!

向楼主学习,特此声明,如飞控成功,在此楼公布源码。
发表于 2013-4-17 23:37:57 | 显示全部楼层
好东西,学习中。。
 楼主| 发表于 2013-4-18 10:08:40 | 显示全部楼层
oldbreadman 发表于 2013-4-17 21:44
谢谢楼主,资料已下载了,非常感谢楼主的无私!

向楼主学习,特此声明,如飞控成功,在此楼公布源码。 ...

學到東西最重要~
加油吧
发表于 2013-4-18 18:40:51 | 显示全部楼层
MARKMARKMARK
发表于 2013-4-19 21:31:13 | 显示全部楼层
john800422 发表于 2013-4-16 02:15
可以參考下這篇
http://www.amobbs.com/thread-5492189-1-1.html

想再请教你几个问题:1.陀螺仪得到的原始数据除以对应量程的LSB就得到单位时间内三轴的旋转角度了?2.静止时候的零漂是怎么处理的?我的一般会有小于正负1度的输出,即使陀螺仪处于静止状态时 3.我找到一篇算法:http://www.geek-workshop.com/thread-1695-1-1.html 不知道这个算是什么滤波,加权指数是固定的,根据自己的情况来定,最后是三个方向上的加速度矢量加上陀螺仪的校正矢量再除以加权指数得到姿态变换后的三个方向的加速度矢量,利用计算出的加速度矢量就能消除由于外部加速度导致的pitch跟roll计算不准以至于航向角也计算不准的问题?貌似第三个问题还得烦请你看这个网页里的东西,确实蛮麻烦……
 楼主| 发表于 2013-4-19 23:30:54 | 显示全部楼层
本帖最后由 john800422 于 2013-4-19 23:33 编辑
lyballack 发表于 2013-4-19 21:31
想再请教你几个问题:1.陀螺仪得到的原始数据除以对应量程的LSB就得到单位时间内三轴的旋转角度了?2.静 ...


1.陀螺仪得到的原始数据除以对应量程的LSB就得到单位时间内三轴的旋转角度了?
___ 角速度 = deg/s = GyroData*(dps/LSB) = GyroData/(LSB/dps)

2.静止时候的零漂是怎么处理的?我的一般会有小于正负1度的输出,即使陀螺仪处于静止状态时
___ A. 靜止時, 陀螺儀輸出會一直在0附近變動是正常的, 這是每個陀螺儀都會有的問題
___ B. 若是一直在XX數值附近變動, 那就將陀螺儀的輸出減掉XX數值, 校正至0, 可以使用平均數獲得XX數值

3.我找到一篇算法:http://www.geek-workshop.com/thread-1695-1-1.html 不知道这个算是什么滤波,
加权指数是固定的,根据自己的情况来定,最后是三个方向上的加速度矢量加上陀螺仪的校正矢量再除以加权指数得到姿态变换后的三个方向的加速度矢量,
___ 這應該只是卡爾曼濾波的簡化版吧
___ 文中有提到
___ "此算法和卡尔曼滤波最主要的差别是它的权重是相对固定的,而卡尔曼滤波中的权重会随着加速度计读取的噪声而改变。
___ 卡尔曼滤波注重给你一个“最好”的理论结果,而此算法给你的是实际项目中“够用”的结果。"

利用计算出的加速度矢量就能消除由于外部加速度导致的pitch跟roll计算不准以至于航向角也计算不准的问题?
___ 不知道想表達什麼?
发表于 2013-4-22 19:16:02 | 显示全部楼层
john800422 发表于 2013-4-19 23:30
1.陀螺仪得到的原始数据除以对应量程的LSB就得到单位时间内三轴的旋转角度了?
___ 角速度 = deg/s = Gyr ...

第3个问题就是说静止的时候能计算出比较精确的俯仰角与翻滚角,如果加速度计本身运动起来了俯仰角与翻滚角就测不准了,进而影响到航向角的计算,是用上述方式可以减小因外部附加的加速度造成俯仰角和翻滚角测不准的影响么?
发表于 2013-4-23 11:41:06 | 显示全部楼层
john800422 发表于 2013-3-6 02:07
註解是用繁體寫的, 改編碼看看吧

延遲是為了確保寄存器設定成功

u32 I2C_TimeOut( void )
{
  while(1) {
  }
}

这是个死循环啊
发表于 2013-4-23 15:48:09 | 显示全部楼层
john800422 发表于 2013-4-19 23:30
1.陀螺仪得到的原始数据除以对应量程的LSB就得到单位时间内三轴的旋转角度了?
___ 角速度 = deg/s = Gyr ...


在没有经过椭圆拟合校正之前你的航向角在经过倾角补偿时候测的准么?我发现我的在水平情况下用水平计算公式计算出的航向角还算准确,但是在倾斜的情况下用了倾角补偿的公式反而就不准了,十分不解……
 楼主| 发表于 2013-4-23 16:38:22 | 显示全部楼层
lyballack 发表于 2013-4-22 19:16
第3个问题就是说静止的时候能计算出比较精确的俯仰角与翻滚角,如果加速度计本身运动起来了俯仰角与翻滚 ...

文中有提到

"你可能会问自己一个问题,如果加速度计已经告诉我们Axr,Ayr,Azr的倾角,为什么还要费事去得到陀螺仪的数据?
答案很简单:加速度计的数据不是100%准确的。有几个原因,还记加速度计测量的是惯性力,这个力可以由重力引起(理想情况只受重力影响),
当也可能由设备的加速度(运动)引起。因此,就算加速度计处于一个相对比较平稳的状态,它对一般的震动和机械噪声很敏感。
这就是为什么大部分的IMU系统都需要陀螺仪来使加速度计的输出更平滑。"

所以我認為是的
 楼主| 发表于 2013-4-23 16:39:24 | 显示全部楼层
nirvanasyl 发表于 2013-4-23 11:41
u32 I2C_TimeOut( void )
{
  while(1) {

這跟ADXL345延遲有甚麼關係?
 楼主| 发表于 2013-4-23 16:41:53 | 显示全部楼层
lyballack 发表于 2013-4-23 15:48
在没有经过椭圆拟合校正之前你的航向角在经过倾角补偿时候测的准么?我发现我的在水平情况下用水平计算公 ...


因為有電池馬達等等的影響
直接讀出來的磁場幾乎都是正值

沒經過橢圓擬合求出來的誤差很大
所以就沒試後面了
发表于 2013-4-23 17:38:59 | 显示全部楼层
john800422 发表于 2013-4-23 16:39
這跟ADXL345延遲有甚麼關係?

和ADXL345没关系~~我把I2C1的驱动改成I2C3了~~但是每次都掉进这个死循环~~大神能留个联系方式么?
 楼主| 发表于 2013-4-23 22:12:37 | 显示全部楼层
nirvanasyl 发表于 2013-4-23 17:38
和ADXL345没关系~~我把I2C1的驱动改成I2C3了~~但是每次都掉进这个死循环~~大神能留个联系方式么? ...


先確定硬件是否OK吧
需要接上拉電阻

理論上沒問題的話是不會進的
发表于 2013-5-3 21:45:31 | 显示全部楼层
john800422 发表于 2012-8-22 00:00
上传一下STM32F1 ADXL345的完整测试程序

做初始化和ID验证

楼主你好!

我使用楼主的工程用STM32来读取ADXL345的ID,你的I2C地址是0XA6,我的是0X3A 。我需要在什么地方做一些修改?

谢谢!

 楼主| 发表于 2013-5-3 22:41:01 | 显示全部楼层
lxl_lw 发表于 2013-5-3 21:45
楼主你好!

我使用楼主的工程用STM32来读取ADXL345的ID,你的I2C地址是0XA6,我的是0X3A 。我 ...

datasheet上都有說明
发表于 2013-5-7 10:21:28 | 显示全部楼层
收下 备用
发表于 2013-5-19 20:10:17 | 显示全部楼层
现在我的四轴摇摇晃晃已经可以飞起来了,虽然飞得不怎么好,但毕竟飞起来了,向楼主学习,公布源码。
硬件是STM32F103RCT6+L3G4200D+ADXL345,基于硬件I2C读写。
由于本人偶尔会需要在CSDN上下载,但长期没账号,所以放在CSDN上面了,请有CSDN账号的朋友直接下载,也算支持我一下。
http://download.csdn.net/detail/u010510855/5315936
对于实在没有账号的朋友,本着学习楼主的无私奉献精神,请短信我邮箱,我有空的时候发送到邮箱里去。

再次声明,是向楼主学习!
发表于 2013-5-22 11:26:18 | 显示全部楼层
LZ大大大大大好人
发表于 2013-5-22 18:12:49 | 显示全部楼层
wuguoyan 发表于 2012-8-23 19:34
STM32F4和F1的I2C有点不一样的,ST对I2C改进过,可以参照库里面自带的例程~

改进之后,还没有F1的那个BUG啊?
发表于 2013-5-23 11:51:23 | 显示全部楼层
L3G4200DTR 后继升级板是L3GD20TR,性能更强大。楼主考虑设计下,有需要可以跟我联系:李生:13724308556. QQ :1836587319.
发表于 2013-5-27 00:53:12 | 显示全部楼层
为初始话蛋疼好久了,谢谢楼主
发表于 2013-5-27 11:06:50 | 显示全部楼层
mark                           
发表于 2013-5-27 11:09:55 | 显示全部楼层
oldbreadman 发表于 2013-5-19 20:10
现在我的四轴摇摇晃晃已经可以飞起来了,虽然飞得不怎么好,但毕竟飞起来了,向楼主学习,公布源码。
硬件 ...

直接传上来比较好!
发表于 2013-5-27 11:32:05 | 显示全部楼层
谢谢分享,正在学习。不知道能不能提供完整程序。如果可以请发送到我邮箱,324155286@qq.com,谢谢
发表于 2013-5-30 17:29:20 | 显示全部楼层
真好,下载了
发表于 2013-5-30 19:13:46 | 显示全部楼层
不错,赞一个。
发表于 2013-7-11 15:22:18 | 显示全部楼层
john800422 发表于 2013-4-23 16:38
文中有提到

"你可能会问自己一个问题,如果加速度计已经告诉我们Axr,Ayr,Azr的倾角,为什么还要费事去 ...

请问有没有出现过倾角补偿后不准的情况?LSM303我经过椭球校正后发现倾角补偿得到的数据不准确,但水平的时候测的很准,不明白是怎么一回事……
发表于 2013-7-11 15:50:58 | 显示全部楼层
标记一下,好东西要收藏的。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 工信部备案:粤ICP备09047143号 公安备案:44190002001997(交互式论坛) )

GMT+8, 2018-6-18 07:33

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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