电磁控制运动装置.docx

上传人:b****7 文档编号:10167925 上传时间:2023-02-09 格式:DOCX 页数:28 大小:281.55KB
下载 相关 举报
电磁控制运动装置.docx_第1页
第1页 / 共28页
电磁控制运动装置.docx_第2页
第2页 / 共28页
电磁控制运动装置.docx_第3页
第3页 / 共28页
电磁控制运动装置.docx_第4页
第4页 / 共28页
电磁控制运动装置.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

电磁控制运动装置.docx

《电磁控制运动装置.docx》由会员分享,可在线阅读,更多相关《电磁控制运动装置.docx(28页珍藏版)》请在冰豆网上搜索。

电磁控制运动装置.docx

电磁控制运动装置

摘要

本系统以单片机AT89S52为核心,调节直流电磁铁供电电压的大小,改变电磁铁的磁场力的大小,利用电磁控制实现摆杆按指定的摆角和周期摆动。

采用SCA100T角度传感器来实现摆杆摆角信号的采集,用AT89S52根据摆角值和周期输出一定占空比的PWM脉冲波,用L298N作为驱动电路,以达到控制摆角和周期的目的。

本设计进行了硬件电路搭建和软件编程,给出了系统方案、硬件电路图和软件流程图,并通过软件编程,实现了题目要求的技术指标,并用液晶显示屏实时显示摆杆摆角、摆动周期、设定角度和设定周期。

关键词:

摆角周期电磁控制AT89S52

 

1.方案设计与论证

本题目是设计并制作一个摆杆控制系统,通过电磁控制装置,调节摆杆摆角的大小,如图1.1所示。

图1.1摆杆控制系统示意图

根据题目的要求,本系统所设计的核心问题主要有:

1、对直流电磁铁电压大小进行快速而准确的控制,以保证摆杆的摆角和周期在控制范围内。

2、为保证系统的精度要求,必须要对摆杆摆动角度进行实时检测。

3、为保证摆杆在尽可能短的时间内达到预定角度还需要相应按键及显示电路。

我们分以下几个部分进行方案设计和比较论证。

1.1 转角采集方案

方案一:

采用MMA7455L芯片。

这是一种XYZ三轴微机电加速度计,可测量X、Y、Z三个方向上在工作时的参数,输出为8位或10位的数字量。

可直接与单片机连接。

硬件电路简单,但成本较高,软件程序调试较困难。

方案二:

采用SCA100T-D02。

SCA100T-D02测量范围为-90°~+90°,具有模拟和数字两路输出。

模拟量输出电压为0~5V,不需信号调理电路就可送入A/D,拟采用模拟量输出,后接AD7705。

此方案硬件电路简单,软件调试简单,测量数据稳定。

经过比较,拟选择方案二。

1.2 驱动及控制方案

 方案一:

采用线性放大驱动方式。

采用L298N作为驱动芯片。

单片机输出数字量,经D/A后转换为连续变化的电压值,控制电磁铁电磁力的大小,来改变摆角的大小,此方式波动小,线性好,对邻近电路干扰小。

但存在效率低和散热等问题。

硬件需要D/A转换器,电路复杂,成本高。

方案二:

采用PWM调速。

采用L298N作为驱动芯片。

PWM调速是使加在直流电磁铁两端的电压为方波形式,通过改变方波占空比实现对直流电磁铁电压大小

的调节。

PWM由单片机输出。

L298N芯片内部开关为电子开关,速度很快,稳定性也极强。

此方案电路简单,使用比较方便。

基于上述理论分析和实际情况,拟定选择方案二。

1.3 系统总体方案

图1.2摆杆控制系统总体方案框图

根据上述分析,设计出系统总体方案,由SCA100T-D02采集转角信息后送入AD7705转换,输出的8位数字量送入AT89C52中,单片机经分析处理后输出一定占空比的PWM,经L298N功率驱动放大后控制直流电磁铁电压的大小。

