找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 9321|回复: 10

基于电子积木arduino(AVR)的G代码解释器原代码

[复制链接]
发表于 2012-8-6 19:48:27 | 显示全部楼层 |阅读模式
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC$ J3 r: G$ |1 F& F# V3 }
我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发
; ]8 f1 [. R4 w$ o& Y8 N上来给有用的朋友参考
1 q3 Z/ L* Y; J  V9 }, i5 x- |下面是其中的小段源码
- t! l$ R# z; N) s//init our variables& A$ Y  E1 T) [$ ]" [
long max_delta;
) Q/ \* q! ~. S" j2 glong x_counter;
. t; g+ x/ p& A& k  d, `5 Hlong y_counter;. s- }8 k2 O* X7 h& p6 T
long z_counter;( l% E' D8 o6 L! K( m) u# I
bool x_can_step;
2 n+ D4 x8 `3 z2 f. P+ Wbool y_can_step;! s* Z$ {5 v0 x* ~' r* g) s) u
bool z_can_step;
0 p: d$ h9 C' Tint milli_delay;; Y7 m" K- s) ]0 N' H: y
void init_steppers()1 X" t9 T; x# l+ A3 C" F
{* o  y. u# ~, u+ Z9 A0 O9 \
//turn them off to start.
2 ]$ y1 \1 k- ~7 E disable_steppers();5 ^7 C3 x! r! R& p+ ]% @) S

* F0 F3 X' I% O: J, [' x0 C# w6 i //init our points.
% {) u, @/ v* K7 K& F6 s1 `* u" E7 V; X current_units.x = 0.0;( R, ]. `" I3 [
current_units.y = 0.0;
" y. X7 z! y- h5 G7 J1 D# v current_units.z = 0.0;
/ l; r5 n) m- s target_units.x = 0.0;" B9 R5 N& g5 P' j
target_units.y = 0.0;$ R8 f6 h8 m  b, ]& A
target_units.z = 0.0;
: {2 F' Q6 W  Y/ g   K  }* c% j  e# j! G
pinMode(X_STEP_PIN, OUTPUT);% F+ D5 H+ H4 ]# W" v
pinMode(X_DIR_PIN, OUTPUT);. @3 m# A$ H4 W
pinMode(X_ENABLE_PIN, OUTPUT);
! ]! f- G7 [! V: `; A$ M( ?3 x4 x pinMode(X_MIN_PIN, INPUT);
# c3 b% p% o9 _' c* F0 Y pinMode(X_MAX_PIN, INPUT);
# d, E& Q* Y, i+ d  z" b- b # `3 c/ o$ s3 f- N( i
pinMode(Y_STEP_PIN, OUTPUT);5 P5 ~& z- a9 V& e
pinMode(Y_DIR_PIN, OUTPUT);
) X3 x/ k4 z* U; J pinMode(Y_ENABLE_PIN, OUTPUT);
) v' j( j7 r# M pinMode(Y_MIN_PIN, INPUT);& c) S( F# `: f9 z6 ^4 @
pinMode(Y_MAX_PIN, INPUT);
3 z3 L( o8 A8 `4 g6 ?  W' ]
. d9 `3 T8 b; s" Y8 s8 O  h pinMode(Z_STEP_PIN, OUTPUT);
2 [% E3 r# [# @2 z/ L pinMode(Z_DIR_PIN, OUTPUT);, w; I7 l! \  g
pinMode(Z_ENABLE_PIN, OUTPUT);  a! E9 q& T$ p1 b0 g1 i7 v% G
pinMode(Z_MIN_PIN, INPUT);
7 a. N& n7 b$ b  A) ?$ ? pinMode(Z_MAX_PIN, INPUT);
* v! [; n! k5 E! L/ n/ x  I8 T
. }% d0 N! n2 `1 X0 p4 o' k7 p8 j //figure our stuff.
8 t6 Z7 f6 S: l' j3 }$ @ calculate_deltas();( {' i/ }% {$ k
}# h" p' F4 |5 U, F
void dda_move(long micro_delay)& @; D- y% ]8 C% H6 ?
{! a8 r9 s( J5 D  z2 \8 d6 k
//enable our steppers
( m* n& B% Z3 A0 y" @ digitalWrite(X_ENABLE_PIN, HIGH);! [! J- X. r/ c) E1 @5 j& b% B5 U8 M
digitalWrite(Y_ENABLE_PIN, HIGH);+ o$ ]9 I' D0 }# |
digitalWrite(Z_ENABLE_PIN, HIGH);
4 M9 a. p- B7 e4 T! ^; n5 d 4 p* L. W/ D- t  X+ n
//figure out our deltas# N* }' _- X, f- O2 c6 s8 k
max_delta = max(delta_steps.x, delta_steps.y);0 R. l& U! l- \7 h
max_delta = max(delta_steps.z, max_delta);
8 c& X9 U1 H. o //init stuff.  r2 r1 J* t! @$ f8 v7 `
long x_counter = -max_delta/2;: A! {9 h+ ~7 J
long y_counter = -max_delta/2;& _$ e) a- b  |. F  h- _: j) O
long z_counter = -max_delta/2;
; h# |; [' P% f' e- b' @, ?
9 e5 U  T0 i. D. a/ O6 Q9 ?& F //our step flags
6 s! _8 v9 E# O5 L bool x_can_step = 0;, X5 j" M7 {2 J
bool y_can_step = 0;& d7 L: k  b: Z% }9 n
bool z_can_step = 0;, O% C# V8 E; p, w$ \
( \6 @# d/ _; r5 D7 z/ r" @
if (micro_delay >= 16383)# B* ]- ?4 P* o
  milli_delay = micro_delay / 1000;3 P8 S$ j, n& L- [7 a* U
else
3 ?! Y! l( \# U/ @+ O; e  milli_delay = 0;
  v; M$ p2 e6 Z5 H7 h' k
/ Y( ~# ]5 D' s: {3 {9 h

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
回复

使用道具 举报

 楼主| 发表于 2012-8-6 19:50:44 | 显示全部楼层
有2轴圆弧查补和3轴直线查补功能
发表于 2013-8-7 14:46:24 | 显示全部楼层
谢谢分享。
发表于 2013-8-25 00:01:13 | 显示全部楼层
谢谢分享。
发表于 2014-12-2 14:14:14 | 显示全部楼层
谢谢分享
发表于 2015-5-2 17:56:27 | 显示全部楼层
谢谢分享!
发表于 2015-5-5 10:06:23 | 显示全部楼层
感谢分享
发表于 2015-5-5 10:18:43 | 显示全部楼层
电子积木是什么意思?是CNC的G码吗?
发表于 2015-9-27 00:13:28 | 显示全部楼层
这个还没怎么接触过,楼主能详细解释解释吗8 @. E9 V( p; u5 d/ y$ ^* U
发表于 2015-10-5 11:21:26 | 显示全部楼层
谢谢分享  
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-7-1 07:14 , Processed in 0.083718 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表