刚刚注册的论坛,纯纯的萌新。
习惯性的浏览论坛版块中的精华帖子,看看到很多前辈大佬的作品。其中自己也做过一些差不多的项目,后悔当初没来论坛学习下,走过不少弯路啊。
刚刚浏览到本版块的时候看到
基于STM32的简易激光雕刻机这个帖子。就像顺路我也发一个吧
首先这个激光雕刻机是没有实物了的,这是我大一的时候参加校内竞赛做的。当然这种东西的水平是拿不到什么奖的啦。后来同学拿去玩把激光头给烧了就直接把他分尸了。
幸亏我有保存些资料的习惯,不然真的尸骨无存了。
忘记当初为什么要做这个东西了,可能是为了后来的CNC雕刻机做的初代版本练手,具体原因我记不清了。
一共貌似用了一周左右的时间,使用的是STC89C52RC单片机,也是当时我唯一会的啦。XY轴电机使用拆机光驱,光驱来自实验室古董台式机,当时还拆了软驱的 很多人都没见过软驱了现在。
激光头是后来才邮过来的,12V 500mW应该,反正很小。前面几天测试使用的油笔芯画图的。
机架用的是文具店的A4板夹就是这个样子的
8
我们记得是买了好几个,用壁纸刀划开,用胶枪拼成的机架
由于当时单片机水平垃圾,所以下位机没有处理过多的程序。大部分的处理是通过上位机进行的。
上位机用的是易语言,话说这个也是第一次,当时找破jie就找了一天多。
还好是中文编程上手快。
上位机支持拖拽,可以转换灰度图。其他记不清了。
因为使用易语言写的因此很可能或者说肯定360等安全软件会报毒,但是放心吧各位,当初我那个水平是没有能力的。源码也会上传大家自己修改编译就好
当初也百度搜索下载了很多大神的文件上位机等,也一并上传了。
等下。。。我看看还有啥
啊哈哈 这个后来去参加过博创杯,但是呢~并没有完成参赛手续,学校的某些领导公务过于繁忙而忘记了给组委会交付一些文件
但是当初为博创杯准备的视频还有。不过上传视频还得等待审核,只好等等啦
刚刚去重温了下我佳哥的视频,浓郁的非主流风格哈哈哈
由于时间仓促,后来没有参加上比赛有些心灰意冷,这期间同学就给拆了。所以就没有了后续版本。运动轨迹优化啥的都没有做,现在是单纯一行行的打点。诸位谁有空可以接着做
开发手册 一、系统运行环境 上位机软件支持x86、x64构架的Windows操作系统(98以上) 上位机软件属于小型软件不要求系统配置,windows运行环境即可运行。 下位机自带220v变压电源,支持210~240v交流电源 二、系统配置 将激光雕刻机通电、放置于水平稳定的平台上,环境要求通风。 打开上位机软件,将激光雕刻机自带的USB线连接,点击上位机刷新按钮,软件会自动检测使用的串口。(串口通讯需要计算机安装CH340USB转串口驱动,具体方法自行寻找) 选择打开的串口,点击打开按键。点击激光控制按键检测连接是否正常。 将需要打印的材料放置于激光头下部,可以通过软件设置中控制按键微调激光头位置、激光轴移动速度等。 选择文字模式或图片模式,也可以通过快捷键ctrl+M快速切换。 图片模式支持BMP等大多数图片格式,用户可以通过常规文件打开方式或快捷拖动到编辑区来添加图片。 文字模式下、用户可以在编辑区中编辑、排版需要打印的内容。 三、说明 更多功能说明请查看上位机软件说明部分。 /*z地址定义 50 x+前进 51 x- 52 y+ 53 y- 54/55 字宽 56 前进步 57 激光开关 58/59 激光强度 60 x轴速度 61 y轴速度 62 开始打印0,57 63 暂停 64 停止标志 65 bmp灰度图标志位 100开始时灰度图数据 */
单片机下位机源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define N z[60] //X速度
- #define M z[61] //Y速度
- //#define zil 54]*256+z[55]
- unsigned char code Z1[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; // 正转
- //unsigned char code F1[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转
- sbit jg=P2^0;
- sbit EN1=P2^7;
- sbit EN2=P2^6;
- sbit EN3=P2^5;
- sbit EN4=P2^4;
- sbit led=P2^1;//指示灯
- uchar xdata z[500]={0};//缓存
- uchar buff[3];//串口缓存
- uchar x1,x0,y1,y0,cont2=0;
- uchar xfb=4,yfb=4;//走步标志位
- uchar x,y,k,temp,t;//变量定义,有些没有用
- char i,j;
- uint h=0,jiguang;
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
- for(j=110;j>0;j--);
- }
- /**********************************************************************
- * *
- * 步进电机驱动 *
- * *
- ***********************************************************************/
- /********x方向正转***********/
- void motor_fxw(uint flag)
- {
- while(1)
- {
- P0=Z1[i];
- delayms(N);
- flag--;
- i++;
- if(i>7)
- i=0;
- if(flag==0)
- break;
- }
- }
- /********x方向逆转***********/
- void motor_fxz(uint flag)
- {
- while(1)
- {
- P0=Z1[i];
- delayms(N);
- flag--;
- i--;
- if(i<0)
- i=7;
- if(flag==0)
- break;
- }
- }
- /********y方向正转***********/
- void motor_fyw(uint flag)
- {
- while(1)
- {
- P1=Z1[j];
- delayms(M);
- flag--;
- j++;
- if(j>7)
- j=0;
- if(flag==0)
- break;
- }
- }
- /********y方向逆转***********/
- void motor_fyz(uint flag)
- {
- while(1)
- {
- P1=Z1[j];
- delayms(M);
- flag--;
- j--;
- if(j<0)
- j=7;
- if(flag==0)
- break;
- }
- }
- /*****************打点完毕激光移至原点****************************/
- void huanyuan(uint zix,uint ziy)
- {
- while(1)
- motor_fxz(zix);
- while(1)
- motor_fyz(ziy);
- }
- void dazi(uint zik,uchar bu)//打印函数
- {
- uint x;
- uint s;
- jg=1;
- for(x=0;x<zik;x++) //执行zik个循环,x轴右移zik步
- {
- while(z[63]);//暂停等待
- if(z[64]==1) break;//停止标志 跳出循环
- s=z[99+x]*(z[58]*256+z[59])/100;
- jg=0;//开激光
- delayms(s);
- jg=1; //关闭激光
- // if(y%2==0)
- motor_fxw(1); //x轴前进一步
- // else
- // motor_fxz(1); //x轴后退一步
- }
- if(z[64]==1) z[64]=0; //停止标志 跳出循环
- else //y轴进一行
- {
- y++;
- motor_fxz(zik);
- motor_fyw(1);
- }
- // if(y==zil)
- // {
- // huanyuan(zik,ziy);
- // }
- }
- /* 串口配置函数,baud-通信波特率 */
- void ConfigUART(unsigned int baud)
- {
- SCON = 0x50; //配置串口为模式1
- TMOD &= 0x0F; //清零T1的控制位
- TMOD |= 0x20; //配置T1为模式2
- TH1 = 256 - (11059200/12/32)/baud; //计算T1重载值
- TL1 = TH1; //初值等于重载值
- ET1 = 0; //禁止T1中断
- ES = 1; //使能串口中断
- TR1 = 1; //启动T1
- }
- void chuanlo() interrupt 4
- {
- if(RI)
- {
-
- buff[cont2]=SBUF;//每次3字节,地址高,地址低,数据,,
- cont2++;
- if(cont2==3)//每收3个字节,把数据写入地址中
- {
- z[(buff[0]*256)+buff[1]]=buff[2];
- cont2=0;
- }
- RI=0;
- }
- }
- main()
- {
- EA=1;
- P0=0xff;
- ConfigUART(9600) ;
- z[60]=15;//默认的参数
- z[61]=50;
- z[56]=1;
- z[62]=0;
- jg=1;
- cont2=0;
- EN1=1;
- EN2=1;
- EN3=1;
- EN4=1;
- y=0;
- i=0;
- j=0;
- t=1;
- // z[54]=0;
- // z[55]=44;
- // z[60]=50;
- // z[61]=50;
- while(1)
- {
- if(z[57]==100){jg=0;}//上位机指令处理,开关激光
- if(z[57]==0) {jg=1;}
- //// //if(z[57]==100){jg=~jg;z[57]=0;}
- //// if(cont2!=0) led=1; else led=0;//指示通信是否可用
- //// // if(cont2!=0) led=0; else led=1;
- if(z[50]>0){motor_fxw(t);z[50]=0;} //x轴前进一步
- if(z[51]>0){motor_fxz(t);z[51]=0;}
- if(z[52]>0){motor_fyz(t);z[52]=0;}
- if(z[53]>0){motor_fyw(t);z[53]=0;}
- if(z[62])//开始打印标志
- {
- dazi(z[54]*256+z[55],z[56]);
- z[62]=0;//一行打印完成
- SBUF=1;//发送信息,表示打印完成
- while(!TI);
- TI=0;
- }
-
- }
- }
复制代码
所有资料51hei提供下载:
各版本上位机.zip
(3.93 MB, 下载次数: 881)
|