打印
[复制链接]
3124|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
icecut| | 2015-2-10 16:53 | 只看该作者
干扰?还是正常震荡?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
虾米一代 + 1 赞一个!
板凳
coody| | 2015-2-10 23:42 | 只看该作者
强大的MPU6050怎么可能有震荡?几十元的商售小四轴,飞得稳稳的。。。。

使用特权

评论回复
地板
虾米一代|  楼主 | 2015-2-11 15:42 | 只看该作者
coody 发表于 2015-2-10 23:42
强大的MPU6050怎么可能有震荡?几十元的商售小四轴,飞得稳稳的。。。。

不是模块问题啊,是我程序的问题。是这样的,有现成的stm32程序,然后完全仿照stm32程序,我又编写了个dsp程序,但是dsp死活不行,得到的波形就是这样,但是stm32可以的。总共就2个函数,一个初始化,一个读acc和gyr的函数:初始化,我是配置好了后重新读取出来发送到串口看,是正确的;读acc和gyr的函数是一个读连续地址寄存器的IIC函数,我又重新写了一段连续地址的寄存器,同样用那个读连续地址寄存器的IIC函数读取,也是对的。。同样的配置方法和IIC函数,用stm32完全木有问题。。然后我就不知道怎么搞了。。我是想学习dsp,所以死活想用dsp实现功能。求大神指导

使用特权

评论回复
5
虾米一代|  楼主 | 2015-2-11 15:44 | 只看该作者
icecut 发表于 2015-2-10 16:53
干扰?还是正常震荡?

是不正常的震荡。。是我程序的问题。是这样的,有现成的stm32程序,然后完全仿照stm32程序,我又编写了个dsp程序,但是dsp死活不行,得到的波形就是这样,但是stm32可以的。总共就2个函数,一个初始化,一个读acc和gyr的函数:初始化,我是配置好了后重新读取出来发送到串口看,是正确的;读acc和gyr的函数是一个读连续地址寄存器的IIC函数,我又重新写了一段连续地址的寄存器,同样用那个读连续地址寄存器的IIC函数读取,也是对的。。同样的配置方法和IIC函数,用stm32完全木有问题。。然后我就不知道怎么搞了。。我是想学习dsp,所以死活想用dsp实现功能。

使用特权

评论回复
6
虾米一代|  楼主 | 2015-2-11 16:02 | 只看该作者
这是部分程序和波形图像

iic读取.png (24.27 KB )

iic读取.png

mpu6050初始化.png (5.62 KB )

mpu6050初始化.png

read.png (3.73 KB )

read.png

stm32 dsp.jpg (136.91 KB )

stm32 dsp.jpg

使用特权

评论回复
7
icecut| | 2015-2-11 18:05 | 只看该作者
用示波器看波形.是不是太快了

使用特权

评论回复
8
虾米一代|  楼主 | 2015-2-12 10:10 | 只看该作者
icecut 发表于 2015-2-11 18:05
用示波器看波形.是不是太快了

没懂你意思。我是用上位机看我上传的mpu6050数据啊

使用特权

评论回复
9
icecut| | 2015-2-12 13:36 | 只看该作者
虾米一代 发表于 2015-2-12 10:10
没懂你意思。我是用上位机看我上传的mpu6050数据啊

硬件如果真的这么简单.早就解决了

使用特权

评论回复
10
虾米一代|  楼主 | 2015-2-13 11:16 | 只看该作者
icecut 发表于 2015-2-12 13:36
硬件如果真的这么简单.早就解决了

问题已解决。是传输函数的问题。只是不明白,这个传输函数在stm32上用的好好的,在TMS320F28335上咋就不行。高8位和低8位的截取。
#define BYTE0(dwTemp)       (*(char *)(&dwTemp))
#define BYTE1(dwTemp)       (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp)       (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)       (*((char *)(&dwTemp) + 3))

void Data_Send_Status(void)
{
        unsigned char _cnt=0;
        int _temp;
        unsigned char sum = 0;
        unsigned char i=0;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x01;
        data_to_send[_cnt++]=0;
       
        _temp = (int)(Rool*100);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = (int)(Pitch*100);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
        _temp = (int)(Yaw*100);
        data_to_send[_cnt++]=BYTE1(_temp);
        data_to_send[_cnt++]=BYTE0(_temp);
…………
最后用了简单的方式:
dwTemp & 0xFF
(dwTemp >> 8) & 0xFF
c语言没学好,第一种匿名四轴的方式没看懂

使用特权

评论回复
11
icecut| | 2015-2-13 12:27 | 只看该作者
你是不是遇到大小端问题了啊

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
虾米一代 + 1 赞一个!
12
虾米一代|  楼主 | 2015-2-13 15:20 | 只看该作者
icecut 发表于 2015-2-13 12:27
你是不是遇到大小端问题了啊

太专业了。。木有懂。。之前也有人这么说,不懂大小端是什么问题啊

使用特权

评论回复
13
keer_zu| | 2015-2-13 16:30 | 只看该作者
虾米一代 发表于 2015-2-13 15:20
太专业了。。木有懂。。之前也有人这么说,不懂大小端是什么问题啊

别那么懒,google一下啊

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
虾米一代 + 3 很给力!
14
虾米一代|  楼主 | 2015-2-15 12:14 | 只看该作者
keer_zu 发表于 2015-2-13 16:30
别那么懒,google一下啊

教训的是!
TMS320C28x中的字节是16位的,char也是16位的,这个应该是问题所在。
经int checkCPU()
{
        union w
        {
                int a;
                char b;
        }c;
        c.a=1;
        return(c.b==1);
}函数验证。dsp28335是小端,stm32也是小端。这个函数是网上百度的,原理也不大懂。
谢谢指教

使用特权

评论回复
15
keer_zu| | 2015-2-15 12:32 | 只看该作者
虾米一代 发表于 2015-2-15 12:14
教训的是!
TMS320C28x中的字节是16位的,char也是16位的,这个应该是问题所在。
经int checkCPU()

寻址的单位是字节,
而 short
int
long
struct xxx
class xxx 本事都需要占用多个字节存放空间

那么,问题就来了:
类似int这样的数,低权值(个十百千...是十进制的权值,明白权值是什么了吧)到高权值的存放顺序是低地址到高地址或是相反呢?这就是大小端的问题,这是处理器平台决定的,比如ARM和X86就可能不同。

struct类似,它除了有上面的问题外,还有成员的存放顺序,不过道理一样。明白大小端的区别了吗?

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
虾米一代 + 3 很给力!
16
keer_zu| | 2015-2-15 12:32 | 只看该作者
虾米一代 发表于 2015-2-15 12:14
教训的是!
TMS320C28x中的字节是16位的,char也是16位的,这个应该是问题所在。
经int checkCPU()

寻址的单位是字节,
而 short
int
long
struct xxx
class xxx 本事都需要占用多个字节存放空间

那么,问题就来了:
类似int这样的数,低权值(个十百千...是十进制的权值,明白权值是什么了吧)到高权值的存放顺序是低地址到高地址或是相反呢?这就是大小端的问题,这是处理器平台决定的,比如ARM和X86就可能不同。

struct类似,它除了有上面的问题外,还有成员的存放顺序,不过道理一样。明白大小端的区别了吗?

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
虾米一代 + 3 很给力!
17
keer_zu| | 2015-2-15 12:39 | 只看该作者
虾米一代 发表于 2015-2-15 12:14
教训的是!
TMS320C28x中的字节是16位的,char也是16位的,这个应该是问题所在。
经int checkCPU()

其实简单写个程序,判断一下一个不对称的short变量s的值是否:  p ==  *(char *)(&s) + *(((char *)(&s)) + 1) * 256
就可以知道该平台是是大端还是小端了。

使用特权

评论回复
18
虾米一代|  楼主 | 2015-2-15 16:40 | 只看该作者
keer_zu 发表于 2015-2-15 12:39
其实简单写个程序,判断一下一个不对称的short变量s的值是否:  p ==  *(char *)(&s) + *(((char *)(&s)) ...

明白了,谢谢解答

使用特权

评论回复
19
小营七郎| | 2015-2-17 21:47 | 只看该作者
一看就是CCS的界面,楼主我也有用28335去做个四轴的想法。哈哈。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
虾米一代 + 1 赞一个!
20
虾米一代|  楼主 | 2015-2-21 10:19 | 只看该作者
小营七郎 发表于 2015-2-17 21:47
一看就是CCS的界面,楼主我也有用28335去做个四轴的想法。哈哈。

好牛啊。。这都看得出来。。可以啊,到时候我们一起探讨探讨。。只是四轴现在做有点晚了,我是想学28335才做的四轴

使用特权

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

本版积分规则

8

主题

72

帖子

0

粉丝