怎样用C语言画圆?

怎样用C语言画圆?,第1张

#include <math.h>

#include <graphics.h> /*预定义库函数*/

void circlePoint(int x,int y)/*八分法画圆程序*/

{

circle(320+x*20,240+y*20,3)

circle(320+y*20,240+x*20,3)

circle(320-y*20,240+x*20,3)

circle(320-x*20,240+y*20,3)

circle(320-x*20,240+y*20,3)

circle(320-x*20,240-y*20,3)

circle(320-y*20,240-x*20,3)

circle(320+y*20,240-x*20,3)

circle(320+x*20,240-y*20,3)

}

void MidBresenhamcircle(int r) /* 中点Bresenham算法画圆的程序 */

{

int x,y,d

x=0y=rd=1-r /* 计算初始值 */

while(x<y)

{ circlePoint(x,y) /* 绘制点(x,y)及其在八分圆中的另外7个对称点 */

if(d<0) d+=2*x+3/* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */

else

{ d+=2*(x-y)+5

y--

}

x++

delay(900000)

} /* while */

}

main()

{

int i,j,r,graphmode,graphdriver

detectgraph(&graphdriver,&graphmode)

initgraph(&graphdriver,&graphmode," ")

printf("中点Bresenhamcircle算法画圆的程序\n")/*提示信息*/

printf("注意 |r|<=11")

printf("\n输入半径值 r:")

scanf("%d",&r)

printf("按任意键显示图形...")

getch()

cleardevice()

setbkcolor(BLACK)

for(i=20i<=620i+=20) /*使用双循环画点函数画出表格中的纵坐标*/

for(j=20j<=460j++)

putpixel(i,j,2)

for(j=20j<=460j+=20) &n欢迎光临学网,收藏本篇文章 [1] [2]

$False$

bsp/*使用双循环画点函数画出表格中的横坐标*/

for(i=20i<=620i++)

putpixel(i,j,2)

outtextxy(320,245,"0")/*原点坐标*/

outtextxy(320-5*20,245,"-5")circle(320-5*20,240,2) /*横坐标值*/

outtextxy(320+5*20,245,"5")circle(320+5*20,240,2)

outtextxy(320-10*20,245,"-10")circle(320-10*20,240,2)

outtextxy(320+10*20,245,"10")circle(320+10*20,240,2)

outtextxy(320-15*20,245,"-15")circle(320-15*20,240,2)

outtextxy(320+15*20,245,"15")circle(320+15*20,240,2)

outtextxy(320,240-5*20,"-5")circle(320,240-5*20,2) /*纵坐标值*/

outtextxy(320,240+5*20,"5")circle(320,240+5*20,2)

outtextxy(320,240-10*20,"-10")circle(320,240-10*20,2)

outtextxy(320,240+10*20,"10")circle(320,240+10*20,2)

outtextxy(20,10,"The center of the circle is (0,0) ") /*坐标轴左上角显示提示信息*/

setcolor(RED)/*标记坐标轴*/

line(20,240,620,240) outtextxy(320+15*20,230,"X")

line(320,20,320,460) outtextxy(330,20,"Y")

setcolor(YELLOW)

MidBresenhamcircle(r)

setcolor(BLUE)/*绘制圆*/

circle(320,240,r*20)

setcolor(2)

getch()

closegraph()

}

(1) 西门子S7-200SMART系列PLC,CPU型号为ST20。

(2) XYZ轴平台一套,该平台有三个步进驱动器,三套电机配合丝杆,在本例子因ST20型号的CPU只支持2轴高速脉冲输出,所以只驱动X轴和Y轴。实验平台如下图所示:

注:定义往电机方向移动为正方向,丝杆的逻辑为4mm,步进驱动的细分设置为3200个脉冲一转。

CPU输出端Q0.0和Q0.2分半为X轴的脉冲和方向信号,Q0.1和Q0.7位Y轴的脉冲和放信号,步进驱动器有PLC的接线图如下所示:

二、走圆轨迹算法说明

西门子S7-200SMART系列PLC不支持圆弧插补功能,所以需要自己根据算法进行计算后分别驱动X轴和Y轴的移动从而来实现画圆功能

要驱动XY轴画圆,可采用极限逼近法,把画圆弧变成画线段,如下图所示左侧为六等分,角度a=30°,右侧为十二等分,角度a=15°。

从上图中可以看出,当等边多边形的边越多时,则多边形的轨迹就越和圆相近,所以当角度a足够小时,则得到的多边形轨迹就越与圆接近。

根据以上分析需要完成画圆功能,我们需要知道“圆心坐标值”、“圆的半径”、“画圆的速度”,然后根据分为三部分来实现:

