OpenEdv-开源电子网

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

用MMA7260测试汽车的纵横向加速度, 不知道可不可行,传感器放在驾驶室内,温度问题不大,稳定性?

[复制链接]

9

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2011-1-12
在线时间
0 小时
发表于 2011-5-8 12:31:12 | 显示全部楼层 |阅读模式
看到原子板上做了MMA7260,开始做相关的demo了吗?
汽车横向加速度一般较小,一般在+-1g以内,我想通过横向加速度来获取汽车的转向、稳定性等信息。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-5-8 12:37:33 | 显示全部楼层
我们用的是MMA7660.
已经调试出来了,代码给你参考下:
#include "sys.h"
#include "delay.h"
#include "mma7660.h"
#include "lcd.h"    


void MMA7660_Init(void)
{   
IIC_Init();
MMA7660_WR_Reg(MMA_MODE,0X00); //配置寄存器的时候,必须进入standby模式
MMA7660_WR_Reg(MMA_SPCNT,0X00); 
  MMA7660_WR_Reg(MMA_INTSU,0X00); //不设置中断
MMA7660_WR_Reg(MMA_PDET,0X75);  //
MMA7660_WR_Reg(MMA_SR,0X00); 
MMA7660_WR_Reg(MMA_PD,0X17); 
MMA7660_WR_Reg(MMA_MODE,0X01); //配置寄存器的时候,必须进入standby模式     
}
//在指定位置显示指定数字,包含正负号
void LCD_ShowMNum(u16 x,u16 y,signed char numx)
{         
u8 t,temp;
u8 num;
if(numx>=0)
{
num=numx;
LCD_ShowChar(x,y,'+',16,0);    
}else 
{
num=-numx;
LCD_ShowChar(x,y,'-',16,0);    
}
x+=8;
for(t=0;t<2;t++)
{
temp=(num/mypow(10,1-t))%10;
  LCD_ShowChar(x+(8)*t,y,temp+'0',16,0); 
}
}
void mma_test(void)
{
signed char x,y,z;
LCD_ShowString(80,100,"X:");
LCD_ShowString(80,120,"Y:");
LCD_ShowString(80,140,"Z:");
while(1)
{
x=MMA7660_XYZ_RD(MMA_XOUT);
y=MMA7660_XYZ_RD(MMA_YOUT);
z=MMA7660_XYZ_RD(MMA_ZOUT);     
LCD_ShowMNum(96,100,x);   
LCD_ShowMNum(96,120,y);
LCD_ShowMNum(96,140,z); 
delay_ms(100);
}
}
//写MMA7660寄存器
void MMA7660_WR_Reg(u8 addr,u8 val) 
{
IIC_Start();    
IIC_Send_Byte(MMA_WRITE);      //发送写器件指令  
IIC_Wait_Ack();    
    IIC_Send_Byte(addr);    //发送寄存器地址
IIC_Wait_Ack();          
IIC_Send_Byte(val);      //发送值    
IIC_Wait_Ack();           
    IIC_Stop(); //产生一个停止条件     
}
//读MMA7660寄存器
u8 MMA7660_RD_Reg(u8 addr) 
{
u8 temp=0;  
IIC_Start();    
IIC_Send_Byte(MMA_WRITE); //发送写器件指令  
temp=IIC_Wait_Ack();    
    IIC_Send_Byte(addr);    //发送寄存器地址
temp=IIC_Wait_Ack();          
IIC_Start();         //重新启动
IIC_Send_Byte(MMA_READ); //发送读器件指令  
temp=IIC_Wait_Ack();    
    temp=IIC_Read_Byte(0); //读取一个字节,不继续再读,发送NAK          
    IIC_Stop(); //产生一个停止条件      
return temp; //返回读到的值
}
//dir:0,X;1,Y;2,Z
//返回值:+31~-32;
signed char MMA7660_XYZ_RD(u8 dir)
{
u8 i,j;
u8 temp;
signed char res;
signed char val[10];
for(i=0;i<10;i++)//读取
{
do
{
temp=MMA7660_RD_Reg(dir);
}while(temp&(1<<6));//需要再次读取 
res=temp&0x1f;//得到真正的数值
if(temp&(1<<5))val=res-31;//反方向
else val=res;//正方向
}
for(i=0;i<9;i++)//排序
{
for(j=i+1;j<10;j++)
{
if(val>val[j])//升序排列
{
res=val;
val=val[j];
val[j]=res;
}
}
}   
res=0;
for(i=3;i<7;i++)res+=val;     
return res/4;//取平均值
}












我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-5-8 12:37:47 | 显示全部楼层
#ifndef __MMA7660_H
#define __MMA7660_H
#include "myiic.h"         

#define MMA_XOUT 0X00
#define MMA_YOUT 0X01
#define MMA_ZOUT 0X02
#define MMA_TILT 0X03
#define MMA_SRST 0X04
#define MMA_SPCNT 0X05
#define MMA_INTSU   0X06  
#define MMA_MODE 0X07
#define MMA_SR 0X08 
#define MMA_PDET 0X09
#define MMA_PD 0X0A 
//0X0B TO OX1F Factory Reserved    
#define MMA_READ    0X99
#define MMA_WRITE   0X98

void MMA7660_Init(void);  //初始化MMA7660
void MMA7660_WR_Reg(u8 addr,u8 val);//写MMA7660寄存器
u8 MMA7660_RD_Reg(u8 addr); //读MMA7660寄存器
signed char MMA7660_XYZ_RD(u8 dir);



#endif
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2011-1-12
在线时间
0 小时
 楼主| 发表于 2011-5-8 15:45:32 | 显示全部楼层
比7260还便宜啊。。。还是数字式的。原子板子开发得怎么样了啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-5-8 16:05:00 | 显示全部楼层
还在弄例程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2012-1-13
在线时间
3 小时
发表于 2012-1-13 20:35:44 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
你好 一直用你的模版 非常好用
能部您一下,IIC_Send_Byte(MMA_WRITE);      //发送写器件指令  其中的MMA_WRITE与MMA_READ是怎么起的写器件指令与读器件指令,个人的理解为是在SDA线上写1001 1000/1这两个指令,但是是写到哪里,怎么起的作用啊? 非常期待你的指点,谢谢!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-1-13 20:42:50 | 显示全部楼层
回复【6楼】Snailler:
---------------------------------
这个是MMA7660内部的功能....
他是这么写的,我们就按他的做就可以了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2012-1-13
在线时间
3 小时
发表于 2012-1-13 20:55:33 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
哦 惭愧~~
刚又认真的看了一遍MMA7660的DATASHEET,找到了
个人感觉就像是MMA7660在IIC总线上的从地址 呵呵 明白了
谢谢!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-6-4
在线时间
0 小时
发表于 2012-6-4 17:24:01 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
求库文件
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-9-19
在线时间
0 小时
发表于 2012-9-19 11:55:30 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问mma8451能测电机的振动(振动频率和幅度)吗?我现在能读到三轴的加速度值,(⊙o⊙)…求高手解答
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-9-19 14:43:22 | 显示全部楼层
回复【10楼】xwmxzs:
---------------------------------
没用过。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 23:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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