本帖最后由 机器谱 于 2023-7-3 11:09 编辑
1. 功能说明
铣床主要是指用铣刀在工件上加工多种表面的机床,本文示例将通过程序控制模拟铣床的运动效果--模拟铣床进行加工时各个结构的运动方式。铣床的运动主要包括:主轴的旋转运动、立铣头的上下进给运动、工作台的前后左右进给运动。
2. 结构说明
该铣床的主轴旋转运动选择用电机直接驱动;立铣头的上下进给运动选择丝杠平移机构,运动稳定,且位移距离较长;工作台的左右进给运动选择丝杠平移机构,运动稳定,且位移距离较长;工作台的前后进给运动选择滑块平移机构,用于短距离的运输。
3. 电子硬件
本实验中采用了以下硬件:
主控板 | Basra主控板(兼容Arduino Uno)
| 扩展板 | Bigfish2.1扩展板
| 传感器 | 触碰传感器 | 电池 | 7.4V锂电池 |
电路连接说明:在下图所示的2个位置分别安装一个触碰传感器作为限位(限位:限定机械设备的运动极限位置)。
① 2个触碰传感器分别连接在Bigfish扩展板的A0、A4端口;
② 舵机连接在Bigfish扩展板的D3端口;
③ 电机连接在Bigfish扩展板的D5,D6;D9,D10。
4. 功能实现
4.1 实现思路
实现铣床模拟加工的功能。
第一步(复位):
工作台运动到X正向极限位置(控制1号电机旋转,直到工作台碰到限位的触碰传感器停止);铣头运动到Y正向极限位置(控制2号电机旋转,直到洗头碰到限位的触碰传感器停止),工作台运动到Y正向极限位置(控制4号电机);
第二步:
工作台在一号电机所在的丝杠上向-X方向运动,其中心位置与铣头的中心位置在同一平面上(控制1号电机);工作台在一号电机所在的丝杠上向-Y方向运动,其中心位置与铣头的中心位置在同一直线上(控制1号电机);铣头开始旋转(控制3号电机)
第三步:
铣头-Z方向移动,移动到2号电机所在丝杠的中间位置停止(控制2号电机);工作台在+X与-X方向各匀速移动1S的时间(控制1号电机正转与反转延迟各1s);工作台在+Y与-Y方向各移动一段距离(控制4号舵机顺时针、逆时针各旋转一定的角度);
第四步:
铣头在-Z向移动1s(控制2号电机旋转1s),暂停0.3s;洗头在+Z向移动1s(控制2号电机反向旋转1s);工作台的运动重复第三步中工作台的运动;
第五步:
复位,回到第一步中的位置。
4.2 示例程序
编程环境:Arduino 1.8.19
下面提供一个参考例程(xichuang.ino),具体实验效果可参考演示视频。 - /*------------------------------------------------------------------------------------
- 版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
- Distributed under MIT license.See file LICENSE for detail or copy at
- https://opensource.org/licenses/MIT
- by 机器谱 2023-06-14 https://www.robotway.com/
- ------------------------------*/
- #include <Servo.h>
- int i,j,k,l; //定义几个变量
- Servo servo1; //命名一个舵机
- void setup() {
-
- servo1.attach(3); //启动舵机3号口
-
- pinMode( 14, INPUT); //定义引脚
- pinMode( 18, INPUT);
- pinMode( 5, OUTPUT);
- pinMode( 6, OUTPUT);
- pinMode( 9, OUTPUT);
- pinMode( 10, OUTPUT);
- pinMode( 4, OUTPUT);
- }
- void loop() {
- i=digitalRead(14); //设置i为A0读取数据
- j=digitalRead(18); //设置j为A4读取数据
- //第一步
- servo1.write( 130 ); //舵机置位
- zero();
- /****************************
- 第二步
- *****************************/
- if(i==0&&j==0) //如果X轴Y轴已归位
- {
- //delay(2000);
-
- digitalWrite( 9 , LOW ); //X轴至中部
- digitalWrite( 10 , HIGH );
- delay(6000);
- digitalWrite( 10 , LOW );
-
- servo1.write( 87 ); //舵机伸出
- digitalWrite( 4 , HIGH ); //电机旋转
- delay(1000);
- /****************************
- 第三步
- *****************************/
- digitalWrite( 5 , LOW ); //Z轴移至中间
- digitalWrite( 6 , HIGH );
- delay(5000);
- digitalWrite( 6 , LOW );
-
- digitalWrite( 9 , LOW ); //X轴左移一秒
- digitalWrite( 10 , HIGH );
- delay(1000);
- digitalWrite( 10 , LOW ); //稍停
- delay(300);
- digitalWrite( 9 , HIGH ); //X轴右移一秒
- digitalWrite( 10 , LOW );
- delay(1000);
- digitalWrite( 9 , LOW );
-
- servo1.write( 130 ); //舵机伸缩移动
- delay(300);
- servo1.write( 87 );
- delay(300);
- /****************************
- 第四步
- *****************************/
- // digitalWrite( 5 , LOW ); //Z轴下移一秒
- // digitalWrite( 6 , HIGH );
- // delay(1000);
- // digitalWrite( 6 , LOW );//稍停
- // delay(300);
- digitalWrite( 5 , HIGH ); //Z轴上移一秒
- digitalWrite( 6 , LOW );
- delay(1000);
- digitalWrite( 5 , LOW );
-
- /****************************
- 重复第三步
- *****************************/
- digitalWrite( 5 , LOW ); //Z轴移至中间
- digitalWrite( 6 , HIGH );
- delay(1000);
- digitalWrite( 6 , LOW );
-
- digitalWrite( 9 , LOW ); //X轴左右移一秒
- digitalWrite( 10 , HIGH );
- delay(1000);
- digitalWrite( 10 , LOW );
- delay(300);
- digitalWrite( 9 , HIGH );
- digitalWrite( 10 , LOW );
- delay(1000);
- digitalWrite( 9 , LOW );
-
- servo1.write( 130 ); //舵机伸缩移动
- delay(300);
- servo1.write( 87 );
- delay(300);
- digitalWrite( 4 , LOW );
- while(1)
- {
- i=digitalRead(14); //设置i为A0读取数据
- j=digitalRead(18); //设置j为A4读取数据
- zero();
- }
-
- }
-
- //}
-
- }
- void zero()
- {
- if(i==0) //如果触发限位A0
- {
- digitalWrite( 9 , LOW ); //X轴停止运动
- digitalWrite( 10 , LOW );
- }
- else
- {
- digitalWrite( 9 , HIGH ); //X轴电机置位
- digitalWrite( 10 , LOW );
- }
-
- if(j==0)//如果触发限位A4
- {
- digitalWrite( 5 , LOW );//Z轴停止运动
- digitalWrite( 6 , LOW );
- }
- else
- {
- digitalWrite( 5 , HIGH ); //Z轴电机置位
- digitalWrite( 6 , LOW );
- }
- }
复制代码
5. 资料下载
资料内容:
①程序源代码
②样机3D文件
资料下载地址:立式铣床模型-概述 https://www.robotway.com/h-col-245.html
|