同时可用按键设定摆杆转角并显示,摆杆控制系统总体方案框图如图1.2所示。

2.系统硬件电路设计

硬件电路设计图见附录1。

2.1 单片机AT89S52

本系统采用AT89S52作为核心部件。

AT89S52内部有8KB的存储单元和256个RAM存储单元,用于本系统的角度采集控制足够使用。

51单片机的外围控制电路如图2.1所示。

图2.1单片机最小系统

2.2L298N简介

L298N是SGS公司的产品,比较常见的是15脚Multiwatt封装的

L298N,内部同样包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。

4脚VS接电源电压,VS电压范围VIH为+2.5~46V。

输出电流可达2A,可驱动电感性负载。

1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。

L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机。

2.3角度测量

角度测量使用了VTI公司生产的硅基加速度传感器SCA100T-D02,其主要性能指标:

1)双轴向倾角测量:

SCA100T测量X-Y方向;2)测量范围1.7g;3)测量灵敏度1.2V/g;4)+5V单电源供电,两个比例电压输出(模拟),内置11位AD转换器;5)兼容SPI的数字输出;6)通过SPI接口,可以访问内部温度传感器。

SCA100T为12脚表贴封装,设计时要水平安装芯片,并注意芯片上面箭头所指方向为正方向。

2.3.1角度测量原理

角度测量采用倾角传感器SCA100T-D02的传感轴安装为与摆杆在同一平面内,采用双轴测量值合成来计算倾斜角,在小倾角测量时,具有高分辨率和高精度的特点。

该传感器的每个轴可以检测0~90°度之间的倾角,所对应的输出电压为0~5V。

由于加速度传感器在静止放置时受到重力作用,因此会有1g的重力加速度。

利用这个性质,通过测量重力加速度在加速度传感器的X轴和Y轴上的分量,可以计算出其在垂直平面上的倾斜角度。

如图2.2所示,有

,则

图2.2角度测量原理图

这样,根据以上原理一个2轴加速度传感器可以测量在X-Y平面上的倾斜角度。

这个公式就是本文中用来测量物体倾斜角度的基本原理。

需要说明的是,这里利用的是物体在静止时受到重力的性质,如果物体同时也有运动加速度的话,那么这个公式将不再准确。

所以必须为公式增加一个限制条件,即

(式2-1)

2.3.2角度测量算法

本设计角度测量算法采用反三角函数算法。

直接利用式2-1以上公式进行计算。

具体步骤为:

1)测量X、Y的加速度

(对于数字输出的加速度传感器,直接通过I2C或SPI总线读取;对于模拟输出的加速度传感器,需要通过ADC进行采样。

2)计算

,如果这个平方和接近1g的平方,那么说明这组采样值是有效的,可以用来算;否则将该采样值丢弃,重复第一步。

3)利用有效的采样值,通过开平方和反正切函数等数学计算,求出倾斜角度

4)重复第一步。

在第三步公式中:

offset是在0°输出的电压值(电压2.5V),Sensitivity是芯片灵敏度(SCA100T-D02是2V)Vout是芯片输出的模拟量。

2.3.3角度测量电路

选用角度传感器SCA100T-D02的模拟输出,输出范围0~5v,故可直接接8位AD7705进行模数转换,得出数字量送入单片机。

SCA100T-D02与AD的连接如图2.3所示:

图2.3SCA100T-D02与AD连接

2.4直流电磁铁控制模块

直流电磁铁控制采用高低电平控制,由单片机输出。

选用手制的直流电磁铁,。

驱动芯片选用L298N。

2.4.1直流电磁铁控制电路

直流电磁铁为手制,单片机的输出为TTL信号,电流小,所以要加驱动电路。

选用的驱动芯片为L298N。

直流电磁铁控制电路图如图2.4所示。

2.5按键显示

本系统设计采用了LCD显示,显示屏上可实时显示测量角度和设定角度。

