2021-09-23 16:21:04 索煒達(dá)電子 1183
項目編號:E1277
文件大?。?M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
一個自己設(shè)計的超迷你寫字機器人,軟件、電路、結(jié)構(gòu)完全開源。
關(guān)于機械臂
那么CoreXY結(jié)構(gòu)是什么東西呢?
首先我們來了解一下目前比較流行的機械臂結(jié)構(gòu)有哪些:
最經(jīng)典的XYZ結(jié)構(gòu)
這一類結(jié)構(gòu)大家應(yīng)該一眼就能看明白是怎么回事,簡單說就是在X、Y、Z三個方向上都是獨立的直線運動,雖然形式有多種比如圖中的第一種被稱作龍門式,一般在雕刻機領(lǐng)域用的很多;而第二種在比較追求小型化的3D打印機上經(jīng)常可以看到其身影。
XYZ結(jié)構(gòu)的好處就結(jié)構(gòu)非常簡單,控制也很簡單,由于三個方向上的運動都是解耦的(一個方向的運動不會影響到另一個方向),而且相對來說由于是純線性驅(qū)動,其運動精度會比較容易控制。
DELTA結(jié)構(gòu)
由于我們身處三維空間,因此來說只要是三個線性獨立的向量都可以用來表征空間中一個唯一的坐標(biāo),對應(yīng)于機械臂中,就是說只要我有三個可以精確驅(qū)動控制的電機,我就可以玩出各種花樣讓一個機械臂精確地運動到某一點。在XYZ結(jié)構(gòu)中,X、Y、Z三個電機的地位并不是對等的,而DELTA結(jié)構(gòu)則以一種很巧妙的方式完全對稱地放置三個電機,如上圖所示。通過三根連桿兩端一共六個萬向關(guān)節(jié)的約束,DELTA機械臂的末端可以運動到三維空間中的任意一點(在行程范圍內(nèi),且行程空間并不是和XYZ結(jié)構(gòu)一樣的一個立方體),這種結(jié)構(gòu)的好處就是非常的炫酷,哈哈,其實幾年前個人最早決定設(shè)計自己的3D打印機的時候,就對DELTA結(jié)構(gòu)非常的熱衷~由于杠桿效應(yīng),一般來說這類機械臂的運行速度都要比XYZ要快一些,同時由于非線性控制坐標(biāo)解算需要消耗更多的計算資源,有興趣的同學(xué)可以去了解一下DELTA結(jié)構(gòu)到XYZ坐標(biāo)的解算公式推導(dǎo)過程。
圓柱結(jié)構(gòu)
提到XYZ大家首先想到的是笛卡爾坐標(biāo)系,然而我們在中學(xué)的時候就學(xué)過另一種坐標(biāo)系叫極坐標(biāo)系,也就是用一個角度和一個長度就可以表征平面內(nèi)一個點的坐標(biāo),而且其跟XY坐標(biāo)的轉(zhuǎn)換也很方便。那么講極坐標(biāo)系再加上一個Z軸的直線運動,就得到了這樣的圓柱結(jié)構(gòu)機械臂。這類機械臂在實際應(yīng)用中見到的比較少,因為同為極坐標(biāo)結(jié)構(gòu),下面這種SCARA結(jié)構(gòu)有著更“擬人”的效果。
SCARA結(jié)構(gòu)
這一類機械臂的結(jié)構(gòu)非常像人類手臂(雖然自由度差了很多,人手臂應(yīng)該是7個自由度),優(yōu)點很明顯就是節(jié)省空間,缺點也很明顯,由于遠(yuǎn)端的誤差放大作用,對于電機角度控制的精度要求非常高,電機的一點點抖動傳遞到末端都可能造成很大的誤差,因此在工業(yè)機械臂中,這類機械臂一般都是使用傳動誤差極小的諧波減速器。
CoreXY結(jié)構(gòu)
其實關(guān)于機械臂的結(jié)構(gòu)還有各種各樣,結(jié)構(gòu)設(shè)計師們的腦洞實在是讓人嘆為觀止,有興趣的小伙伴可以去google一下國外的各種3D打印機作品,非常的有意思。這里只最后介紹一下X-Bot中采用的CoreXY結(jié)構(gòu)。
與傳統(tǒng)XY結(jié)構(gòu)不同,CoreXY是一種僅使用一根同步帶就可以控制末端在XY兩個方向運動的結(jié)構(gòu),非常巧妙;但是和絕大多數(shù)其他結(jié)構(gòu)一樣,CoreXY這種結(jié)構(gòu)也會有電機和限位開關(guān)分散分布,電路連接走線比較麻煩的缺點;于是在其基礎(chǔ)上,X-Bot改變了電機放置的位置,將其由兩邊放置改為中央放置,所有的電路板和電機集中布置,結(jié)構(gòu)更緊湊。
電路設(shè)計篇
電路很簡單就是一個STM32的最小系統(tǒng),電機驅(qū)動直接使用了一體式的驅(qū)動器,可以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