基于单片机控制的电火花打孔机

分享一下前段时间制作的单片机+步进电机控制的电火花打孔机,下面是源程序。电路设计当时不注意保存,现找不到了,但控制思路是利用高速比较器lm319(lm339速度达不到要求)检测火花输出端电压,以判断开路、短路及正常工作状态,将信号反馈给单片机的开路检测端和短路检测端,从而控制步进电机的精确进给。希望能给电火花打孔爱好者一点帮助。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar code smg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar c,n,t,m,tt=2,dd=2,fm=10;
uint a,b=24000,r,s,q;
sbit SN=P2^0; /*****电机受控信号**************************************/
sbit JGLSZ=P2^1; /*****加工量设置指示**************************************/
sbit MCSZ=P2^2; /*****脉冲设置指示**************************************/
sbit BJ=P2^3; /************报警蜂鸣*******************************/
sbit GW=P2^6; /*****数码管个位**************************************/
sbit SW=P2^7; /*****数码管十位**************************************/
sbit QR=P3^0; /*****设置确认键**************************************/
sbit YX=P3^4; /*****确认运行键**************************************/
sbit KLJC=P1^0;/*****开路检测位**************************************/
sbit DLJC=P1^1;/*****短路检测位**************************************/
sbit SXW=P1^2; /*****上限位,用于开机自动回原位设置**************************************/
sbit FX=P1^3; /*****方向给定输出端**************************************/
sbit JGL=P1^4; /*****进给脉冲输出端**************************************/
sbit SZ=P1^5; /*****工作进给量设定**************************************/
sbit HHMC=P1^6;/*****电火花脉冲输出端**************************************/
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约0.13ms
/*
/********************************************************/
void delay(t)
{
uchar k;
while(t--)
{
for(k=0; k<15; k++)
{HHMC=0; }
}
}
/********************************************************/
/*
/* 报警蜂鸣
/*
/********************************************************/
void mfbj()
{
while(fm--)
{
BJ=1;
delay(1);
BJ=0;
delay(1);
}
}
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约0.008ms
/*
/********************************************************/
void delay2(m)
{
uchar j;
while(m--)
{
for(j=0; j<1; j++)
{;}
}
}

