2021-09-23 16:21:04 索煒達(dá)電子 1280
項(xiàng)目編號(hào):E1277
文件大?。?M
源碼說(shuō)明:帶中文注釋
開(kāi)發(fā)環(huán)境:C編譯器
簡(jiǎn)要概述:
一個(gè)自己設(shè)計(jì)的超迷你寫(xiě)字機(jī)器人,軟件、電路、結(jié)構(gòu)完全開(kāi)源。
關(guān)于機(jī)械臂
那么CoreXY結(jié)構(gòu)是什么東西呢?
首先我們來(lái)了解一下目前比較流行的機(jī)械臂結(jié)構(gòu)有哪些:
最經(jīng)典的XYZ結(jié)構(gòu)
這一類結(jié)構(gòu)大家應(yīng)該一眼就能看明白是怎么回事,簡(jiǎn)單說(shuō)就是在X、Y、Z三個(gè)方向上都是獨(dú)立的直線運(yùn)動(dòng),雖然形式有多種比如圖中的第一種被稱作龍門式,一般在雕刻機(jī)領(lǐng)域用的很多;而第二種在比較追求小型化的3D打印機(jī)上經(jīng)??梢钥吹狡渖碛?。
XYZ結(jié)構(gòu)的好處就結(jié)構(gòu)非常簡(jiǎn)單,控制也很簡(jiǎn)單,由于三個(gè)方向上的運(yùn)動(dòng)都是解耦的(一個(gè)方向的運(yùn)動(dòng)不會(huì)影響到另一個(gè)方向),而且相對(duì)來(lái)說(shuō)由于是純線性驅(qū)動(dòng),其運(yùn)動(dòng)精度會(huì)比較容易控制。
DELTA結(jié)構(gòu)
由于我們身處三維空間,因此來(lái)說(shuō)只要是三個(gè)線性獨(dú)立的向量都可以用來(lái)表征空間中一個(gè)唯一的坐標(biāo),對(duì)應(yīng)于機(jī)械臂中,就是說(shuō)只要我有三個(gè)可以精確驅(qū)動(dòng)控制的電機(jī),我就可以玩出各種花樣讓一個(gè)機(jī)械臂精確地運(yùn)動(dòng)到某一點(diǎn)。在XYZ結(jié)構(gòu)中,X、Y、Z三個(gè)電機(jī)的地位并不是對(duì)等的,而DELTA結(jié)構(gòu)則以一種很巧妙的方式完全對(duì)稱地放置三個(gè)電機(jī),如上圖所示。通過(guò)三根連桿兩端一共六個(gè)萬(wàn)向關(guān)節(jié)的約束,DELTA機(jī)械臂的末端可以運(yùn)動(dòng)到三維空間中的任意一點(diǎn)(在行程范圍內(nèi),且行程空間并不是和XYZ結(jié)構(gòu)一樣的一個(gè)立方體),這種結(jié)構(gòu)的好處就是非常的炫酷,哈哈,其實(shí)幾年前個(gè)人最早決定設(shè)計(jì)自己的3D打印機(jī)的時(shí)候,就對(duì)DELTA結(jié)構(gòu)非常的熱衷~由于杠桿效應(yīng),一般來(lái)說(shuō)這類機(jī)械臂的運(yùn)行速度都要比XYZ要快一些,同時(shí)由于非線性控制坐標(biāo)解算需要消耗更多的計(jì)算資源,有興趣的同學(xué)可以去了解一下DELTA結(jié)構(gòu)到XYZ坐標(biāo)的解算公式推導(dǎo)過(guò)程。
圓柱結(jié)構(gòu)
提到XYZ大家首先想到的是笛卡爾坐標(biāo)系,然而我們?cè)谥袑W(xué)的時(shí)候就學(xué)過(guò)另一種坐標(biāo)系叫極坐標(biāo)系,也就是用一個(gè)角度和一個(gè)長(zhǎng)度就可以表征平面內(nèi)一個(gè)點(diǎn)的坐標(biāo),而且其跟XY坐標(biāo)的轉(zhuǎn)換也很方便。那么講極坐標(biāo)系再加上一個(gè)Z軸的直線運(yùn)動(dòng),就得到了這樣的圓柱結(jié)構(gòu)機(jī)械臂。這類機(jī)械臂在實(shí)際應(yīng)用中見(jiàn)到的比較少,因?yàn)橥瑸闃O坐標(biāo)結(jié)構(gòu),下面這種SCARA結(jié)構(gòu)有著更“擬人”的效果。
SCARA結(jié)構(gòu)
這一類機(jī)械臂的結(jié)構(gòu)非常像人類手臂(雖然自由度差了很多,人手臂應(yīng)該是7個(gè)自由度),優(yōu)點(diǎn)很明顯就是節(jié)省空間,缺點(diǎn)也很明顯,由于遠(yuǎn)端的誤差放大作用,對(duì)于電機(jī)角度控制的精度要求非常高,電機(jī)的一點(diǎn)點(diǎn)抖動(dòng)傳遞到末端都可能造成很大的誤差,因此在工業(yè)機(jī)械臂中,這類機(jī)械臂一般都是使用傳動(dòng)誤差極小的諧波減速器。
CoreXY結(jié)構(gòu)
其實(shí)關(guān)于機(jī)械臂的結(jié)構(gòu)還有各種各樣,結(jié)構(gòu)設(shè)計(jì)師們的腦洞實(shí)在是讓人嘆為觀止,有興趣的小伙伴可以去google一下國(guó)外的各種3D打印機(jī)作品,非常的有意思。這里只最后介紹一下X-Bot中采用的CoreXY結(jié)構(gòu)。
與傳統(tǒng)XY結(jié)構(gòu)不同,CoreXY是一種僅使用一根同步帶就可以控制末端在XY兩個(gè)方向運(yùn)動(dòng)的結(jié)構(gòu),非常巧妙;但是和絕大多數(shù)其他結(jié)構(gòu)一樣,CoreXY這種結(jié)構(gòu)也會(huì)有電機(jī)和限位開(kāi)關(guān)分散分布,電路連接走線比較麻煩的缺點(diǎn);于是在其基礎(chǔ)上,X-Bot改變了電機(jī)放置的位置,將其由兩邊放置改為中央放置,所有的電路板和電機(jī)集中布置,結(jié)構(gòu)更緊湊。
電路設(shè)計(jì)篇
電路很簡(jiǎn)單就是一個(gè)STM32的最小系統(tǒng),電機(jī)驅(qū)動(dòng)直接使用了一體式的驅(qū)動(dòng)器,可以tb搜索一下有很多。藍(lán)牙模塊使用的是HC-05,12V供電就行。
固件篇
直接移植了Arduino上面很成熟的grbl固件到STM32上,參數(shù)都已經(jīng)設(shè)置好了,也把坐標(biāo)轉(zhuǎn)換函數(shù)從XY改為了CoreXY,keil直接燒錄就能用了。
目錄│文件列表:
│ 不繞彎路,獲取海量資源.jpg
└ X-Bot
├ img
│ │ d374749f24ebf250633a0846977658046e3ca9da.jpg@518w_1e_1c.jpg
│ │ xbot1-1573103168406.jpg
│ │ xbot1.jpg
│ │ xbot2.jpg
│ │ xbot3.jpg
│ │ xbot4.jpg
│ │ xbot5.jpg
│ │ xbot6.png
│ │ xbot7.jpg
│ └ xbot8.jpg
├ 電路
│ └ X-Bot控制板
│ │ X-Bot.PcbDoc
│ │ X-Bot.PrjPCB
│ │ X-Bot.SchDoc
│ └ __Previews
│ │ Shield.SchDocPreview
│ └ X-Bot.SchDocPreview
├ 結(jié)構(gòu)
│ └ 18-9-7 倒角加工版.stp
└ 軟件
└ X-Bot Firmware
│ keilkilll.bat
│ README.txt
├ CORE
│ │ core_cm3.c
│ │ core_cm3.h
│ │ startup_stm32f10x_cl.s
│ │ startup_stm32f10x_hd.s
│ │ startup_stm32f10x_hd_vl.s
│ │ startup_stm32f10x_ld.s
│ │ startup_stm32f10x_ld_vl.s
│ │ startup_stm32f10x_md.s
│ │ startup_stm32f10x_md_vl.s
│ └ startup_stm32f10x_xl.s
├ GRBL_0.9j
│ │ config.h
│ │ coolant_control.c
│ │ coolant_control.h
│ │ cpu_map.h
│ │ defaults.h
│ │ eeprom.c
│ │ eeprom.h
│ │ gcode.c
│ │ gcode.h
│ │ grbl.h
│ │ limits.c
│ │ limits.h
│ │ main.txt
│ │ motion_control.c
│ │ motion_control.h
│ │ nuts_bolts.c
│ │ nuts_bolts.h
│ │ planner.c
│ │ planner.h
│ │ print.c
│ │ print.h
│ │ probe.c
│ │ probe.h
│ │ protocol.c
│ │ protocol.h
│ │ report.c
│ │ report.h
│ │ serial.c
│ │ serial.h
│ │ settings.c
│ │ settings.h
│ │ spindle_control.c
│ │ spindle_control.h
│ │ stepper.c
│ │ stepper.h
│ │ system.c
│ │ system.h
│ ├ cpu_map
│ │ │ cpu_map_atmega2560.h
│ │ │ cpu_map_atmega328p.h
│ │ └ cpu_map_stm32f10x.h
│ └ defaults
│ │ defaults_generic.h
│ │ defaults_oxcnc.h
│ │ defaults_shapeoko.h
│ │ defaults_shapeoko2.h
│ │ defaults_shapeoko3.h
│ │ defaults_sherline.h
│ │ defaults_simulator.h
│ │ defaults_x_carve_1000mm.h
│ │ defaults_x_carve_500mm.h
│ └ defaults_zen_toolworks_7x7.h
├ HARDWARE
│ │ Hardware.h
│ │ HW_EEPROM.c
│ │ HW_EEPROM.h
│ │ HW_EXTI.c
│ │ HW_EXTI.h
│ │ HW_GPIO.c
│ │ HW_GPIO.h
│ │ HW_PWM.c
│ │ HW_PWM.h
│ │ HW_TIM.c
│ │ HW_TIM.h
│ │ HW_USART.c
│ └ HW_USART.h
├ STM32F10x_FWLib
│ ├ inc
│ │ │ misc.h
│ │ │ stm32f10x_adc.h
│ │ │ stm32f10x_bkp.h
│ │ │ stm32f10x_can.h
│ │ │ stm32f10x_cec.h
│ │ │ stm32f10x_crc.h
│ │ │ stm32f10x_dac.h
│ │ │ stm32f10x_dbgmcu.h
│ │ │ stm32f10x_dma.h
│ │ │ stm32f10x_exti.h
│ │ │ stm32f10x_flash.h
│ │ │ stm32f10x_fsmc.h
│ │ │ stm32f10x_gpio.h
│ │ │ stm32f10x_i2c.h
│ │ │ stm32f10x_iwdg.h
│ │ │ stm32f10x_pwr.h
│ │ │ stm32f10x_rcc.h
│ │ │ stm32f10x_rtc.h
│ │ │ stm32f10x_sdio.h
│ │ │ stm32f10x_spi.h
│ │ │ stm32f10x_tim.h
│ │ │ stm32f10x_usart.h
│ │ └ stm32f10x_wwdg.h
│ └ src
│ │ misc.c
│ │ stm32f10x_adc.c
│ │ stm32f10x_bkp.c
│ │ stm32f10x_can.c
│ │ stm32f10x_cec.c
│ │ stm32f10x_crc.c
│ │ stm32f10x_dac.c
│ │ stm32f10x_dbgmcu.c
│ │ stm32f10x_dma.c
│ │ stm32f10x_exti.c
│ │ stm32f10x_flash.c
│ │ stm32f10x_fsmc.c
│ │ stm32f10x_gpio.c
│ │ stm32f10x_i2c.c
│ │ stm32f10x_iwdg.c
│ │ stm32f10x_pwr.c
│ │ stm32f10x_rcc.c
│ │ stm32f10x_rtc.c
│ │ stm32f10x_sdio.c
│ │ stm32f10x_spi.c
│ │ stm32f10x_tim.c
│ │ stm32f10x_usart.c
│ └ stm32f10x_wwdg.c
├ SYSTEM
│ │ bit.c
│ │ bit.h
│ │ delay.c
│ │ delay.h
│ │ simui2c.c
│ │ simui2c.h
│ │ simuspi.c
│ │ simuspi.h
│ │ strprintf.c
│ │ strprintf.h
│ │ sys.c
│ └ sys.h
├ USER
│ │ main.c
│ │ project_include.h
│ │ stm32f10x.h
│ │ stm32f10x_conf.h
│ │ stm32f10x_it.c
│ │ stm32f10x_it.h
│ │ system_stm32f10x.c
│ └ system_stm32f10x.h
└ _project
│ JLink Regs CM3.txt
│ JLinkSettings.ini
│ Template.uvgui.MaxwellXyao
│ Template.uvguix.Pengzhihui
│ Template.uvopt
│ Template.uvoptx
│ Template.uvproj.saved_uv4
│ Template.uvprojx
├ DebugConfig
│ └ STM32_STM32F103C8.dbgconf
├ _list
│ └ startup_stm32f10x_md.lst
└ _obj
│ Template.hex
└ Template.lnp