Marlin固件中需要將從Gcode中獲取的待打印器件的3D模型中的坐標(biāo),轉(zhuǎn)換為三角洲3D打印機(jī)的三個(gè)電機(jī)軸上的坐標(biāo)。 電機(jī)軸指的是三個(gè)電機(jī)對(duì)應(yīng)的線軌。 電機(jī)軸坐標(biāo)指的是滑塊在電機(jī)軸上的位置。 笛卡爾空間坐標(biāo)是指從Gcode中獲取的待打印器件的3D模型中的坐標(biāo)。 實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換功能的函數(shù)為calculate_delta()。 變量中的tower指的是電機(jī)軸,tower1,tower2和tower3的位置如下圖所示 變量delta_tower1_x為電機(jī)軸tower1在笛卡爾坐標(biāo)系中坐標(biāo)x的值, 變量delta_tower1_y為電機(jī)軸tower1在笛卡爾坐標(biāo)系中坐標(biāo)y的值, 變量delta_tower2_x為電機(jī)軸tower2在笛卡爾坐標(biāo)系中坐標(biāo)x的值, 變量delta_tower2_y,delta_tower3_x,delta_tower3_y類似。 這三個(gè)電機(jī)軸轉(zhuǎn)換到笛卡爾坐標(biāo)系后的坐標(biāo)如代碼所示,原理如下圖 這是三角洲3D打印機(jī)抽象的俯視圖。點(diǎn)tower1,tower2和tower3分別為三個(gè)電機(jī)軸(因?yàn)槭歉┮晥D,所以在圖中表示為一個(gè)點(diǎn)),這三個(gè)點(diǎn)構(gòu)成一個(gè)等邊三角形,內(nèi)切圓的圓心為點(diǎn)z,內(nèi)切圓的半徑為delta_radius。 笛卡爾坐標(biāo)系的原點(diǎn)為等邊三角形內(nèi)切圓的圓心,即點(diǎn)z;x軸穿過原點(diǎn),并且與tower1和toweer2組成的線段平行;y軸經(jīng)過tower3和原點(diǎn);z軸經(jīng)過原點(diǎn)并且與tower3平行。 電機(jī)軸tower1轉(zhuǎn)換到笛卡爾坐標(biāo)系的坐標(biāo)x為點(diǎn)M,坐標(biāo)y為點(diǎn)N。 電機(jī)軸tower2轉(zhuǎn)換到笛卡爾坐標(biāo)系的坐標(biāo)x為點(diǎn)P,坐標(biāo)y為點(diǎn)N。 電機(jī)軸tower3轉(zhuǎn)換到笛卡爾坐標(biāo)系的坐標(biāo)x為0,坐標(biāo)y為tower3本身。 M的坐標(biāo)為(-sin60 * delta_radius, 0), N的坐標(biāo)為(0, -cos60 * delta_radius), P的坐標(biāo)為(sin60 * delta_radius, 0) 所以,tower1在笛卡爾空間坐標(biāo)系中的x坐標(biāo)delta_tower1_x= -sin60 * delta_radius,依次類推 delta_tower1_y =-cos60 * delta_radius , delta_tower2_x =sin60 * delta_radius , delta_tower2_y =-cos60 * delta_radius , delta_tower3_x =0 , delta_tower3_y =delta_radius , 再來看下代碼是不是這樣的。 回過頭來看看是怎么計(jì)算電機(jī)軸上滑塊位置的。假設(shè)有下圖 點(diǎn)A為噴頭的位置, 點(diǎn)B為點(diǎn)A投影到電機(jī)軸tower2(也是平行于笛卡爾坐標(biāo)系的Z軸), 點(diǎn)C為滑塊的位置, 點(diǎn)D為點(diǎn)A投影到笛卡爾坐標(biāo)系的xy平面的點(diǎn), 點(diǎn)E為電機(jī)軸tower2與笛卡爾坐標(biāo)系的xy平面相交的點(diǎn)。 其中BE就是打印物品笛卡爾坐標(biāo)系的z值,AC為推桿長(zhǎng)度,AB垂直于BC,根據(jù)直角三角形斜邊平方等于兩直角邊平方之和,即 AC*AC = AB *AB +BC*BC 其中AC已知,為推桿長(zhǎng)度,AB可以通過噴頭在笛卡爾坐標(biāo)系的X坐標(biāo)和Y坐標(biāo)算出來,所以BC也就可以算出來了。 AB = DE XY平面如下所示 點(diǎn)D為前一個(gè)圖點(diǎn)A的投影,點(diǎn)E為點(diǎn)B的投影,點(diǎn)A為噴頭的坐標(biāo),那么點(diǎn)D的xy坐標(biāo)也是噴頭的xy坐標(biāo),是已知的。點(diǎn)E電機(jī)軸tower2在XY平面的點(diǎn),坐標(biāo)也是已知的,點(diǎn)K和I分別為點(diǎn)E在X和Y軸的投影。 那么DH = OK - OG ,即E的x坐標(biāo) - 噴頭的x坐標(biāo) EH = FI = OI -OF , 即E的y坐標(biāo) - 噴頭的y坐標(biāo) DE*DE = EH*EH +DH*DH 綜上所述,滑塊的z軸坐標(biāo) = BE + BC =噴頭的z坐標(biāo) + BC =噴頭的z坐標(biāo) + sqrt(推桿長(zhǎng)度*推桿長(zhǎng)度 - AB*AB) =噴頭的z坐標(biāo) + sqrt(推桿長(zhǎng)度*推桿長(zhǎng)度 - (EH*EH + DH*DH)) =噴頭的z坐標(biāo) + sqrt(推桿長(zhǎng)度*推桿長(zhǎng)度 - ((tower2的y坐標(biāo) - 噴頭的y坐標(biāo)) * (tower2的y坐標(biāo) - 噴頭的y坐標(biāo)) + (tower2的x坐標(biāo) - 噴頭的x坐標(biāo)) * (tower2的x坐標(biāo) - 噴頭的x坐標(biāo)))) 對(duì)應(yīng)代碼為 delta[TOWER_2] =sqrt(delta_diagonal_rod_2_tower_2 - sq(delta_tower2_x -cartesian[X_AXIS]) - sq(delta_tower2_y -cartesian[Y_AXIS]) ) + cartesian[Z_AXIS]; 現(xiàn)在再看看函數(shù)calculate_delta() 友情提示電機(jī)軸坐標(biāo),三個(gè)電機(jī)軸平行,并且原點(diǎn)在限位開關(guān)處,即原點(diǎn)在上面。如下所示 O1,O2,O3分別為三個(gè)電機(jī)軸的原點(diǎn)。 所以delta[TOWER_2] 是tower2對(duì)應(yīng)的滑塊在笛卡爾坐標(biāo)系中z軸值。
|
你可能喜歡
新開源CAD工具Dune 3D問世,為3D設(shè)計(jì)提供更
3D打印CBD栓劑:治療癲癇的新方法
研究人員利用人工智能增強(qiáng)3D打印缺陷檢測(cè)
多材料金屬PBF技術(shù)突破:推動(dòng)鋁鋼復(fù)合部件
推薦課程
神奇的3D打印
SLA3D打印工藝全套培訓(xùn)課程 - 軟件篇
3D打印月球燈視頻教程 包括完整貼圖建模流
【原創(chuàng)發(fā)布】Cura軟件修改二次開發(fā)定制視頻