机器人硬件电路设计文档格式.docx

上传人:b****6 文档编号:19563124 上传时间:2023-01-07 格式:DOCX 页数:36 大小:653.96KB
下载 相关 举报
机器人硬件电路设计文档格式.docx_第1页
第1页 / 共36页
机器人硬件电路设计文档格式.docx_第2页
第2页 / 共36页
机器人硬件电路设计文档格式.docx_第3页
第3页 / 共36页
机器人硬件电路设计文档格式.docx_第4页
第4页 / 共36页
机器人硬件电路设计文档格式.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

机器人硬件电路设计文档格式.docx

《机器人硬件电路设计文档格式.docx》由会员分享,可在线阅读,更多相关《机器人硬件电路设计文档格式.docx(36页珍藏版)》请在冰豆网上搜索。

机器人硬件电路设计文档格式.docx

硬件电路设计…………………………………………………3

一.电源电路………………………………………………3

二.单片机电路……………………………………………3

三.RS485总线……………………………………………4

四.舵机电路………………………………………………4

五.PCB制作………………………………………………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语言来编写。

程序的初始化可通过新华龙公司的专用软件(configurationwizard2)来完成,不用编程者自己完成,所以初始化相对方便。

程序的主体部分由两部分组成,一部分为主板程序,控制单片机用串口模块来向从板发指令,主板的程序只发送相应的指令来协调舵机的运动。

而从板的程序主要用来接受指令,并且是相应的舵机作出相应的动作。

具体的动作实在从板的程序中完成的。

程序设计如下:

一.主板程序

voidUart_Send(unsignedcharx)

{

SBUF0=x;

while(!

TI0);

TI0=0;

}

voidPCA_Init()

PCA0CN=0x40;

PCA0MD&

=~0x40;

PCA0MD=0x02;

PCA0CPM0=0xC2;

PCA0CPM1=0xC2;

PCA0CPL0=0x49;

PCA0CPL1=0x43;

PCA0CPH0=0xEC;

PCA0CPH1=0xEB;

voidPort_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

//P0.7-CEX1(PCA),Open-Drain,Digital

//P1.0-Unassigned,Open-Drain,Digital

//P1.1-Unassigned,Open-Drain,Digital

//P1.2-Unassigned,Open-Drain,Digital

//P1.3-Unassigned,Open-Drain,Digital

//P1.4-Unassigned,Open-Drain,Digital

//P1.5-Unassigned,Open-Drain,Digital

//P1.6-Unassigned,Open-Drain,Digital

//P1.7-Unassigned,Open-Drain,Digital

//P2.0-Unassigned,Open-Drain,Digital

//P2.1-Unassigned,Open-Drain,Digital

//P2.2-Unassigned,Open-Drain,Digital

//P2.3-Unassigned,Open-Drain,Digital

P0SKIP=0x0F;

XBR0=0x01;

XBR1=0x42;

voidOscillator_Init()

OSCICN=0x82;

voidTimer_Init()

TCON=0x40;

TMOD=0x20;

CKCON=0x01;

TL1=0x61;

TH1=0x61;

voidUART_Init()

SCON0=0x10;

voidInterrupts_Init()

IP=0x10;

IE=0x80;

//Initializationfunctionfordevice,

//CallInit_Device()fromyourmainprogram

voidInit_Device(void)

PCA_Init();

Port_IO_Init();

Oscillator_Init();

Timer_Init();

UART_Init();

Interrupts_Init();

以上为CONCIGRITIONWIZARD2程序所生成的初始化程序,程序中对PCA,定时器,串口,以及各个端口进行初始化设置。

voidDelay(unsignedintx)

unsignedinty,z;

for(y=0;

y<

x;

y++)

for(z=0;

z<

50;

z++);

以上为主程序中使用的延时以及串口发送子程序,由于主板只需要发送数据,所以只有数据发送程序。

以下为主板中控制各个动作的子程序,所执行的动作有站立,行走,左移,蹲下,站起,踢腿。

每个动作都以for循环来实现,目的是使舵机的偏角一点点改变,不至于一下子打到设定的位置。

voidWalk(void)

uchari;

for(i=0;

i<

11;

i++)//右腿2,3,4关节抬起。

{

Uart_Send(walk_you_2);

Uart_Send(64-3*i);

Delay(5);

Uart_Send(walk_you_3);

Uart_Send(93+2*i);

Uart_Send(walk_you_4);

Uart_Send(136-i);

Uart_Send(walk_zuo_1);

//左腿1,5关节调节重心位置

Uart_Send(142-i);

Delay

(2);

Uart_Send(walk_zuo_5);

Uart_Send(143+i);

Delay(200);

}

Delay(1500);

i++)

Uart_Send(153-i);

Uart_Send(walk_zuo_2);

//左腿弯曲,使右脚落地

Uart_Send(45-i);

Uart_Send(walk_zuo_3);

Uart_Send(91-i);

Uart_Send(walk_zuo_4);

Uart_Send(50-i);

Delay(500);

for(i=11;

i>

0;

i--)

//右腿伸直

//左腿伸直

//左腿抬起迈步

Uart_Send(45+i*3);

Uart_Send(91-2*i);

Uart_Send(50+i);

Uart_Send(walk_you_1);

//调节重心

Uart_Send(20+i);

Uart_Send(walk_you_5);

Uart_Send(30+i);

Uart_Send(40-i);

//右腿弯曲,使左腿落地

Uart_Send(65+i);

Uart_Send(93+i);

Uart_Send(136+2*i);

for(i=10;

Uart_Send(91-i*2);

Uart_Send(50+2*i);

//右腿伸直

Uart_Send(136+i*2);

voidStop()

Uart_Send(walk_you_1);

Uart_Send(13);

Delay(5);

Uart_Send(walk_zuo_1);

Uart_Send(142);

Delay(100);

Uart_Send(walk_you_2);

Uart_Send(65);

Uart_Send(walk_zuo_2);

Uart_Send(45);

Uart_Send(walk_you_3);

Uart_Send(91);

Uart_Send(walk_zuo_3);

Uart_Send(93);

Uart_Send(walk_you_4);

Uart_Send(136);

Uart_Send(walk_zuo_4);

Uart_Send(50);

Uart_Send(walk_you_5);

Uart_Send(32);

Uart_Send(walk_zuo_5);

Uart_Send(143);

voidDunxia()

//蹲下

16;

Uart_Send(50-2*i);

Uart_Send(93+i*4);

Uart_Send(91-i*4);

Uart_Send(65-i*3);

Uart_Send(45+i*2);

Delay(500);

20;

Delay(2000);

//站起

for(i=15;

voidDunxia_bf_Left_Move()

Uart_Send(143);

Uart_Send(45+3*i);

Uart_Send(65-3*i);

Uart_Send(136+i);

Delay(400);

voidstand_af_Left_Move()

voidLeft_Move()

//向左移动左腿

Uart_Send(75+3*i);

Uart_Send(71-2*i);

Uart_Send(40+i);

Uart_Send(142-2*i);

Uart_Send(143+2*i);

Uart_Send(20-i);

Delay(5000);

Delay(2000);

//Uart_Send(walk_you_2);

//右腿后蹬

//Uart_Send(65-3*i);

//Delay

(2);

Uart_Send(walk_you_3)

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

当前位置:首页 > IT计算机 > 互联网

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

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