机械手毕业设计(6)

2019-08-03 14:33

注:以上标定工作都是在10.00v的电压下测量的

3.2.6电源

电位器和伺服放大器都需要一定的电压,特别是电位计是在10.0v的条件下工作的,稳定的电压对于保证电位计反馈信号的真实性具有重大的影响;而伺服放大器是在12v~30v范围内工作的,电压只要在此范围内即可。

本文采用DH1715A-3型 双路稳压稳流电源,可以提供0~32v电压输出和0~2A电流输出。

这里设定两路电压输出:14.0v——供给伺服放大器运行,10.0v——保证电位计的正常工作。

第4章 控制系统软件

以上完成了机器人的本体设计和控制系统硬件的搭建,下面将通过设计控制软件,使计算机通过数据采集卡有条不紊地向外部发送指挥信号,最终驱动机器人各个关节的运动,使之按照人的意愿“工作”。

4.1预期的功能

(1). 实时显示各个关节角,并且可以防止各个关节的运动角度超出预定的关 节角范围内;

(2). 实现直流电机的伺服控制; (3). 实现电机的自锁;

(4). 实现示教编程及在线修改程序;

(5). 可以设置参考点,使机器人在空间有一个固定的参考位置,可以回参考

点。

4.2 实现方法

以模块化程序设计思想为指导,以预期要实现的功能作为各个模块,设计控制软件。

26

从图3.1可以看出,工控机通过数据采集控制。编程的任务其实就是用计算机控制数据采集卡使之发出或获取一系列数字量、模拟量。

研华公司的数据采集卡驱动程序中,附带许多与板卡相关的函数和数据结构以供使用,极大的方便了程序编写。

本文采用了Visual C++作为编程工具。

4.2.1实时显示各个关节角及运动范围控制

在BOOL CRobotDlg::OnInitDialog()函数中, 设置定时器SetTimer(1, gwScanTime, NULL),

然后在void CRobotDlg::OnTimer(UINT nIDEvent)函数中,

通过调用bool CRobotDlg::position_now(USHORT ka1_chan),采样电位器输出电压,通过前面的电位器标定函数,换算出各个关节的角度,并显示出来。

在void CRobotDlg::OnChangeAngle?Edit()函数中(?表示1,2,3,4,5), 将换算出的角度与该关节预设的运动范围作比较,看其是否在此区间内,否则弹出警告对话框,并且自动停止该关节的运动。

4.2.2直流电机的伺服控制

对于大功率的直流电机,一般采用PWM控制来调节运行速度,这样可以提高电路及电机的运行效率,而本文中的电机功率并不是很大,为方便期间,采用了线性控制方法来调速。

以关节1为例,与该模块相关的函数有OnZ1Button(), OnF1Button(), OnT1Button(),它们分别表示用来控制电机的正转、反转和停止,其中电机的运行速度靠输入的电压值调节;另外一个函数OnRun1Button()是用来实现电机的位置伺服控制,在预定的关节角范围内,电机可以运行到任何一输入的位置停止。

27

4.2.3电机的自锁

前面在2.7节中讲到该机器人关节上未装制动器,所以必须通过软件程序实现关节的自锁,尤其是肩关节和肘关节的自锁。

解决思路:大臂和小臂在电机运转时不会由于重力而掉落,在电机停止的时候却会下落,因为电机一旦停止,就失去了驱动力矩,因此若想让大臂和小臂停止在预定位置,应该在此位置给关节电机施加一个电压,让它担负起大臂或小臂,而不让其由于重力而下落。但是,在不同的位置,重力对大臂或小臂的力矩不同,应提供给电机的电压也不同,如何选取电机的电压呢?

提供给电机的电压小了,不足以抵抗重力的力矩;提供给电机的电压大了,会使电机转动,使大臂或小臂上升;所以,最好能通过程序来自适应选择这个制动电压,方法有多种,下面是本文的设计过程。 程序设计方法一:

在调用在OnT2Button()或OnT3Button()函数时,先给电机一个0电压,使电机失去驱动力矩,同时调用position_now(USHORT ka1_chan)函数获得此刻的关节位置,然后延时一段时间比如0.1s,再给电机一个小电压,形成一个小的制动力矩,通过采样此刻位置看其是否能使关节制动;如果不能,则使该电压值按照一定的步长线性增加,以增大制动力矩;这通过一个while()循环实现,如果采样位置不再减小,则表示大臂或小臂已停止下落,可跳出循环。

下图为程序流程图:

循环采样一直到采样值fVoltage>=fVoltage_former 跳出循环,表示大臂或小臂已经制动在自所位置了 考虑到大臂或小臂上升时的惯性, 循环采样一直到采样值fVoltage<=fVoltage_former 跳出循环,表示大臂或小臂已经开始下落了 使电机电压为0,并采样此时位置,将电位器输出值存放在fVoltage_former中 调用OnT2Button()或OnT3Button()函数 28

方法一验证:

用方法一编写的程序,调用OnT2Button()或OnT3Button()函数后,对于正在上升的臂可以实现很好的制动,而对于下降的臂则不可靠,有时候下降的臂停止下落后会反弹又向上运动。

定性分析其原因是由于上升的臂在电机失去驱动力矩后,在重力作用下会慢慢下落,下落初速度为0,静止后的速度变化不大,制动时间短,容易制动;而下降的臂失去驱动力矩后,在重力作用下仍以原来的速度下落,静止后的速度变化较大,制动时间长,很容易使制动电压的线性增长时,超过平衡重力所需要的电压,从而导致反弹现象的发生,其实质是由于电压的超调造成的。

此后,针对这种反弹现象对程序作过多次修改,结果都不太理想,所以就尝试换一种方法。

程序设计方法二:

方法二采用传统的PID控制,电压超调后还可以减小,可以避免反弹现象的发生。

下图为程序流程图:

29

调用OnT2Button()或OnT3Button()函数 使电机电压为0,并采样此时位置,将电位器输出值存放在fVoltage_former中 延时tms,再次采样,取得误差量 e1= fVoltage_former- fVoltage 进入for循环 延时tms,再次采样,取得误差量, 使e2=e1,e1= fVoltage_former- fVoltage; 误差积累sume+=fabs(e1) 使电机输出电压v=kp*e1+ki*sume+kd*(e1-e2)

方法二验证:

由于方法二采用PID控制,需要选择合适的比例、积分、微分系数;另外还要选择for()循环中的延时时间t和循环次数n。

选择结果:kp=2.0, ki=0.02, kd=0.04,

t=10, n=10;

所以最终制动时间为n*t=100ms 总结:

对于方法二,其控制框图如图4.1所示:

用for函数控制循环次数,经过n此循环后,跳出循环,大臂或小臂已停止下落实现制动

图4.1

4.2.4示教编程及在线修改程序

设计方法:当机器人停止在某个位置时,可以记录下在该位置所对应的一组关节角,这一组关节角用一个结构体存储

30

struct position {

float Voltage1; float Voltage2; float Voltage3;


机械手毕业设计(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:单片机原理习题集(全)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: