qrytian 发表于 2014-4-30 21:47:08

关于STC12C5a60单片机DATA 和 XDATA 的问题

我用5a60做了一个平衡车,里面有一个卡尔曼滤波程序,需要的浮点运算比较多,就将数据定义到了Xdata里面。但是经常是卡尔曼滤波输出数值为0.其他一切正常,程序正常跑,无线通信,串口,i2c等工作正常。并且将串口用2303模块和电脑接上后启动正常拔掉后仍然正常,不接的话启动就有可能输出为0。
怀疑是①单片机复位电路设计有问题,有些寄存器数据没有清除,但是我用的是官网给的第二复位引脚电路图
         ②XDATA数据调用问题,这个我只是猜测,不知道怎么破
         ③我用L298N驱动两个直流电机,有可能是共地等的电路设计问题
      初次发帖,求指教。各路大侠谁碰到过这个问题,有什么破解办法?或者可能破解的建议也行,需要程序,电路图等我可以传上来,谢谢大家

lydmom 发表于 2014-4-30 22:50:15

没相似经历,不过这种奇怪的问题一般是由于电容问题。少加了?或者是电容坏了。特别是小小的104。{:victory:}

xckhmf 发表于 2014-5-1 11:06:35

呵呵。我也是,我用的是5408AD,基本可以确定是卡尔曼的问题,你换成互补滤波就不会,所以问题出在卡尔曼那,我觉得和STC单片机内部结构有很大关系。

qrytian 发表于 2014-5-2 12:09:39

lydmom 发表于 2014-4-30 22:50
没相似经历,不过这种奇怪的问题一般是由于电容问题。少加了?或者是电容坏了。特别是小小的104。{:victory ...

在电源入口加104电容?我的298驱动上5V间有一个电容,还要再加吗?我去试试

qrytian 发表于 2014-5-2 12:11:22

xckhmf 发表于 2014-5-1 11:06
呵呵。我也是,我用的是5408AD,基本可以确定是卡尔曼的问题,你换成互补滤波就不会,所以问题出在卡尔曼那 ...

是不是调用XDATA里的数据时候调用不准?你说卡尔曼的问题?算法不对?你用的互补?怎么用?

xckhmf 发表于 2014-5-2 13:17:07

qrytian 发表于 2014-5-2 12:11
是不是调用XDATA里的数据时候调用不准?你说卡尔曼的问题?算法不对?你用的互补?怎么用? ...

有可能是Xdata调用问题,也有可能是算法问题,但是没输出的时候传感器的值还是能读出来的,互补滤波就是用把卡尔曼滤波替代掉,其实两个算法对平衡稳定性影响甚小。

qrytian 发表于 2014-5-2 13:33:47

xckhmf 发表于 2014-5-2 13:17
有可能是Xdata调用问题,也有可能是算法问题,但是没输出的时候传感器的值还是能读出来的,互补滤波就是 ...

但是地线和随便一个IO接外部电源,每次都能好使,初始化问题?电容滤波问题?

qrytian 发表于 2014-5-2 15:10:42

lydmom 发表于 2014-4-30 22:50
没相似经历,不过这种奇怪的问题一般是由于电容问题。少加了?或者是电容坏了。特别是小小的104。{:victory ...

大侠,我加了两个滤波电容在电源入口,目前还没出现问题,谢谢大侠指点

lydmom 发表于 2014-5-11 07:47:25

qrytian 发表于 2014-5-2 15:10
大侠,我加了两个滤波电容在电源入口,目前还没出现问题,谢谢大侠指点 ...

电容很神奇的,比如,你有一个块子,你插上串口下载线,它能正常工作,不插就不能。就是起振电容的问题。

lydmom 发表于 2014-5-11 07:48:19

qrytian 发表于 2014-5-2 15:10
大侠,我加了两个滤波电容在电源入口,目前还没出现问题,谢谢大侠指点 ...

电容很神奇的,比如,你有一个块子,你插上串口下载线,它能正常工作,不插就不能。就是起振电容的问题。

xiaobendan 发表于 2014-5-11 08:40:06

XDATA的内容上电时是不自动清零的吧,还真没注意过,回头去看看是不是这样

qrytian 发表于 2014-5-11 08:40:23

lydmom 发表于 2014-5-11 07:48
电容很神奇的,比如,你有一个块子,你插上串口下载线,它能正常工作,不插就不能。就是起振电容的问题。 ...

能把具体原理说下嘛?

xiaobendan 发表于 2014-5-11 08:41:32

XDATALEN      EQU   0x0500   
改了吗?

QJD_LZF 发表于 2014-5-11 15:56:59

好好找一下软件问题吧。

funnybow 发表于 2014-5-12 12:37:11

STC跑卡尔曼不慢吗

qrytian 发表于 2014-5-17 11:03:43

funnybow 发表于 2014-5-12 12:37
STC跑卡尔曼不慢吗

还可以,勉勉强强

qrytian 发表于 2014-5-17 11:04:32

QJD_LZF 发表于 2014-5-11 15:56
好好找一下软件问题吧。

卡尔曼滤波做的不好应该是,但接了两个电容好了

qrytian 发表于 2014-5-17 11:06:21

xiaobendan 发表于 2014-5-11 08:41
XDATALEN      EQU   0x0500   
改了吗?

A51 启动问题里的是吗?这个是什么意思大侠?

xiaobendan 发表于 2014-5-17 17:56:40

原来是这样的
XDATALEN      EQU   0      
仔细看看启动文件,很明显是根据这个后面的数字进行XDATA的初始化的,要根据你用的MCU的容量修改一下,否则他是不会进行初始化的吧。我是这样理解的,不知道对不对。
仔细看看下面这段(摘自启动文件)
IF XDATALEN <> 0
                MOV   DPTR,#XDATASTART
                MOV   R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
                MOV   R6,#(HIGH (XDATALEN)) +1
ELSE
                MOV   R6,#HIGH (XDATALEN)
ENDIF
                CLR   A
XDATALOOP:      MOVX    @DPTR,A
                INC   DPTR
                DJNZ    R7,XDATALOOP
                DJNZ    R6,XDATALOOP
ENDIF
就明白了

qrytian 发表于 2014-5-18 10:49:39

谢谢大侠

qrytian 发表于 2014-5-18 10:49:56

xiaobendan 发表于 2014-5-17 17:56
原来是这样的
XDATALEN      EQU   0      
仔细看看启动文件,很明显是根据这个后面的数字进行XDATA的 ...

谢谢大侠
页: [1]
查看完整版本: 关于STC12C5a60单片机DATA 和 XDATA 的问题