按键共有4个,分别为启动键、停止键、角度设定键、周期设定键。

2.6声光提示

本系统设计在帆板转角为10°~45°范围内,当摆杆稳定运行20s发出声、光提示,并在5s内平稳停在静止点上示,以便进行测试。

声光提示电路图如图2.5所示。

图2.4直流电磁铁控制电路图

图2.5声光提示电路图

3.系统软件设计

3.1主程序流程图

本系统软件设计采用C51语言编程,以达到题目要求的控制精度和响应时间。

主要完成转角信号的采集、数字滤波、标度变换、显示并通过采集信号调节电磁铁的通断时间来控制摆杆角度。

其中,显示模块负责将角度传感器检测到的角度送到LCD进行显示;角度控制模块负责根据按键的输入信息调节电磁铁通断时间,控制摆杆偏转。

图3.1主程序流程图

由于本系统的主要任务是对角度实时监控,所以在程序中将对角度的测量放在主程序中,设为查询方式;对按键的处理设为中断方式。

系统软件主程序流程图如图3.1所示,按键中断处理子程序如图3.2所示。

处理子程序1、2、3、4、5分别对应为PWM占空比加1子程序,PWM占空比减1子程序,设定值加1子程序,设定值减1子程序和转角45°自动追踪子程序。

3.2角度测量子程序流程图

角度测量子程序流程图如图3.3所示:

3.3角度控制子程序流程图

单片机读入设定值X和测量值Y后进行比较,调节占空比改变直流电压调节角度,控制摆杆偏转。

4.系统测试

基于本次设计题目的要求,本系统采用SCA100T-D02采集摆杆的转角并通过LCD显示,还可通过键盘预设转角值,其分辨率可达到2°。

 

图3.2按键中断处理子程序

4.1测试仪器与方法

测试仪器:

量角器1把、秒表1块、直尺1把。

测试方法:

1、测试基本要求

(1)、

(2)项时,用量角器量出摆杆偏角并与LCD上显示的角度值进行比较,看角度传感器测得的角度是否准确。

2、测试基本要求(3)项和发挥部分

(1)、

(2)项时,用量角器量出摆杆实际转角并与LCD上显示的角度值和按键设定的角度值进行比较,并用秒表记录调节时间,评判其控制性能。

图3.3角度测量子程序流程图图3.4角度控制子程序流程图

4.2角度测量

(1)用手转动摆杆其测量结果如表1所示:

表1角度测量数据比较(单位:

度)

实际角度

0

14

15

16

30

31

40

43

45

显示角度

0

13

14

15

27

29

37

41

42

绝对误差

0

-1

-1

-1

-3

-2

-3

-2

-3

4.3测试结果分析

通过测试结果可以看出,当摆杆角度从0°~45°范围变化时,当角度小于20°时,控制容易,误差小,控制时间短。

当角度接近45°时,控制时间也明显增加,误差也较大。

当控制角度在30°~45°时,控制时间也明显增加,误差也较大。

5.结论

通过测试可知:

本系统能较好的完成摆杆控制系统的要求。

具体完成工作如下:

1、完成了基本要求的

(1)、

(2)、(3),11.5cm时测试范围最大达到45度。

完成了发挥部分的

(1)、

(2)。

2、采用LCD实时显示角度,并能实时显示设定值。

3、设有自动追踪设定值功能,当设定某一角度时,摆杆可以自动变化,以保证角度值的稳定。

4、系统在完成基本要求

(1)时,分辨力可达1°,绝对误差小于5°,完成基本要求(3)时,调节时间优于基本要求

 

参考文献

[1]谷云高等.基于MMA7455的机器人姿态控制系统的研究[J].制造业自动化,2010(8):

15-17,46.

[2]张新强.点阵LCD驱动显控原理与实践[M].北京:

北京航空航天大学出版社,2010.

[3]朱清.基于单片机控制的人机界面应用研究[J].工业控制计算机,2009,22(12):

5,7

[4]孙汝建.基于SPI接口的双轴SCAT100倾角传感器及其应用方法[J].仪器仪表用户,2006(4),69-71.

[5]王盛军.基于SCA100T和MCU数字倾角传感器的设计与实现[J].微计算机信息2010(26):

90-91

[6]黄志伟等.全国大学生电子设计竞赛训练教程(修订版)[M].北京:

电子工业出版社,2010.

 

附录1硬件电路图

附录2主要元器件清单

表1元件清单

元器件名称

型号

个数

LCD液晶

12864

1

单片机

AT89S52

1

角度传感器

SCA100T-D02

1

摆杆

11.5cm

1

驱动器

L298N

1

稳压电源

YB1731A

1

开关电源

5/12V

1

基准电源

TL431

1

A/D模数转换器

AD7705

1

电解电容

100uf

2

瓷片电容

0.33uf

1

瓷片电容

0.1uf

6

瓷片电容

47uf

1

传感器

SCA100T-D02

1

瓷片电容

20pf

1

石英晶体振荡器

12MHZ

1

石英晶体振荡器

6MHZ

1

与非门

74LS04

1

电阻

5.1K

4

电阻

560

4

电阻

4.7K

3

二极管

IN5819

4

蜂鸣器

1

散热片

1

附录3程序清单

#include

#include

#definedateportP0

sbitBF=P0^7;

sbitRS=P1^0;

sbitRW=P1^1;

sbitE=P1^2;

sbitPSB=P1^6;

sbitin1=P2^0;

sbitin2=P2^1;

sbitenA=P2^2;

sbitCS=P3^1;

sbitSCLK=P2^7;

sbitDOUT=P2^6;

sbitDIN=P2^5;

sbitstart=P3^7;

sbitT=P3^4;

sbitA=P3^5;

sbitAD7705_DRDY=P2^4;

unsignedcharcodedigit[]={"0123456789"};

unsignedcharcodest[]={"电磁控制运动装置"};

unsignedcharcodestring[]={"实际设定"};

