完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
arduino绘图
回到学校后,在科学系的一个壁橱里藏着一台HP绘图仪。 我玩了一段时间,一直想拥有自己的一个。 快进很多年。 步进电机很容易买到,我又开始使用电子设备和微控制器做事,最近我看到有人用刻有丙烯酸的显示器制作显示器。 这促使我终于建立了自己的绘图仪。 硬件设定 如您在这里看到的,我开始时太大了。 该绘图仪不能舒适地坐在我的桌子上,但是没关系,就像我出于学习目的所做的一样(而且,由于我必须重新做一些事情,下次我将使用较小的光束)。 皮带安装在导轨的两侧,然后用一些辅助轮将电动机悬挂在皮带上: 我在Arduino顶部堆叠了几个组件。 Arduino在底部,在上方是FabScan护罩,其次是在电机插槽1 + 2上的StepStick保护器,而SilentStepStick在顶部。 请注意,SCK和SDI引脚未连接。 注意将导线正确连接到电动机。 如有疑问,请查看数据表或欧姆表以找出哪些电线属于同一类。 软体设定 grbl可以解释所谓的G代码来表示工具移动和其他事物,我本可以将其闪烁到Arduino,我很好奇,并且想更好地理解事物。 (我的XY绘图仪软件可在GitHub上获得 ,没有任何保修。) 基础 要使用StepStick(或兼容)驱动器驱动步进电机,基本上,您需要先向相应的引脚发送高电平信号,然后再发送低电平信号。 或用Arduino术语: digitalWrite(stepPin, HIGH); delayMicroseconds(30); digitalWrite(stepPin, LOW); 其中stepPin是步进器的引脚号:电机1为3,电机2为6。 在步进器执行任何工作之前,必须将其启用。 digitalWrite(enPin, LOW); 实际上,StepStick知道该引脚的三种状态:
最后但并非最不重要的一点是,我们需要一种确定绘图仪方向的方法: digitalWrite(dirPin, direction); 下表列出了功能和引脚 [tr] 功能 电机1 电机2 [/tr]
pinMode(enPin1, OUTPUT); pinMode(stepPin1, OUTPUT); pinMode(dirPin1, OUTPUT); digitalWrite(enPin1, LOW); 有了这些知识,我们可以轻松地使步进器移动: totalRounds = ... for (int rounds =0 ; rounds < 2*totalRounds; rounds++) { if (dir==0){ // set direction digitalWrite(dirPin2, LOW); } else { digitalWrite(dirPin2, HIGH); } delay(1); // give motors some breathing time dir = 1-dir; // reverse direction for (int i=0; i < 6400; i++) { int t = abs(3200-i) / 200; digitalWrite(stepPin2, HIGH); delayMicroseconds(70 + t); digitalWrite(stepPin2, LOW); delayMicroseconds(70 + t); } } 这将使滑块左右移动。 该代码处理一个步进器,但是对于XY绘图仪,我们需要考虑两个轴。 命令解释器 我开始实现一个简单的命令解释器以使用路径规范,例如: "X30|Y30|X-30 Y-30|X-20|Y-20|X20|Y20|X-40|Y-25|X40 Y25 以毫米为单位描述相对运动(1mm等于80步)。 绘图仪软件实现了连续模式 ,该模式允许PC将较大的路径(成块)馈送到绘图仪。 (这是我在此视频中绘制希尔伯特曲线的方式。) 建立更好的笔筒 在上面的第一个图像中,笔用一些金属线绑在Y轴上。 这并不精确,也无法使软件举起和放下手(这解释了大的黑点)。 从那以后,我创建了一个更好,更精确的笔架,该笔架使用伺服器来升降笔。 在这张图片和上面链接的希尔伯特曲线视频中可以看到这种改进的新支架 笔用一个小夹子固定(所示的是通常用于将电缆固定到墙壁的8号大小的夹子)。 伺服臂可以抬起笔; 当手臂下降时,重力会使笔下降。 驱动伺服 驱动伺服器相对简单:只需提供位置,伺服器就可以完成所有工作。 #include // Servo pin #define servoData PIN_A1 // Positions #define PEN_UP 10 #define PEN_DOWN 50 Servo penServo; void setup() { // Attach to servo and raise pen penServo.attach(servoData); penServo.write(PEN_UP); } 我正在使用FabScan防护板的Motor 4上的伺服接头,因此我使用了模拟引脚1。 放下笔很容易: penServo.write(PEN_DOWN); 下一步 我的下一步之一是添加一些末端检测器,但是我可以跳过它们,而改用TMC2130的StallGuard模式。 这些探测器也可用于实现home命令。 也许将来我会添加一个真正的Z轴,该轴可以容纳雕刻机进行木铣,PCB钻Kong或丙烯酸雕刻,或者...(也想到了激光)。 |
||
|
||
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
3000 浏览 16 评论
3497 浏览 1 评论
9069 浏览 16 评论
4090 浏览 18 评论
1190浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 17:48 , Processed in 1.430874 second(s), Total 43, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号