久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4892|回復: 19
收起左側

制作激光雕刻機,求分析四線步進電機溫度高原因

  [復制鏈接]
ID:880148 發表于 2021-4-5 12:06 | 顯示全部樓層 |閱讀模式
10黑幣
在論壇里看到大神做的激光雕刻機,是否崇拜,就模仿著自己也做一個,軟件可以順利的操縱電機運行,可就是運行一會電機就十分燙手,都能聞到電機過熱的味道,請大神指點一下,請問問題究竟出在哪里?謝謝!(新手上路,手頭緊張,奉上10個,以表謝意!)
f3f8f82b2703fbda2e206dd272c4f2f.jpg

回復

使用道具 舉報

ID:83345 發表于 2021-4-5 16:41 | 顯示全部樓層
電機電流過大,光驅步進電機電流很小,12V的總電流1
回復

使用道具 舉報

ID:83345 發表于 2021-4-5 16:44 | 顯示全部樓層
如果動作都正常,肯定是電機電流過大,光驅步進電機的電流很小的,12v的總電流100多mA應該就夠了。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:163285 發表于 2021-4-5 18:35 | 顯示全部樓層
步進電機空載發燙不?發燙就降低驅動步進電機電源電壓。
回復

使用道具 舉報

ID:230742 發表于 2021-4-6 00:36 | 顯示全部樓層
查找步進電機的資料,嚴格控制電壓和電流。只要不超過額定的電壓和電流就沒事。
正常57步進電機70度以下都正常。
還要設計好行程開關,不要堵轉。
剛百度了一下,有的電機是5V,有的是12V的,電流只有幾十毫安。L298N電流有點大了。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:584814 發表于 2021-4-6 10:19 | 顯示全部樓層
程序呢 ?又讓人算命。
這個大多沒有歸零操作,表現的就是運轉正常電機過熱。
回復

使用道具 舉報

ID:723547 發表于 2021-4-6 10:20 | 顯示全部樓層
樓主沒有貼出來程序和供電電壓電流,原因有2種
1.電壓太大,調節供電電壓即可
2.電流太大,更換電阻,調節電流即可
這里猜測應該是電壓超了,

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:451718 發表于 2021-4-6 10:28 | 顯示全部樓層
看到你帶散熱片的驅動板就知道, 一定是電流過大了。  這個驅動板應該又硬跳線或者在程序中軟設置,用來調節電流大小的。  你用ATX電源供電, 最大電壓也就+12V,電壓肯定沒有問題。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:390416 發表于 2021-4-6 10:48 | 顯示全部樓層
應該是沒有關閉輸出,電機正轉1ms 反轉1ms  電機表現不轉 其實電流卻非常大
回復

使用道具 舉報

ID:880148 發表于 2021-4-6 11:03 | 顯示全部樓層
wang_l0650 發表于 2021-4-5 16:44
如果動作都正常,肯定是電機電流過大,光驅步進電機的電流很小的,12v的總電流100多mA應該就夠了。

應該是電流太大,我測了一下,電機一個為10歐的,一個為5歐的,我換了一個輸出500MA的小直流變壓器,只能帶動10歐的電機,5歐的無非正常運行,謝謝幫助!
回復

使用道具 舉報

ID:880148 發表于 2021-4-6 11:06 | 顯示全部樓層
光說不練 發表于 2021-4-5 18:35
步進電機空載發燙不?發燙就降低驅動步進電機電源電壓。

就是空載燙手,還沒有加載呢,電壓應該沒有問題吧?因為這是12v電機啊?
回復

使用道具 舉報

ID:880148 發表于 2021-4-6 11:09 | 顯示全部樓層
啤酒瓶子老大 發表于 2021-4-6 00:36
查找步進電機的資料,嚴格控制電壓和電流。只要不超過額定的電壓和電流就沒事。
正常57步進電機70度以下都 ...

5v電壓電機不動,但放在桌子上可以聽到電機嗡嗡聲,12v電機可以正常運行,應該12v是沒有問題吧?謝謝幫助!
回復

使用道具 舉報

ID:880148 發表于 2021-4-6 11:27 | 顯示全部樓層
man1234567 發表于 2021-4-6 10:19
程序呢 ?又讓人算命。
這個大多沒有歸零操作,表現的就是運轉正常電機過熱。

軟件是在論壇里下載的,應該沒有問題吧?我也是新手,有的代碼也看不明白,代碼附上,請指點,謝謝!

