基于单片机控制的电火花打孔机
zhushiqing2019/03/19极客DIY IP:云南

分享一下前段时间制作的单片机+步进电机控制的电火花打孔机,下面是源程序。电路设计当时不注意保存,现找不到了,但控制思路是利用高速比较器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 点击下载  
  73d961552e22a3f74fa407c6cb0f20fb.mp4 点击下载  

[修改于 5年1个月前 - 2019/03/30 00:24:05]

来自:综合交流区 / 极客DIY
32
 
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
zhushiqing 作者
5年1个月前 IP:云南
855962

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

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


73d961552e22a3f74fa407c6cb0f20fb.mp4 点击下载  

  20170503_111723.mp4 点击下载  

微信图片_20190319093552.jpg

 

微信图片_20190319093547.jpg

 

微信图片_20190319093541.jpg

 

微信图片_20190319093520.jpg

 

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5年1个月前 IP:云南
856006

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

+1
科创币
暮光之羽
2019-03-21
赞扬
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5年1个月前 IP:云南
856217

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5年1个月前 IP:云南
856218

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5年1个月前 IP:云南
856987

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5年1个月前 IP:云南
856989

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

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhushiqing作者
5年0个月前 IP:云南
857966

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

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

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

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

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

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

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

所属专业
上级专业
同级专业
zhushiqing
机友 笔友
文章
2
回复
16
学术分
0
2011/06/12注册,8天19时前活动

本人祝世清,人民教师,酷爱电子制作,近期热忠于微电脑电火花打孔及电磁枪的探究与制作,望各位高手多指教!

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

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