ROBOT & AI

首页 | 新闻 | 产品 | 竞赛 | 学苑 | 读书 | 硬件 | 软件 | 智能 | 制作 | 项目 | 资源 | 论坛
 您的位置:首页 >> 制作 >> 创新设计 >> 正文
站内搜索:   

基于LPC2104的爬壁机器人控制系统设计

来源:单片机及嵌入式系统应用   字体:[ ]  2007-02-27

关键词:机器人控制

微型爬壁机器人控制系统的原理框图如图2所示,选用LPC2104作为嵌入式控制器。为提高系统效率和降低功耗,功放驱动电路采用基于双极性H-桥型脉宽调整方式PWM的集成电路L293DL293D采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成n型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D2H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。每1个电机需要3个控制信号EN12IN1IN2,其中EN12是使能信号,IN1IN2为电机转动方向控制信号,IN1IN2分别为10时,电机正转,反之,电机反转。选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。选择一路I/O口,经反向器74HC14分别接IN1IN2引脚,控制电机的正反转。为了节省LPC2104I/O口资源,选用274LS138IN2引脚,控制电机的正反转。为了节省LPC2104I/O资源,选用274LS138译码器对I/O口进行扩展,每片分别选用3I/O作为输入信号和1I/O作为片选信号,这样就可以将8I/O口扩展或16I/O口。如前所述,因为直注电机采用PWM调速,这样每1个电机至少需要1PWM12个电机需要12PWM,而LPC2104只有6PWM输出,所以选用2片电平锁存器74LS373使12个电机分成2组共用6PWM信号。

接触传感器由外层管和内部超弹性线构成,内外两层通过硅管隔开。当内线和外层接触时,开关关闭。通过这种方法,接触传感器向LPC2104发送信号,借此来控制吸盘的方向。

从压力传感器来模拟信号经A/D转换器转换成数字信号,LPC2104通过压力传感器来的信号来判断吸盘是否安全的吸附在墙壁上。

LPC2104还可以通过串口RS232和上位机进行通信。

3 控制系统软件设计

微型爬壁机器人控制系统软件选用嵌入式实时多任务操作系统μC/OS-II。它是一个源代码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统。其绝大部分源码是用ANSI C写的,移植方便,且运行稳定可靠。目前,它已经在几十种从8位到64位的微处理器、微控制器上实现了成功的移植。下面首先介绍μC/OS-IILPC2104上的移植过程,然后介绍微型爬壁机器人控制软件的设计。

31 μC/OS-IILPC2104上的移植

移植μC/OS-II,主要包括:设置堆栈的增长方面,声明3个宏(开中断、关中断和任务切换),声明10个与编译器相关的数据类型;用C语言编写6个与操作系统相关的函数(任务堆栈初始化函数和5个钩子函数);用汇编语言编写4个与处理器相关的函数。

用汇编语言编写的4个与处理器相关的函数如下:

OSStartHighRdy()用于在调度中使最高优先级的任务处于就绪态并开始执行;

OSCtxSw()完成任务级的上下文切换;

OSIntCtxSw()完成中断级任务切换,其过程与OSCtxSw()类似,只是在执行中断服务子程序后可能使更高优先级的任务处于就绪态;

OSTickISR()是系统节拍中断服务子程序。

3.1.1 OS_CUP.H的移植

μC/OS-II不使用C语言中的shortintlong等数据类型的定义,因为它们与处理器类型有关,隐含着不可移值性,所以代之以移值性强的整数数据类型,这样,既直观又可移值。

 

    在μC/OS-II中,使用OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()开中断和关中断来保护临界段代码。ARM处理器核的用户模式和执行Thumb代码时,不能改变处理器的开中断位I。为了兼容各种模式,使用软中断指令SWI使处理器进入管理模式和ARM指令状态,即使用SWI 0x02关中断,使用SWI 0x03开中断。

ΜC/OS-II使用结构常量OS_STK_GROWTH指定堆栈的增长方式,0表示堆栈从低地址往高地址增长,1表示堆栈从高地址往低地址增长。虽然ARM处理器核对于两种方式支持,但ADSC语言编译器仅支持一种方式,即从高地址往低地址增长,并且必须是满递减堆栈,所以OS_STK_GROWTH的值为1。以上内容在文件OS_CPU.h中做如下定义。

Typedef unsigned char BOOLEAN;/*布尔变量*/

Typedef unsigned char INT8U; /*无符号8位整型变量*/

Typedef signed char INT8S;/*有符号8位整型变量*/

Typedef unsigned short INT16U;/*无符号16位整型变量*/

Typedef signed short INT16S;/*有符号16位整型变量*/

Typedef unsigned int INT32U;/*无符号32位整型变量*/

Typedef signed int INT32S;/*有符号32位整型变量*/

Typedef float FP32;/*单精度浮点数(32位长度)*/

Typedef double FP64;/*双精度浮点数(64位长度)*/

Typedef INT32U OS_STK;/*堆栈是32位宽度*/

_swi(0x02) void OS_ENTER_CRITICAL(void);/*关中断*/

_swi(0x03) void OS_EXIT_CRITICAL(void); /*开中断*/

#define OS_STK_GROWTH 1/*堆栈由高地址向低地址增长*/

3页 上一页  [1] [2] [3] 下一页 

录入:master 点击:

[发表评论] [打印文章] [关闭窗口]  

原创文章属本站所有,转载请注明来源:Robotain.com  
相关文章

 网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

发表评论 昵称:

  

  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
最新推荐
热门文章
论坛精华
网站简介设为首页 加入收藏在线留言友情链接联系我们 - 广告服务 - 版权申明

Copyright © Robotain.com  all rights reserved  浙ICP备07003355号

版权所有 机器与智能网