这篇文章主要介绍一下我的本科毕设(校级优秀)
激光雕刻机
时间比较久之前了2016年毕业。实现的功能是使用手机蓝牙串口工具发送G代码给单片机连接的HC09蓝牙模块,单片机进行插补最终实现控制两个步进电机实现激光雕刻。
视频:https://www.bilibili.com/video/av60409899/
1、系统原理图

2、实物图


当时实验条件简陋,老师只给了一张桌子。手机端发送的为G代码我当时是机床方向的。我又根据插补原理实现了椭圆插补等各种参数化线的插补功能。最后得了个校级优秀拿了1000块美滋滋。
下面是我的代码,其中我觉得最难的可能是串口和单片机通信,以及整个算法理论分析,涉及的知识都是大学学过的或者自学的东西,感觉意义还是很大的。
#include <REG52.h>
#include <FLOAT.h>
#define uchar unsigned char
#define uint unsigned int
char xdata m[17]={0};
int xdata H[17]={0};
int i=0;
int xdata t=0,n,w;
uchar xdata dat,num;
unsigned zd0,zd1;
float xdata zxx1,zxx2,zxx3,zxx4,zxx5;
sbit error=P1^7;
sbit mai0=P1^0;
sbit k0=P1^2;
sbit mai1=P1^1;
sbit dir0=P1^3;
sbit dir1=P1^4;
sbit fun=P1^6;
sbit laser=P1^5;
sbit INTERRUPT0=P3^2;
sbit INTERRUPT1=P3^3;
void zf()
{
TMOD=0x20; //用定时器设置串口波特率
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //串口初始化
SM0=0;
SM1=1;
}
void delay(unsigned int t){
unsigned int g;
while(t!=0){
for(g=0;g<60;g++);
t--;
}
}
void mc_p0(signed long m0,unsigned int n0)
{if(m0<0){
m0=-m0;
dir0=1;
}
else{dir0=0;}
while(m0!=0){
mai0=0;
delay(n0);
mai0=1;
m0--;
delay(n0);
}mai0=1;dir0=1;
}
void mc_p1(signed long m1,unsigned int n1)
{if(m1<0){
m1=-m1;
dir1=1;
}
else{dir1=0;}
while(m1!=0){mai1=0;
delay(n1);
mai1=1;
m1--;
delay(n1);
} mai1=1;dir1=1;
}
void line(float mmx0,float mmy0,float mmx1,float mmy1,unsigned int v0)
{
signed long x0=mmx0/0.075;
signed long y0=mmy0/0.075;
signed long x1=mmx1/0.075;
signed long y1=mmy1/0.075;
float k=0;
float y=0;
signed long ye=0;
signed long fi=0;
signed long sum=0;
signed long xe=0;
signed long yi=0;
signed long xi=0;
xi=x0;
yi=y0;
ye=y1-y0;
xe=x1-x0;
k=(y1-y0)/(x1-x0);
if(x0==x1){
mc_p1((y1-y0)*2,500/v0);}
if(y0==y1){
mc_p0((x1-x0)*2,500/v0);}
if((x0!=x1)&&(y0!=y1)){
if(x0
自制激光雕刻机

最低0.47元/天 解锁文章
1670

被折叠的 条评论
为什么被折叠?



