lisui 发表于 2014-2-15 16:07 没雕刻机,,在想如果钻铣床精度调高了,连上电脑,看看能不能雕刻个板。。 |
欢迎继续阅读楼主其他信息
本帖最后由 mzral 于 2014-2-15 18:53 编辑 xxdz12345 发表于 2014-2-15 10:54 11.0592M感觉应该够用,调到脉冲最快的时候 驱动器用16细分以下,电机直接启动不起来,如果细分再增加可以直接启动,但怕速度慢。只能等同步轮 和钻铣床到了再研究这些了,如果速度不够晶振再换个高频率的,如果用汇编编写速度还能更快,只可惜汇编没学好。只能用C了,浪费了很多硬件的周期 |
这样搭桥看的头大,画个电路图,雕刻机上雕个电路板美观又稳定,我就雕了块音调板,音质相当好。 |
我也用89S52单片机做了个功能差不多,只是我不会单片机语言。用的是梯形图转Pwm再转HEX.只是梯形图用的定时器太大了。步进电机转的太慢。换24M晶振还是慢。你的不错啊功能多。哈哈做好了我仿造个啊。 |
mzral 发表于 2014-2-14 00:09 互相指教 ![]() |
78683612 发表于 2014-2-14 12:11 米有雕刻机、、、只有20W黄花电烙铁 和 焊锡。。 |
mzral实名认证 |
用雕刻机刻板不更快? |
rick_hou 发表于 2014-2-14 02:14 你说的倒是提醒我了...可以整个上下左右的那种摇杆.比按钮好多了..然后再加个小键盘,再整个usb转串口通讯,,功能就全了... |
mzral 发表于 2014-2-13 23:58 呵呵,我当时是用arduino的定时中断产生脉冲的,程序写的有点乱,现在已经都看不明白了。电子手轮是100脉冲的,还用了摇杆,可以切换,还有自动走刀的功能。 |
挺好的学习帖子,楼主的精神也很可贵 |
代码还没完工,上机还没测试。。不敢称强人,只是个爱好者 ![]() |
rick_hou 发表于 2014-2-13 23:18 坚持就是胜利,预祝你的也早点完工,,,我这个代码因为xy轴常用,考虑到xy轴时间信号的精准度,所以用的单片机系统里面的中断功能,所以代码多了点,如果用delay()延时,代码量可减少很多。。 |
/********************************************************* * * * 主函数 * * * *********************************************************/ void main() { uchar i; uchar j; delay(100); //上电,等待稳定 lcd_init(); //初始化LCD Timer_Init(); //初始化定时器 lcd_pos(1,0); while(DIS1[i] != '\0') { lcd_wdat(DIS1[i]); //显示字符F:X10Y10Z10 i++; } while(1) { //======================================================================= ///////////////////////////////////////////////////////选择XYZ轴部分///11 if(Kchice==0) { delay(60); if(Kchice==0) { i=0; j=j+1; if(j==1) { XLED=0; YLED=1; ZLED=1; } if(j==2) { XLED=1; YLED=0; ZLED=1; } if(j==3) { XLED=1; YLED=1; ZLED=0; } if(j==4) { XLED=1; YLED=1; ZLED=1; j=0; } } } ///////////////////////////////////////////////////////选择XYZ轴部分///11 //======================================================================= ///////////////////////////////////////////////////////速度加快////////22 if(Kfast==0) { delay(60); if(Kfast==0) { if(XLED==0) { Xrate=Xrate+1; lcd_pos(1,4); lcd_wdat(num[Xrate/10]); lcd_wdat(num[Xrate%10]); if(Xrate==20) { Xrate=19; } } if(YLED==0) { Yrate=Yrate+1; lcd_pos(1,8); lcd_wdat(num[Yrate/10]); lcd_wdat(num[Yrate%10]); if(Yrate==20) { Yrate=19; } } if(ZLED==0) { Zrate=Zrate+1; lcd_pos(1,12); lcd_wdat(num[Zrate/10]); lcd_wdat(num[Zrate%10]); if(Zrate==20) { Zrate=19; } } } } ///////////////////////////////////////////////////////速度加快////////22 //======================================================================= ///////////////////////////////////////////////////////速度减慢////////33 if(Kslow==0) { delay(60); if(Kslow==0) { if(XLED==0) { Xrate=Xrate-1; lcd_pos(1,4); lcd_wdat(num[Xrate/10]); lcd_wdat(num[Xrate%10]); if(Xrate==0) { Xrate=1; } } if(YLED==0) { Yrate=Yrate-1; lcd_pos(1,8); lcd_wdat(num[Yrate/10]); lcd_wdat(num[Yrate%10]); if(Yrate==0) { Yrate=1; } } if(ZLED==0) { Zrate=Zrate-1; lcd_pos(1,12); lcd_wdat(num[Zrate/10]); lcd_wdat(num[Zrate%10]); if(Zrate==0) { Zrate=1; } } } } ///////////////////////////////////////////////////////速度减慢////////33 //======================================================================= ///////////////////////////////////////////////////////X轴加///////////44 if(KXA==0) { flagKXA=0; flagKXB=1; Xfanzheng=0; } if(KXA==1) { flagKXA=1; if(KXB==1) { Xzhishi=1; } } ///////////////////////////////////////////////////////X轴加///////////44 ///////////////////////////////////////////////////////X轴减///////////55 if(KXB==0) { flagKXA=1; flagKXB=0; Xfanzheng=1; } if(KXB==1) { flagKXB=1; if(KXA==1) { Xzhishi=1; } } ///////////////////////////////////////////////////////X轴减///////////55 //======================================================================= ///////////////////////////////////////////////////////Y轴加///////////66 if(KYA==0) { flagKYA=0; flagKYB=1; Yfanzheng=0; } if(KYA==1) { flagKYA=1; if(KYB==1) { Yzhishi=1; } } ///////////////////////////////////////////////////////Y轴加///////////66 ///////////////////////////////////////////////////////Y轴减///////////77 if(KYB==0) { flagKYA=1; flagKYB=0; Yfanzheng=1; } if(KYB==1) { flagKYB=1; if(KYA==1) { Yzhishi=1; } } ///////////////////////////////////////////////////////Y轴减///////////77 //======================================================================= ///////////////////////////////////////////////////////Z轴加///////////88 if(KZA==0) { Zdelay(20-Zrate); z=z+1; if(z>100) { Zzhishi=~Zzhishi; } Zmaichong=~Zmaichong; Zfanzheng=0; } if(KZA==1) { if(KZB==1) { Zzhishi=1; } } ///////////////////////////////////////////////////////Z轴加///////////88 //======================================================================= ///////////////////////////////////////////////////////Z轴减///////////99 if(KZB==0) { Zdelay(20-Zrate); z=z+1; if(z>150) { Zzhishi=~Zzhishi; z=0; } Zmaichong=~Zmaichong; Zfanzheng=1; } if(KZB==1) { if(KZA==1) { Zzhishi=1; z=0; } } ///////////////////////////////////////////////////////Z轴减///////////99 //======================================================================= } } /*****************************程序模拟完成,xyz默认速度调节可用,等待上机调试步进速度****************************/ |
我去年底也做了一个,不过搞了一半就放下了,向你学习。争取今年搞完。 |
if else编写的代码可维护性差 用工用有限状态机的写法 用switch/case |
感谢 |
努力就有希望!![]() |
本帖最后由 mzral 于 2014-2-15 19:01 编辑 1 |