(1)画笔移动到圆上

把XY轴分别回原点,回原点后的位置默认为XY平面坐标的原点,然后由原点移动到圆心坐标,如下图所示1#点为圆心,2#点为圆上点。

假设1#点的坐标为(X1,Y1),速度为V,则X轴移动的距离为X1,Y轴移动的距离为Y1。根据勾股定理可计算出原点到圆心的距离“Y(0→1)”、X轴移动速度“VXaxis”和Y轴移动速度“VYaxis” ,计算公式如下所示:

当画笔到达1#点后,然后Y轴不动,X轴以V的速度移动半径R的距离到达圆上2#点位置,假2#点的坐标为(X2,Y2)

(2)画笔开始画圆

画笔从2#点位置开始移动画圆,假设下个圆上的点为3#点,坐标为(X3,Y3),从圆心到3#点和从圆心到2#点的角度为a,如下图所示:

根据三角函数可计算出3#点的坐标(X3,Y3)的值分别为:

X3=Cos(a)*R+X1,Y3=Sin(a)*R+Y1

根据勾股定理可计算出XY轴要移动的距离 “Y(2→3)”的值。X轴移动速度“VXaxis”和Y轴移动速度“VYaxis” ,计算公式如下所示:

注:此时X2和Y2为X轴和Y轴的当前位置,X3和Y3为X轴和Y轴要移动的目标位置,速度需要取绝对值。

同理:当画笔到达3#点后,角度变为2a,则对应的圆上点为4#点,坐标为(X4,Y4),如下图所示:

根据三角函数可计算出4#点的坐标(X4,Y4)的值分别为:

X4=Cos(2a)*R+X1,Y4=Sin(2a)*R+Y1

根据勾股定理可计算出XY轴要移动的距离 “Y(3→4)”的值。X轴移动速度“VXaxis”和Y轴移动速度“VYaxis” ,计算公式如下所示:

注:此时X3和Y3为X轴和Y轴的当前位置,X4和Y4为X轴和Y轴要移动的目标位置,速度需要取绝对值。

依次下去,每走完一次后,角度自加一次,当角度值大于360°时,则认为画圆完成。

三、PLC程序设计

根据分析,对于S7-200SMART系列PLC的程序设计主要分为“运动向导的组态配置”、“初始与会原点程序”、“速度计算程序”、“开始画圆程序”

(1)初始化和回原点

(2)速度换算程序

(3)画圆程序

子程序内部程序

下载源程序请:………

四、实验效果展示

数控系统中每个轴都有伺服机构,圆弧插补不是简单的分别以什么样的速度运动,二十有插补运算的,微分路径的话就是在不同的地方每个轴分别走不同的步进,实际是阶梯形的。需要精确控制每个电机转动的角度才能实现圆弧插补。0万贯五金机电网】在旋转电机中,由于发电机是电能的生产机器,所以和电动机相比,它的种类要少的多而电动机是工业中的应用机器,所以和发电机相比,人们对电动机的研究要多的多,对其分类也要详细的多。实际上,我们通常所说的旋转电机都是狭义的,也就是电动机——俗称“马达”。众所周知,电动机是传动以及控制系统中的重要组成部分,随着现代科学技术的发展,电动机在实际应用中的重点已经开始从过去简单的传动向复杂的控制转移尤其是对电动机的速度、位置、转矩的精确控制。

由此可见,对于一个电气工程技术人员来说,熟悉各种电机的类型及其性能是很重要的一件事情。通常人们根据旋转电机的用途进行基本分类。下面我们就从控制电动机开始,逐步介绍电机中最有代表性、最常用、最基本的电动机——控制电动机和功率电动机以及信号电机。

● 控制电动机

1无刷直流电动机

无刷直流电机(BLDCM)是在有刷直流电动机的基础上发展来的,但它的驱动电流是不折不扣的交流无刷直流电机又可以分为无刷速率电机和无刷力矩电机。一般地,无刷电机的驱动电流有两种,一种是梯形波(一般是“方波”),另一种是正弦波。有时候把前一种叫直流无刷电机,后一种叫交流伺服电机,确切地讲是交流伺服电动机的一种。

无刷直流电机为了减少转动惯量,通常采用“细长”的结构。无刷直流电机在重量和体积上要比有刷直流电机小的多,相应的转动惯量可以减少40%—50%左右。由于永磁材料的加工问题,致使无刷直流电机一般的容量都在100kW以下。

这种电动机的机械特性和调节特性的线性度好,调速范围广,寿命长,维护方便噪声小,不存在因电刷而引起的一系列问题,所以这种电动机在控制系统中有很大的应用潜力。

2 步进电动机

