OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15283|回复: 9

printf 打印出nan ?为什么会是nan?有没有什么办法消除这个,这个数是浮点型的

[复制链接]

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-2-13
在线时间
0 小时
发表于 2013-6-27 15:35:13 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-27 15:51:16 | 显示全部楼层
1-1
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-2-13
在线时间
0 小时
 楼主| 发表于 2013-6-27 16:24:26 | 显示全部楼层
回复【2楼】mygod:
---------------------------------
重新说下: 
测mpu6050 (9轴运动处理传感器),得到数据后,用卡尔曼滤波或二阶滤波 整合数据 ,结果得到的数据(float型)经过 printf 打印到串口上,这个数据有可能会打印成  nan(不是一个数),有没有办法在程序判断这个数是不是nan,不知道这个nan是因为什么原因产生的。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-27 16:43:05 | 显示全部楼层
当前 文件加入 __attribute((aligned (8)))
1-1
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-2-13
在线时间
0 小时
 楼主| 发表于 2013-6-27 17:12:43 | 显示全部楼层
回复【4楼】mygod:
---------------------------------
还是不行,,发现把float的转成int打印出来,,,就变成了 0
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-27 17:19:18 | 显示全部楼层
回复【5楼】1519256298:
---------------------------------
列出代码
1-1
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-2-13
在线时间
0 小时
 楼主| 发表于 2013-6-27 17:26:47 | 显示全部楼层
回复【6楼】mygod:
---------------------------------
直接这样就可以了

if (isnan(p[0])){  
  printf("angle_m = %f gyro_m = %f\r\n",angle_m,gyro_m);
  while(1);
}
串口:
angle_m = nan gyro_m = -4.146341
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-2-13
在线时间
0 小时
 楼主| 发表于 2013-6-27 17:36:31 | 显示全部楼层
回复【6楼】mygod:
---------------------------------
float MPU6050_Get_Acc_Angle(MPU_TypeDef Mympu,u8 dir)
{
float temp,x,y,z;
  float res=0;
z = Mympu.Az/16384.0;
x = Mympu.Ax/16384.0;
y = Mympu.Ay/16384.0;

switch(dir)
{
case MPU6050_Z://与自然Z轴的角度
  temp=sqrt((x*x+y*y))/z;
  res=atan(temp);
  break;
case MPU6050_X://与自然X轴的角度
  temp=x/sqrt((y*y+z*z));
  res=atan(temp);
  break;
  case MPU6050_Y://与自然Y轴的角度
  temp=y/sqrt((x*x+z*z));
  res=atan(temp);
  break;
  }
if (isnan(res)){
  
  printf("Mympu.Ay %d\r\n",Mympu.Ay);
  printf("Mympu.Ax %d\r\n",Mympu.Ax);
  printf("Mympu.Az %d\r\n",Mympu.Az);
  printf("res = %f\r\n",res);
  while(1);
}
return res*180/3.14;//把弧度转换成角度
}


串口打印1:

-1 11
-1 10
-2 9
-1 8
Mympu.Ay 0
Mympu.Ax 0
Mympu.Az 0
res = nan


结果二:
4 -28
-5 -19
-12 -13
Mympu.Ay 0
Mympu.Ax 0
Mympu.Az 0
res = nan


结论就是。。因为这句话temp=sqrt((x*x+y*y))/z;
回复 支持 反对

使用道具 举报

6

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-2-13
在线时间
0 小时
 楼主| 发表于 2013-6-27 19:30:44 | 显示全部楼层
回复【6楼】mygod:
---------------------------------
终于发现问题了,,因为mpu6050是直接用杜邦线连在stm32上,加上杜邦线用久了,有时会接触不良,导致收到 000,,现在就差一个问题了,我用二阶互补滤波,,整合x的角度和y的角度,,问题 :y轴角速度积分得到的x倾斜角的角度严重滞后x轴加速度测得角度,,x轴角速度积分的角度就不会,,,,郁闷
回复 支持 反对

使用道具 举报

68

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2013-5-7
在线时间
28 小时
发表于 2013-7-4 10:58:11 | 显示全部楼层
回复【9楼】1519256298:
---------------------------------
楼主把你的程序上传上来吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 11:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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