智能车制作

标题: 9S12XS128计算后为什么会出现波形失真? [打印本页]

作者: LPP2010001    时间: 2013-6-10 14:54
标题: 9S12XS128计算后为什么会出现波形失真?
[attach]46742[/attach]

红色曲线是加速度计AD转换后直接输出,下面黄色曲线是加速度计输出减去1590后的值,为什么会出现一个个小尖峰?恳请指点!!!

作者: 凌心    时间: 2013-6-10 19:27
代码没搞错?

作者: LPP2010001    时间: 2013-6-10 19:45
凌心 发表于 2013-6-10 19:27
代码没搞错?

我认为不会错。红色线代表ADSam_acc,黄色线代表变了ADSam_acc - 1590;就经过了这一步运算,波形就失真了。


作者: LPP2010001    时间: 2013-6-10 19:46
凌心 发表于 2013-6-10 19:27
代码没搞错?

[attach]46746[/attach]

作者: 凌心    时间: 2013-6-10 20:43
感觉还是像代码问题,要不你就把运算数据输出看一下吧。
作者: LPP2010001    时间: 2013-6-12 20:10
凌心 发表于 2013-6-10 20:43
感觉还是像代码问题,要不你就把运算数据输出看一下吧。

程序在K60上能运行,移植到9S12XS128上就出问题了。
经过测试,已确定不是时钟问题(48Mhz,32Mhz,16Mhz都出现相同问题);
不是芯片问题(同一程序在两次购买的芯片上出现同样问题);
也不是串口问题。
代码如下,恳请帮忙看看!
感激不尽!
//-------------------------------------------------------
//函数名:Calc_Ang
//参数:
//返回:void
//功能:获得车模倾角
//-------------------------------------------------------
void Calc_Ang(void)
{  
       float AngVelTol_X;                //X轴转动角速度  
        float Acc_real;             //实际加速度
        float err,err1;
       
        AngVelTol_X = (float)((ADSam_gyro - AngVelZero_X) * REC_ANGVEL_RATIO);
        Acc_real = (float)((ADSam_acc - stop_Acc) * REC_ACC_RATIO);
        err = Acc_real - Ang_previou_X;       
        err1 = AngVelTol_X + KP_angvel * err;
        Ang_current_X = Ang_previou_X + KI_angvel * err1;
        AngVel_current_X = Ang_current_X - Ang_previou_X;        
        Ang_previou_X = Ang_current_X;
    //--------------- 准备要发送的数据 -----------------
    virtScope_3 = Ang_current_X;     //虚拟示波器通道3
    virtScope_4 = Acc_real;                //虚拟示波器通道4
}
说明:
REC_ANGVEL_RATIO = 3.5
REC_ACC_RATIO = 1.5
ADSam_gyro 是陀螺仪采集输出; AngVelZero_X是陀螺仪静止时输出
ADSam_acc 是加速度计采集输出;stop_Acc是直立时加速度计输出






欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2