所谓步进电动机就是一种将电脉冲转化为角位移的执行机构更通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。我们可以通过控制脉冲的个数来控制电机的角位移量,从而达到精确定位的目的同时还可以通过控制脉冲频率来控制电动机转动的速度和加速度,从而达到调速的目的。目前,比较常用的步进电动机包括反应式步进电动机(VR)、永磁式步进电动机(PM)、混合式步进电动机(HB)和单相式步进电动机等。

步进电动机和普通电动机的区别主要就在于其脉冲驱动的形式,正是这个特点,步进电动机可以和现代的数字控制技术相结合。但步进电动机在控制精度、速度变化范围、低速性能方面都不如传统闭环控制的直流伺服电动机所以主要应用在精度要求不是特别高的场合。由于步进电动机具有结构简单、可靠性高和成本低的特点,所以步进电动机广泛应用在生产实践的各个领域尤其是在数控机床制造领域,由于步进电动机不需要A/D转换,能够直接将数字脉冲信号转化成为角位移,所以一直被认为是最理想的数控机床执行元件。

除了在数控机床上的应用,步进电机也可以用在其他的机械上,比如作为自动送料机中的马达,作为通用的软盘驱动器的马达,也可以应用在打印机和绘图仪中。

此外,步进电动机也存在许多缺陷由于步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声不同厂家的细分驱动器精度可能差别很大,细分数越大精度越难控制并且,步进电机低速转动时有较大的振动和噪声。

3伺服电动机

伺服电动机广泛应用于各种控制系统中,能将输入的电压信号转换为电机轴上的机械输出量,拖动被控制元件,从而达到控制目的。

伺服电动机有直流和交流之分最早的伺服电动机是一般的直流电动机,在控制精度不高的情况下,才采用一般的直流电机做伺服电动机。目前的直流伺服电动机从结构上讲,就是小功率的直流电动机,其励磁多采用电枢控制和磁场控制,但通常采用电枢控制。

旋转电机的分类,直流伺服电动机在机械特性上能够很好的满足控制系统的要求,但是由于换向器的存在,存在许多的不足:换向器与电刷之间易产生火花,干扰驱动器工作,不能应用在有可燃气体的场合电刷和换向器存在摩擦,会产生较大的死区结构复杂,维护比较困难。

交流伺服电动机本质上是一种两相异步电动机,其控制方法主要有三种:幅值控制、相位控制和幅相控制。

一般地,伺服电动机要求电动机的转速要受所加电压信号的控制转速能够随着所加电压信号的变化而连续变化电动机的反映要快、体积要小、控制功率要小。伺服电动机主要应用在各种运动控制系统中,尤其是随动系统。

4力矩电动机

所谓的力矩电动机是一种扁平型多极永磁直流电动机。其电枢有较多的槽数、换向片数和串联导体数,以降低转矩脉动和转速脉动。力矩电动机有直流力矩电动机和交流力矩电动机两种。

其中,直流力矩电动机的自感电抗很小,所以响应性很好其输出力矩与输入电流成正比,与转子的速度和位置无关它可以在接近堵转状态下直接和负载连接低速运行而不用齿轮减速,所以在负载的轴上能产生很高的力矩对惯性比,并能消除由于使用减速齿轮而产生的系统误差。

交流力矩电动机又可以分为同步和异步两种,目前常用的是鼠笼型异步力矩电动机,它具有低转速和大力矩的特点。一般地,在纺织工业中经常使用交流力矩电动机,其工作原理和结构和单相异步电动机的相同,但是由于鼠笼型转子的电阻较大,所以其机械特性较软。

5开关磁阻电动机

开关磁阻电动机是一种新型调速电动机,结构极其简单且坚固,成本低,调速性能优异,是传统控制电动机强有力竞争者,具有强大的市场潜力。

● 功率电动机

1 直流电动机

直流电动机是出现最早的电动机,大约在19世纪末,其大致可分为有换向器和无换向器两大类。直流电动机有较好的控制特性直流电动机在结构、价格、维护方面都不如交流电动机,但是由于交流电动机的调速控制问题一直未得到很好的解决方案,而直流电动机具有调速性能好、起动容易、能够载重起动等优点,所以目前直流电动机的应用仍然很广泛,尤其在可控硅直流电源出现以后。

2 异步电动机

异步电动机是基于气隙旋转磁场与转子绕组感应电流相互作用产生电磁转矩而实现能量转换的一种交流电机。异步电动机一般为系列产品,品种规格繁多,其在所有的电动机中应用最为广泛,需量最大目前,在电力传动中大约有90%的机械使用交流异步电动机,所以,其用电量约占总电力负荷的一半以上。

