• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      用軟驅步進電機制作CNC三維工作平臺
      文章長度[14891] 加入時間[2007/6/15] 更新時間[2025/7/7 17:59:51] 級別[0] [評論] [收藏]

      本文的作者真是太了不起了,本站懷著無比佩服的心情向大家介紹真人真事,希望能對大家學習單片機有幫助!
      原文地址:http://hi.baidu.com/creative_zone/blog/item/c3c33dfad405389659ee900d.html  

      用軟驅的兩相步進電機做的CNC三維工作平臺,采用了L293D驅動,單片機控制,單片機通過串口和電腦時時通訊。 2007年03月25日 星期日 15:08

      一直都想做個CNC三維工作平臺,這個寒假總算有時間了,就開始準備了。初步設想就是PC做上位機,單片機做下位機,通過串口進行通訊。單片機通過驅動電路控制電機運動。如果有什么問題可以回復我~或QQ(博客首頁)聯系我!

      以下是設計的流程:

      需要的工具和材料萬用表,電機,各種螺絲刀,銼刀,鋸子,電烙鐵,驅動芯片,電源,51單片機相關的串口相關的芯片,導線若干,螺絲,AB膠等等。

      前期遇到的問題由于目標是微型,所以想把它做的盡量的小,所以選材很麻煩。我遇到兩個比較大的困難。

      1.伺服電機個頭比步進電機的相對要小些,但費用比較高,且不容易控制。

      2.還有CNC三維運動需要絲杠的傳動,這么微小的絲杠恐怕沒有吧,最初想通過皮帶傳動代替絲杠傳動,慢速可以實現,但精度不高,速度過快后,皮帶打滑,控制容易出現問題。

      這兩個問題困擾著我,后來想到軟驅里有個很小的步進電機,而且還帶有一套傳動系統。如果可以把這一整套取出來的話上面的兩個問題就很容易就可以解決了?刂品矫嬉膊粫袉栴}。

      硬件的設計這部分我認為是最重要也是最難最不容易實現的地方,費時費力。我先把我的電腦上的那個古董軟驅拆了下來。哇塞,好多灰,本人太懶了從沒有清理過。費了老大勁,終于卸了下來。擦干凈拆開,和之前預計的模型相差不大,用筆把需要的部分畫出來。用鋼鋸沿著畫線部分把需要的那不分鋸下來,注意不要搞變形咯。由于電機驅動能力有限,阻力過大就會使實現變得困難。另外兩個步進電機是我到修電腦的地方花了十塊買的。由于每塊軟驅都不一樣,所以我截的形狀也都略有不同,形狀需要結合三個電機三維的組合來確定,需要發揮一下想象力了。

      三個電機都搞定后,到電子市場上買了一段導軌(從機器上拆下來的二手貨,十元搞定),把它作為二維運動的連接部分(設計見圖片),把其中一個電機X按圖示固定在滑軌的一端,另外一個電機Y固定在滑動軸承上,兩個電機想辦法連接起來就可以構成一個二維CNC平臺了。最難選的是第三個電機Z的位置,始終不好放,最后自己做了個架子把它固定在電機Y上了,經測試是可行的。在電機Z上安裝了筆頭,何以測試效果。電機的位置校正是通過三個位置傳感器來實現的。其中電機Z的傳感器作用是感測平臺的高度來確定電機的給進量,XY的作用主要是做Home用。

      驅動部分采用了L293D芯片,電機是兩相電機。網上有很多相關的資料,在這我就不詳細說了。單片機做下位機,PC做上位機。

      軟件的設計單片機部分主要是電機的控制程序,PC主要是圖象處理和運算的程序,用VB編寫。握手程序的編寫-PC通過串口把信息傳給單片機,同時單片機把受到的信息發回給PC,PC把收到的和發送的數據作比較,出錯后,重新發送。

      單片機與PC串口通信的部分C源代碼

      #define UART_RX_BUFFER_SIZE 16 /* 1,2,4,8,16,32,64,128 or 256 bytes */
      #define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1 )
      #define UART_TX_BUFFER_SIZE 16 /* 1,2,4,8,16,32,64,128 or 256 bytes */
      #define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1 )
      /* Static Variables */
      static data unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE];
      static data volatile unsigned char UART_RxHead;
      static data volatile unsigned char UART_RxTail;
      static data unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE];
      static data volatile unsigned char UART_TxHead;
      static data volatile unsigned char UART_TxTail;
      bit fSeri0_Send_Ok;
      /* initialize UART */
      //t2 做波特率發生器 9600bps at 11.0592 MHz
      void InitUART(        )
      {
      unsigned char x;
      T2CON = 0x30;          //t2 做波特率發生器  
      TH2 = 0xFF;
                TL2 = 0xdc;         
                RCAP2H = 0xFF;       
                RCAP2L = 0xdc;
                SCON = 0x50;              /* SM0 SM1 SM2 REN TB8 RB8 TI RI:9 bit */
                PCON = 0x00;              /* baut rate, 80h:double; 00h: normal        */
                ES = 1;                   /* 串口中斷允許         1-enable                   */
                PS = 0;                   /* 串口中斷優先級 1-高,0-低                 */
                TR2 = 1;                  /* Start T2 as baut rate generator           */    
      x = 0; /* flush receive buffer */
      UART_RxTail = x;
      UART_RxHead = x;
      UART_TxTail = x;
      UART_TxHead = x;
      }
      /* interrupt handlers */
      void UART_interrupt( void ) interrupt 4
      {
      if (TI)
      { // 是否是發送中斷
      unsigned char tmptail;
      TI=0;
              if (UART_TxTail==UART_TxHead)
              {
              fSeri0_Send_Ok=0;              /*已發送完畢*/  
              }
              else
              {
              tmptail = ( UART_TxTail + 1 ) & UART_TX_BUFFER_MASK;
              UART_TxTail = tmptail; /* store new index */
              SBUF = UART_TxBuf[tmptail]; /* start
              transmition */
              }
      }
      if (RI)
      {
      unsigned char revdata;
      unsigned char tmphead;
      RI=0;
      revdata = SBUF;  
      tmphead = ( UART_RxHead + 1 ) & UART_RX_BUFFER_MASK;
      UART_RxHead = tmphead; /* store new index */
      UART_RxBuf[tmphead] = revdata; /* store received data in
      buffer */
      }
      }

      unsigned char ReceiveByte( void )
      {
      unsigned char tmptail;
      while ( UART_RxHead == UART_RxTail );/* wait for incomming data */
      tmptail = ( UART_RxTail + 1 ) & UART_RX_BUFFER_MASK;/* calculate buffer index */
      UART_RxTail = tmptail; /* store new index */
      return UART_RxBuf[tmptail]; /* return data */
      }

      void TransmitByte( unsigned char senddata )
      {
      unsigned char tmphead;
      tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK;
      UART_TxBuf[tmphead] = senddata; /* store data in buffer */
      UART_TxHead = tmphead; /* store new index */
      if(fSeri0_Send_Ok==0)
              {
              fSeri0_Send_Ok=1;
              TI=1;
              }
      }

      這里進給出了步進電機部分驅動代碼

      //步進電機運行數據表 ,接線不同數據表也略有不同
      const uchar motortb[]={0x11,0x99,0x88,0xaa,0x22,0x66,0x44,0x55};
      void delay(unsigned char t)// 每步延時的子程序  
      {
      unsigned char i;
      unsigned int j;
                for (i=0;i             for (j=0;j<500;j++);
      }
      void a_step(unsigned char d,unsigned char t)          //步進電機走一步d=0 正轉d=1 反轉。t 越大走得越慢  
      {                              
                if (d&0x01)                   
                   {
                  if (NP==0)
                     NP=7;
                  else NP--; //NP記錄步數,全局變量
                 }
                else  
                   {
                  if (NP==7)
                     NP=0;
                  else NP++;
                 }
                P1=motortb[NP]; //輸出到單片機的P1口
                  delay(t);
      }

      設計圖片我已經放到相冊里面了,感興趣可以去看,本來想放個視頻的,可惜不支持。

      已實現功能能夠將程序加載的圖象通過三個電機畫出來,效果相對來說比較好,可以參考空間相冊的圖片。

      待開發的功能實現與CAD軟件接口,能夠把圖形繪制出來。通過對筆頭那部分的改進,以實現雕刻功能,甚至是三維雕刻。

      參考圖片:最頭一張是運行在電腦上的繪圖界面,后面是部分制作圖片,大家可以到原出處欣賞原作者的大圖以及更多風采!

       

       
       
         
       
         
       
         

       

      1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版