智能车制作
标题:
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