作者biku35 (大魔王啦)
站内Electronics
标题[请益] 关於单晶片的程式问题
时间Thu Jun 21 04:32:01 2007
最近因为某些因素
接触到basic stamp及双轴加速度计
但程式内容看不太懂
尤其是後半段部份
他是如何读取受力及计算倾斜角度的部份
完全没辙
希望有贵人相助
http://www.parallax.com/detail.asp?product_id=28017
这是双轴加速度计.下面有他的相关文件可以参考
另外下面这是他网站所给的程式码
红色部份就是我看不懂的地方
希望有哪位高手行行好
解释一下他运作原理及程式为何要这样写
谢谢!!
'{$STAMP BS2}
'{$PBASIC 2.5}
' -----[ Revision History ]------------------------------------------------
' -----[ I/O Definitions ]-------------------------------------------------
Xin PIN 8 ' X input from Memsic 2125
Yin PIN 9 ' Y input from Memsic 2125
' -----[ Constants ]-------------------------------------------------------
' Set scale factor for PULSIN
Scale CON $200 ' 2.0 us per unit
HiPulse CON 1 ' measure high-going pulse
LoPulse CON 0
' -----[ Variables ]-------------------------------------------------------
xRaw VAR Word ' pulse from Memsic 2125
xmG VAR Word ' g force (1000ths)
xTilt VAR Word ' tilt angle
yRaw VAR Word
ymG VAR Word
yTilt VAR Word
disp VAR Byte ' displacement (0.0 - 0.99)
angle VAR Byte ' tilt angle
pos VAR Word
' -----[ Initialization ]--------------------------------------------------
Setup:
PAUSE 5000 ' let DEBUG window open
DEBUG "Memsic 2125 Accelerometer", CR,
"-------------------------"
' -----[ Program Code ]----------------------------------------------------
Main:
pos = 0
DO
GOSUB Read_Tilt ' reads G-force and Tilt
WRITE pos,Word xTilt,Word yTilt
DEBUG DEC xTilt, CR
DEBUG DEC yTilt, CR
pos = pos + 2
PAUSE 500 ' update about 5x/second
LOOP
END
' -----[ Subroutines ]-----------------------------------------------------
Read_G_Force:
PULSIN Xin, HiPulse, xRaw ' read pulse output
xRaw = xRaw */ Scale ' convert to uSecs
xmG = ((xRaw / 10) - 500) * 8 ' calc 1/1000 g
PULSIN Yin, HiPulse, yRaw
yRaw = yRaw */ Scale
ymG = ((yRaw / 10) - 500) * 8
RETURN
Read_Tilt:
GOSUB Read_G_Force
disp = ABS xmG / 10 MAX 99 ' x displacement
GOSUB Arcsine
xTilt = angle * (-2 * xmG.BIT15 + 1) ' fix sign
disp = ABS ymG / 10 MAX 99 ' y displacement
GOSUB Arcsine
yTilt = angle * (-2 * ymG.BIT15 + 1) ' fix sign
RETURN
' Trig routines courtesy Tracy Allen, PhD. (www.emesystems.com)
Arccosine:
disp = disp */ 983 / 3 ' normalize input to 127
angle = 63 - (disp / 2) ' approximate angle
DO ' find angle
IF (COS angle <= disp) THEN EXIT
angle = angle + 1
LOOP
angle = angle */ 360 ' convert brads to degrees
RETURN
Arcsine:
GOSUB Arccosine
angle = 90 - angle
RETURN
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.127.71.104