/*z地址定義
50 1=x+,2=x-,3=y+,4=y-
51 前進后退步數高
52 前進后退步數低
53
54/55 字寬
56
57 弱光開關
58/59 激光強度
60 x軸速度
61 y軸速度
62 開始打印0,57
63 暫停
64 停止標志
65
66  左右標記
100開始時灰度圖數據
*/

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define N z[60]           //X速度
#define M z[61]           //Y速度
sbit a=P1^3;                //步進電機接線定義  移動底板
sbit a_=P1^2;
sbit b=P1^1;
sbit b_=P1^0;
sbit xa=P1^4;                //步進電機接線定義         移動激光頭
sbit xa_=P1^5;
sbit xb=P1^6;
sbit xb_=P1^7;
sbit jg=P2^0;                //激光
sbit led=P2^1;        //指示燈
uchar xdata z[500]={0};//緩存
uchar buff[3];                                 //串口緩存
uchar x1,x0,y1,y0,cont2=0;
uchar xfb=4,yfb=4;                 //走步標志位


unsigned char HighRH = 0;  //高電平重載值的高字節
unsigned char HighRL = 0;  //高電平重載值的低字節
unsigned char LowRH  = 0;  //低電平重載值的高字節
unsigned char LowRL  = 0;  //低電平重載值的低字節



void delayms(uint xms)                               
{   
        uint i,j;
        for(i=xms;i>0;i--)                      //i=xms即延時約xms毫秒
                for(j=110;j>0;j--);
}

/* 配置并啟動PWM,fr-頻率,dc-占空比 */
void ConfigPWM(unsigned int fr, unsigned char dc)
{
    unsigned int  high, low;
    unsigned long tmp;
   
    tmp  = (11059200/12) / fr;  //計算一個周期所需的計數值
    high = (tmp*dc) / 100;      //計算高電平所需的計數值
    low  = tmp - high;          //計算低電平所需的計數值
    high = 65536 - high + 12;   //計算高電平的重載值并補償中斷延時
    low  = 65536 - low  + 12;   //計算低電平的重載值并補償中斷延時
    HighRH = (unsigned char)(high>>8); //高電平重載值拆分為高低字節
    HighRL = (unsigned char)high;
    LowRH  = (unsigned char)(low>>8);  //低電平重載值拆分為高低字節
    LowRL  = (unsigned char)low;
    TMOD &= 0xF0;   //清零T0的控制位
    TMOD |= 0x01;   //配置T0為模式1
    TH0 = HighRH;   //加載T0重載值
    TL0 = HighRL;
    ET0 = 1;        //使能T0中斷
    TR0 = 1;        //啟動T0
    jg = 1;     //輸出低電平,關閉激光
}
/* 關閉PWM */
void ClosePWM()
{
    TR0 = 0;     //停止定時器0
    ET0 = 0;     //禁止定時器0中斷
    jg = 1;  //輸出低電平,關閉激光
}
/* T0中斷服務函數,產生PWM輸出 */
void InterruptTimer0() interrupt 1
{
    if (jg == 1)  //當前輸出為低電平時,裝載高電平值并輸出高電平
    {
        TH0 = LowRH;
        TL0 = LowRL;
        jg = 0;
    }
    else              //當前輸出為高電平時,裝載低電平值并輸出低電平
    {
        TH0 = HighRH;
        TL0 = HighRL;
        jg = 1;
    }
}



void xfor(uint i)                //x軸前進函數,前進多少步
{   
  while(1)
  {
                if(xfb==4)
                  {
         xa=xb=1;
               xb_=xa_=0;
                     xfb=1;
                     i--;                       
               delayms(N);
                     if(i==0){xa=xb=0; break;}
                  }
                if(xfb==1)
                  {
         xb=xa_=1;
               xa=xb_=0;
                     xfb=2;
                     i--;       
               delayms(N);
                     if(i==0){xa_=xb=0; break;}
                  }
                if(xfb==2)
                  {
         xa_=xb_=1;
         xb=xa=0;
                     xfb=3;        //走步標志位
                     i--;
               delayms(N);
                     if(i==0){xa_=xb_=0; break;}
                   }
                if(xfb==3)
                  {
         xa_=xb=0;
               xb_=xa=1;
                     xfb=4;
                     i--;       
               delayms(N);
                     if(i==0){xa=xb_=0; break;}
                  }
                }
}

