电赛培训的暑假
附件里面是画圆和画直线的算法
我自己做了05年电赛自动控制类型的题目 悬挂系统 画圆的那道题目
编译器 ICC AVR 主控器 AVR128
首先自动控制想到的就是算法实现
所以先找到了如何画直线和画圆的算法
后来在自己的实践中发现
我们这和步进电机控制的悬挂系统画圆的部分不需要用到这个算法
下面我简要介绍一下我的做法:
这个系统最主要的部分就是在两点之间走线
比如你会了这个,那么走直线的话只需要在直线上求出相邻两个或相邻几个点之间走直线 ,最后逼近直线的图形,画圆的原理是一样的 ,只要你把上面直线的方程换成圆的方程就OK了,速度方面完全可以达到题目的要求。
但是这里就是有一个问题,不做算法的处理,你只能画好你预先设定的固定的直线和圆。
也就是先把左右两边电机的步进数根据直线或者圆的方程算出来,做成数组,一步一步送到步进电机去执行。
要想做的更好, 就需要用到附件里面的画直线和画圆的算法,大家自己可以根据提供的资料去研究,我当时也是nbsp; 大家对照公式很快就能确定我定义的x y坐标轴和原点了,我的宽度方向就是y轴方向。
有了走点的基本步骤,大家就可以试着走固定的直线试试,如果是走任意的直线就需要附件里面的算法了,我的例子里面只做了斜率在零到无穷大的时候的直线,其他斜率的直线大家自己处理吧。
下面介绍画圆需要注意的事项:
画圆的过程中不能只由一个轴上的变量来确定另一个,
比如我开始做的就是只由x的变化来根据圆的方程确定y 的变化,
这样做的缺点就是在圆的边缘,
当你的x++时候,由于斜率是趋于无穷大的,所以你这里的y的变化就会很大,
(就是相当于两点距离很远了,走两点的时候两点的距离应该尽量近,这样才能逼近标准图形)
画出来的图形就和标准圆有出入。
这里做一个小处理就OK了,也就是把这个圆划割成对称的4个部分来画,不同的部分自变量不一样,比如有两个是x++来判断y的值 ; 另外两个是Y++;来判断x的值,这样处理就避免了斜率无穷大的出现,画出的图形就比较平滑,明显可以看到送步进数的数组里面没有突变的数据了。都是近似连续变化的步进数。
但是我这个例子里面我就没有处理这个了,数组里面有突变的步进数据。
我用的L297控制器控制的步进电机,两相混合步进电机,精度是1.8度,经过L297驱动后精度为0.9度的步进。
好了,就这么多了,详细大家请看附件里面的工程源文件。里面有详细的注释
文章评论(0条评论)
登录后参与讨论