承载平台平衡调整系统Word格式.docx
《承载平台平衡调整系统Word格式.docx》由会员分享,可在线阅读,更多相关《承载平台平衡调整系统Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
![承载平台平衡调整系统Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/25/d82c8783-3dce-41c0-af8b-a99eceff43d5/d82c8783-3dce-41c0-af8b-a99eceff43d51.gif)
本系统以STC89C52单片机最小系统为核心,辅以键盘输入电路、电机驱动电路、直线电机、水平传感器、AD转换电路、LED数码管显示电路组成。
实现了一个承载平台平衡调整系统,该承载平台由多条腿支撑,并能够承受一定重量的载重。
通过调整支撑腿的伸缩来调整平台的水平和倾斜。
实现该方案如下,通过从键盘键入要求平台倾斜的角度值,由单片机采集数据并由驱动电路驱动电机转动以改变平台的倾角,同时用传感器检测电机转动的角度,并将检测到的数值经过AD转换后送入单片机,由单片机分析确认后送到LED数码管上显示。
经过AD采样与输入值进行二次调整,达到较高的控制精确度。
关键字:
承载平台平衡系统直线电机、水平传感器、AD转换、LED显示。
二、引言:
三、方案设计:
1.整体框图,如下面框图所示:
本设计主要有键盘输入、单片机控制系统、驱动电路、直线电机、水平传感器、AD转换电路、LED数码管显示几个部分组成。
其中核心是单片机控制部分和电机驱动部分及AD转换部分。
键盘输入部分是采用6位独立式键盘输入,分别设有加一,加五,X方向,Y方向,清零,确认六个键,加一、加五键可以实现长边和宽边沿任意方向倾斜最大20°
角;
X方向、Y方向键可以实现选定对长边和宽比的调整;
清零键即让平台复位水平;
确认键即在确定输入的数值后确认一下将其送入单片机。
单片机负责分析键盘输入的数据,对比将Adc0809传来的电压值转换成角度后的数据,以此来判断是否调整电机以及如何调整电机。
同时,通过定时计数器中断,在处理其他任务的同时能够显示角度。
驱动电路部分是采用了两个L198N芯片分别驱动两个直线电机转动,以用来改变平台倾角,直线电机配合传感器工作,由于水平传感器只能检测到一个方向的倾角,所以必须用两只分别检测长边和宽边的倾角。
水平传感器将检测到的数值通过ADC0809转换芯片和74LS74四分频电路组成的AD转换电路转换后送到单片机进行分析比较,确认后反馈到LED数码管上显示出长边(X)和宽边(Y)的倾角。
2.软件流程图,如下所示:
3.方案论证与比较:
(1)电机的选择:
方案一:
传统电机+钢珠转动杠杆系统。
用传统电机的转动来带动钢珠的转动从而使杠杆升降来转动调整平台倾斜和水平。
方案二:
直线电机。
由单片机控制驱动电路来驱动其转动来调整平台长边(X方向)和(Y方向)的转动。
并配合传感器来检测倾斜的角度。
直线电机控制较简单,响应迅速,效率高,而且直线有铁芯电机推力密度高,在同等尺寸下可以提供更高的推力,从而能够支撑起平台转动并载重。
通过比较方案一和方案二,很明显方案二中直线(有铁芯)电机在响应速度、行程范围上、灵活性上比较适合于此系统中的设计,故选择方案二。
(2)传感器的选择:
角度传感器。
水平传感器。
用水平传感器来配合直线电机工作,检测平台长边(X方向)和宽边(Y方向)倾斜的角度,并将检测到的电压值经过AD转换后送入单片机,由单片机采集分析后送到LED上分两路同时显示长边(X方向)和(Y方向)的倾角。
由于此系统中要检测平台长边和宽边的倾角,而长边和宽边都是在平面内旋转,水平传感器的角度测量范围是±
90°
,且分辨率高,可以达到0.1;
功率消耗也比较小。
故用水平传感器,即使用方案二。
四、设计实现:
五、设计调试:
1、硬件调试
(1)键盘输入及LED数码管显示电路调试
(2)ADC0809转换电路及L298N驱动电路调试
从键盘输入数值并送入单片机,调整平台倾角,经传感器检测送到AD转换电路,转换后再送到单片机,由单片机比较确认后输出到LED上显示,并记录。
2、软件调试
本程序采用C语言编写,采用自上而下、循环反馈的调试方法,对单元电路进行调试后再进行系统的调试。
调试时与硬件结合,随时观测调试的结果,并进行有目的的修改。
当软件和硬件的基本功能分别调试成功后,再进行系统的优化。
六、功能测试及结果分析:
1、测试方法
用分级测试的方法,即对整个系统的各个模块分别进行测试,之后再将各级连起来进行整体系统的测试。
2、仪器仪表
(1)直流电压源
(2)万用表
(3)示波器
(4)信号发生器
3、测试过程
测试单片机能否正确采集从键盘输入的数值并能否驱动电机正常转动。
测试水平传感器能否正常配合直线电机工作,检测到准确的数值并经AD转换后送入单片机。
检测经过单片机处理后反馈到LED数码管上的数值在误差范围内是否与预定值吻合。
4、测试结果及分析
测试数据如下表所示:
表一长边(X方向)倾角
长边距底板高度/cm
20.6
24
25.3
27
30
32
34.5
36.2
长边倾角/度
2.127
7.648
9.727
12.407
16.999
19.090
23.470
25.805
预定倾角值/度
2
7
9
13
18
21
24
25
表二宽边(Y方向)倾角
宽边距底板高度/cm
宽边倾角/度
5、误差分析
七、结论:
本系统以STC89C52为核心,成功的完成了通过调整支撑腿(直线电机)的伸缩来调整平台的水平和倾斜,同时将水平传感器检测到的长边和宽边倾角经过AD转换送入单片机处理后输出到LED上显示出来。
在设计此系统的过程中,我
们进一步了解了单片机最小系统的各组成部分及其功能的实现;
同时在设计机械转动部分与控制部分的配合工作中锻炼了思维能力和实际动手能力。
附录一部分电路原理图
1、单片机最小系统部分电路图如图所示:
图1LED显示电路
图36位独立式键盘
2、L298N驱动电路部分如下图4所示:
图4
3、AD转换电路部分如下图5所示:
图5
图65410ADPCB
图7AD与升压电路PCB
图8电机驱动PCB
附录二演示模式程序清单
#include<
reg52.h>
#include"
intrins.h"
//
#defineucharunsignedchar
#defineuintunsignedint
constSevenLedDisp[]={0x3f,0x06,0x5b,0x4f,//0,1,2,3
0x66,0x6d,0x7d,0x07,//4,5,6,7
0x7f,0x6f,0x77,0x7c,//8,9,A,b
0x39,0x5e,0x79,0x71};
//C,d,E,F
sbitJia1=P0^0;
//加一
sbitJia5=P0^1;
sbitxDir=P0^2;
//x方向
sbityDir=P0^3;
sbitcle=P0^4;
//清零.
sbitcs0=P3^0;
//位选用P1
sbitcs1=P3^1;
sbitcs2=P3^2;
sbitcs3=P3^3;
ucharx,y;
//用于存储x,y方向的度数
ucharxflag,yflag;
voidInit(void);
//初始化,清零子函数
voidkeyscan(void);
//键盘扫描
voidledDisp(uchar,uchar);
voiddelayms(uchar);
/****************************************主函数******************************************/
voidmain(void)
{//
Init();
//初始化,清零子函数
TMOD=0x11;
TH0=0xf0;
TL0=0x0e;
//暂定20ms
EA=1;
ET0=1;
TR0=1;
P1=0;
while
(1)
{
keyscan();
//键盘扫描
/*keydeal(x,y);
*/
}
}
/*********************************************按键处理*******************************************
voidkeydeal(ucharxD,ucharyD)
{
Drive(x);
Drive(y);
}
/*****************************************电机驱动*********************************************
voidDrive(ucharxDegree)
/***************************************键盘扫描************************************************/
voidkeyscan(void)
{
//Jia1键按下11111110
if(Jia1==0)
{delayms(10);
//while
(1){TR0=0;
P1=0xff;
cs0=1;
cs1=0;
cs2=1;
cs3=1;
}
if(xflag==1)
{
x=x+1;
if(x>
89)x=0;
//最大90度
while(Jia1==0);
//确认按键释放
//此处使用先执行按键处理程序,再进行按键释放判断,也可以先释放再处理
}
if(yflag==1)
y=y+1;
if(y>
89)y=0;
//确认按键释放
}
}
//Jia5键按下11111101
if(Jia5==0)
{delayms(10);
85)x=0;
x=x+5;
while(Jia5==0);
85)y=0;
y=y+5;
//xDir键按下11111011
if(xDir==0)
xflag=1;
//同时只允许一个标志为1
yflag=0;
while(xDir==0);
}
//yDir键按下11110111
if(yDir==0)
xflag=0;
yflag=1;
while(yDir==0);
//清零11101111
if(cle==0)
Init();
while(cle==0);
/****************************************定时计数器0*******************************************/
voidt0(void)interrupt1
TR0=0;
ledDisp(x,y);
/****************************************显示*******************************************/
voidledDisp(ucharxx,ucharyy)
{
P1=SevenLedDisp[(xx/10)];
//x十位
cs0=0;
delayms(4);
cs0=1;
P1=SevenLedDisp[(xx%10)];
//x个位
cs1=0;
delayms(3);
cs1=1;
P1=SevenLedDisp[(yy/10)];
//y十位
cs2=0;
cs2=1;
P1=SevenLedDisp[(yy%10)];
//y个位
cs3=0;
cs3=1;
/*****************************************清零*****************************************/
voidInit(void)
xflag=0;
yflag=0;
x=0;
y=0;
/*******************************************延时ms*************************************************/
voiddelayms(uchart)
ucharm;
for(;
t>
0;
t--)
for(m=123;
m>
m--);
附录三实际模式核心程序清单
附录四实物图