机器人硬件电路设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科学年论文
简易人形机器人的设计
院系电子信息工程学院自动化系专业名称自动化
年级2008级
学生姓名张宇哲
学号 00824058 指导教师仲兆楠
日期 2011年09月
摘要
本文介绍的人形机器人采用新华龙公司的C8051F310单片机为控制核心,利用舵机完成人形机器人的各种动作。该人形机器人可以完成下蹲、起立、走步,侧移和踢球等动作。舵机均采用单片机C8051F310内部的PCA模块产生的PWM 波调节其转向和转角的大小从而实现人形机器人的各种动作。
关键字:C8051F310 舵机PCA模块PWM
Design and Realization Humanoid Robot
Based on MCU
Abstract
Humanoid Robot that is described in this article is using Nc Dragon single-chip microcomputer as control core,using rudder to complete various action。The Humanoid Robot can complete the squatting , standing up , walking , lateral moving and kicking actions. Rudder is controlled by PWM waves produced by C8051F310 MCU internal PCA module . Those actions is achieved through adjusting steering and rudder angle .
Keywords:C8051F310 Rudder PCA module PWM
概述 (3)
硬件电路设计 (3)
一.电源电路 (3)
二.单片机电路 (3)
三.RS 485总线 (4)
四.舵机电路 (4)
五.P C B制作 (5)
软件设计 (7)
一.主板程序 (7)
二.子板程序 (22)
总结 (27)
附录 (28)
本次的设计主题为人形机器人,主要对人形机器人的腿部进行设计与制作。使用新华龙C8051F310单片机作为主控芯片。通过该单片机的PCA模块产生的PWM波来控制舵机的运动。对腿部的控制需要三块电路板,一块主控板,两块从板。主控板主要用来通过485总线向从板发送数据指令,而从板则接收主板的指令来完成相应的控制。舵机的具体动作时依靠从板的控制来实现的。
硬件电路设计
本次所设计的机器人是由新华龙C8051F310控制,两条人形机械腿由十二个舵机组成由三块电路板控制。且三块电路板由三名组员分别设计完成。其中一块主控板控制两块从板,通过485总线进行通信,从而实现机械腿的协调动作。我主要负责从板的设计与制作,以下将从板的设计进行说明。
一.电源电路
电源芯片采用AZ1084和LM1117。其中AZ1084输入电压为7.2v,输出电压为5v,LM1117输入电压为5v,输出电压为3.3v。F310单片机的工作电压是3.3v,因此需要经过两次降压达到3.3v。为了稳定工作电压,采用IB0505LS来稳定单片机的工作电压。
二.单片机电路
单片机及用来调试的接口电路如下:
本单片机的晶振为32.768MHZ,但是在后期的测试发现外部晶振输出不稳定,因此采用的是内部晶振。我们所设计的机器人总共有12个舵机,而这款F310
最多只能输出5路PWM,因此需要3块板子。
三.RS485总线
本设计采用485总线进行通信通过主板发出指令来控制从板从而控制各个舵机的工作:
四.舵机控制电路
每块从板上共有六组舵机驱动,用P117光耦进行隔离电路图如下:
五.PCB制作:
PCB制作如下:
一下分别为PCB设计图以及对应的3D图
程序设计
本设计的程序一C语言来编写。程序的初始化可通过新华龙公司的专用软件(configuration wizard2)来完成,不用编程者自己完成,所以初始化相对方便。程序的主体部分由两部分组成,一部分为主板程序,控制单片机用串口模块来向从板发指令,主板的程序只发送相应的指令来协调舵机的运动。而从板的程序主要用来接受指令,并且是相应的舵机作出相应的动作。具体的动作实在从板的程序中完成的。
程序设计如下:
一.主板程序
void Uart_Send(unsigned char x)
{
SBUF0=x;
while(!TI0);
TI0=0;
}
void PCA_Init()
{
PCA0CN = 0x40;
PCA0MD &= ~0x40;
PCA0MD = 0x02;
PCA0CPM0 = 0xC2;
PCA0CPM1 = 0xC2;
PCA0CPL0 = 0x49;
PCA0CPL1 = 0x43;
PCA0CPH0 = 0xEC;
PCA0CPH1 = 0xEB;
}
void Port_IO_Init()
{
// P0.0 - Skipped, Open-Drain, Digital
// P0.1 - Skipped, Open-Drain, Digital
// P0.2 - Skipped, Open-Drain, Digital
// P0.3 - Skipped, Open-Drain, Digital
// P0.4 - TX0 (UART0), Open-Drain, Digital
// P0.5 - RX0 (UART0), Open-Drain, Digital
// P0.6 - CEX0 (PCA), Open-Drain, Digital