/********************************************************/
/*
/*
/* 数码管显示
/*
/********************************************************/
void disp(n)
{
HHMC=0;
while(n--)
{
SW=1;
P0=smg[a/10];
delay(5);
SW=0;
GW=1;
P0=smg[a%10];
delay(5);
GW=0;

}
}
/********************************************************/
/*
/*
/* 加工量设置程序
/*
/********************************************************/
void shezh()
{
JGLSZ=1;/**********加工量设置指示灯开*******************/
HHMC=0; /***********设置时高压脉冲关闭******************************/
SN=0;
while(1)

{ if (YX==0)
break;
{ if(SZ==0)
delay(500);

if(SZ==0)a++;
if(SZ==0)mfbj();
if(a==61)
a=0;

if(QR==0)b=a*400;
if(QR==0)q=b;/**********工作短路回退的过程中防止回退过度*******************/
if(QR==0)mfbj();
disp(1);

}
}
mfbj();
JGLSZ=0; /**********加工量设置指示灯关*******************/
}
/********************************************************/
/*
/*
/* 脉冲百分比设置程序
/*
/********************************************************/
void shezh1()
{
a=0;
MCSZ=1; /*************脉冲设置指示灯开*********************/
HHMC=0;
SN=0;
while(1)

{ if (YX==0)
break;
{ if(SZ==0)
delay(500);

if(SZ==0)a++;
if(SZ==0)mfbj();
if(a==11)
a=0;
if(QR==0)mfbj();
{
if (a==1){tt=1;dd=5;} /*************频率4.93kh,占空比26%*********************/
else if(a==2){tt=1;dd=4;} /*************频率5.65kh,占空比30%*********************/
else if(a==3){tt=1;dd=3;} /*************频率6.63kh,占空比35%*********************/
else if(a==4){tt=1;dd=2;} /*************频率8kh,占空比43%*********************/
else if(a==5){tt=2;dd=3;} /*************频率5.65kh,占空比48%*********************/
else if(a==6){tt=2;dd=2;} /*************频率6.63kh,占空比53%*********************/
else if(a==7){tt=3;dd=2;} /*************频率4.93kh,占空比60%*********************/
else if(a==8){tt=2;dd=1;} /*************频率8kh,占空比63.5%*********************/
else if(a==9){tt=3;dd=1;} /*************频率6.63kh,占空比70%*********************/
else if(a==10){tt=4;dd=1;} /*************频率5.65kh,占空比75%*********************/

}

disp(1);

}
}
mfbj();
MCSZ=0;/*************脉冲设置指示灯关*********************/

}
/********************************************************/
/*
/*
/* 对刀置零
/*
/********************************************************/
void ddzl()
{
SN=1;

while(1)
{
if(DLJC==0||b==0)break; /******如果短路检测等于0或达到行程极限则停止*****/
if(b==0)
FX=0;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
--b;
a=b/400;
HHMC=1; /*************高压测试脉冲开*********************/
}
HHMC=0; /*************高压测试脉冲关*********************/
a=0;
disp(1);
mfbj();
delay(1000) ; /*************对刀结束3声报警********************/
mfbj();
delay(1000) ;
mfbj();
delay(1000) ;
}
/********************************************************/
/*
/*
/* 复位回零
/*
/********************************************************/
void fwhl()
{
SN=1;
HHMC=0;
while(1) /*有条件不确定循环,使电机反转,上限位开关(SXW)接通则退出*/
{
if(SXW==0)break;
FX=1;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
a=b/400;
}
delay(1000); /*************复位结束2声报警********************/
mfbj();
delay(1000) ;
mfbj();

}
/********************************************************/
/*
/*
/* 循环进给 ,每加工1mm,快速回退1次
/*
/********************************************************/
void yhjg()
{
SN=1;
HHMC=0;
while(1)
{
if(r==s+1200||SXW==0)break;/***快速回退量等于加工量另加3mm(400个脉冲1mm)************/
HHMC=0;
FX=1;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
r++;
}
disp(1) ;
while(r--) /***快速进给量等于回退量************/
{
HHMC=0;
FX=0;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
}
}
/********************************************************/
/*
/*
/* 正常工作
/* KLJC开路时为1,正常工作时为0;50v左右翻转,DLJC正常工作时为1,短路时为0,
/*翻转电压为30v左右。
/*要另加比较器探测。
/********************************************************/
void gongz()
{
while(1)
{
if(b==0||SXW==0||b==q)break;/******达到行程极限或上限位或短路回退到极限时则停止*****/
HHMC=1;
SN=1;
if(KLJC==1&&DLJC==1) /***开路检测开路和短路检测正常时单步进给*****/
{
HHMC=0;
FX=0;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
--b;
++s; /******回退量,回退进给中使用*************/
if(s%400==0)
{HHMC=0;
yhjg();}
}
else if(KLJC==0&&DLJC==1) /***开路检测正常和短路检测正常时电机停止,给火花脉冲*****/
{
while(1)
{
if(KLJC==1||DLJC==0)break;
HHMC=1;
delay2(tt); /***变量tt和dd为脉冲宽度设置而设*****/
HHMC=0;
delay2(dd);
HHMC=~HHMC;
}
}
else if(DLJC==0) /***短路检测短路时单步回退*****/
{
FX=1;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
++b;
--s; /***变量s为循环进给而设*****/
}
a=s/400;
disp(1);
}
}
/********************************************************/
/*
/*
/* 主程序入口
/*
/********************************************************/
void main()
{
P2=0; /**************输出口置0******************/
mfbj();mfbj();mfbj();mfbj();mfbj();
HHMC=0;
fwhl(); /**********上电自动回退到最上限**************************/
SN=0;
while(1)
{
if(SZ==0) break;
disp(1); /**********启用显示器*****************************/
}
ddzl(); /***********用设置键调用对刀程序***********************************/
SN=0;

shezh(); /**********设置加工深度***************************/
delay(1500);
shezh1(); /**********设置脉冲占空比**********************************/
while(b--)
{
gongz();
} /*********正常加工状态**********************************/

微信图片_20190319093520.jpg

 

微信图片_20190319093541.jpg

 

微信图片_20190319093547.jpg

 

微信图片_20190319093552.jpg


  20170503_111723.mp4 30.73MB  
  73d961552e22a3f74fa407c6cb0f20fb.mp4 16.86MB  

[修改于 3 年前 - 2019-03-30 00:24:05]

来自:科创广场 / 极客DIY
 
2
虎哥
2年7个月前
1楼

看起来,如果火花熄灭了,就要减小间隙直到短路,然后缓慢拉开一点。这个减小间隙的过程如何防止电极对工件造成冲撞呢?

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽
2年7个月前 修改于 2年7个月前
2楼
引用虎哥发表于1楼的内容
看起来,如果火花熄灭了,就要减小间隙直到短路,然后缓慢拉开一点。这个减小间隙的过程如何防止电极对工件...

起弧是不是能借鉴一下氩弧焊机的起弧方式,话说原理我不是很懂

电极用钍钨合金针,间隙调整到引弧范围内再打开开关

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前
3楼

不需要减至短路状态就可正常放电了,实际上检测装置检测的是3个状态:开路状态(满电压80v左右,向工件进给);正常放电状态(30-80v之间,进给停止,正常放电);短路状态(30v以下,回退)。只是火花放电太复杂,无法避免短路出现。至于你说的对工件冲击那是不用当心的,因为进给电机还不到短路时就停止进给了。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
2年7个月前
4楼
引用zhushiqing发表于3楼的内容
不需要减至短路状态就可正常放电了,实际上检测装置检测的是3个状态:开路状态(满电压80v左右,向工件...

谢谢指教。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前 修改于 2年7个月前
5楼


73d961552e22a3f74fa407c6cb0f20fb.mp4 16.86MB  

  20170503_111723.mp4 30.73MB  

微信图片_20190319093552.jpg

 

微信图片_20190319093547.jpg

 

微信图片_20190319093541.jpg

 

微信图片_20190319093520.jpg

 

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前
6楼

发贴时忘了传火花打孔的相关效果图片了,现在传上😀

+1
科创币
暮光之羽
2019-03-21
赞扬
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
3DA502
2年7个月前
7楼

老板   拍一下电容   

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wuxicili
2年7个月前
8楼

做完善点出套件。

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前
9楼

本机因是高频火花机,不用rc振荡,所以电容不是关键,图上用的电容是5uf的电磁炉电容。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前
10楼

刚开始确有找工厂代工成品的想法,但我们这找加工厂商不好找,也就搁置了,就当自己的一兴趣制作算了

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ehco
2年7个月前
11楼

相当牛叉 给刀具开V靠谱 俺也做一个耍耍

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
slof
2年7个月前
12楼

楼主的电火花打火效果比我的好很多,想看看功率输出部分是怎么做的。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
三水合番
2年7个月前
13楼

楼主用的是普通的自来水吗?

之前我也试过火花打孔,但是如果用自来水的话,貌似是因为自来水电导率太高,只有电解的气泡,没有火花……后来换了瓶装的娃哈哈纯净水才能正常打火……然后水的成本太高以至于根本不敢考虑给大件打孔😥

楼主是咋解决这个问题的?

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
314152
2年7个月前
14楼
引用三水合番发表于13楼的内容
楼主用的是普通的自来水吗?之前我也试过火花打孔,但是如果用自来水的话,貌似是因为自来水电导率太高,只...

那就氪金大法,氪个RO鸡搞水😂顺面饮用水的问题也一并解决了😁

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前
15楼

本火花机用的是自来水,至于要用纯净水才能工作的说法,是因为你的短路电压值设定过高,本机中用的功率部分供电电压是72v3a充电器(空载电压85v左右),我的短路检测电压设置在30v左右。正常火花放电电压区间在30v至70v之间,关键是70v这一电压值的设定决定了火花间隙,如果设定过高,如84v,电极刚靠近,电压就因电解降至84以下而停止进给,而这时停止进给,输出火花脉冲,因间隙还比较大,就会出现电解冒泡就停止进给而无火花的情况。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年7个月前
16楼

功率部份其实很简单,就是单片机输出的脉冲信号通过图腾柱直接驱动一只大功率mos(我用的是47n60c3),大致原理力如下:

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
XZGSW1
2年6个月前
17楼

电极进给的速度是固定的,还是可调的,如是固定的,速度取多少较好?

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
2年6个月前
18楼

电极进给速度随机的,只要检测到开路就进给一步,每步理论值是0.02mm。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
987518529
2年6个月前
19楼

建议楼主把套件打包列清单,出教程,让我们这些没技术的人也可以做一个,然后每个使用教程的同志捐助你一定金额

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jyh138
2年6个月前
20楼

元件太多了头疼


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
白纸扇001
2年5个月前
21楼

楼主,你发的功率驱动部分电路图太小了,看不清楚,麻烦可以发个大点的吗?😂

回复
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
月光曲
2年5个月前
22楼

我也想做一个

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
黑开水
2年4个月前
23楼

大神,有没有套件或者详细的原件列表或者教程?

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
linrongcheng
2年4个月前
24楼

看着火花不错  也想做一台玩玩  楼主能不能发份原件  

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
花小开
2年3个月前
26楼

楼主,能给张功率板的正面照片吗?   谢谢!

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
mcubest
1年6个月前
27楼

做的非常好,丝杆要怎么选择?

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
梦想网络
1年6个月前 修改于 1年6个月前
28楼

楼主

我看论坛有那种简单的电容电阻的 能给科普下么

加工的尺寸跟什么有关系呢? 如果开20孔 用20的空心铜管是否可以?

电容的大小跟火花的频率有关系么?

电阻我看有人用灯泡代替的,是否只要功率足够的灯泡就可以替代电阻?


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5个月20天前
29楼
引用mcubest发表于27楼的内容
做的非常好,丝杆要怎么选择?

丝杆没有要求,我用的是8mm导程的丝杆。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5个月20天前
30楼
引用梦想网络发表于28楼的内容
楼主我看论坛有那种简单的电容电阻的 能给科普下么加工的尺寸跟什么有关系呢? 如果开20孔 用20的空...

加工形状及尺寸决定于工具电极的形状与大小。

回复
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
白纸扇001
5个月19天前
31楼
引用zhushiqing发表于30楼的内容
加工形状及尺寸决定于工具电极的形状与大小。

楼主,这个间隙电压的检测电路能参考下吗?我自己测试了很多电路都不行🙏

回复
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
梦想网络
3个月20天前
32楼

那怎么提高放电频率? 我有看到一个搬运油管的视频 放电的频率很高 肉眼可见的火花一直

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
%7B%22isDisplay%22%3Atrue%7D
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
{{description}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}