打印

困惑我很久的,关于加速度传感器数据处理的代码..希望高手

[复制链接]
2841|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangxiwl|  楼主 | 2008-10-7 23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个问题属于程序算法(C语言)+物理方面的问题,困惑我很久..希望大家指点..
系统功能为:使用三轴加速度传感器芯片测量汽车的加速度,maga16为CPU。
要求显示出的值为车子的实际加速度。即:显示的值=测出的值-静止时的值。
汽车行驶的方向为X轴,水平面与X轴垂直的方向为Y轴,垂直于X,Y平面的轴为Z轴。这个坐标轴的参考对象是传感器芯片PCB板,以板子为基准,当PCB板倾斜时该坐标轴也倾斜。
在设计算法时,如果汽车在水平面行驶,则Z轴输出为1g,X轴和Y轴测量出的值即为应该显示的值,关键就在车子倾斜时的算法,比如车子在斜坡上时..
以下是我的代码,AD转换共10位,单片机参考电压选5V。其中adc_data为模数转换的结果,adc_mux为AD通道选择,acceler为字符数组,该传感器芯片灵敏度为0.6v/g.其中在车子行驶在坡路时,显示出的X轴和Y轴数据不正常(主要显示X轴,其次是Y轴的数据。Z轴数据的算法不用修改了),改了很久都没成功,希望大家指教:
unsigned char cal_data;
float cal_xg;
if(adc_mux==0)           //x raxi
    {
    acceler[0]='X';
    if(adc_data>=317)  //0g时输出电压AD结果为317
    {
    adc_data-=317;
    acceler[7]='-';            
    }
    else
    {
    adc_data=317-adc_data;
    acceler[7]='+';    
    }
    if(adc_data_z<=110)
    {
    cal_xg=15129-adc_data_z*adc_data_z;
    cal_xg=sqrt(cal_xg);
    cal_data=cal_xg;
    adc_data=abs(adc_data-cal_data);
    }
    adc_xg=adc_data;
    }
    if(adc_mux==1)            //y raxi                        
    {
    acceler[0]='Y';
    if(adc_data>=337)        //0g时输出电压AD结果为337

    {
    adc_data-=337;
    acceler[7]='-';
    }
    else
    {
    adc_data=337-adc_data;
    acceler[7]='+';            
    }    
    if(adc_data_z<=110)
    {
    cal_xg=15129-adc_data_z*adc_data_z;
    cal_xg=sqrt(cal_xg);
    cal_data=cal_xg;
    
    adc_data=abs(adc_data-cal_data);
    }        
    adc_yg=adc_data;    
    }
    if(adc_mux==2)        //z raxi
    {
    acceler[0]='Z';
    if(adc_data>=331)        //0g时输出电压AD结果为331

    {
    adc_data-=331;
    acceler[7]='+';        
    }
    else
    {
    adc_data=331-adc_data;
    acceler[7]='-';            
    }
    adc_data_z=adc_data;
    }

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

10

帖子

0

粉丝