熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2021-4-5 12:06
正文摘要:在論壇里看到大神做的激光雕刻機(jī),是否崇拜,就模仿著自己也做一個(gè),軟件可以順利的操縱電機(jī)運(yùn)行,可就是運(yùn)行一會(huì)電機(jī)就十分燙手,都能聞到電機(jī)過(guò)熱的味道,請(qǐng)大神指點(diǎn)一下,請(qǐng)問(wèn)問(wèn)題究竟出在哪里?謝謝!(新手上路 ... |
| 負(fù)載不過(guò)載就是電壓太高了,建議換驅(qū)動(dòng)芯片 |
glinfei 發(fā)表于 2021-4-7 09:11 高手,說(shuō)的確實(shí)在理,舵機(jī)我沒(méi)有看過(guò)這方面的東西,現(xiàn)在雕刻機(jī)我已經(jīng)做完了,感覺(jué)應(yīng)該是電流太大,現(xiàn)在打印基本沒(méi)有什么問(wèn)題,謝謝給與的指點(diǎn),謝謝! |
| 略看了一下程序,好像沒(méi)考慮斜線和曲線?也沒(méi)見(jiàn)到硬件的安全措施,建議就別用激光了,先用舵機(jī)帶筆打印,都弄好了再換回激光。樓上說(shuō)的歸零動(dòng)作,可能不太適合這,電機(jī)不動(dòng)帶電是為了鎖定的,光驅(qū)機(jī)械部分非常輕,必須考慮慣性問(wèn)題,快速去電就要考慮剎車(chē)問(wèn)題。 |
居然有5個(gè)while(1)真是醉了 ![]() 以個(gè)人試驗(yàn)的結(jié)果,建議在每個(gè)全拍操作完成后做等電位(建議歸零成全部低電位)動(dòng)作,無(wú)論是幾拍的每個(gè)步驟包括開(kāi)始和結(jié)束都會(huì)有繞組上存在高低電位,如果同一線圈繞組上有高低電位存在必定會(huì)產(chǎn)生電流耗電做功,又因?yàn)殡姍C(jī)電阻一般較小而此時(shí)電機(jī)如果無(wú)法轉(zhuǎn)動(dòng)不能轉(zhuǎn)換機(jī)械能耗電就只能用換成熱能以發(fā)熱方式耗電了。此外,步進(jìn)電機(jī)的實(shí)際動(dòng)作時(shí)間相對(duì)不動(dòng)作時(shí)間占比很小,因此更多的時(shí)間是電機(jī)不動(dòng)但加上了電相當(dāng)成了一個(gè)電熱器..... 以自己在試驗(yàn)板上用4線2項(xiàng)電機(jī)(感覺(jué)5線的大概只是驅(qū)動(dòng)芯片有區(qū)別手上沒(méi)這東東沒(méi)試過(guò))做的試驗(yàn)結(jié)果,步進(jìn)電機(jī)的4拍可以做成前2拍和后2拍可以做到更精確控制,個(gè)人感覺(jué)4拍和8拍沒(méi)區(qū)別可能是試驗(yàn)方法問(wèn)題,但不歸零是絕對(duì)存在電機(jī)發(fā)熱的。 |
| 參與人數(shù) 1 | 黑幣 +30 | 收起 理由 |
|---|---|---|
|
| + 30 | 回帖助人的獎(jiǎng)勵(lì)! |
| 我用的A4988驅(qū)動(dòng)的,上邊有調(diào)節(jié)電流的電阻,我調(diào)到剛好能運(yùn)動(dòng)位置。運(yùn)行起來(lái)還是有點(diǎn)燙手,但連續(xù)個(gè)把小時(shí)都沒(méi)燒掉。另外我用的是9伏電源。建議一是降低點(diǎn)電壓,用9伏唄,二是降速,時(shí)間有點(diǎn)久,我忘記用多少了。還有就是,一打印就是個(gè)把小時(shí)的,很容易被干擾,你通過(guò)串口打印圖像,會(huì)比較麻煩的。 |
robinsonlin 發(fā)表于 2021-4-6 10:28 我用的是L298N驅(qū)動(dòng)板,上面有兩個(gè)使能引腳跳線冒,一個(gè)看說(shuō)明,應(yīng)該是輸出5v跳線冒吧(不敢肯定),沒(méi)有地方可以調(diào)節(jié)電流大小的吧? |
藍(lán)色彈珠 發(fā)表于 2021-4-6 10:20 我用的是ATX電源,應(yīng)該不會(huì)有問(wèn)題吧? |
man1234567 發(fā)表于 2021-4-6 10:19 軟件是在論壇里下載的,應(yīng)該沒(méi)有問(wèn)題吧?我也是新手,有的代碼也看不明白,代碼附上,請(qǐng)指點(diǎn),謝謝! /*z地址定義 50 1=x+,2=x-,3=y+,4=y- 51 前進(jìn)后退步數(shù)高 52 前進(jìn)后退步數(shù)低 53 54/55 字寬 56 57 弱光開(kāi)關(guān) 58/59 激光強(qiáng)度 60 x軸速度 61 y軸速度 62 開(kāi)始打印0,57 63 暫停 64 停止標(biāo)志 65 66 左右標(biāo)記 100開(kāi)始時(shí)灰度圖數(shù)據(jù) */ #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; //步進(jìn)電機(jī)接線定義 移動(dòng)底板 sbit a_=P1^2; sbit b=P1^1; sbit b_=P1^0; sbit xa=P1^4; //步進(jìn)電機(jī)接線定義 移動(dòng)激光頭 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; //走步標(biāo)志位 unsigned char HighRH = 0; //高電平重載值的高字節(jié) unsigned char HighRL = 0; //高電平重載值的低字節(jié) unsigned char LowRH = 0; //低電平重載值的高字節(jié) unsigned char LowRL = 0; //低電平重載值的低字節(jié) void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延時(shí)約xms毫秒 for(j=110;j>0;j--); } /* 配置并啟動(dòng)PWM,fr-頻率,dc-占空比 */ void ConfigPWM(unsigned int fr, unsigned char dc) { unsigned int high, low; unsigned long tmp; tmp = (11059200/12) / fr; //計(jì)算一個(gè)周期所需的計(jì)數(shù)值 high = (tmp*dc) / 100; //計(jì)算高電平所需的計(jì)數(shù)值 low = tmp - high; //計(jì)算低電平所需的計(jì)數(shù)值 high = 65536 - high + 12; //計(jì)算高電平的重載值并補(bǔ)償中斷延時(shí) low = 65536 - low + 12; //計(jì)算低電平的重載值并補(bǔ)償中斷延時(shí) HighRH = (unsigned char)(high>>8); //高電平重載值拆分為高低字節(jié) HighRL = (unsigned char)high; LowRH = (unsigned char)(low>>8); //低電平重載值拆分為高低字節(jié) LowRL = (unsigned char)low; TMOD &= 0xF0; //清零T0的控制位 TMOD |= 0x01; //配置T0為模式1 TH0 = HighRH; //加載T0重載值 TL0 = HighRL; ET0 = 1; //使能T0中斷 TR0 = 1; //啟動(dòng)T0 jg = 1; //輸出低電平,關(guān)閉激光 } /* 關(guān)閉PWM */ void ClosePWM() { TR0 = 0; //停止定時(shí)器0 ET0 = 0; //禁止定時(shí)器0中斷 jg = 1; //輸出低電平,關(guān)閉激光 } /* T0中斷服務(wù)函數(shù),產(chǎn)生PWM輸出 */ void InterruptTimer0() interrupt 1 { if (jg == 1) //當(dāng)前輸出為低電平時(shí),裝載高電平值并輸出高電平 { TH0 = LowRH; TL0 = LowRL; jg = 0; } else //當(dāng)前輸出為高電平時(shí),裝載低電平值并輸出低電平 { TH0 = HighRH; TL0 = HighRL; jg = 1; } } void xfor(uint i) //x軸前進(jìn)函數(shù),前進(jìn)多少步 { 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; //走步標(biāo)志位 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后退函數(shù) { while(1) { if(xfb==1) { xa_=xb=0; xb_=xa=1; xfb=4; i--; //走步標(biāo)志位 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; //走步標(biāo)志位 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軸前進(jìn)函數(shù) { 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后退函數(shù) { 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)//打印函數(shù) ******打印函數(shù)已更改****** { uint x; jg=0; for(x=0;x<zik;x++)//執(zhí)行zik個(gè)循環(huán),x軸右移zik步 { while(z[63]); //暫停等待 if(z[64]==1) break; //停止標(biāo)志 跳出循環(huán) SBUF=255; // 每開(kāi)始打印一個(gè)點(diǎn),向上位機(jī)發(fā)送255,上位機(jī)進(jìn)度顯示用 jg=0; //開(kāi)激光 delayms((z[99+x]*(z[58]*256+z[59]))/100); jg=1; //關(guān)閉激光 if(z[66]==1) xbac(1); else xfor(1); } if(z[64==1]) z[64]=0; else yfor(1); //y軸進(jìn)一行 z[62]=0; //一行打印完成 SBUF=1; //發(fā)送信息,表示打印一行完成 } /* 串口配置函數(shù),baud-通信波特率 */ void ConfigUART(unsigned int baud) { SCON = 0x50; //配置串口為模式1 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x20; //配置T1為模式2 TH1 = 256 - (11059200/12/32)/baud; //計(jì)算T1重載值 TL1 = TH1; //初值等于重載值 ET1 = 0; //禁止T1中斷 ES = 1; //使能串口中斷 TR1 = 1; //啟動(dòng)T1 } void chuanlo() interrupt 4 { if(RI) { buff[cont2]=SBUF;//每次3字節(jié),地址高,地址低,數(shù)據(jù),, cont2++; if(cont2==3)//每收3個(gè)字節(jié),把數(shù)據(jù)寫(xiě)入地址中 { z[(buff[0]*256)+buff[1]]=buff[2]; cont2=0; SBUF=0; //*****************在這里加入這行代碼測(cè)試一下******************************* } RI=0; } if(TI) TI=0; } main() { EA=1; P0=0xff; ConfigUART(9600) ; z[60]=15;//默認(rèn)的參數(shù) z[61]=15; z[56]=1; z[62]=0; jg=0; cont2=0; while(1) { // *****此處已更改****** if(z[57]==100){ConfigPWM(100, 98);delayms(10);} //上位機(jī)指令處理,打開(kāi)弱光定位,頻率100Hz,占空比98% else if(z[57]==1) jg=0; //打開(kāi)強(qiáng)光 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])//開(kāi)始打印標(biāo)志 { dazi(z[54]*256+z[55]); } } } |
啤酒瓶子老大 發(fā)表于 2021-4-6 00:36 5v電壓電機(jī)不動(dòng),但放在桌子上可以聽(tīng)到電機(jī)嗡嗡聲,12v電機(jī)可以正常運(yùn)行,應(yīng)該12v是沒(méi)有問(wèn)題吧?謝謝幫助! |
光說(shuō)不練 發(fā)表于 2021-4-5 18:35 就是空載燙手,還沒(méi)有加載呢,電壓應(yīng)該沒(méi)有問(wèn)題吧?因?yàn)檫@是12v電機(jī)啊? |
wang_l0650 發(fā)表于 2021-4-5 16:44 應(yīng)該是電流太大,我測(cè)了一下,電機(jī)一個(gè)為10歐的,一個(gè)為5歐的,我換了一個(gè)輸出500MA的小直流變壓器,只能帶動(dòng)10歐的電機(jī),5歐的無(wú)非正常運(yùn)行,謝謝幫助! |
| 應(yīng)該是沒(méi)有關(guān)閉輸出,電機(jī)正轉(zhuǎn)1ms 反轉(zhuǎn)1ms 電機(jī)表現(xiàn)不轉(zhuǎn) 其實(shí)電流卻非常大 |
| 看到你帶散熱片的驅(qū)動(dòng)板就知道, 一定是電流過(guò)大了。 這個(gè)驅(qū)動(dòng)板應(yīng)該又硬跳線或者在程序中軟設(shè)置,用來(lái)調(diào)節(jié)電流大小的。 你用ATX電源供電, 最大電壓也就+12V,電壓肯定沒(méi)有問(wèn)題。 |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
|
樓主沒(méi)有貼出來(lái)程序和供電電壓電流,原因有2種 1.電壓太大,調(diào)節(jié)供電電壓即可 2.電流太大,更換電阻,調(diào)節(jié)電流即可 這里猜測(cè)應(yīng)該是電壓超了, |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
|
程序呢 ?又讓人算命。 這個(gè)大多沒(méi)有歸零操作,表現(xiàn)的就是運(yùn)轉(zhuǎn)正常電機(jī)過(guò)熱。 |
|
查找步進(jìn)電機(jī)的資料,嚴(yán)格控制電壓和電流。只要不超過(guò)額定的電壓和電流就沒(méi)事。 正常57步進(jìn)電機(jī)70度以下都正常。 還要設(shè)計(jì)好行程開(kāi)關(guān),不要堵轉(zhuǎn)。 剛百度了一下,有的電機(jī)是5V,有的是12V的,電流只有幾十毫安。L298N電流有點(diǎn)大了。 |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
| 步進(jìn)電機(jī)空載發(fā)燙不?發(fā)燙就降低驅(qū)動(dòng)步進(jìn)電機(jī)電源電壓。 |
| 如果動(dòng)作都正常,肯定是電機(jī)電流過(guò)大,光驅(qū)步進(jìn)電機(jī)的電流很小的,12v的總電流100多mA應(yīng)該就夠了。 |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
| 電機(jī)電流過(guò)大,光驅(qū)步進(jìn)電機(jī)電流很小,12V的總電流1 |
Powered by 單片機(jī)教程網(wǎng)