void xbac(uint i)                //xxx后退函數
{   
         while(1)
                {
                        if(xfb==1)
                                {
                                         xa_=xb=0;
                                         xb_=xa=1;
                                         xfb=4;
                                         i--;                                //走步標志位
                                         delayms(N);
                                         if(i==0){xa=xb_=0; break;}
                                 }
                        if(xfb==4)
                                {
                                         xa_=xb_=1;
                                         xb=xa=0;
                                         xfb=3;
                                         i--;       
                                         delayms(N);
                                         if(i==0){xa_=xb_=0; break;}
                                 }
                        if(xfb==3)
                                {
                                         xb=xa_=1;
                                         xa=xb_=0;
                                         xfb=2;        //走步標志位
                                         i--;       
                                         delayms(N);
                                         if(i==0){xa_=xb=0; break;}
                                 }
                        if(xfb==2)
                                {
                                         xa=xb=1;
                                         xb_=xa_=0;
                                         xfb=1;
                                         i--;       
                                         delayms(N);
                                         if(i==0){xa=xb=0; break;}
                                }
                }
}



void yfor(uint i)                //y軸前進函數
{   
     while(1)
     {
             switch(yfb)
                   {
                     case 4:{a=b=1; b_=a_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}
                                 case 1:{b=a_=1; a=b_=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}
                                 case 2:{a_=b_=1; b=a=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}
                                 case 3:{b_=a=1; a_=b=0; yfb=4; i--; delayms(M); if(i==0){a=b_=0;break;}}
                   }
                   if(i==0)  break;
      }
}

void ybac(uint i)                //yy后退函數
{   
     while(1)
     {
             switch(yfb)
                   {
                     case 1:{a=b_=1; b=a_=0; yfb=4; i--; delayms(M); if(i==0){a=b_=0;break;}}
                                 case 4:{b_=a_=1; a=b=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}
                                 case 3:{a_=b=1; b_=a=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}
                                 case 2:{b=a=1; a_=b_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}
                   }
                   if(i==0)  break;
      }
}

void dazi(uint zik)//打印函數                   ******打印函數已更改******
{
    uint x;
                jg=0;

                for(x=0;x<zik;x++)//執行zik個循環,x軸右移zik步
                {
                        while(z[63]);       //暫停等待
                        if(z[64]==1) break;        //停止標志 跳出循環
                        SBUF=255;                                    // 每開始打印一個點,向上位機發送255,上位機進度顯示用
                        jg=0;               //開激光
                        delayms((z[99+x]*(z[58]*256+z[59]))/100);
                        jg=1;                      //關閉激光
                       
                        if(z[66]==1)        xbac(1);
                        else                                  xfor(1);                 
                }          
                if(z[64==1])    z[64]=0;
          else                                                yfor(1);    //y軸進一行
    z[62]=0;                           //一行打印完成
                SBUF=1;                     //發送信息,表示打印一行完成
               
}

