模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762
67---2轴步进电机八分法画圆实验:
硬件需求:PC机,PCM模块一个,microUSB线,5V/0.5A直流电源,12V/1A直流电
源,XY两轴定位装置, 导线若干;
软件需求:PCM编译软件,串口调试助手;
供电方式:12V电源供电给+5V电源,+5V电源输出的5V给PCM模块供电;
连接电路:如图123(2轴步进电机串口接收坐标实验)
图126 圆的八分法
本实验通过串口发送圆半径,使用steprundist指令,通过八分法的方法画圆。
本实验使用的2轴装置与第66个实验(2轴步进电机串口接收坐标实验)一样。
请参考图126-圆的八分法,如果我们把一个圆分成八个区D1,D2,D3,D4,D5,
D6,D7,D8.我们会发现相邻的2个区坐标是对称的,只是符号或者是顺序,或者X与Y
有颠倒,所以我们只需要先计算出一个区的坐标,其他区的坐标我们只要改变符号或者
是顺序就可以了。
直线系统画圆,我们可以把圆分成很小很小的线段来画,分的越小,画的圆越精
细,本实验我们把圆分成360段,每个区就有45段,每段弧的度数是1度。
本实验我们从D1区的X轴位置开始逆时针画圆,每个区XY轴都要走45步,所以每个
区有45个XY轴的行走距离坐标,步进马达往X轴正方向为正,X轴负方向为负,Y轴正方
向为正,Y轴负方向为负,这45个距离坐标我们这样来标记:
D1区的坐标:(D1X1,D1Y1),(D1X2,D1Y2),.......(D1X45,D1Y45);
D2区的坐标:(D2X1,D2Y1),(D2X2,D2Y2),.......(D2X45,D2Y45);
。。。。。。
D8区的坐标:(D8X1,D8Y1),(D8X2,D8Y2),.......(D8X45,D8Y45);
我们把D2-D8区的坐标用D1区的值去表示:
D2区坐标值:
D2X1 = - D1Y45 ; D2Y1 = - D1X45 ;
D2X2= - D1Y44 ; D2Y2 = - D1X44 ;
.........
D2X45 = - D1Y1 ; D2Y45 = - D1X1 ;
D3区坐标值:
D3X1 = D2X45 = - D1Y1 ; D3Y1 = - D2Y45 = D1X1 ;
D3X2 = D2X44 = - D1Y2 ; D3Y2 = - D2Y44 = D1X2 ;
.........
D3X45 = D2X1 = - D1Y45 ; D3Y45 = - D2Y1 = D1X45 ;
D4区坐标值:
D4X1 = D3Y45 = D1X45 ; D4Y1 = D3X45 = - D1Y45 ;
D4X2 = D3Y44 = D1X44 ; D4Y2 = D3X44 = - D1Y44 ;
.........
D4X45 = D3Y1 = D1X1 ; D4Y45 = D3X1 = - D1Y1 ;
D5区坐标值:
D5X1 = - D4X45 = - D1X1 ; D5Y1 = D4Y45 = - D1Y1;
D5X2 = - D4X44 = - D1X2 ; D5Y2 = D4Y44 = - D1Y2 ;
.........
D5X45 = - D4X1 = - D1X45 ; D5Y45 = D4Y1 = - D1Y45 ;
D6区坐标值:
D6X1 = - D5Y45 = D1Y45 ; D6Y1 = - D5X45 = D1X45;
D6X2 = - D5Y44 = D1Y44 ; D6Y2 = - D5X44 = D1X44 ;
.........
D6X45 = - D5Y1 = D1Y1 ; D6Y45 = - D5X1 = D1X1 ;
D7区坐标值:
D7X1 = D6X45 = D1Y1 ; D7Y1 = - D6Y45 = - D1X1 ;
D7X2 = D6X44 = D1Y2 ; D7Y2 = - D6Y44 = - D1X2 ;
.........
D7X45 = D6X1 = D1Y45 ; D7Y45 = - D6Y1 = - D1X45 ;
D8区坐标值:
D8X1 = D7Y45 = - D1X45 ; D8Y1 = D7X45 = D1Y45 ;
D8X2 = D7Y44 = - D1X44 ; D8Y2 = D7X44 = D1Y44 ;
.........
D8X45 = D7Y1 = - D1X1 ; D8Y45 = D7X1 = D1Y1 ;
根据圆的坐标方程:X^2+Y^2=R^2,X=R*cos(a);Y=R*sin(a);现在来计算D1区的45
个XY轴距离值;
第1段:D1X1 = R*(cos(1)-1) ,D1Y1 = R*sin(1) ;
第2段:D1X2 = R*(cos(2)-1) - R*(cos(1)-1) = R*(cos(2)-cos(1)),
D1Y2 = R*(sin(2) - sin(1)) ;
第3段:D1X3 = R*(cos(3)-cos(2)),
D1Y3 = R*(sin(3) - sin(2)) ;
......
第45段:D1X45 = R*(cos(45)-cos(44)),
D1Y45 = R*(sin(45) - sin(44)) ;
程序先装载D1区数据给马达运行,运行完后再根据D1区数据计算出D2区数据,然
后装载数据给马达运行,每个区运行结束后装载下一个区的数据,直到8个区运行完成,
一个圆就画完了。
实验程序如下:
1 subpro sub12 //XY轴运行子程序
2 mov d20 f23 //X坐标转换成浮点数
3 mov d21 f24 //Y坐标转换成浮点数
4 abs f23 f23 //取X坐标绝对值
5 abs f24 f24 //取Y坐标绝对值
6 if f23 > f24 //如果X坐标大于Y坐标
7 if f24 != 0 //Y坐标不为0
8 div f23 f24 f25 //X坐标除以Y坐标的倍数
9 mul f25 f26 f21 //倍数乘以最低的速度,为X轴速度;所以马达运行距离
//与速度成正比,这样可以让XY轴同步运行
10 mov f26 f22 //Y轴速度
11 endif
12 else //如果Y坐标大于X坐标
13 if f23 != 0 //X坐标不为0
14 div f24 f23 f25 //Y坐标除以X坐标的倍数
15 mul f25 f26 f22 //倍数乘以最低的速度,为Y轴速度;所以马达运行
// 距离与速度成正比,这样可以让XY轴同步运行
16 mov f26 f21 //X轴速度
17 endif
18 endif
//启动X轴,d20为脉冲数,正表示正转,负表示反转,f20为加减速时间,
//f21是最大速度,F10保存马达运行D20个脉冲需要的时间,单位S;
19 steprundist 0 d20 f20 f21 f10