基于单片机的机械手关节直流电机控制电路.docx
《基于单片机的机械手关节直流电机控制电路.docx》由会员分享,可在线阅读,更多相关《基于单片机的机械手关节直流电机控制电路.docx(19页珍藏版)》请在冰豆网上搜索。
基于单片机的机械手关节直流电机控制电路
课程设计
(论文)
题目基于单片机的机械手关节直流电机
控制电路
班级
学号
学生姓名
沈阳航空航天大学
课程设计任务书
课程名称专业综合课程设计
院(系)专业班级课程设计题目基于单片机的机械手关节直流电机控制电路
课程设计时间:
课程设计的内容及要求:
利用单片机、电路板开发基于单片机的机械手关节直流电机控制电路,实现机械手关节直流电机控制电路,使直流电机对一个机械手壁关节的启、停、正转、反转控制。
具体要求如下:
(1)按以上要求制定设计方案,并绘制出系统工作框图及程序流程图;
(2)按要求设计单片机的外围电路,给出电路原理图;
(3)编写主要程序;
(4)用protus进行仿真,给出仿真电路图;
(5)单片机仿真器、电路板、电源等硬件正确可靠地连接;
(6)按键控制直流电机进行正反转,使机械手关节活动;
指导教师年月日
负责教师年月日
学生签字年月日
基于单片机的机械手关节直流电机控制电路
摘要:
本文设计了由单片机控制的机械手关节直流电机,由单片机、电机驱动芯片、机械手直流电机、控制电机的(正转、反转、启停、调速)键盘组成,主要使用了AT89C52、L298、直流电机主要器件,主要解决方案是利用单片机最小系统设计一个由按键控制的直流电机的在转动来控制机械手关节的运动。
关键字:
单片机;直流电机;控制电路。
0前言
着我们工业自动化水平的不断提高,在机械加工和机械制造领域,以及各种装配与包装自动化生长线上,机械手的应用以相当普遍。
机械手通常担任着上料,下料等加工任务。
由于PLC顺序控制具有系统简单,可靠,控制灵活方便等特点,而且从PLC诞生之日起,其最基本,最普遍的应用领域就是在工业环境下的顺序控制。
因此,基于PLC顺序控制的机械手在工业自动化领域中的到广泛的应用。
在实时检测和自动控制的系统中,单片机往往是作为一个核心部件来使用,但仅单片机方面的知识是不够的,还要根据具体的硬件结构,加以不同的辅助芯片,来完成所需要的工作。
对于低档产品要求使用操作方便,量程(足够)宽,可靠性高,价格低。
而对于中高档产品,则要求有高分辨率常常需要测量频率,通常这些都是较复杂的信号,如含有复杂频率成分、调制的或含有未知频率分量的、频率固定的或变化的、纯净的或叠加有干扰的等等。
为了能正确地测量不同类型的信号,必须了解待测信号特性和各种频率测量仪器的性能。
本次所要设计的是一个由单片机控制电机正反转的系统,通过单片机和智能仪器所学的内容实现对电机经行正转与反转的控制,并实现将其对机械手的控制。
1总体设计方案
针对本课题的设计任务,进行分析得到:
本次设计用按键控制直流电机的转动,用单片机作为控制芯片从而实现对机械手关节的控制。
该控制系统的设计,在总体上大致可分为以下几个部分:
①控制按键部分;②电机驱动部分;③直流电机部分;系统原理图如图1
图1系统原理图
整个电路的工作原理是:
单片机作为控制芯片,经过软件程序的加载用按键实现对直流电机的正转、反转、启停、调速的控制进而起到对机械手关节的运动的控制。
2.硬件电路设计
本设计通过AT89C52单片机、L298电机驱动芯片,直流电机、按键等实现对电机的控制。
硬件原理框图如图2所示。
图2硬件原理框图
2.1单片机系统
单片机(single-chipmicrocomputer)是一块集成芯片,但不是一块实现某一个逻辑功能的芯片,而是在这块芯片当中,集成了一个计算机系统。
如中央处理器(CPU)、存储器(ROM,RAM)、I/O接口、定时器/计数器、中断系统等。
中央处理器是单片机的核心单元,他由运算器和控制器组成,他的主要功能是实现算术运算、逻辑运算、和控制。
51系列是基本型,包括8051、8751、8031、8951.这四个机种区别,仅在于片内程序储存器。
8051为4KBROM,8751为4KBEPROM,8031片内无程序储存器,8951为4KBEPROM。
其他性能结构一样,有片内128BRAM,2个16位定时器/计数器,5个中断源。
其中,8031性价比较高,又易于开发,目前应用面广泛。
本系统采用CPU为89C52的单片微机,89C52本身带有8K的内存储器,可以在编程器上实现闪烁式的电擦写达几万次以上,比以往惯用8031CPU外加EPROM为核心的单片机系统在硬件上具有更加简单、方便等优点,而且完全兼容MCS51系列单片机的所有功能。
下面介绍89C52的主要管脚功能如下:
VCC(40):
电源+5V;VSS(20):
接地;XTAL1(19)和XTAL2(18):
外接石英晶体振荡器;P0口(32-39):
双向I/O口,既可作低8位既可作低8位地址和8位数据总线使用,也可作普通I/O口;P1口(1-8):
准双向通用I/O口;P2口(21-28):
既可作高8位地址总线,也可作普通I/O口;P3口(10-17):
多用途端口,既可作普通I/O口,也可按每位定义的第二功能操作;RST(9):
复位信号输入端;ALE/PROG:
地址锁存信号输出端;PSEN:
内部和外部程序存储器选择线。
如图3所示
图389C52单片机
2.2独立按键
如图4所示右边按键从左到右依次为控制电机的反转、正转、启停、调速,其中调速按键设置了四个速度档。
图4控制按键
2.3电机驱动
本设计电机驱动芯片选用了L298,L298是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片的主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
如图5所示芯片引脚图。
图5L298
1SENSINGA15SENSINGB此两端与地连接电流检测电阻,并向驱动芯片反馈检测到的信号。
2OUT1
3OUT2此两脚是全桥式驱动器A的两个输出端,用来连接负载。
4Vs电机驱动电源输入端。
5IN17IN2输入标准的TTL逻辑电平信号,用来控制全桥式驱动器A的开关。
6ENABLEA11ENABLEB
使能控制端.输入标准TTL逻辑电平信号;低电平时全桥式驱动器禁止工作。
8GND接地端,芯片本身的散热片与8脚相通。
9Vss逻辑控制部分的电源输人端口。
10IN312IN4输入标准的TTL逻辑电平信号,用来控制全桥式驱动器B的开关。
13OUT314OUT4此两脚是全桥式驱动器B的两个输出端,用来连接负载。
L298的逻辑控制见如下表1。
其中C、D分别为IN1、IN2或IN3、IN4;L为低电平,H为高电平,※为不管是低电平还是高电平。
表1 L298的逻辑控制
输入
输出
Ven=H
C=H;D=L;
正转
C=L;D=H
反转
C=D
制动
Ven=L
C=※;D=※
没有输出,电机不工作
L298驱动直流电机由单片机软件编程控制。
如图6所示L298驱动直流电机的连接电路。
电机采用5V直流电机。
图6L298驱动直流电机
3.软件设计
在智能仪器设计中硬件与软件是紧密结合起来的,软件的设计减少了硬件设备的使用,传统仪器的许多硬件设备已经被软件所取代,使现代仪器更加智能化。
在本设计中软件起着决定性的作用,下面为本次课设各部分软件设计。
总设计图如图7所示
N
N
Y
N
Y
Y
N
Y
图7 主程序流程图
3.1按键子程序设计
电机的转动情况由按键控制,实现电机的正转、反转、启停、调速如图8所示
图8键盘子程序流程图
3.2调速子程序设计
本设计的主要思想为利用PWM控制占空比从而达到改变电机速度。
PWM控制原理:
图9为PWM降压斩波器的原理电路及输出电压波形。
在图9a中,假定晶体管V1先导通T1,秒(忽略V1的管压降,这期间电源电压Ud全部加到电枢上),然后关断T2秒(这期间电枢端电压为零)。
如此反复,则电枢端电压波形如图9b中所示。
电动机电枢端电压Ua为其平均值。
a)b)
图9PWM降压斩波器原理电路及输出电压波形
α为一个周期T中,晶体管V1导通时间的比率,称为负载率或占空比。
使用下面三种方法中的任何一种,都可以改变α的值,从而达到调压的目的:
(1)定宽调频法:
T1保持一定,使T2在0~∞范围内变化;
(2)调宽调频法:
T2保持一定,使T1在0~∞范围内变化(3)定频调宽法:
T1+T2=T保持一定,使T,在0~T范围内变化。
调速子程序中设置了四个速度档如图9所示
图9调速子程序流程图
4调试分析
本课程设计在软件、硬件调试方面都出现过问题。
(1)在软件方面由于按键抖动是键盘显示不稳定通过加入延时消抖程序解决了此问题,另外加速程序开始时由于占空比调节较大结果加速效果不明显,而后及时调整占空比比例达到了预期效果。
(2)。
在硬件方面由于使用的电机是线圈式的,在从运行状态突然转到停止状态和从顺时针状态突然转到逆时针状态时会产生很大的反向电流,所以在电路中加入了二极管对产生的反向电流进行泄流,保护芯片安全。
5.结论及进一步设想
本课设通单片机开发实现了按键对机械手关节直流电机的控制达到了电机正转、反转、启停、调速的目的。
整个系统体积较小,价格便宜,操作简单,显示清晰。
由于单片机技术发展已经很成熟,我们更多的是借鉴前人的工作,完善我们的设计。
这并不是简单意义上的重复,而是消化吸收和创新。
本设计可进一步拓展,可以加入电机测速模块实现对电机转速的显示,将设计进一步智能化。
参考文献
[1]公茂法.MCS—51/52单片机原理与应用.北京:
北京航空航天大学出版2009.3
[2]凌玉华.单片机原理及应用系统设计.北京:
电子工业出版社,2006.4
[3]周润景.基于PROTEUS的电路及单片机系统设计与仿真.北京:
北京航空航天大学出版社,2009.3
[4]张毅刚.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社1997[5].单片机软件设计技术.重庆:
科学文献出版社重庆分社,1989
课设体会
本课设通过对单片机的开发,实现了基于单片机的机械手关节直流电机的控制,在设计过程中遇到了很多麻烦,所以在网上以及图书馆查了好多资料虽然很累但是学到了好多东西。
在设计中运用了新的集成芯片,对硬件电路的工作原理更加深入了解,对智能化集成电路有了新的认识,同时在软件编写方面使我们对各个模块程序的编写,以及函数的调用进一步加强,对KEILC编程软件,PROTUES电路仿真软件的使用能力有所提高。
在以后的课设中还应该加强动手操作能力,在焊接电路时应该掌握好焊接顺序避免出麻烦。
程设计是理论知识与实践完美的结合,对于现代大学生的实践能力是个很好的培养。
附录1电路原理图
附录2元件清单
元件名称
型号
数量
芯片
L298
1
单片机
AT89C52
1
按键
普通按键
4
电阻
R20k欧姆
R10k欧姆
4
1
普通电容
C普通电容
22uf
2
极性电容
C极性电容
10uf
1
晶振片
12MHZ
1
电动机
M直流电动机
1
电源
5V电源
1
附录3程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitPW1=P1^1;
sbitPW2=P1^0;//控制电机的两个输入
sbitpwm=P1^4;
sbitaccelerate=P2^3;//调速按键
sbitstop=P2^2;//停止按键
sbitleft=P2^0;//左转按键
sbitright=P2^1;//右转按键
#defineright_turnPW1=0;PW2=1//顺时针转动
#defineleft_turnPW1=1;PW2=0//逆向转动
#defineend_turnPW1=0;PW2=0//停转
uintt0=58000,t1=2000;//初始时占空比为1/30
uinta=60000;//设置定时器装载初值60ms
ucharflag=1;//此标志用于选择不同的装载初值
uchardflag;//左右转标志
ucharcount;//用来标志速度档位
voidkeyscan();//键盘扫描
voiddelay(ucharz);
voidtime_init();//定时器的初始化
voidadjust_speed();//通过调整占空比来调整速度
voidmain()
{
time_init();//定时器的初始化
while
(1)
{
keyscan();//不断扫描键盘程序,以便及时作出相应的响应
}
}
voidtimer0()interrupt1using0
{
if(flag)
{
flag=0;
end_turn;a=t0;//t0的大小决定着低电平延续时间
TH0=(65536-a)/256;
TL0=(65536-a)%256;//重装载初值
}
else
{
flag=1;//这个标志起到交替输出高低电平的作用
if(dflag==0)
{
pwm=1;
right_turn;//右转
}
else
{
pwm=1;
left_turn;//左转
}
a=t1;//t1的大小决定着高电平延续时间
TH0=(65536-a)/256;
TL0=(65536-a)%256;//重装载初值
}
}
voidtime_init()
{
TMOD=0x01;//工作方式寄存器软件起动定时器定时器功能方式1
定时器0
TH0=(65536-a)/256;
TL0=(65536-a)%256;//装载初值
ET0=1;//开启定时器中断使能
EA=1;//开启总中断
TR0=0;
}
voiddelay(ucharz)//在12M下延时z毫秒
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidkeyscan()
{
if(stop==0)
{
pwm=0;
TR0=0;//关闭定时器0即可停止转动
}
if(left==0)
{
TR0=1;
dflag=1;//转向标志置位则左转
}
if(right==0)
{
TR0=1;
dflag=0;//转向标志复位则右转
}
if(accelerate==0)
{
delay(5);//延时消抖
if(accelerate==0)
{
while(accelerate==0);//等待松手
count++;
if(count==1)
{
t0=55000;
t1=5000;//占空比为1/12
}
if(count==2)
{
t0=50000;
t1=10000;//占空比为百分之1/6
}
if(count==3)
{
t0=45000;
t1=15000;//占空比为百分之1/4
}
if(count==4)
{
t0=35000;
t1=25000;//占空比为百分之5/12
}
if(count==5)
{
count=0;
}
}
}
}