·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
l
251
º··Õè 15
㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § âÁ´ÙÅ MXD2125 à» ¹âÁ´ÙÅÇÑ´¤ÇÒÁàà § (accellerometer sensor) ¼Å§Ò¹¢Í§ Memsic Inc. (www.memsic.com) ÀÒÂ㹺ÃèصÇÑ µÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ ÊÒÁÒöÇÑ´ä´ ·§Ñé ¤ÇÒÁàà §ã¹àªÔ§ ¾ÅÈÒʵà (dynamic acceleration) ËÃ×ͤÇÒÁÊÑè¹ÊÐà·×͹ (vibration) áÅÐàªÔ§Ê¶ÔµÂÈÒʵà (static accelleration) «Ö§è ¡ç¤Í× ¤ÇÒÁàà §¨Ò¡áç⹠Á¶ ǧâÅ¡ (gravity)
15.1 ¤Ø³ÊÁºÑµ¢Ô ͧâÁ´ÙÅ MXD2125 l
ÇÑ´¤ÇÒÁàà §ã¹Â Ò¹ ±2g
l ¤ÇÒÁÅÐàÍÕ´ÊÙ§¡Ç Ò 1mg (g = 9.81m/s2) l â¤Ã§Êà ҧµÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ (µÑ§é ©Ò¡¡Ñ¹) ´ ÇÂà·¤â¹âÅÂÕ CMOS l
µÔ´µÑ§é ǧ¨Ã»ÃÐÁÇżÅÊÑÒ³ÁÒÀÒÂãµ µÇÑ ¶Ñ§à´ÕÂǡѹ
l
·¹¡ÒÃà»ÅÕÂè ¹á»Å§áººà©Õº¾Åѹ·Õ¤è ÇÒÁàà §¶Ö§ 50,000 g
l ÃѺáç´Ñ¹ä¿àÅÕÂ é §ä´ µ§Ñé áµ +3
¶Ö§ +5.25V
à¹×Íè §¨Ò¡µÑǶѧ¢Í§ MXD2125 à» ¹áºº SMD ·íÒãË ¡ÒùíÒä»ãª §Ò¹ÍÒ¨äÁ Êдǡ¹Ñ¡ ¨Ö§ä´ ¹íÒ MXD2125GL ÁÒµÔ´µÑ§é º¹á¼ ¹Ç§¨Ã¾ÔÁ¾ ¨Ò¡¹Ñ¹é µ Í¢ÒÍÍ¡ÁÒãË ÊÒÁÒöµÔ´µÑ§é º¹á¼§µ Íǧ¨Ã ËÃ×ÍàºÃ´ºÍà ´ä´ à¾×Íè ÍíÒ¹ÇÂǤÒÁÊдǡ㹡Ò÷´ÅͧáÅÐ㪠§Ò¹ ã¹ÃÙ»·Õè 15-1 áÊ´§Ãٻà ҧ¢Í§ âÁ´ÙÅáÅСÒèѴ¢Ò
252
l
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
µÑǵÃǨ¨Ñº¤ÇÒÁàà § 2 ᡹
(¡) âÁ´ÙÅ MXD2125 ¾Ã ÍÁ㪠§Ò¹
Tout 1
6 +5V
Yout 2
5 Xout
GND 3
4 GND
(¢) ¡ÒèѴ¢Ò¢Í§âÁ´ÙÅ MXD2125
ÃÙ»·Õè 15-1 Ãٻà ҧáÅСÒèѴ¢Ò¢Í§ MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà §
15.2 ËÅÑ¡¡Ò÷íÒ§Ò¹ ÀÒÂã¹ MXD2125 ä´ ºÃèصÑǵÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹·Õè¼ÅÔµ´ ÇÂà·¤â¹âÅÂÕ CMOS µÑǵÃǨ¨Ñº¤ÇÒÁàà §¹Õãé ª ËÅÑ¡¡ÒùíÒ¾Ò¤ÇÒÁà ͹¨Ò¡¡ Ò«·Õºè ÃèØÍÂÙÀ ÒÂã¹µÑǵÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ áÅÐÁÕµÇÑ ¡íÒà¹Ô´¤ÇÒÁà ͹·Õáè ¡¹¡ÅÒ§Êѧࡵ¨Ò¡ÃÙ»·Õè 15-2 ÀÒÂã¹µÑǵÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ÁÕª´Ø à·Íà âÁ¤Ñ»à» Ŷ١¨Ñ´àÃÕ§·Ñ§é ËÁ´ 4 ªØ´ ã¹áµ ÅР᡹ (᡹ X áÅÐ Y) ¶Ù¡àª×Íè Áµ ÍࢠÒÊÙÇ §¨Ã»ÃÐÁÇżÅÊÑÒ³à¾×Íè à»ÃÕºà·Õº¤ÇÒÁÊÁ´ØÅ㹡Òà ¡ÃШÒµÑǢͧ¤ÇÒÁà ͹ «Ö§è ¡ç¤Í× ¡ÒáÃШÒµÑǢͧ¡ Ò«ÀÒÂã¹µÑǵÃǨ¨Ñº â´ÂàÍÒµ ¾µØ ¨Ò¡¡ÒõÃǨ SCK
ǧ¨ÃÍÍÊ«ÔÅàÅàµÍà ÀÒÂã¹ ÊÑÒ³¹ÒÌÔ¡Ò Ç§¨ÃµÃǨÊͺ ¡Ò÷íÒ§Ò¹ÀÒÂã¹ µ Íà¹×Íè §
ǧ¨Ã¤Çº¤ØÁ ¤ÇÒÁà ͹
ǧ¨Ã¡Ãͧ ¤ÇÒÁ¶Õµè Òèí ¼ Ò¹
µÑǵÃǨ¨ÑºÍسËÀÙÁÔ
Tout
ǧ¨Ãáç´Ñ¹Í Ò§ÍÔ§
Vref
ǧ¨Ãá»Å§ÊÑÒ³ ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ
Dout X
ǧ¨Ãá»Å§ÊÑÒ³ ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ
Dout Y
Ê Ç¹»ÃѺᵠ§ÍÍ¿à«çµáÅÐ ÍѵÃÒ¢ÂÒÂÊíÒËÃѺâç§Ò¹ ǧ¨Ã¡Ãͧ ¤ÇÒÁ¶Õµè Òèí ¼ Ò¹
µÑǵÃǨ¨Ñº ¤ÇÒÁàà §áºº 2 ᡹
Vdd
GND
Vda
ÃÙ»·Õè 15-2 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ÀÒÂã¹âÁ´ÙÅ MXD2125
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
8
2
6
MEMSIC
7
4 Y+g
253
X+g
1
3
l
5
ÃÙ»·Õè 15-3 áÊ´§·ÔÈ·Ò§¤ÇÒÁàà §ã¹á¹Ç᡹ X áÅÐ Y ·ÕèµÑǵÃǨ¨Ñº¤ÇÒÁàà §ÇÑ´ä´ àÁ×èÍÁͧ¨Ò¡´ Ò¹º¹¢Í§ µÑǵÃǨ¨Ñº
¨Ñº¤ÇÒÁàà §ã¹áµ ÅÐ᡹¨Ð¶Ù¡Ê §ÍÍ¡·Ò§¢ÒÊÑÒ³ Dout X ÊíÒËÃѺ᡹ X áÅÐ Dout Y ÊíÒËÃѺ ᡹ Y ã¹ÃٻẺÊÑÒ³ PWM ·ÕÁè ¤Õ Ò ´ÔǵÕäé «à¡ÔÅé ᵡµ Ò§¡Ñ¹ä»µÒÁÊÑ´Ê Ç¹¢Í§»ÃÔÁÒ³¤ÇÒÁàà § ã¹áµ ÅÐ᡹ â´Â·ÔÈ·Ò§¤ÇÒÁàà §¨Ò¡¡ÒõÃǨ¨Ñº¢Í§á¡¹ X áÅÐ Y àÁ×Íè ÁͧµÑǵÃǨ¨Ñº ¨Ò¡´ Ò¹ º¹áÊ´§µÒÁÃÙ»·Õè 15-3 àÁ×Íè µÑǵÃǨ¨ÑºäÁ ä´ à¤Å×Íè ¹·Õáè ÅÐÍÂÙã ¹á¹ÇÃйҺ ÊÑÒ³ PWM àÍÒµ ¾µØ ·Õäè ´ ã¹áµ ÅÐ᡹ ¨ÐÁÕ¤Ò ´ÔǵÕäé «à¡ÔÅà» ¹ 50% ¤ÒºàÇÅҢͧÊÑҳ෠ҡѺ 10 ËÃ×Í 2.5 ÁÔÅÅÔÇ¹Ô Ò·Õ¢¹Öé ÍÂÙ¡ ºÑ àºÍà ¢Í§ µÑǵÃǨ¨Ñº ÊíÒËÃѺ㹷չè ãÕé ª àºÍà MXD2125GL ¨Ö§ãË Ê Ñ Ò³·ÕÁè ¤Õ ÒºàÇÅÒ 10 ÁÔÅÅÔÇ¹Ò·Õ ÁÕÊ´Ñ Ê Ç¹ ¤ÇÒÁäǵ ͤ Ò´ÔǵÕäé «à¡ÔÅ·Õè 12.5%/g ¹Í¡¨Ò¡¡ÒùíÒâÁ´ÙÅ MXD2125 ä»ãª 㹡ÒÃÇÑ´¤ÇÒÁàà §ã¹á¹ÇÃдѺáÅ Ç ¹Ñ¡¾Ñ²¹ÒÂѧ¹ÔÂÁ ¹íÒä»»ÃÐÂØ¡µ 㪠ÊÒí ËÃѺ§Ò¹µÃǨ¨Ñº¤ÇÒÁÅÒ´àÍÕ§¢Í§ÍØ»¡Ã³ µÒ §æ ·Õµè ´Ô µÑ§é ࢠҡѺâÁ´ÙÅ MXD2125 à¾×Íè ¤Çº¤ØÁá¹Ç¡ÒÃà¤Å×Íè ¹·Õè ઠ¹ ¤Çº¤ØÁËع ¹µ äÁ ãË àÍÕ§µÑÇÁÒ¡à¡Ô¹ä» ËÃ×Íà¾×Íè à¾ÔÁè ¡íÒÅѧ¢Ñº¢Í§ ËØ ¹Â¹µ àÁ×èÍà´Ô¹·Ò§¼ Ò¹·ÕèÅÒ´ªÑ¹ ËÃ×ÍáÁ ¡ÃзÑ觤Ǻ¤ØÁ·ÔÈ·Ò§¡ÒéÒÂÀÒ¾¢Í§â»Ãà¨ç¡àµÍà 㹠µíÒá˹ §ÁØÁµ Ò§æ
15.3 ¡ÒûÃÐÂØ¡µ 㪠§Ò¹âÁ´ÙÅ MXD2125 µÃǨ¨Ñº¤ÇÒÁÅÒ´àÍÕ§ àÁ×Íè ᡹ã´æ ¢Í§µÑǵÃǨ¨Ñºà¡Ô´¡ÒÃàÍÕ§µÑÇ·íÒÁØÁ¡Ñºá¹Ç´Ô§è ¢Í§âÅ¡ ¨ÐÊ §¼ÅãË à¡Ô´¤ÇÒÁäÁ ÊÁ´ØŢͧ¡ÅØ Á͹ØÀÒ¤¡ Ò«·ÕèºÃèØÍÂÙ ÀÒÂã¹µÑǵÃǨ¨Ñº ·íÒãË ¡ÒùíÒ¾Ò¤ÇÒÁà ͹ÀÒÂã¹äÁ ÊÁ´ØÅ Ê §¼Åµ Í¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò´ÔǵÕäé «à¡ÔŢͧÊÑÒ³ PWM ·Õ¢è ÒàÍÒµ ¾µØ ¢Í§áµ ÅÐ᡹·Õàè ¡Ô´¡ÒÃàÍÕ§ µÑÇ â´Â¤ Ò´ÔǵÕéä«à¡ÔÅ·Õèà»ÅÕè¹á»Å§ä»¨Ò¡ÊÀÒÇл¡µÔ¹Ñ鹨ÐÊÑÁ¾Ñ¹¸ ¡ÑºÁØÁ·ÕèàÍÕ§ä»ã¹áµ ÅÐ᡹
254
l
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
15.3.1 ¡ÒäíҹdzÁØÁàÍÕ§¨Ò¡µÑǵÃǨ¨Ñº ÊíÒËÃѺâÁ´ÙÅÇÑ´¤ÇÒÁàà § MXD2125GL ¨ÐãË Ê Ñ Ò³¾ÑÅÊ ·àÕè ÍÒµ ¾µØ ÊíÒËÃѺ¢Ò X-out áÅÐ Y-out ·ÕÁè ´Õ ÇÔ µÕäé «à¡ÔÅ 50% ¤ÇÒÁ¶Õè 100Hz ËÃ×ÍÁÕ¤ÇÒÁ¡Ç Ò§¾ÑÅÊ 10 ÁÔÅÅÔÇ¹Ô Ò·Õ ã¹ÀÒÇзÕáè ¡¹¹Ñ¹é æ ÍÂÙ ã¹á¹ÇÃдѺ¾Í´Õ(äÁ àÍÕ§) áÅШÐãË ¤ Ò´ÔǵÕéä«à¡ÔÅà»ÅÕè¹á»Å§ä» 12.5% àÁ×èͤÇÒÁàà §à»ÅÕè¹ á»Å§ä»à· ҡѺ¤ Ò g ¾Í´Õ â´Â¢¹Ò´¢Í§ÁØÁàÍÕ§«Ö§è ¾Í¨Ðà·Õºà¤Õ§¡Ñº¤ÇÒÁàà §ã¹Ë¹ Ç g ·Õàè ÍÒµ ¾µØ X-out áÅÐ Y-out áÊ´§äÇ µÒÁµÒÃÒ§·Õè 15-1 ´Ñ§¹Ñ¹é ¤ÇÒÁàà §à¹×Íè §¨Ò¡á¡¹ã´á¡¹Ë¹Ö§è ã¹Ë¹ ǨíҹǹàµçÁ෠Ңͧ¤ Ò g â´ÂÊÁÁµÔãË à» ¹ a ¨ÐÊÑÁ¾Ñ¹¸ ¡Ñº¤ÇÒÁ¡Ç Ò§¢Í§ÊÑÒ³¾ÑÅÊ ºÇ¡ã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ «Ö觡íÒ˹´à» ¹ t «Öè§ÊÒÁÒö ÊÃػ໠¹ÊÁ¡Ò÷ҧ¤³ÔµÈÒÊµÃ ä´ ´Ñ§¹Õé t − 0.5 ....................................................................(ÊÁ¡Òà a = 10 0.125
ÁØÁàÍÕ§ (ͧÈÒ)
àÍÒµ ¾µØ ·Õ¢è Ò Xout ËÃ×Í Yout (g)
90
1.000
85
0.996
80
0.985
70
0.940
60
0.866
45
0.707
30
0.500
20
0.342
10
0.174
5
0.087
0
0.000
15.1)
µÒÃÒ§·Õè 15-1 áÊ´§¤ Ò g ·Õàè ÍÒµ ¾µØ Xout ËÃ×Í Yout ¢Í§âÁ´ÙÅ MXD2125 ·ÕÁè ÁØ àÍÕ§¤ Òµ Ò§æ
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
l
255
¡ÒäíҹdzÁØÁàÍÕ§àÁ×Íè à·Õº¡Ñºá¡¹ X ËÃ×Í Y àÍÕ§·íÒÁØÁ α ¡Ñºá¹ÇÃдѺ ¨Ò¡ÃÙ»µÑÇÍ ҧ á¹Ç´Ô§è
ax = g sin α
:
α
á¹ÇÃдѺ
C
ÃйҺ¢Í§µÑǵÃǨ¨Ñº ·ÕÁè ÁØ Áͧ´ Ò¹¢ Ò§
¨Ò¡ÃÙ» àÁ×Íè ᡹ X ¢Í§µÑǵÃǨ¨Ñº·íÒÁØÁà§Â α ͧÈҡѺá¹ÇÃдѺ ÊÑÒ³¾ÑÅÊ ·ÍÕè Ò ¹ä´ ¨Ò¡¢ÒÊÑÒ³ X-out à¹×Íè §¨Ò¡¡ÒÃàÍÕ§µÑǨÐà·Õºà¤ÕÂ§ä´ ¡ºÑ »ÃÔÁÒ³¤ÇÒÁàà § ax ax = sin α g
â´Â
a x = g sin α
´Ñ§¹Ñé¹
¨Ðä´
a α = sin −1 x g
........................................(ÊÁ¡ÒÃ
15.2)
¤ Ңͧ ax ÊÒÁÒö¤íҹdz¨Ò¡ÊÁ¡Òà 15.1 â´Â¤ Ò·Õäè ´ ¨Ðà» ¹¨íҹǹàµçÁ෠Ңͧ¤ Ò g «Ö§è ¨Ð à» ¹¡ÒÃËÑ¡Å Ò§µÑÇÊ Ç¹ gã¹ÊÁ¡Òà 15.2 ä»ã¹µÑÇ ¡ÒäíҹdzËÒ¤ ÒÁØÁàÍÕ§¨ÐãË ¼ÅÅѾ¸ ä´ áÁ ¹ÂíÒ㹪 ǧ ±60 ͧÈÒ «Ö§è ¶×ÍÇ ÒÂѧ¾Í»ÃÐÁҳ໠¹ àªÔ§àÊ ¹ä´ àÁ×Íè µ ͧ¡ÒûÃÐÁÒ³ÁØÁàÍÕ§¨Ò¡ÊÁ¡Òà 15.2 ãË à» ¹ÊÁ¡ÒÃàªÔ§àÊ ¹à¾×Íè à˵ؼźҧ»ÃСÒà ઠ¹ »ÃÐËÂѴ˹ ǤÇÒÁ¨íÒ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ ËÃ×ͪ ÇÂ㹡ÒþѲ¹Ò´ ÇÂÀÒÉÒáÍÊà«ÁºÅÕ«§Öè ÂÒ¡µ Í ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ Í arcsin (sin-1 ) µÒÁÊÁ¡Òà 15.2 ¨Ö§Å´ÃÙ»ä´ à» ¹ α = kax......................................................(ÊÁ¡Òà 15.3) ª ǧÁØÁ 㹡ÒÃÇÑ´
k(arc/g)
¤ÇÒÁ¼Ô´¾ÅÒ´
±10
57.50
±0.02%
±20
58.16
±0.16%
±30
59.04
±0.48%
±40
60.47
±1.13%
±50
62.35
±2.24%
µÒÃÒ§·Õè 15-2 áÊ´§¤ Ò¤ÇÒÁ¼Ô´¾ÅÒ´·Õàè ¡Ô´¢Ö¹é ¨Ò¡¡ÒõÃǨ¨Ñº¤ÇÒÁÅÒ´àÍÕ§¢Í§âÁ´ÙÅ MXD2125 àÁ×Íè »ÃÐÁÒ³¤ Ò´ ÇÂÊÁ¡Òà 15.3
256
l
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
¡Ò÷´Åͧ·Õè 23 µÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº âÁ´ÙÅÇÑ´¤ÇÒÁàà § MXD2125 㹡Ò÷´Åͧ¹Õàé » ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 à¾×Íè µÔ´µ Í ¡Ñº MXD2125 «Ö§è ÁÕ¤³ Ø ÊÁºÑµÇÔ ´Ñ ¤ÇÒÁàà §ä´ 2 ᡹¾Ã ÍÁ¡Ñ¹ â´Â㹡Ò÷´Åͧ¹Õ¨é йíÒä»ãª Ç´Ñ ¤ÇÒÁàÍÕ§¡Ñº ÃйҺ·´Êͺ·Õµè ´Ô µÑ§é ࢠҡѺâÁ´ÙÅ MXD2125 ¹Õé 23.1 µ Íǧ¨ÃµÒÁÃÙ»·Õè L23-1 +5V 31 C2 1/50V
RESET 9 R1 10k
RST
+5V
C1 0.1/50
40
5 6 4
16 P3.6 17 P3.7
IC1 P89V51RD2 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
C5 0.1/ 50V
R2 10k x8
32
+5V
2 R/W
DSP1 LCD 16x2
E RS D7 D6 D5 D4 D3 D2 D1 D0 14 13 12 11 10 9 8 7
3
VR1 10k
1
33 34 35 36 37 38 39
+5V
1 P1.0 2 P1.1
20
R3 4k7
R4 4k7
6 5 Xout 2 Yout MOD1 3 MXD2125 4
18 C3 33pF
19 C4 33pF
XTAL1 11.0592MHz
ÃÙ»·Õè L23-1 ǧ¨Ã·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà §
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
l
257
/*——————————————————————————————————————————————————————————————————————————*/ // Program : Tilt sensing example by MXD2125 // Description : Display Tilt value sensing by MXD2125 // Filename : l2301.c // C compiler : RIDE 51 V6.4.35 /*——————————————————————————————————————————————————————————————————————————*/ #include <REGLV51RD2.h> // Header file register for P89V51RD2BN #include <lcdV51.h> // Library for LCD display #include <math.h> // Library for LCD display enum{X,Y}; // Enum axis X and Y sbit x_axis = P1^0; // Configuration DATA pin sbit y_axis = P1^1; // Configuration SCK pin /************************* Function Read angle ****************************/ float gforce(char axis) { unsigned int mc,i; // Variable for internal function float t1,a; x_axis = 1; // Initial logic low y_axis = 1; // Initial logic low TMOD &=0x0F; // Configuration Timer1 mode 2 (16-bit counter) TMOD |=0x10; TH1 = 0x00; // Initial Timer1 counter value to zero TL1 = 0x00; TF1 = 0; // Clear overflow flag TR1 = 0; // Start Timer1 for(i=0;i<2;i++) // Loop 2 times to average data { if(axis==X) while(!x_axis); // Detect rising pulse else while(!y_axis); // Detect rising pulse TR1 = 1; // Start timer count if(axis==X) while(x_axis); // Detect falling pulse else while(y_axis); // Detect rising pulse TR1 = 0; // TF1 = 0; // mc = TH1; // mc <<= 8; // mc += TL1; // TH1 = 0x00; // TL1 = 0x00; t1 = (float)mc*0.0005425; a = ((t1/10.0)-0.5)/0.125; } return(a);
Stop timer Clear overflow flag Keep high byte Shift to high byte Keep low byte Initial Timer1 counter value to zero // Calculate high pulse // Calculate G force // Return G force
} /********************************* Main Program ******************************/ void main() { float ax, // Variable for storing G force of X axis old_ax, // Variable for storing previous G force value of X axis
â»Ãá¡ÃÁ·Õè P23-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § (ÁÕµÍ )
258
l
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
x_angle, ay, old_ay, y_angle;
// Variable for storing G force of Y axis // Variable for storing previous G force value of Y axis
lcd_init(); lcd_puts(0x80,”Deg(x):”); lcd_puts(0xC0,”Deg(y):”); while(1) { ax = gforce(X); ay = gforce(Y);
// // // //
Initial LCD module Show X-axis G force Show Y-axis G force Infinite loop
// Read X-axis G force // Read Y-axis G force
if(ax==0.0) // Protect G force value to non-zero ax = 0.0001; if(ay==0.0) ay = 0.0001; x_angle = (360.0*asin(ax))/6.283; // Convert G force to angle of X-axis y_angle = (360.0*asin(ay))/6.283; // Convert G force to angle of Y-axis if(old_ax != ax) // Compare previous and new G force equal? { lcd_puts(0x89,” “); // Clear previous G force display inttolcd(0x89,(int)x_angle); // Display new G force value } if(old_ay != ay) // Compare previous and new G force equal? { lcd_puts(0xC9,” “); // Clear previous G force display inttolcd(0xC9,(int)y_angle); // Display new G force value } old_ax = ax; // Keep G force value for next comparison old_ay = ay; // Keep G force value for next comparison } }
¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õéà» ¹¡ÒÃáÊ´§¼ÅÁØÁàÍÕ§¨Ò¡á¹ÇÃдѺ·Õèä´ ¨Ò¡¡ÒõÃǨÇÑ´¢Í§âÁ´ÙÅ MXD2125 ·Ñ§é Êͧ᡹¤×Í X áÅÐ Y ·Õâè Á´ÙÅ LCD Í ҧµ Íà¹×Íè § à¹×Íè §¨Ò¡¡Òäíҹdz¼ÅÅѾ¸ ¢Í§¢ ÍÁÙŷѧé Êͧ¹Ñ鹨ÐãË ¼ÅÅѾ¸ à» ¹àÅ¢·È¹ÔÂÁ ´Ñ§¹Ñ鹡 ͹¡ÒÃáÊ´§¼Å·ÕèâÁ´ÙÅ LCD à¾×èÍÅ´à¹×éÍ·Õè¢Í§Ë¹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁÊíÒËÃѺ¡ÒÃáÊ´§¼ÅẺàÅ¢·È¹ÔÂÁ¨Ö§á»Å§ª¹Ô´¢ ÍÁÙŢͧÁØÁ·Õè¤íÒ¹Ç³ä´ ã¹Ë¹ ÇÂͧÈÒãË à» ¹ ¨íҹǹàµçÁ int àÊÕ¡ ͹ ËÅѧ¨Ò¡¹Ñ¹é ¨Ðà»ÃÕºà·Õº¢ ÍÁÙÅà´ÔÁáÅÐãËÁ ·ÍÕè Ò ¹ä´ ¶ ÒÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§¨Ö§¨Ð¹íÒ ¤ ÒãËÁ ä»áÊ´§¼Å ã¹Ê ǹ¢Í§¡ÒäíҹdzËÒ¤ Ò¤ÇÒÁàà §ã¹Ë¹ ǨíҹǹàµçÁ෠Ңͧ g ã¹áµ ÅÐ᡹¹Ñ¹é ÊÒÁÒö¤íҹdz ä´ ¨Ò¡¿ §¡ ª¹Ñè gforce ÀÒÂã¹â»Ãá¡ÃÁ«Ö§è ¡ç¤Í× ÊÁ¡Òà 15.1 áÅÐ 15.2 ¹Ñ¹è àͧ ´Ñ§¹Ñ¹é àÁ×Íè µ ͧ¡Òäíҹdz ÁØÁ ¡çµÍ §¹íÒ¤ Ò¤ÇÒÁàà §´Ñ§¡Å ÒÇä»á·¹ã¹ÊÁ¡Òà 15.2 ¹Ñ¹è ¤×Í
â»Ãá¡ÃÁ·Õè P23-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § (ÁÕµÍ )
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2
a αx = sin−1 x g
;ÊíÒËÃѺ᡹ X
a αY = sin−1 Y g
;ÊíÒËÃѺ᡹ Y
l
259
â´Â¨ÐÊÑ§à¡µÇ Ò㹡ÒäíҹdzËÒÁØÁ¹Ñ¹é ¨ÐÁÕ¿§ ¡ ª¹Ñè arcsin ࢠÒÁÒà¡ÕÂè Ç¢ ͧ «Ö§è ¿ §¡ ª¹Ñè ¹Õ¶é ¡Ù ºÃèØäÇ ÀÒÂã¹äźÃÒÃÕ math.h ´Ñ§¹Ñ¹é µÍ¹µ ¹¢Í§â»Ãá¡ÃÁ¹Õ¨é §Ö µ ͧ¼¹Ç¡äźÃÒÃÕ¹äÕé Ç ´Ç Â Ê Ç¹¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè arcsin ¹Ñ¹ é ¨Ð¤íҹdzáÅСÒä׹¤ ÒÁØÁÍÍ¡ÁÒã¹Ë¹ ÇÂàÃà´Õ¹ áµ ã¹·Õ¹è µÕé Í §¡Òä ÒÁØÁà» ¹Í§ÈÒ ¨Ö§µ ͧá»Å§ ˹ Ç¢ͧÁØÁ¨Ò¡Ë¹ ÇÂàÃà´Õ¹ãË à» ¹Í§ÈÒ´ Ç¡Òäٳ 360 ࢠÒä»·Õ¼è ÅÅѾ¸ áÅ ÇËÒô Ç 6.283 (¤ Ңͧ 2π àÃà´Õ¹¤×Í 2x3.14159 = 6.283) l ¿ §¡ ª¹ Ñè gforce
㪠¤Òí ¹Ç³¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ºÇ¡ â´ÂÍÒÈÑÂä·àÁÍà 1 à» ¹µÑǨѺàÇÅÒ·Õäè ´ ¨Ò¡¢ÒÊÑÒ³ X-out áÅÐ Y-out ¢Í§âÁ´ÙÅ MXD2125 â´Â¨íҹǹáÁªÕ¹ä«à¡ÔÅ·Õ¹è ºÑ ä´ ¨Ò¡ä·àÁÍà ¨Ð¶Ù¡á»Å§à» ¹àÇÅÒã¹Ë¹ Ç ÁÔÅÅÔÇ¹Ô Ò·Õ áÅ Çà¡çºäÇ ·µÕè ÇÑ á»Ã t1 à¾×Íè ¹íÒ令íҹdz¤ Ò¤ÇÒÁàà §ã¹Ë¹ ǨíҹǹàµçÁ෠Ңͧ g ¨Ò¡ÊÁ¡Òà 15.1 ÊíÒËÃѺ¿ §¡ ª¹Ñè ¹ÕÁé ¾Õ ÒÃÒÁÔàµÍà axis ÊíÒËÃѺ¡íÒ˹´á¡¹¤ÇÒÁàà §·Õµè Í §¡ÒÃÍ Ò¹ â´Â¾ÒÃÒÁÔàµÍà ¶¡Ù ¹ÔÂÒÁ äÇ ã¹µÍ¹µ ¹¢Í§â»Ãá¡ÃÁã¹ÃٻẺ Enumerate (¤Å Ò¡Ѻ¡ÒùÔÂÒÁ´ ÇÂÁÒâ¤Ã) ´Ñ§¹Õé enum{X,Y};
¼Ù¾ ² Ñ ¹ÒÍÒ¨à»ÅÕÂè ¹ä»ãª ä·àÁÍà 0 ËÃ×Í 2 à» ¹µÑǹѺàÇÅÒá·¹ä·àÁÍà 1 â´Âà»ÅÕÂè ¹à¾Õ§ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº ¢Í§ä·àÁÍà ෠ҹÑé¹ ÊíÒËÃѺÃÒÂÅÐàÍÕ´¢Í§âÁ´ÙÅ MXD2125 ÂѧÁÕÊ Ç¹à¾ÔèÁàµÔÁ·Õè¹Í¡à˹×ͨҡµÑÇÍ ҧ¡Òà ·´Åͧ¹Õ¼é ¾Ù ² Ñ ¹ÒÊÒÁÒöÈÖ¡ÉÒ¢ ÍÁÙÅà¾ÔÁè àµÔÁä´ ¨Ò¡ datasheet ¢Í§¼Ù¼ ÅÔµ l
â»Ãá¡ÃÁ·Õè P23-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § (¨º) 23.2 à¢Õ¹â»Ãá¡ÃÁ·Õè P23-1 áÅ Ç·íÒ¡ÒÃá»Å§ãË à» ¹ä¿Å .hex ´ Ç RC51 ¼ Ò¹¡Ãкǹ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ¢Í§ Rkit-51 â´Â㪠RIDE ä´ ä¿Å l2301.hex ´Òǹ âËŴŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 â´Âµ ͧź ¢ ÍÁÙÅ¡ ͹â»Ãá¡ÃÁŧä»ãËÁ 23.3 ¨ ÒÂä¿ãË á¡ Ç§¨Ã ·´ÊͺàÍÕ§ÃйҺ·Õµè ´Ô µÑ§é âÁ´ÙÅ MXD2125 ·íÒä´ §Ò Âæ â´Â¡ÒÃàÍÕ§ºÍà ´·´Åͧ·Õµè ´Ô µÑ§é âÁ´ÙÅ MXD2125 à¾×Íè Êѧࡵ¼Å¡ÒÃà»ÅÕÂè ¹á»Å§¤ ÒÁØÁã¹áµ ÅÐ᡹·Õáè Ê´§¼Å¼ Ò¹âÁ´ÙÅ LCD ÃٻẺ¡ÒÃáÊ´§¼Å¢Í§Ç§¨Ã·Õâè Á´ÙÅ LCD à» ¹´Ñ§¹Õé
Deg(x):
xxx
Deg(y):
xxx
â´Â·Õè xxx ¤×ͤ ÒÁØÁã¹Ë¹ ÇÂͧÈÒ·ÕÇè ´Ñ ä´
260
l
·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2