智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1764|回复: 5
打印 上一主题 下一主题

9S12XS128计算后为什么会出现波形失真?

[复制链接]

5

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
379
威望
207
贡献
102
兑换币
109
注册时间
2012-10-27
在线时间
35 小时
跳转到指定楼层
1#
发表于 2013-6-10 14:54:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

282

主题

1780

帖子

1

精华

管理员

曾经的智能车人……

Rank: 11Rank: 11Rank: 11Rank: 11

积分
28420

特殊贡献奖章资源大师奖章论坛骨干奖章论坛元老奖章优秀版主奖章推广达人奖章优秀会员奖章活跃会员奖章热心会员奖章在线王奖章

QQ
威望
10441
贡献
11685
兑换币
4726
注册时间
2009-9-7
在线时间
3147 小时
2#
发表于 2013-6-10 19:27:57 | 只看该作者
代码没搞错?
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
379
威望
207
贡献
102
兑换币
109
注册时间
2012-10-27
在线时间
35 小时
3#
 楼主| 发表于 2013-6-10 19:45:12 | 只看该作者
凌心 发表于 2013-6-10 19:27
代码没搞错?

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

回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
379
威望
207
贡献
102
兑换币
109
注册时间
2012-10-27
在线时间
35 小时
4#
 楼主| 发表于 2013-6-10 19:46:33 | 只看该作者
凌心 发表于 2013-6-10 19:27
代码没搞错?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

282

主题

1780

帖子

1

精华

管理员

曾经的智能车人……

Rank: 11Rank: 11Rank: 11Rank: 11

积分
28420

特殊贡献奖章资源大师奖章论坛骨干奖章论坛元老奖章优秀版主奖章推广达人奖章优秀会员奖章活跃会员奖章热心会员奖章在线王奖章

QQ
威望
10441
贡献
11685
兑换币
4726
注册时间
2009-9-7
在线时间
3147 小时
5#
发表于 2013-6-10 20:43:44 | 只看该作者
感觉还是像代码问题,要不你就把运算数据输出看一下吧。
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
379
威望
207
贡献
102
兑换币
109
注册时间
2012-10-27
在线时间
35 小时
6#
 楼主| 发表于 2013-6-12 20:10:45 | 只看该作者
凌心 发表于 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是直立时加速度计输出

回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 20:16 , Processed in 0.348178 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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