åã®2ã€ã®ããŒãã§ã¯ãGUIã®äœææ¹æ³ãã¹ããããŒã¢ãŒã¿ãŒã®å¶åŸ¡ã®éå§æ¹æ³ãããã³USBãã©ãã·ã¥ãã©ã€ãäžã®ãã¡ã€ã«ã®æäœã®æŽçæ¹æ³ã«ã€ããŠèª¬æããŸããã
ä»æ¥ã¯ãå°å·ããã»ã¹ããã€ã©ã€ãç»é¢ãžã®å°å·ã¬ã€ã€ãŒã®åºåãããã³æ®ãã®ãããã»ã©éèŠã§ã¯ãªãããšã«ã€ããŠèª¬æããŸã
ã4ãã¬ã€ã€ãŒã®ç»åã®ãã€ã©ã€ã衚瀺ãžã®åºåã
5.ç §æãšãã¡ã³ã®å¶åŸ¡ãèšå®ã®èªã¿èŸŒã¿ãšä¿åãªã©ãããããå°ããªããšã
6.å¿«é©ããšäŸ¿å©ãã®ããã®è¿œå æ©èœã
- ããŒã1ïŒ 1ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã
- ããŒã2ïŒ 2.USBãã©ãã·ã¥ãã©ã€ãäžã®ãã¡ã€ã«ã·ã¹ãã ã®æäœã3.ãã©ãããã©ãŒã 移åçšã®ã¹ããããŒã¢ãŒã¿ãŒå¶åŸ¡ã
- 3: 4. . 5. , .. 6. .
4.
4.1 -
ç¹æ®ãªåšèŸºæ©åšãåããŠããªããã€ã¯ãã·ã¹ãã ã¯ãMIPIã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠ7400äžãã¯ã»ã«/ç§ïŒ2560x1440解å床ã20ãã¬ãŒã /ç§ïŒã®é床ã§é«è§£å床ãããªãã¯ã¹äžã®ç»åãã©ã®ããã«æŽæ°ã§ããŸãããïŒåçïŒ16MBã®SDRAMãæ¥ç¶ãããFPGAãš2ã€ã®MIPIã€ã³ã¿ãŒãã§ã€ã¹ãããïŒSSD2828ïŒã䜿çšããŸãããã£ã¹ãã¬ã€ã¯è«ççã«2ã€ã«åå²ãããŠããããããããç¬èªã®åå¥ã®ãã£ãã«ã«ãã£ãŠåŠçãããããã2ã€ã®ãã€ã¯ãåè·¯ã¯äŸ¡å€ããããŸãããããã£ãŠã1ã€ã«2ã€ã®ãã£ã¹ãã¬ã€ãåŸãããŸãã
衚瀺çšã®ç»åã¯4ã€ã®SDRAMãã³ã¯ã®1ã€ã«ä¿åãããFPGAãããã¯SDRAMã«ãµãŒãã¹ãæäŸããSDRAMããSSD2828ã«ç»åãåºåããŸãã FPGAã¯ãSSD2828ããã³ãã©ã€ãã®åçŽããã³æ°Žå¹³åæä¿¡å·ãçæããŸã
SSD2828ã®ããããã«24ã©ã€ã³ïŒ8R 8G 8BïŒãè¶ ãããã¯ã»ã«ã«ã©ãŒå€ã®é£ç¶ã¹ããªãŒã ããã¬ãŒã ã¬ãŒãã¯çŽ20Hzã§ããããšãããããŸãã
FPGAã¯ããã€ã¯ãããã»ããµãç»åãéä¿¡ã§ããã·ãªã¢ã«ã€ã³ã¿ãŒãã§ã€ã¹ïŒSPIïŒã§ãã€ã¯ãã³ã³ãããŒã©ã«æ¥ç¶ãããŠããŸããããã¯ãã±ããã§éä¿¡ãããåãã±ããã«ã¯ç»åã®1è¡ãå«ãŸããŸãïŒè¡ã¯ãã£ã¹ãã¬ã€ã®ç蟺ã«æ²¿ã£ãŠã«ãŠã³ããããŸã-1440ãã¯ã»ã«ïŒããã®ããŒã¿ã«å ããŠããã±ããã«ã¯ãSDRAMãã³ã¯çªå·ãåç·çªå·ãããã³ãã§ãã¯ãµã ïŒCRC16ïŒãå«ãŸããŠããŸãã FPGAã¯ãã®ãã±ãããåãå ¥ãããã§ãã¯ãµã ããã§ãã¯ãããã¹ãŠãæ£åžžã§ããå Žåã¯ãããŒã¿ãé©åãªSDRAMé åã«ä¿åããŸãã CRCãäžèŽããªãå ŽåãFPGAã¯ãåãããã€ã¯ãããã»ããµã«æ¥ç¶ãããŠãããã³ã®1ã€ã«ä¿¡å·ãå ¬éããŸããããã«ããããã€ã¯ãããã»ããµã¯ããŒã¿ãæ£åžžã«å°çããªãã£ãããšãèªèããéä¿¡ãç¹°ãè¿ãããšãã§ããŸããå®å šãªã€ã¡ãŒãžãåŸãã«ã¯ããã€ã¯ãããã»ããµã¯2560åã®ãã®ãããªãã±ãããFPGAã«éä¿¡ããå¿ èŠããããŸãã
ãã±ããå ã®ç»åããŒã¿ã¯ããã圢åŒã§è¡šãããŸãã1-ãã¯ã»ã«ãç¹ç¯ãã0-ãã¯ã»ã«ãæããªããŸããæ®å¿µãªãããããã«ãããå°å·ãããã¬ã€ã€ãŒã®ãšããžã®ã°ã¬ãŒã¹ã±ãŒã«ãã©ãŒãæŽçããå¯èœæ§ãå®å šã«æé€ãããŸã-ã¢ã³ããšã€ãªã¢ã·ã³ã°ããã®ãŒããæ¹æ³ãæŽçããã«ã¯ãFPGAã®æ§æïŒãã¡ãŒã ãŠã§ã¢ïŒãæžãçŽãå¿ èŠããããŸããããŸã æºåãã§ããŠããŸãããç§ãFPGAã䜿çšããŠããã®ã¯é·ãããŠé·ãããªããããå®éã«ã¯ãã¹ãŠããªãã¹ã¿ãŒããå¿ èŠããããŸãã
ãã€ã¯ãããã»ããµã¯ãããŒã¿ãã±ããã«å ããŠã衚瀺çšã®ããŒã¿ãèªã¿åããç»ååºåããªã³/ãªãããSDRAMãã³ã¯ã瀺ãå¶åŸ¡ã³ãã³ããéä¿¡ããããšãã§ããŸãã
SSD2828ããããSPIãä»ããŠãã€ã¯ãã³ã³ãã¥ãŒã¿ã«æ¥ç¶ãããŠããŸããããã¯ããªã³ã«ãããšãã«ã¬ãžã¹ã¿ãæ§æããã¹ãªãŒãã¢ãŒããŸãã¯ã¢ã¯ãã£ãã¢ãŒãã«è»¢éããããã«å¿ èŠã§ãã
ãã€ã¯ãããã»ããµãšFPGA / SSD2828ã®éã«ã¯ãããã«ããã€ãã®ã©ã€ã³ããããŸããåãã€ã¯ãåè·¯ã®ãªã»ããä¿¡å·ãšã¢ã¯ãã£ããªãããéžæä¿¡å·ïŒãããéžæïŒã§ãã
ç§ã®æèŠã§ã¯ãäžè¬çã«ããã®äœæ¥èšç»ã¯æé©ãšã¯ã»ã©é ããã®ã§ããããšãã°ã䞊åå€éšã¡ã¢ãªã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠFPGAããã€ã¯ãããã»ããµã«æ¥ç¶ããæ¹ãè«ççã§ãããããŒã¿ã¯20 MHzã®åšæ³¢æ°å¶éã§SPIãä»ãããããã¯ããã«é«éã«è»¢éãããŸãïŒåšæ³¢æ°ãäžæãããšãFPGAã¯ããŒã¿ã®åä¿¡ãæ£åžžã«åæ¢ããŸãïŒãããã«ããªã»ããä¿¡å·ã¯ç©ççãªãªã»ããFPGAå ¥åã«æ¥ç¶ãããŠããŸããããéåžžã®è«çä¿¡å·ãšããŠãã€ãŸãFPGAã¯ããŒããŠã§ã¢ãªã»ãããå®è¡ããŸããããããŠãããã¯ãŸãã以äžã§è°è«ãããæ®é ·ãªåè«ãæŒããŸããã
ã¡ãŒã«ãŒã®ãœãŒã¹ã³ãŒããç解ããããšã§ãããããã¹ãŠãèŠã€ããŸãããFPGAãæäœããæ©èœããœãŒã¹ã³ãŒããããã®ãŸãŸè»¢éããŸãããããããã©ã®ããã«æ©èœãããããŸã å®å šã«ã¯ç解ããŠããŸããã§ããã幞ããªããšã«ãäžåœäººã¯èªåãã¡ã®ã³ãŒããïŒäžåœèªã§ïŒååã«ã³ã¡ã³ãã¢ãŠãããŠããŠãããã»ã©å°é£ãªããããç解ããããšãã§ããŸãã
4.2å°å·ãã¡ã€ã«ããã®ã¬ã€ã€ãŒã®èªã¿åã
ããŠãå®æããç»åã®åºåãå€ããå°ãªããæŽçããŸããã次ã«ããããã®ç»åãå°å·çšã«æºåããããã¡ã€ã«ããã©ã®ããã«æœåºããããã«ã€ããŠå°ã説æããŸãã .Pwsã.photonsã.photonã.cbddlpãã¡ã€ã«ã¯ãåºæ¬çã«äžé£ã®ã¬ã€ã€ãŒã€ã¡ãŒãžã§ãããã®ãã©ãŒãããã¯ãç§ãç¥ãéãããã®ãããªåè·¯ïŒãã€ã¯ãã³ã³ãããŒã©ãŒ-FPGA-SDRAM-SSD2828ïŒã§ããŒããäœããšããã¢ã€ãã¢ãæãã€ããäžåœã®äŒç€ŸChituããæ¥ãŸãããé«ã30mmãåã¬ã€ã€ãŒã®åãã0.05mmã®ã¢ãã«ãå°å·ãããšããŸããã¹ã©ã€ãµãŒããã°ã©ã ã¯ããã®ã¢ãã«ãæå®ãããåãã®ã¬ã€ã€ãŒã«ã«ããããããããã«ã€ããŠã€ã¡ãŒãžã圢æããŸãã
ãããã£ãŠã1440x2560ã®è§£å床ã§30 / 0.05 = 600ã®ç»åãååŸãããŸãããããã®ç»åã¯åºåãã¡ã€ã«ã«ããã¯ããããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãå«ãããããŒãããã«å ¥åããããã®ãããªãã¡ã€ã«ã¯ãã§ã«ããªã³ã¿ãŒã«éä¿¡ãããŠããŸããã¬ã€ã€ãŒã€ã¡ãŒãžã¯1ãããã®æ·±ãã§ãRLEã¢ã«ãŽãªãºã ã«ãã£ãŠäžåºŠã«1ãã€ããã€å§çž®ãããŸããæäžäœãããã¯ã«ã©ãŒå€ã瀺ããæäžäœ7ãããã¯ç¹°ãè¿ãåæ°ã瀺ããŸãããã®æ¹æ³ã§ã¯ãã¬ã€ã€ãŒã€ã¡ãŒãžã460 KBããçŽ30ã50ã«å§çž®ã§ããŸããããªã³ã¿ã¯å§çž®ãããã¬ã€ã€ãŒãèªã¿åãã解åããŠãFPGAã«1è¡ãã€éä¿¡ããŸãã
ã¡ãŒã«ãŒã¯ããã次ã®ããã«è¡ããŸãã
- â 1, 1, 0. , (1440), .
- , 1440 (180 ).
- FPGA .
ããã¯ãäžåœäººã䜿çšãã3段éã®æ¹æ³ã§ããçµå±ã®ãšãããããã¯ãã¬ã€ã€ãŒã®ç»åãã€ã³ã¿ãŒãã§ã€ã¹ãã£ã¹ãã¬ã€ã«çž®å°ããŠè¡šç€ºããäœãå°å·ãããŠãããããŠãŒã¶ãŒã«ç€ºãããšãã§ããããã«ããããã«è¡ãããŸããããã®ç»åã¯ããã€ãé åãã圢æããããã®ã§ãããã³ãŒãããããããããããã«ããã圢æããããšã劚ãããã®ã¯æããã§ã¯ãããŸãããããŸããåããµã€ã¯ã«ã§FPGAã«è»¢éããããã®ããããããã®åœ¢æã劚ããçç±ãäžæã§ãã
çŸåšãæé©åãããŠããŸãããåãæ¹æ³ã䜿çšããŠããŸããæé©åãšã¯äœããæ確ã«ããããã«ããã1ã€æ確ã«ããå¿ èŠããããŸãã衚瀺è¡ã®ããŒã¿ã¯ããã€ããŒãã®ãœãªããã¢ã¬ã€ã§ã¯ãããŸããã 2ã€ã®ãã£ã¹ãã¬ã€ã³ã³ãããŒã©ãŒãç蟺ã§çµåãããŠãããããäžå€®ã«ããã€ãã®äœåãªãæ©èœããªãããã¯ã»ã«ããããããããã®ç«¯ã«24åã®ãæ©èœããªãããã¯ã»ã«ããããŸãããããã£ãŠãç»åã®1è¡ã®å®éã®éä¿¡ããŒã¿ã¯ãååã®ããŒã¿ïŒæåã®ã³ã³ãããŒã©ãŒïŒãäžéã®ãéåäœã48ãã¯ã»ã«ãåŸåã®ããŒã¿ïŒ2çªç®ã®ã³ã³ãããŒã©ãŒïŒã®3ã€ã®éšåã§æ§æãããŸãã
ãããã£ãŠãäžåœäººã¯ãã«ãŒãå ã§ãã€ãé åã圢æãããšãã«ãååã®çµããã«å°éãããã©ããããã§ãã¯ããå°éããªãã£ãå Žåãå€ã¯* pãã€ã³ã¿ãŒã«ãã£ãŠæžã蟌ãŸããŸãããããã以å€ã®å Žåã¯ãã€ã³ã¿*ïŒp + 48ïŒã 1440ã®å€ã®ããããã«å¯Ÿãããã®ãã§ãã¯ãããã³ãããã®ååã®ãã€ã³ã¿ãŒã®å€æŽã§ãããæããã«ã«ãŒãã®é床ã«å¯äžããŸããã§ããããã®1ã€ã®ã«ãŒãã2ã€ã®å¥ã ã®ã«ãŒãã«åå²ããŸãããæåã®ã«ãŒãã§ã¯ãé åã®ååãåãããããã®ã«ãŒãã®åŸããã€ã³ã¿ãŒã48å¢å ãã2çªç®ã®ã«ãŒããé åã®åŸåã§å§ãŸããŸããå ã®ããŒãžã§ã³ã§ã¯ãã¬ã€ã€ãŒã®èªã¿åããšè¡šç€ºã¯1.9ç§ã§ãããããã®å€æŽã ãã§èªã¿åããšåºåã®æéã1.2ç§ã«ççž®ãããŸããã
ãã1ã€ã®å€æŽã¯ãFPGAãžã®ããŒã¿è»¢éã«é¢ãããã®ã§ããå ã®ãœãŒã¹ã§ã¯ãDMAãä»ããŠçºçããŸãããDMAãä»ãã転éã®éå§åŸãé¢æ°ã¯ãã®å®äºãåŸ æ©ãããã®åŸã§ã®ã¿ãã³ãŒããéå§ããŠç»åã®æ°ããè¡ã圢æããŸããåã®è¡ã®ããŒã¿ã転éãããŠããéã«æ¬¡ã®è¡ãçæãããããã«ããã®æåŸ ãåé€ããŸãããããã«ãããæéãããã«0.3ç§ççž®ãããã¬ã€ã€ãŒããã0.9ã«ãªããŸããããããŠãããã¯æé©åãªãã§ã³ã³ãã€ã«ããå Žåã§ããå®å šãªæé©åã§ã³ã³ãã€ã«ãããšãæéã¯çŽ0.53ç§ã«æžå°ããŸãããããã¯ãã§ã«ããªã蚱容ç¯å²å ã§ãããããã®0.53ç§ã®ãã¡ãCRC16ã®èšç®ã«ã¯çŽ0.22ç§ãéä¿¡åã«ãã€ãé åããããããããã圢æããã®ã«çŽ0.19ç§ããããŸããããããFPGAèªäœãžã®ãã¹ãŠã®åç·ã®è»¢éã«ã¯çŽ0.4ç§ããããŸããããã«ããããããããäœãã§ããŸãã-ããã§ã®ãã¹ãŠã¯ãFPGAã«èš±å¯ãããŠããæ倧SPIåšæ³¢æ°ã®å¶éã«åºã¥ããŠããŸãã
FPGAæ§æãèªåã§äœæã§ããã°ãRLE解åãè¡ãããšãã§ããŸããããã«ãããã¬ã€ã€ãŒã®åºåã1æ¡é«éåãããŸãããã©ã®ããã«å®è¡ãããŸããïŒ
ãããŠãã¯ããFPGAããã€ã¯ãããã»ããµããã®ãªã»ããä¿¡å·ã§ããŒããŠã§ã¢ã«ãã£ãŠãªã»ãããããªããšããäºå®ã«é¢é£ããããæ±ã«ã€ããŠæžãã€ããã§ããããã®ãããã¬ã€ã€ãŒç»åã®è¡šç€ºæ¹æ³ããã§ã«åŠã³ãå°å·ããã»ã¹èªäœãå®äºãããšãã«ãç解ã§ããªããã°ã«ééããŸããã5ã10åã®ãã¡ãå®å šã«ç §ãããããã£ã¹ãã¬ã€ã§å°å·ãéå§ãããŸããããããã¬ãŒã§ãã¬ã€ã€ãŒãæ£ããèªã¿åãããå¿ èŠã«å¿ããŠããŒã¿ãFPGAã«éä¿¡ãããFPGAãCRCã®æ£ç¢ºãã確èªããŠããããšãããããŸããã€ãŸãããã¹ãŠãæ©èœããã¬ã€ã€ãŒãæç»ãã代ããã«ãå®å šã«çœããã£ã¹ãã¬ã€ã«ãªããŸããæããã«ãFPGAãŸãã¯SSD2828ã®ãããããåå ã§ããããäžåºŠãSSD2828ã®åæåãå確èªããŸãã-ãã¹ãŠãæ£åžžã§ããããããã®ãã¹ãŠã®ã¬ãžã¹ã¿ãå¿ èŠãªå€ã§åæåãããŠããŸããããã¯ããããããã®å€ã®å¶åŸ¡èªã¿åãäžã«ç¢ºèªã§ããŸããããããç§ã¯ãã§ã«ãªã·ãã¹ã³ãŒãã§ããŒãã«æã䌞ã°ããŸããããããŠããã®ãããªé害ãçºçããå ŽåãFPGAã¯SDRAMã«ããŒã¿ãæžã蟌ãŸãªãããšãããããŸããã WEä¿¡å·ãæžã蟌ã¿ãèš±å¯ããéã¢ã¯ãã£ãã¬ãã«ã®ã¹ãããã«æ ¹ãããŸãããããŠããªã»ããæã«FPGAããSDRAMãžã®åŒã³åºãããªãããšãä¿èšŒãããããã«ããªã»ããããåã«ç»ååºåããªãã«ããæ瀺çãªã³ãã³ããFPGAã«äžããããã«ã¢ããã€ã¹ããŠãããå人ãããªããã°ãç§ã¯ããããé·ãéãã®ã°ãªãããšæŠã£ãŠããã ãããç§ã¯ãããè©ŠããŸããããããŠããã¯ããŸããããŸããïŒãã®ãã°ã¯äºåºŠãšçŸããŸããã§ãããçµå±ãFPGAå ã®SDRAMã³ã³ãããŒã©ãŒã®IPã³ã¢ãæ£ããå®è£ ãããŠããããSDRAMã³ã³ãããŒã©ãŒã®ãªã»ãããšåæåããã¹ãŠã®å Žåã«æ£åžžã«è¡ãããããã§ã¯ãªããšããçµè«ã«éããŸããããã®æç¹ã§SDRAMã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããšãæ£ãããªã»ããã劚ããããŸãããã®ãããªâŠãªã»ããããåã«ãFPGAã«ã€ã¡ãŒãžåºåããªãã«ããæ瀺çãªã³ãã³ããäžããŠããªã»ããæã«FPGAããSDRAMãžã®åŒã³åºãããªãããšãä¿èšŒããããã«ã¢ããã€ã¹ãã人ãç§ã¯ãããè©ŠããŸããããããŠããã¯ããŸããããŸããïŒãã®ãã°ã¯äºåºŠãšçŸããŸããã§ãããçµå±ãFPGAå ã®SDRAMã³ã³ãããŒã©ãŒã®IPã³ã¢ãæ£ããå®è£ ãããŠããããSDRAMã³ã³ãããŒã©ãŒã®ãªã»ãããšåæåããã¹ãŠã®å Žåã«æ£åžžã«è¡ãããããã§ã¯ãªããšããçµè«ã«éããŸããããã®æç¹ã§SDRAMã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããšãæ£ãããªã»ããã劚ããããŸãããã®ãããªâŠãªã»ããããåã«ãFPGAã«ã€ã¡ãŒãžåºåããªãã«ããæ瀺çãªã³ãã³ããäžããŠããªã»ããæã«FPGAããSDRAMãžã®åŒã³åºãããªãããšãä¿èšŒããããã«ã¢ããã€ã¹ãã人ãç§ã¯ãããè©ŠããŸããããããŠããã¯ããŸããããŸããïŒãã®ãã°ã¯äºåºŠãšçŸããŸããã§ãããçµå±ãFPGAå ã®SDRAMã³ã³ãããŒã©ãŒã®IPã³ã¢ãæ£ããå®è£ ãããŠããããSDRAMã³ã³ãããŒã©ãŒã®ãªã»ãããšåæåããã¹ãŠã®å Žåã«æ£åžžã«è¡ãããããã§ã¯ãªããšããçµè«ã«éããŸããããã®æç¹ã§SDRAMã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããšãæ£ãããªã»ããã劚ããããŸãããã®ãããªâŠFPGAå ã®SDRAMã³ã³ãããŒã©ãŒã®IPã³ã¢ãå®å šã«æ£ããå®è£ ãããŠããªããããSDRAMã³ã³ãããŒã©ãŒã®ãªã»ãããšåæåããã¹ãŠã®å Žåã«æ£åžžã«æ©èœãããšã¯éããŸããããã®æç¹ã§SDRAMã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããšãæ£ãããªã»ããã劚ããããŸãããã®ãããªâŠFPGAå ã®SDRAMã³ã³ãããŒã©ãŒã®IPã³ã¢ãå®å šã«æ£ããå®è£ ãããŠããªããããSDRAMã³ã³ãããŒã©ãŒã®ãªã»ãããšåæåããã¹ãŠã®å Žåã«æ£åžžã«æ©èœãããšã¯éããŸããããã®æç¹ã§SDRAMã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããšãæ£ãããªã»ããã劚ããããŸãããã®ãããªâŠ
4.3ãã¡ã€ã«å°å·äžã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹
ãŠãŒã¶ãŒããã¡ã€ã«ãéžæããŠå°å·ãéå§ãããšã次ã®ç»é¢ã衚瀺ãããŸãã
ããã¯ããã®ãããªãã©ãããªããŒããªã³ã¿ãŒã®ããªãæšæºçãªç»é¢ã§ãã
ç»é¢ã®æ倧ã®é åã¯ãçŸåšé²åºãããŠããã¬ã€ã€ãŒã®ç»åã§å ããããŠããŸãã
ãã®ç»åã®è¡šç€ºã¯ããã¯ã©ã€ããšåæããŠããŸããããã¯ã©ã€ãããªã³ã«ãããšç»åã衚瀺ãããããã¯ã©ã€ãããªãã«ãããšç»åãæ¶å»ãããŸããç»åã¯ãUVãã£ã¹ãã¬ã€ãšåæ§ã«ãç»åã®ç蟺ã«æ²¿ã£ãŠåœ¢æãããŸããç§ã¯ãã®åçã®ã©ã€ã³ãªãã»ããã«æ²¿ã£ãŠãã€ã³ã¿ãŒãæ¥ãã§ããŸããã§ããããããã衚瀺ããçŽåã«ãå ¥åãããŠããããŒã¿ã®åºåæ¹åãå€æŽããã³ãã³ãããã£ã¹ãã¬ã€ã³ã³ãããŒã©ãŒã«äžããŸãããã®åçã®é åã¯ã暪åãã«ãªã£ãŠããããšãããããŸãã
以äžã¯ãå°å·ã®é²è¡ç¶æ³ã«é¢ããæ å ±ã§ããå°å·ã®çµéæéãšæšå®æéãçŸåšã®ã¬ã€ã€ãŒãšã¬ã€ã€ãŒã®ç·æ°ããã®å³åŽã«ããŒã»ã³ããŒãžã衚瀺ãããé²è¡ç¶æ³ããŒã§ãããŸããã¬ã€ã€ãŒæ°ã®åŸã«çŸåšã®é«ããããªã¡ãŒãã«åäœã§è¿œå ããããšæããŸãã
å³åŽã«ã¯ãäžæåæ¢ãèšå®ãããã³äžæãã¿ã³ããããŸãããã¡ãŒã ãŠã§ã¢ã§äžæåæ¢ãæŒããšãäžæåæ¢ãã©ã°ãèšå®ããããã以éã®åäœã¯ãã®æç¹ã®ããªã³ã¿ãŒã®ç¶æ ã«ãã£ãŠç°ãªããŸãããã©ãããã©ãŒã ã次ã®ã¬ã€ã€ãŒã®ããã«ããŠã³ããããã¬ã€ã€ãŒã®é²åºããã§ã«éå§ãããŠããå Žåããã¡ãŒã ãŠã§ã¢ã¯é²åºãå®äºãããã®åŸããã©ãããã©ãŒã ãäžæåæ¢ã®é«ãïŒèšå®ã§èšå®ïŒãŸã§äžãããŠãŒã¶ãŒã[ç¶è¡]ãã¿ã³ãã¯ãªãã¯ãããŸã§åŸ æ©ããŸãã
äžæåæ¢ã®ããã«ãã©ãããã©ãŒã ãäžããããšã¯ãæåã«ãã¡ã€ã«ãã©ã¡ãŒã¿ã§æå®ãããé床ã§çºçããåããã©ã¡ãŒã¿ã§æå®ãããé«ãã®åŸã«é床ãå¢å ããŸãã
å°å·ãäžæããããšããã®ã¢ã¯ã·ã§ã³ã確èªãããŠã£ã³ããŠã衚瀺ããã確èªããåŸã«ã®ã¿å°å·ãåæ¢ããããã©ãããã©ãŒã ã¯æ倧軞ã®é«ããŸã§äžæããŸããæã¡äžãé床ã¯ãäžæåæ¢äžãšåæ§ã«å¯å€ã§ããæåã¯ãã£ãããšå±€ããã£ã«ã ããåãé¢ãã次ã«æ倧ã«äžããŸãã
èšå®ãã¿ã³ã¯ãŸã æ©èœããŠããŸããããã¯ãªãã¯ãããšãã¬ã€ã€ãŒã®é²åºæéãæã¡äžãã®é«ããšé床ãªã©ãå€æŽå¯èœãªå°å·ãã©ã¡ãŒã¿ãŒã衚瀺ãããç»é¢ã衚瀺ãããŸããä»ãç§ã¯ãããçµããŠããŸããå€æŽãããã©ã¡ãŒã¿ãå°å·ãã¡ã€ã«ã«ä¿åããæ©äŒãäžãããšããã¢ã€ãã¢ããããŸãã
5.ç §æãšãã¡ã³ã®å¶åŸ¡ãèšå®ã®èªã¿èŸŒã¿ãšä¿åãªã©ãããããå°ããªããšã
ããŒãã«ã¯3ã€ã®é«åºåMOSFETåºåããããŸãã1ã€ã¯UVLEDçšã2ã€ã¯ãã¡ã³çšã§ãïŒããšãã°ãããã¯ã©ã€ããã€ãªãŒãã®å·åŽãšãã£ã¹ãã¬ã€ã®å·åŽïŒãããã§èå³æ·±ãããšã¯äœããããŸããããã€ã¯ãããã»ããµã®åºåã¯ãããã®ãã©ã³ãžã¹ã¿ã®ã²ãŒãã«æ¥ç¶ãããŠãããLEDãç¹æ» ãããã®ãšåããããç°¡åã«å¶åŸ¡ã§ããŸããé²å æéã®ç²ŸåºŠãé«ããããã«ãåäœæéãèšå®ããæ©èœã«ãããã¡ã€ã³ãµã€ã¯ã«ã§ãªã³ã«ãªããŸãã
UVLED_TimerOn(l_info.light_time * 1000);
void UVLED_TimerOn(uint32_t time)
{
uvled_timer = time;
UVLED_On();
}
ãŸããããã¯ã©ã€ãã«ãŠã³ã¿ãŒããŒãã«éãããšãã¿ã€ããŒã®ããªç§å²ã蟌ã¿ãããªãã«ãªããŸãã
...
if (uvled_timer && uvled_timer != TIMER_DISABLE)
{
uvled_timer--;
if (uvled_timer == 0)
UVLED_Off();
}
...
5.1èšå®ããã¡ã€ã«ããã®ããŒããEEPROMãžã®ä¿å
èšå®ã¯ãªã³ããŒãEEPROMat24c16ã«ä¿åãããŸããããã§ã¯ã倧容éã®ãã©ãã·ã¥ã¡ã¢ãªã«ãªãœãŒã¹ãä¿åããã®ãšã¯å¯Ÿç §çã«ããã¹ãŠãåçŽã§ããä¿åãããããŒã¿ã®çš®é¡ããšã«ãEEPROMå ã®ã¢ãã¬ã¹ãªãã»ãããããŒãã³ãŒããããŸããåèšã§ãZ軞èšå®ãäžè¬çãªã·ã¹ãã èšå®ïŒèšèªããµãŠã³ããªã©ïŒãããã³äž»èŠãªããªã³ã¿ãŒã³ã³ããŒãã³ãïŒç §æããã£ã¹ãã¬ã€ããã¡ã³ïŒã®æéã«ãŠã³ã¿ãŒã®3ã€ã®ãããã¯ãæ ŒçŽãããŸãã
ä¿åããããããã¯æ§é ã«ã¯ãçŸåšã®ãã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ãšããªããã£ããã§ãã¯ãµã ãå«ãŸããŠããŸã-ãããã¯å ã®ãã¹ãŠã®ãã€ãã®å€ã®16ãããã®åèšã®ã¿ã§ãã EPROMããèšå®ãèªã¿åããšãã«ãCRCããã§ãã¯ãããå®éã®CRCã«å¯Ÿå¿ããªãå Žåããã®ãããã¯ã®ãã©ã¡ãŒã¿ãŒã«ããã©ã«ãå€ãå²ãåœãŠãããæ°ããCRCãèšç®ããããããã¯ãå€ããã®ã§ã¯ãªãEPROMã«ä¿åãããŸããèªã¿åããããã¯ãçŸåšã®ããŒãžã§ã³ãšäžèŽããªãå Žåã¯ãçŸåšã®ããŒãžã§ã³ã«æŽæ°ããå¿ èŠããããå€ã圢åŒã§ã¯ãªãæ°ãã圢åŒã§ä¿åãããŸããããã¯ãŸã å®è£ ãããŠããŸãããããã¡ãŒã ãŠã§ã¢ãé©åã«æŽæ°ããããã«å°æ¥å®è£ ãããäºå®ã§ãã
äžéšã®èšå®ã¯ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠå€æŽã§ããŸãããã»ãšãã©ã®èšå®ã¯æ§æãã¡ã€ã«ãããŒãããããšã«ãã£ãŠã®ã¿å€æŽã§ããŸããããã§ã¯ãç¿æ £ãå€ããã«ããã®ãããªãã¡ã€ã«çšã«ç¬èªã®ããŒãµãŒãäœæããŸããã
ãã®ãããªãã¡ã€ã«ã®æ§é ã¯æšæºã§ãïŒãã©ã¡ãŒã¿ãŒå+ç笊å·+ãã©ã¡ãŒã¿ãŒå€ã 1è¡-1ã€ã®ãã©ã¡ãŒã¿ãŒãè¡ã®å é ãçå·ãšååããã³å€ã®éã®ã¹ããŒã¹ãšã¿ãã¯ç¡èŠãããŸãã空çœè¡ãšããã·ã¥æåã§å§ãŸãè¡-ãïŒããç¡èŠãããŸãããã®æåã¯ã³ã¡ã³ãä»ãã®è¡ãå®çŸ©ããŸãããã©ã¡ãŒã¿ãšã»ã¯ã·ã§ã³ã®ååã®æåã®å€§æåãšå°æåã¯é¢ä¿ãããŸããã
ãã®ãã¡ã€ã«ã«ã¯ããã©ã¡ãŒã¿ãŒã«å ããŠãååãè§æ¬åŒ§ã§å²ãŸããã»ã¯ã·ã§ã³ãå«ãŸããŠããŸããæ€åºãããã»ã¯ã·ã§ã³åã®åŸãããŒãµãŒã¯ãå¥ã®ã»ã¯ã·ã§ã³åãæ€åºããããŸã§ããã®ã»ã¯ã·ã§ã³ã«å±ãããã©ã¡ãŒã¿ãŒã®ã¿ãããã«é²ãããšãæåŸ ããŸããæ£çŽãªãšããããªããããã®ã»ã¯ã·ã§ã³ã玹ä»ããã®ãããããŸãããããããæã¯ããªãããã®æãããã£ãã®ã§ãããä»ã¯æãåºããŸããã
èªã¿åããã©ã¡ãŒã¿ãŒåãšäºåå®çŸ©ãããååãšã®æ¯èŒãççž®ããããã«ãèªã¿åãåã®æåã®æåãæåã«è§£æããã次ã«ãã®æåã§å§ãŸãååã®ã¿ãæ¯èŒãããŸãã
æ§æãã¡ã€ã«ã®å
容
# Stepper motor Z axis settings
[ZMotor]
# .
# : 0 1. : 1.
# .
invert_dir = 1
# .
# : -1 1. : -1.
# -1,
# , . 1
# .
home_direction = -1
# Z . ,
# 0, - .
home_pos = 0.0
# .
# : -32000.0 32000.0.
# : -3.0
# .
# , .
min_pos = -3.0
# .
# : -32000.0 32000.0.
# : 180.0
# .
# , .
max_pos = 180.0
# .
# : 0 1. : 1.
# ,
# 1, - 0.
min_endstop_inverting = 1
# .
# : 0 1. : 1.
# ,
# 1, - 0.
max_endstop_inverting = 1
# 1 .
steps_per_mm = 1600
# ,
# , /. : 6.0.
homing_feedrate_fast = 6.0
# ,
# , /. : 1.0.
homing_feedrate_slow = 1.0
# , /2.
acceleration = 0.7
# , /.
feedrate = 5.0
# ( ,
# ..), /2.
travel_acceleration = 25.0
# ( ,
# ..), /. 30
# ,
# 5 /.
travel_feedrate = 25.0
# , .
current_vref = 800.0
# , .
current_hold_vref = 300.0
# ,
# . . 0
# .
hold_time = 30.0
# ,
# . .
# hold_time. 0 .
# , .
off_time = 10.0
# General settings
[General]
# (0.001 )
# .
# : 0 15000. : 700 (0.7 ).
buzzer_msg_duration = 700
# (0.001 )
# , .
# : 0 15000. : 70 (0.07 ).
buzzer_touch_duration = 70
# 180 .
# .
# : 0 1. : 0.
rotate_display = 0
# , .
# LCD-. -
# .
# : 0 15000. : 10. 0 .
screensaver_time = 10
ãã®ãããªãã¡ã€ã«ïŒæ¡åŒµåã.acfgïŒããã¡ã€ã«ã®ãªã¹ãã§éžæããããšããã¡ãŒã ãŠã§ã¢ã¯ããŠãŒã¶ãŒããã®ãã¡ã€ã«ããèšå®ãããŠã³ããŒãããŠé©çšãããã©ãããå°ãã確èªãããšããã®ãã¡ã€ã«ã®è§£æãéå§ããŸãã
ãšã©ãŒãèŠã€ãã£ãå Žåã¯ããšã©ãŒã®çš®é¡ãšè¡çªå·ã瀺ãã¡ãã»ãŒãžã衚瀺ãããŸãã次ã®ãšã©ãŒãåŠçãããŸãã
- äžæãªããŒãã£ã·ã§ã³å
- äžæãªãã©ã¡ãŒã¿ãŒå
- ç¡å¹ãªãã©ã¡ãŒã¿å€-ããšãã°ãæ°å€ãã©ã¡ãŒã¿ã«ããã¹ãå€ãå²ãåœãŠãããšããå Žå
誰ããèå³ãæã£ãŠãããªã-ããã«ããŒãµãŒã®3ã€ã®äž»ãªæ©èœã®å®å
šãªã·ãŒãããããŸã
void _cfg_GetParamName(char *src, char *dest, uint16_t maxlen)
{
if (src == NULL || dest == NULL)
return;
char *string = src;
// skip spaces
while (*string != 0 && maxlen > 0 && (*string == ' ' || *string == '\t' || *string == '\r'))
{
string++;
maxlen--;
}
// until first space symbol
while (maxlen > 0 && *string != 0 && *string != ' ' && *string != '\t' && *string != '\r' && *string != '\n' && *string != '=')
{
*dest = *string;
dest++;
string++;
maxlen--;
}
if (maxlen == 0)
dest--;
*dest = 0;
return;
}
//==============================================================================
void _cfg_GetParamValue(char *src, PARAM_VALUE *val)
{
val->type = PARAMVAL_NONE;
val->float_val = 0;
val->int_val = 0;
val->uint_val = 0;
val->char_val = (char*)"";
if (src == NULL)
return;
if (val == NULL)
return;
char *string = src;
// search '='
while (*string > 0 && *string != '=')
string++;
if (*string == 0)
return;
// skip '='
string++;
// skip spaces
while (*string != 0 && (*string == ' ' || *string == '\t' || *string == '\r'))
string++;
if (*string == 0)
return;
// check param if it numeric
if ((*string > 47 && *string < 58) || *string == '.' || (*string == '-' && (*(string+1) > 47 && *(string+1) < 58) || *(string+1) == '.'))
{
val->type = PARAMVAL_NUMERIC;
val->float_val = (float)atof(string);
val->int_val = atoi(string);
val->uint_val = strtoul(string, NULL, 10);
}
else
{
val->type = PARAMVAL_STRING;
val->char_val = string;
}
return;
}
//==============================================================================
void CFG_LoadFromFile(void *par1, void *par2)
{
sprintf(msg, LANG_GetString(LSTR_MSG_CFGFILE_LOADING), cfgCFileName);
TGUI_MessageBoxWait(LANG_GetString(LSTR_WAIT), msg);
UTF8ToUnicode_Str(cfgTFileName, cfgCFileName, sizeof(cfgTFileName)/2);
if (f_open(&ufile, cfgTFileName, FA_OPEN_EXISTING | FA_READ) != FR_OK)
{
if (tguiActiveScreen == (TG_SCREEN*)&tguiMsgBox)
tguiActiveScreen = (TG_SCREEN*)((TG_MSGBOX*)tguiActiveScreen)->prevscreen;
TGUI_MessageBoxOk(LANG_GetString(LSTR_ERROR), LANG_GetString(LSTR_MSG_FILE_OPEN_ERROR));
BUZZ_TimerOn(cfgConfig.buzzer_msg);
return;
}
uint16_t cnt = 0;
uint32_t readed = 0, totalreaded = 0;
char *string = msg;
char lexem[128];
PARAM_VALUE pval;
CFGREAD_STATE rdstate = CFGR_GENERAL;
int16_t numstr = 0;
while (1)
{
// read one string
cnt = 0;
readed = 0;
string = msg;
while (cnt < sizeof(msg))
{
if (f_read(&ufile, string, 1, &readed) != FR_OK || readed == 0 || *string == '\n')
{
*string = 0;
break;
}
cnt++;
string++;
totalreaded += readed;
}
if (cnt == sizeof(msg))
{
string--;
*string = 0;
}
numstr++;
string = msg;
// trim spaces/tabs at begin and end
strtrim(string);
// if string is empty
if (*string == 0)
{
// if end of file
if (readed == 0)
break;
else
continue;
}
// skip comments
if (*string == '#')
continue;
// upper all letters
strupper_utf(string);
// get parameter name
_cfg_GetParamName(string, lexem, sizeof(lexem));
// check if here section name
if (*lexem == '[')
{
if (strcmp(lexem, (char*)"[ZMOTOR]") == 0)
{
rdstate = CFGR_ZMOTOR;
continue;
}
else if (strcmp(lexem, (char*)"[GENERAL]") == 0)
{
rdstate = CFGR_GENERAL;
continue;
}
else
{
rdstate = CFGR_ERROR;
string = LANG_GetString(LSTR_MSG_UNKNOWN_SECTNAME_IN_CFG);
sprintf(msg, string, numstr);
break;
}
}
// get parameter value
_cfg_GetParamValue(string, &pval);
if (pval.type == PARAMVAL_NONE)
{
rdstate = CFGR_ERROR;
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
// check and setup parameter
switch (rdstate)
{
case CFGR_ZMOTOR:
rdstate = CFGR_ERROR;
if (*lexem == 'A')
{
if (strcmp(lexem, (char*)"ACCELERATION") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.float_val < 0.1)
pval.float_val = 0.1;
cfgzMotor.acceleration = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'C')
{
if (strcmp(lexem, (char*)"CURRENT_HOLD_VREF") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val < 100)
pval.uint_val = 100;
if (pval.uint_val > 1000)
pval.uint_val = 1000;
cfgzMotor.current_hold_vref = pval.uint_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"CURRENT_VREF") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val < 100)
pval.uint_val = 100;
if (pval.uint_val > 1000)
pval.uint_val = 1000;
cfgzMotor.current_vref = pval.uint_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'F')
{
if (strcmp(lexem, (char*)"FEEDRATE") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.float_val < 0.1)
pval.float_val = 0.1;
if (pval.float_val > 40)
pval.float_val = 40;
cfgzMotor.feedrate = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'H')
{
if (strcmp(lexem, (char*)"HOLD_TIME") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val == 0)
pval.uint_val = TIMER_DISABLE;
else if (pval.uint_val > 100000)
pval.uint_val = 100000;
cfgzMotor.hold_time = pval.uint_val * 1000;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"HOME_DIRECTION") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.int_val != -1.0 && pval.int_val != 1.0)
pval.int_val = -1;
cfgzMotor.home_dir = pval.int_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"HOME_POS") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
cfgzMotor.home_pos = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"HOMING_FEEDRATE_FAST") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.float_val < 0.1)
pval.float_val = 0.1;
if (pval.float_val > 40)
pval.float_val = 40;
cfgzMotor.homing_feedrate_fast = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"HOMING_FEEDRATE_SLOW") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.float_val < 0.1)
pval.float_val = 0.1;
if (pval.float_val > 40)
pval.float_val = 40;
cfgzMotor.homing_feedrate_slow = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'I')
{
if (strcmp(lexem, (char*)"INVERT_DIR") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.int_val < 0 || pval.int_val > 1)
pval.int_val = 1;
cfgzMotor.invert_dir = pval.int_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'M')
{
if (strcmp(lexem, (char*)"MAX_ENDSTOP_INVERTING") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.int_val < 0 || pval.int_val > 1)
pval.int_val = 1;
cfgzMotor.max_endstop_inverting = pval.int_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"MAX_POS") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
cfgzMotor.max_pos = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"MIN_ENDSTOP_INVERTING") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.int_val < 0 || pval.int_val > 1)
pval.int_val = 1;
cfgzMotor.min_endstop_inverting = pval.int_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"MIN_POS") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
cfgzMotor.min_pos = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'O')
{
if (strcmp(lexem, (char*)"OFF_TIME") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val > 100000)
pval.uint_val = 100000;
else if (pval.uint_val < cfgzMotor.hold_time)
pval.uint_val = cfgzMotor.hold_time + 1000;
else if (pval.uint_val == 0)
pval.uint_val = TIMER_DISABLE;
cfgzMotor.off_time = pval.int_val * 60000;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'S')
{
if (strcmp(lexem, (char*)"STEPS_PER_MM") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val < 1)
pval.uint_val = 1;
if (pval.uint_val > 200000)
pval.uint_val = 200000;
cfgzMotor.steps_per_mm = pval.uint_val;
rdstate = CFGR_ZMOTOR;
break;
}
} else
if (*lexem == 'T')
{
if (strcmp(lexem, (char*)"TRAVEL_ACCELERATION") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.float_val < 0.1)
pval.float_val = 0.1;
cfgzMotor.travel_acceleration = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
if (strcmp(lexem, (char*)"TRAVEL_FEEDRATE") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.float_val < 0.1)
pval.float_val = 0.1;
cfgzMotor.travel_feedrate = pval.float_val;
rdstate = CFGR_ZMOTOR;
break;
}
}
string = LANG_GetString(LSTR_MSG_UNKNOWN_PARAMNAME_IN_CFG);
sprintf(msg, string, numstr);
break;
case CFGR_GENERAL:
rdstate = CFGR_ERROR;
if (*lexem == 'B')
{
if (strcmp(lexem, (char*)"BUZZER_MSG_DURATION") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val > 15000)
pval.uint_val = 15000;
cfgConfig.buzzer_msg = pval.uint_val;
rdstate = CFGR_GENERAL;
break;
}
if (strcmp(lexem, (char*)"BUZZER_TOUCH_DURATION") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val > 15000)
pval.uint_val = 15000;
cfgConfig.buzzer_touch = pval.uint_val;
rdstate = CFGR_GENERAL;
break;
}
} else
if (*lexem == 'R')
{
if (strcmp(lexem, (char*)"ROTATE_DISPLAY") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val > 0)
{
cfgConfig.display_rotate = 1;
LCD_WriteCmd(0x0036);
LCD_WriteRAM(0x0078);
}
else
{
cfgConfig.display_rotate = 0;
LCD_WriteCmd(0x0036);
LCD_WriteRAM(0x00B8);
}
rdstate = CFGR_GENERAL;
break;
}
} else
if (*lexem == 'S')
{
if (strcmp(lexem, (char*)"SCREENSAVER_TIME") == 0)
{
if (pval.type != PARAMVAL_NUMERIC)
{
string = LANG_GetString(LSTR_MSG_INVALID_PARAMVAL_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (pval.uint_val > 15000)
cfgConfig.screensaver_time = 15000 * 60000;
else if (pval.uint_val == 0)
pval.uint_val = TIMER_DISABLE;
else
cfgConfig.screensaver_time = pval.uint_val * 60000;
rdstate = CFGR_GENERAL;
break;
}
}
string = LANG_GetString(LSTR_MSG_UNKNOWN_PARAMNAME_IN_CFG);
sprintf(msg, string, numstr);
break;
}
if (rdstate == CFGR_ERROR)
break;
}
f_close(&ufile);
if (tguiActiveScreen == (TG_SCREEN*)&tguiMsgBox)
{
tguiActiveScreen = (TG_SCREEN*)((TG_MSGBOX*)tguiActiveScreen)->prevscreen;
}
if (rdstate == CFGR_ERROR)
{
TGUI_MessageBoxOk(LANG_GetString(LSTR_ERROR), msg);
BUZZ_TimerOn(cfgConfig.buzzer_msg);
}
else
{
CFG_SaveMotor();
CFG_SaveConfig();
TGUI_MessageBoxOk(LANG_GetString(LSTR_COMPLETED), LANG_GetString(LSTR_MSG_CFGFILE_LOADED));
}
}
//==============================================================================
ãã¡ã€ã«ã®è§£æãæåãããšãæ°ããèšå®ãããã«é©çšãããEPROMã«ä¿åãããŸãã
ããªã³ã¿ã³ã³ããŒãã³ãã®çšŒåæéã«ãŠã³ã¿ã¯ããã¡ã€ã«ãå°å·ãŸãã¯äžæããããšãã«ã®ã¿EPROMã§æŽæ°ãããŸãã
6.å¿«é©ããšäŸ¿å©ãã®ããã®è¿œå æ©èœ
6.1ã«ã¬ã³ããŒä»ãæèš
ãŸãããããäœãããã ãã«ããªãè¯ããã®ãç¡é§ã«ããã®ã-ãã€ã¯ãã³ã³ãã¥ãŒã¿ã«çµã¿èŸŒãŸããèªåŸåãªã¢ã«ã¿ã€ã ã¯ããã¯ã¯ãäžè¬çãªé»æºããªãã«ããç¶æ ã§ãªããŠã ããããªãŒã§åäœããæ¶è²»éãéåžžã«å°ãªããããèšç®ã«ããã°ãCR2032ã§æ°å¹Žéã¯ååã§ããããã«ãã¡ãŒã«ãŒã¯ãã®æèšã«å¿ èŠãª32kHzã¯ã©ãŒããããŒãäžã«æäŸããŸãããããããªãŒãã«ããŒãããŒãã«æ¥çããããããå ±éã®ãã€ãã¹ãšãã€ã¯ãã³ã³ãã¥ãŒã¿ãŒã®ç¹å¥ãªç«¯åã«é ç·ãã¯ãã ä»ãããã ãã§ããããã¯ç§ãèªå® ã§è¡ã£ããã®ã§ãã
ã¡ã€ã³ç»é¢ã®å·Šäžã«æéãæ¥ãæã衚瀺ãããŸãã
åããªã¢ã«ã¿ã€ã ã¯ããã¯ã䜿çšããŠãã³ã³ããŒãã³ãã®å°å·æéãšçšŒåæéãã«ãŠã³ãããŸãããŸãã以äžã§èª¬æããã¹ã¯ãªãŒã³ã»ãŒããŒã§ã䜿çšãããŸãã
6.2å°å·äžã®å¶çºçãªã¯ãªãã¯ããç»é¢ãããã¯ãã
ããã¯ãç¥äººã®èŠæ±ã§è¡ãããŸãããããã§ãããå Žåã«ãã£ãŠã¯äŸ¿å©ã§ããå°å·ç»é¢ã®ããããŒãé·æŒãïŒçŽ2.5ç§ïŒãããšãããã¯ãæå¹ãŸãã¯ç¡å¹ã«ãªããŸããããã¯ãã¢ã¯ãã£ããªå Žåãå³äžé ã«èµ€ãããã¯ã衚瀺ãããŸããå°å·ãçµäºãããšãããã¯ã¯èªåçã«è§£é€ãããŸãã
6.3ããŒã«ãã¢ãŒãã§ã¢ãŒã¿ãŒé»æµãæžãããã¢ãŒã¿ãŒãã¢ã€ãã«ç¶æ ã§ã·ã£ããããŠã³ããŸã
ããªã³ã¿ãŒæ¬äœå éšã®å šäœçãªç±ã®èç©ãæžããããã«äœãããŸãããèšå®ãããç¡ç§»åæéã®åŸãã¢ãŒã¿ãŒãé»æµãæžãããŠããŒã«ãã¢ãŒãã«ããããšãã§ããŸããã¡ãªã¿ã«ããã®æ©èœã¯TB6560ã¿ã€ãã®ãã¢ãã«ããã¹ããããŒã¢ãŒã¿ãŒãã©ã€ããŒã«åºãæ®åããŠããŸãããŸããèšå®ã§ã¯ãåããªãç¶æ ã§ã¢ãŒã¿ãŒãå®å šã«ãªãã«ãªããŸã§ã®æéãèšå®ã§ããŸããããããããã¯ã軞ã®ãŒãåãå®è¡ãããå Žåãç¡å¹ã«ãªããšããäºå®ã«ãã€ãªãããŸãããããã®æ©èœã¯äž¡æ¹ãšããåãèšå®ã§å®å šã«ç¡å¹ã«ããããšãã§ããŸãã
6.4ã¹ã¯ãªãŒã³ã»ãŒããŒ
æèšã®ããã«-ç§ãã§ãããšããçç±ã ãã§ãèšå®ã§æå®ããæé以éã«ç»é¢ãæŒããªãå Žåãç»é¢ã¯ããžã¿ã«ãã¹ã¯ãããã¯ããã¯ã®ãšãã¥ã¬ãŒã·ã§ã³ã¢ãŒãã«åãæ¿ãããŸãã
æéã«å ããŠãææ¥ãå«ãå®å šãªæ¥ä»ã衚瀺ãããŸãããã¡ãŒã ãŠã§ã¢ã¯ããã£ã¹ãã¬ã€ã®ä»»æã®éšåãæŒããšããã®ã¢ãŒããçµäºããŸããæ°å€ãéåžžã«å€§ããããšã³ãžã³ããªãã®ãšãã®é»åæ¶è²»éã2ã¯ããæªæºã§ããããšãèæ ®ãããšããã®ãããªã¹ã¯ãªãŒã³ã»ãŒããŒãåããããªã³ã¿ãŒã¯ãã«ãŒã ã¯ããã¯ãšããŠæ©èœããå¯èœæ§ããããŸã:)å°å·äžãã¹ã¯ãªãŒã³ã»ãŒããŒãæå®ãããæéåŸã«è¡šç€ºãããŸããã1ã€è¿œå ãããšãç»é¢ã®äžéšã«å°å·ã®é²è¡ç¶æ³ã衚瀺ãããŸãã
èšå®ã§ã¯ãã¹ã¯ãªãŒã³ã»ãŒããŒã®å¿çæéãèšå®ãŸãã¯ç¡å¹ã«ããããšãã§ããŸãã
6.5ããã¯ã©ã€ããšãã£ã¹ãã¬ã€ãã§ãã¯
ãã®ç»é¢ã¯ããµãŒãã¹ãã¡ãã¥ãŒããã¢ã¯ã»ã¹ã§ããããã¯ã©ã€ããã€ãªãŒããUVãã£ã¹ãã¬ã€ããã§ãã¯ãããšãã«äŸ¿å©ã§ããäžéšã§ã3ã€ã®ç»åã®1ã€ãéžæãããUVãã£ã¹ãã¬ã€ã«è¡šç€ºãããŸãããã¬ãŒã ããã£ã¹ãã¬ã€å šäœã®å®å šãªç §æãé·æ¹åœ¢ã§ããäžéšã«ã¯ãããã¯ã©ã€ããšãã£ã¹ãã¬ã€ããªã³ãŸãã¯ãªãã«ãã2ã€ã®ãã¿ã³ããããŸããä»å±ã®ã©ã€ãã¯2ååŸã«èªåçã«ãªãã«ãªããŸããéåžžããã®æéã§ãã¹ãã«ååã§ãããã®ç»é¢ãçµäºãããšãããã¯ã©ã€ããšãã£ã¹ãã¬ã€ã®äž¡æ¹ãèªåçã«ãªãã«ãªããŸãã
6.6èšå®
ãã®ç»é¢ã«ã¯ã[ããŒã«]ã¡ãã¥ãŒãããã¢ã¯ã»ã¹ã§ããŸããããã«ã¯èšå®ãã»ãšãã©ãããŸãããæ£çŽãªãšãããæ§æãã¡ã€ã«ã ãã§ãªããã€ã³ã¿ãŒãã§ã€ã¹ã«é 眮ããã®ãçã«ããªã£ãŠããã»ã©é »ç¹ã«èŠæ±ãããèšå®ãæãã€ããããšã¯ãããŸãããããã«ãããããªã³ã¿ãŒã³ã³ããŒãã³ãã®åäœæéã«ãŠã³ã¿ãŒããªã»ããããæ©èœãè¿œå ãããŸããããããããŸãã:)
ãã¡ãããããã§ã¯ãåå¥ã«éãç»é¢ã§æå»ãšæ¥ä»ãèšå®ã§ããŸãïŒæèšãããããïŒã
äžæåæ¢æã«ãã©ãããã©ãŒã ã®ãªããé«ããèšå®ããŠããªã³ãšãªããåãæ¿ããããšãã§ããŸãããã£ã¹ãã¬ã€ã®ã¯ãªãã¯é³ãšã¡ãã»ãŒãžã®é³ãèšå®ãå€æŽãããšãæ°ããå€ã¯é»æºããªãã«ãªããŸã§æå¹ã«ãªããEPROMã«ä¿åãããŸãããããããä¿åããã«ã¯ããã©ã¡ãŒã¿ãå€æŽããåŸãã¡ãã¥ãŒã®ä¿åãã¿ã³ãæŒããŸãïŒãããããŒã¢ã€ã³ã³ä»ãïŒã
æ°å€ã¯ç¹å¥ãªç»é¢ã«å ¥åãããŸãïŒ
ããã§ã¯ãä»ã®ããªã³ã¿ãŒã«æ¬ ããŠãããã¹ãŠã®æ©èœãå®è£ ããŸããã
- ã±ãããã³ããããã¿ã³ ç·šéããããã©ã¡ãŒã¿ãããããè² ãŸãã¯åæ°ã§ããå Žåã«ã®ã¿æ©èœããŸãã
- ãã®ç»é¢ã«å ¥ã£ãåŸãæåã«æ°å€ãã¿ã³ãæŒããšãå€ãå€ã察å¿ããæ°åã«çœ®ãæããããŸãããã¿ã³ããããã®å Žåãã0ãã«çœ®ãæããããŸããã€ãŸããå€ãå€ãæ¶å»ããå¿ èŠã¯ãªããããã«æ°ããå€ã®å ¥åãéå§ã§ããŸãã
- ãããã¿ã³ãçŸåšã®å€ããŒãã«ããŸãã
[æ»ã]ãã¿ã³ãæŒããŠããæ°ããå€ã¯é©çšãããŸãããé©çšããã«ã¯ããOKããã¯ãªãã¯ããå¿ èŠããããŸãã
6.7æåŸã«-ããªã³ã¿æ å ±ç»é¢
ãã®ç»é¢ã«ã¯ãã¡ã€ã³ã¡ãã¥ãŒããçŽæ¥ã¢ã¯ã»ã¹ã§ããŸããããã§æãéèŠãªããšã¯ããã¡ãŒã ãŠã§ã¢/ FPGAããŒãžã§ã³ãšåäœæéã«ãŠã³ã¿ãŒã§ããäžéšã«ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®äœæè ãšGitHubã®ãªããžããªã®ã¢ãã¬ã¹ã«é¢ããæ å ±ããŸã ãããŸããã€ã³ã¿ãŒãã§ã€ã¹ã®äœæè ã¯ãå°æ¥ã®åºç€ã§ããããã§ãåçŽãªããã¹ããã¡ã€ã«ã䜿çšããŠã€ã³ã¿ãŒãã§ã€ã¹ãæ§æã§ããããã«ãããšãäœæè ã®ååãæå®ããæ©äŒããããŸãã
çµãã
ããã¯ç§ã®ãã®ããããããžã§ã¯ãã®æåŸã®éšåã§ãããã®ãããžã§ã¯ãã¯ãç§ãæãã»ã©éãã¯ãããŸããããçããŠçºå±ããŠããŸããããã§ã«ããªãå¹ççã§ãã
ç§ã¯ãããããã£ãšå€ãã®ã³ãŒããå ¥ããã¹ãã§ãã...ãããç§ã¯èªæ ¢ããããã«ç§ã®ã³ãŒãã«ãã£ã³ã¯ããããšã¯æããŸãããç§ã®æèŠã§ã¯ããããã©ã®ããã«æ©èœããäœãè¡ããããã説æããããšãããéèŠã§ãããã³ãŒãã¯ããã«ãããŸãããã¹ãŠGitHubã«ãããèå³ã®ãã人ã¯èª°ã§ããããã§å šäœãèŠãããšãã§ããŸããç§ã¯ããæãã
ã質åããæèŠããåŸ ã¡ããŠãããŸãããŸãããããã®èšäºã«é¢å¿ããå¯ãããã ãããããšãããããŸãã
-ããŒã1ïŒ 1ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã
-ããŒã2ïŒ 2.USBãã©ãã·ã¥ãã©ã€ãäžã®ãã¡ã€ã«ã·ã¹ãã ã®æäœã 3.ãã©ãããã©ãŒã 移åçšã®ã¹ããããŒã¢ãŒã¿ãŒå¶åŸ¡ã
-ããŒã3ïŒ4.ã¬ã€ã€ãŒã®ç»åãããã¯ã©ã€ããã£ã¹ãã¬ã€ã«åºåããŸãã5.ç §æãšãã¡ã³ã®å¶åŸ¡ãèšå®ã®èªã¿èŸŒã¿ãšä¿åãªã©ãããããå°ããªããšã6.å¿«é©ããšäŸ¿å©ãã®ããã®è¿œå æ©èœã
ãªã³ã¯
MKSDLPãããã®AliexpressGitHub
ã®ã¡ãŒã«ãŒããã®å ã®ãã¡ãŒã ãŠã§ã¢ãœãŒã¹GitHub
ã®ããŒãã®2ã€ã®ããŒãžã§ã³ã®ã¡ãŒã«ãŒããã®ã¹ããŒã GitHubã®
ç§ã®ãœãŒã¹