关于STC12C5a60单片机DATA 和 XDATA 的问题
我用5a60做了一个平衡车,里面有一个卡尔曼滤波程序,需要的浮点运算比较多,就将数据定义到了Xdata里面。但是经常是卡尔曼滤波输出数值为0.其他一切正常,程序正常跑,无线通信,串口,i2c等工作正常。并且将串口用2303模块和电脑接上后启动正常拔掉后仍然正常,不接的话启动就有可能输出为0。怀疑是①单片机复位电路设计有问题,有些寄存器数据没有清除,但是我用的是官网给的第二复位引脚电路图
②XDATA数据调用问题,这个我只是猜测,不知道怎么破
③我用L298N驱动两个直流电机,有可能是共地等的电路设计问题
初次发帖,求指教。各路大侠谁碰到过这个问题,有什么破解办法?或者可能破解的建议也行,需要程序,电路图等我可以传上来,谢谢大家 没相似经历,不过这种奇怪的问题一般是由于电容问题。少加了?或者是电容坏了。特别是小小的104。{:victory:} 呵呵。我也是,我用的是5408AD,基本可以确定是卡尔曼的问题,你换成互补滤波就不会,所以问题出在卡尔曼那,我觉得和STC单片机内部结构有很大关系。 lydmom 发表于 2014-4-30 22:50
没相似经历,不过这种奇怪的问题一般是由于电容问题。少加了?或者是电容坏了。特别是小小的104。{:victory ...
在电源入口加104电容?我的298驱动上5V间有一个电容,还要再加吗?我去试试 xckhmf 发表于 2014-5-1 11:06
呵呵。我也是,我用的是5408AD,基本可以确定是卡尔曼的问题,你换成互补滤波就不会,所以问题出在卡尔曼那 ...
是不是调用XDATA里的数据时候调用不准?你说卡尔曼的问题?算法不对?你用的互补?怎么用? qrytian 发表于 2014-5-2 12:11
是不是调用XDATA里的数据时候调用不准?你说卡尔曼的问题?算法不对?你用的互补?怎么用? ...
有可能是Xdata调用问题,也有可能是算法问题,但是没输出的时候传感器的值还是能读出来的,互补滤波就是用把卡尔曼滤波替代掉,其实两个算法对平衡稳定性影响甚小。 xckhmf 发表于 2014-5-2 13:17
有可能是Xdata调用问题,也有可能是算法问题,但是没输出的时候传感器的值还是能读出来的,互补滤波就是 ...
但是地线和随便一个IO接外部电源,每次都能好使,初始化问题?电容滤波问题? lydmom 发表于 2014-4-30 22:50
没相似经历,不过这种奇怪的问题一般是由于电容问题。少加了?或者是电容坏了。特别是小小的104。{:victory ...
大侠,我加了两个滤波电容在电源入口,目前还没出现问题,谢谢大侠指点 qrytian 发表于 2014-5-2 15:10
大侠,我加了两个滤波电容在电源入口,目前还没出现问题,谢谢大侠指点 ...
电容很神奇的,比如,你有一个块子,你插上串口下载线,它能正常工作,不插就不能。就是起振电容的问题。 qrytian 发表于 2014-5-2 15:10
大侠,我加了两个滤波电容在电源入口,目前还没出现问题,谢谢大侠指点 ...
电容很神奇的,比如,你有一个块子,你插上串口下载线,它能正常工作,不插就不能。就是起振电容的问题。 XDATA的内容上电时是不自动清零的吧,还真没注意过,回头去看看是不是这样 lydmom 发表于 2014-5-11 07:48
电容很神奇的,比如,你有一个块子,你插上串口下载线,它能正常工作,不插就不能。就是起振电容的问题。 ...
能把具体原理说下嘛? XDATALEN EQU 0x0500
改了吗? 好好找一下软件问题吧。 STC跑卡尔曼不慢吗 funnybow 发表于 2014-5-12 12:37
STC跑卡尔曼不慢吗
还可以,勉勉强强 QJD_LZF 发表于 2014-5-11 15:56
好好找一下软件问题吧。
卡尔曼滤波做的不好应该是,但接了两个电容好了 xiaobendan 发表于 2014-5-11 08:41
XDATALEN EQU 0x0500
改了吗?
A51 启动问题里的是吗?这个是什么意思大侠? 原来是这样的
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
就明白了
谢谢大侠 xiaobendan 发表于 2014-5-17 17:56
原来是这样的
XDATALEN EQU 0
仔细看看启动文件,很明显是根据这个后面的数字进行XDATA的 ...
谢谢大侠
页:
[1]