异步电动机具有结构简单,制造、使用和维护方便,运行可靠以及质量较小,成本较低等优点。并且,异步电机有较高的运行效率和较好的工作特性,从空载到满载范围内接近恒速运行,能满足大多数工农业生产机械的传动要求。异步电动机主要广泛应用于驱动机床、水泵、鼓风机、压缩机、起重卷扬设备、矿山机械、轻工机械、农副产品加工机械等大多数工农生产机械以及家用电器和医疗器械等。

在异步电动机中较为常见的是单相异步电动机和三相异步电动机,其中三相异步电动机是异步电动机的主体。而单相异步电动机一般用于三相电源不方便的地方,大部分是微型和小容量的电机,在家用电器中应用比较多,例如电扇、电冰箱、空调、吸尘器等。

3 同步电动机

所谓同步电动机就是在交流电的驱动下,转子与定子的旋转磁场同步运行的电动机。同步电动机的定子和异步电动机的完全一样但其转子有“凸极式”和“隐极式”两种。凸极式转子的同步电动机结构简单、制造方便,但是机械强度较低,适用于低速运行场合隐极式同步电动机制造工艺复杂,但机械强度高,适用于高速运行场合。

同步电动机的工作特性与所有的电动机一样, 同步电动机也具有“可逆行”,即它能按发电机方式运行,也可以按电动机方式运行。

同步电动机主要用于大型机械,如鼓风机、水泵、球磨机、压缩机、轧钢机以及小型、微型仪器设备或者充当控制元件其中三相同步电动机是其主体。此外,还可以当调相机使用,向电网输送电感性或者电容性无功功率。

●信号电机

1 位置信号电机

目前,最有代表性的位置信号电机:旋转变压器、感应同步器和自整角机。

旋转变压器本质上是可以随意改变一次绕组和二次绕组耦合程度的变压器。其结构和绕线式异步电动机相同,定子和转子各有两组相互垂直的分布绕组,转子绕组利用滑环和电刷与外电路联接。当一次绕组励磁以后,二次绕组的输出电压和转子的转角成正弦、余弦、线性或者其他函数关系,可以用于计算装置中的坐标变换和三角运算,还可以在控制系统中作为角度数据传输和移相器使用。

感应同步器是一种高精度的位置或角度检测元件,有圆盘式和直线式两种。圆盘式感应同步器用来测量转角位置而直线式感应同步器用来测量线位移。

自整角机是一种感应式机电元件,被广泛地应用于随动系统中,作为角度传输、变换和指示的装置。在控制系统中经常两台或者多台联合使用,使机械上互不相连的两根或多根轴能够自动地保持相同的转角变化,或者同步旋转。

2 速度信号电机

最有代表性的速度信号电机是测速发电机,其实质上是一种将转速变换为电信号的机电磁元件,其输出电压与转速成正比。从工作原理上讲,它属于“发电机”的范畴。测速发电机在控制系统中主要作为阻尼元件、微分元件、积分元件和测速元件来使用。

测速发电机有直流和交流之分而直流测速发电机又有他励和永磁之分,其结构和工作原理与小功率直流发电机相同,通常输出功率较小,作为计算元件时要求其输出电压的线性误差和温度误差低于一个上限。而交流测速发电机又有同步和异步之分同步测速发电机包括:永磁式、感应式和脉冲式异步测速发电机应用最广泛的是杯型转子异步测速发电机。

为了提高测速发电机的精确度和可靠性,目前,直流测速发电机出现了无刷结构的霍尔效应直流测速发电机。因为这种霍尔效应无刷直流测速发电机是一种无齿槽、无绕组的电机,所以它不会产生由于齿槽而存在的“齿槽谐波电势”,这种电机结构简单,便于小型化。

综述

一般地,在一个完整的自动控制系统中,信号电机、功率电动机和控制电动机都会有自己的用武之地。通常控制电动机是很“精确”的电动机,在控制系统中充当“核心执行装置”而功率电动机是比较“强壮”的大功率电动机,常用来拖动现场的机器设备信号电机则在控制系统中担任“通讯员”的角色,本质上就是“电机传感器”。

当然,并不是所有的自动控制系统中都具备这三种电机,在一般的自动化领域,例如运动控制和过程控制,尤其是在运动控制中,控制电动机是必不可少的“核心器件”,所以控制电动机在自动化领域中的地位是举足轻重的,这也是人们对控制电动机研究最多的原因之一。

实际上,随着电机制造技术的不断发展和相互融合,各种旋转电机的性能都逐渐“交叉化”和“特殊化”。对各种旋转电机进行极其详细地分类是不可能的,因为许多新型旋转电机都是许多电机工作原理和许多电机制造技术高度统一的有机体。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11279229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存