/* 串口配置函數,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
    SCON  = 0x50;  //配置串口為模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1為模式2
    TH1 = 256 - (11059200/12/32)/baud;  //計算T1重載值
    TL1 = TH1;     //初值等于重載值
    ET1 = 0;       //禁止T1中斷
    ES  = 1;       //使能串口中斷
    TR1 = 1;       //啟動T1
}


void chuanlo() interrupt 4
{
  if(RI)
  {
     buff[cont2]=SBUF;//每次3字節,地址高,地址低,數據,,
   
           cont2++;
     if(cont2==3)//每收3個字節,把數據寫入地址中
           {
            z[(buff[0]*256)+buff[1]]=buff[2];
                  cont2=0;
                        SBUF=0;  //*****************在這里加入這行代碼測試一下*******************************
           }
                 RI=0;
  }
       
  if(TI) TI=0;
}

main()
{  
        EA=1;
        P0=0xff;
        ConfigUART(9600)        ;
        z[60]=15;//默認的參數
        z[61]=15;
        z[56]=1;
        z[62]=0;
        jg=0;
        cont2=0;
       
        while(1)
        {
                                                                         //        *****此處已更改******

                if(z[57]==100){ConfigPWM(100, 98);delayms(10);}         //上位機指令處理,打開弱光定位,頻率100Hz,占空比98%                                                                      
                else if(z[57]==1)   jg=0;                                                   //打開強光
                else { ClosePWM(); delayms(10);}

                if(cont2!=0) led=0;  else led=1;//指示通信是否可用
                if(z[50]==1){xfor(z[51]*256+z[52]);z[50]=0;}//x+
                if(z[50]==2){xbac(z[51]*256+z[52]);z[50]=0;}//x-
                if(z[50]==3){yfor(z[51]*256+z[52]);z[50]=0;}//y+
                if(z[50]==4){ybac(z[51]*256+z[52]);z[50]=0;}//y-

                if(z[62])//開始打印標志
                {
                        dazi(z[54]*256+z[55]);
                }
        }
}

回復

使用道具 舉報

ID:880148 發表于 2021-4-6 11:29 | 顯示全部樓層
藍色彈珠 發表于 2021-4-6 10:20
樓主沒有貼出來程序和供電電壓電流,原因有2種
1.電壓太大,調節供電電壓即可
2.電流太大,更換電阻,調 ...

我用的是ATX電源,應該不會有問題吧?
回復

使用道具 舉報

ID:880148 發表于 2021-4-6 11:38 | 顯示全部樓層
robinsonlin 發表于 2021-4-6 10:28
看到你帶散熱片的驅動板就知道, 一定是電流過大了。  這個驅動板應該又硬跳線或者在程序中軟設置,用來調 ...

我用的是L298N驅動板,上面有兩個使能引腳跳線冒,一個看說明,應該是輸出5v跳線冒吧(不敢肯定),沒有地方可以調節電流大小的吧?
回復

使用道具 舉報

ID:844772 發表于 2021-4-6 11:42 | 顯示全部樓層
我用的A4988驅動的,上邊有調節電流的電阻,我調到剛好能運動位置。運行起來還是有點燙手,但連續個把小時都沒燒掉。另外我用的是9伏電源。建議一是降低點電壓,用9伏唄,二是降速,時間有點久,我忘記用多少了。還有就是,一打印就是個把小時的,很容易被干擾,你通過串口打印圖像,會比較麻煩的。
回復

使用道具 舉報

ID:584814 發表于 2021-4-6 17:27 | 顯示全部樓層
居然有5個while(1)真是醉了
以個人試驗的結果,建議在每個全拍操作完成后做等電位(建議歸零成全部低電位)動作,無論是幾拍的每個步驟包括開始和結束都會有繞組上存在高低電位,如果同一線圈繞組上有高低電位存在必定會產生電流耗電做功,又因為電機電阻一般較小而此時電機如果無法轉動不能轉換機械能耗電就只能用換成熱能以發熱方式耗電了。此外,步進電機的實際動作時間相對不動作時間占比很小,因此更多的時間是電機不動但加上了電相當成了一個電熱器.....
以自己在試驗板上用4線2項電機(感覺5線的大概只是驅動芯片有區別手上沒這東東沒試過)做的試驗結果,步進電機的4拍可以做成前2拍和后2拍可以做到更精確控制,個人感覺4拍和8拍沒區別可能是試驗方法問題,但不歸零是絕對存在電機發熱的。

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:844772 發表于 2021-4-7 09:11 | 顯示全部樓層
略看了一下程序,好像沒考慮斜線和曲線啊?也沒見到硬件的安全措施,建議就別用激光了,先用舵機帶筆打印,都弄好了再換回激光。樓上說的歸零動作,可能不太適合這,電機不動帶電是為了鎖定的,光驅機械部分非常輕,必須考慮慣性問題,快速去電就要考慮剎車問題。
回復

使用道具 舉報

ID:880148 發表于 2021-4-16 14:19 來自手機 | 顯示全部樓層
glinfei 發表于 2021-4-7 09:11
略看了一下程序,好像沒考慮斜線和曲線啊?也沒見到硬件的安全措施,建議就別用激光了,先用舵機帶筆打印, ...

高手,說的確實在理,舵機我沒有看過這方面的東西,現在雕刻機我已經做完了,感覺應該是電流太大,現在打印基本沒有什么問題,謝謝給與的指點,謝謝!
回復

使用道具 舉報

ID:219796 發表于 2021-4-17 17:26 來自手機 | 顯示全部樓層
負載不過載就是電壓太高了,建議換驅動芯片
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品福利在线 | 欧美一a| 成人av一区| 日本一区二区三区视频在线 | 精品日韩在线 | av香港经典三级级 在线 | 成人在线一区二区 | 日韩欧美三区 | av手机在线 | 视频在线h | 夫妻午夜影院 | 精品视频在线免费观看 | 日韩中文字幕久久 | 欧美日韩一区二区三区四区 | 在线午夜电影 | 国产精品视频网站 | 日本精品久久久一区二区三区 | 国产精品一区二区三区四区 | 我要看免费一级毛片 | 亚洲精品一 | 欧美日韩精品一区二区天天拍 | 欧美一级在线观看 | 国产亚洲精品久久19p | 中文字幕一区二区在线观看 | 欧美一级片免费看 | 国产在线不卡 | 香蕉91| 精品亚洲一区二区三区四区五区 | 99热这里都是精品 | 91精品国产综合久久久久久丝袜 | 日韩二三区 | caoporn视频在线 | 狠狠骚| 成人综合视频在线 | 在线伊人 | 免费在线视频a | 国产黄a一级 | 国产日韩一区二区三区 | 欧美成年人视频在线观看 | 91xxx在线观看 | 日韩高清在线观看 |