unsignedcharcodestr[]={"角度:

"};

unsignedcharcodestr0[]={"周期:

"};

unsignedcharcodestt[]={"xxx"};

unsignedcharMSB_Data,LSB_Data;

unsignedintData_read;

unsignedintq=0;

unsignedcharjiaodu=5;

unsignedcharzhouqi=2;

floatdata_a=0x0000;

intt;

voiddelayms(unsignedinta);

voiddelayus(unsignedinta);

voidAD7705_Write_Reg(unsignedcharaa);

floatAD7705_Read_Reg();

voidint_system();

voidad7705_init();

voiddate_out();

voidsetjiao(void);

voidsetzhou(void);

////////////////////////////ÑÓʱ³ÌÐò

voiddelayms(unsignedinta)

{unsignedinti,j;

for(i=0;i

{for(j=0;j

voiddelayus(unsignedinta)

{while(a--);}

//////////////////////////////////////////////

voidAD7705_Write_Reg(unsignedcharaa)

{

unsignedcharf;

DIN=1;

CS=0;//CS=0

SCLK=1;//CLK=1

delayus(5);

for(f=0;f<8;f++)

{SCLK=0;

if((aa<

{delayus(5);

DIN=1;}

else

{delayus(5);

DIN=0;}

delayus(10);

SCLK=1;

delayus(10);}

delayus(10);

SCLK=1;

CS=1;

DIN=1;

}

/////////////////////////////////////////

floatAD7705_Read_Reg()

{intk;

DIN=1;

AD7705_Write_Reg(0X38);

CS=0;

SCLK=1;

Data_read=0x0000;

for(k=0;k<16;k++)

{delayus(10);

Data_read=Data_read<<1;

SCLK=0;

delayus(10);

if(DOUT==1)Data_read=Data_read|0X01;

delayus(10);

SCLK=1;}

SCLK=1;

delayus(5);

CS=1;

DIN=1;

return(Data_read);

}

////////////////////////////////////////////

voidint_system()

{

CS=1;

SCLK=1;

DIN=1;

MSB_Data=0x00;

LSB_Data=0x00;

}

///////////////////////////////////////////AD7705

voidad7705_init()

{

CS=0;

for(t=0;t<40;t++)

{SCLK=0;

delayus(5);

SCLK=1;}

AD7705_Write_Reg(0x20);

AD7705_Write_Reg(0x08);

AD7705_Write_Reg(0x10);

AD7705_Write_Reg(0x46);

delayus(10);

}

////////////////////////////////////////////DATEOUT

voiddate_out()

{

data_a=AD7705_Read_Reg();

}

////////////////////////////////////////////

voidCheck_Busy()

{

RS=0;

RW=1;

E=1;

dateport=0xff;

while((dateport&0x80)==0x80);

E=0;

}

/////////////////////////////////////////////

voidWrite_Cmd(unsignedcharCmd)

{

Check_Busy();

RS=0;

RW=0;

E=1;

dateport=Cmd;

delayus(10);

E=0;

delayus(10);

}

////////////////////////////////////////////

voidWrite_Data(unsignedcharData)

{

Check_Busy();

RS=1;

RW=0;

E=1;

dateport=Data;

delayus(10);

E=0;

delayus(10);

}

////////////////////////////////////////////

voidInit_ST7920()

{

delayms(40);

PSB=1;

delayms

(1);

RS=0;

delayms

(1);

RS=1;

delayms(10);

Write_Cmd(0x30);

delayus(100);

Write_Cmd(0x30);

delayus(40);

Write_Cmd(0x0c);

delayus(100);

Write_Cmd(0x01);

delayms(15);

Write_Cmd(0x06);

delayus(100);

}

/////////////////////////////////////////////////

voidClrScreen()

{

Write_Cmd(0x01);

delayms(15);

}

///////////////////////////////////////////////

voiddisplay0(void)

{

unsignedchari;

Write_Cmd(0x80);

delayus(50);

for(i=0;i<16;i++)

{Write_Data(st[i]);}

}

//////////////////////////////////////////////////

voiddisplay1()

{

floati,j;

unsignedcharh=0;

date_out();

j=(data_a*500)/65535;

if(j<250)

{i=asin((250-j)/200)*57.3;

}

else

{i=asin((j-250)/200)*57.3;

}

if(j>250)

{if(h>=10&&h<=30)

{h=h+3;}

elseif(h>30&&h<=90)

{h=h+6;}

}

if(j<250)

{if(h>10&&h<=30)

{h=h+1;}

elseif(h>20&&h<90)

{h=h+3;}

}

if(h>95)

{h=0;}

else

{h=h;}

h=i;

Write_Cmd(0x8b);

Write_Data(digit[h/100]);

Write_Data(digit[h%100/10]);

Write_Data(digit[h%10]);

delayus(10);

}

voiddisplay2(void)////////////////////////////////

{

unsignedchari;

Write_Cmd(0x92);

delayus(50);

for(i=0;i<10;i++)

{Write_Data(string[i]);}

}

voiddisplay3(void)/////////////////////////////////

{

unsignedchari;

Write_Cmd(0x88);

delayus(50);

for(i=0;i<5;i++)

{Write_Data(str[i]);}

}

voiddisplay4(void)///////////////////////////////////

{

unsignedchari;

Write_Cmd(0x98);

delayus(50);

for(i=0;i<5;i++)

{Write_Data(str0[i]);}

}

voiddisplay5(void)/////////////////////////////////

{

unsignedchari;

Write_Cmd(0x9b);

delayus(50);

for(i=0;i<5;i++)

{Write_Data(stt[i]);}

}

///////////

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1