原创 Arduino专门舵机函数和通信函数的应用

2010-8-6 15:51 6388 4 7 分类: MCU/ 嵌入式

      舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。其工作原理是由控制器发出PWM(脉冲宽度调制)信号给舵机,这个PWM信号的周期固定为20ms,0.5~2.5ms 的正脉冲宽度,对应的舵机转动角度为0~180度。


      这个实验是Labview做一个舵机控制面板,它向Arduino控制器发“角度”,再通过Arduino控制板上层叠的传感器扩展板,驱动舵机按Labview发出的“角度信息”转过规定的角度。


   传感器扩展板如图:


386bbe18-ce5c-46c9-8a52-41113e9447b3.jpg


    由于舵机电流较大,所以要在传感器扩展板的Servo Power接线柱接入5V 1A的电源,不能仅靠压在它身下的Arduino控制器的USB供电,还有一点要注意,要把这个接线柱旁边的Servo Power Switch的跳线短路帽拔掉!这样接入的5V 1A的电源才能加在舵机上,如果电源的功率小,可能舵机无法驱动,或者舵机在运行时,发生抖动。


下面是我做实验的照片:


84382408-0fd1-48b7-9d8c-b3ec740ee240.jpg


看到图中的电路板了吗?是两块电路板层叠在一起。还有电位器,电位器转动,舵机也跟着转,这个Arduino程序如何编,我就不说了,我讲Labview如何让舵机转!


这篇文章的题目是:“Arduino专门舵机函数和通信函数的应用”,主要是强调Arduino通过一些这样的函数,方便编程。


    Arduino程序的编程目的是:通过串口通信读函数Serial.read( );读取上位机Labview软件下传的角度,再把这个角度值通过舵机函数myservo.write(角度),传给与舵机相连的数字接口,舵机就精确转动个角度。简单吧,所以Arduino控制器为啥能在互动媒体和机器人爱好者中流行起来,我总结的一点原因就是可以“简单明了”地编程AVR单片机。


    下面的程序我还多了一步,就是通过串口通信读函数Serial.print( ),又把角度值回传给了Labview,想试试用Arduino语言进行上下位机的互传,是否方便,体会是蛮方便的。说句笑话,我给AVR单片机编程,实际上到现在还没掌握AVR的硬件结构那,太忙!


 // labview发角度命令,驱动舵机转动
#include <Servo.h> //舵机头文件
Servo myservo;  // 设置舵机名
int val;    // 舵机角度变量
void setup()
{
  myservo.attach(9);  // 连接舵机到数字接口9
  Serial.begin(9600);//设置通信波特率9600
}
 
void loop()
{
  if (Serial.available() > 0)


//如果串口接收缓冲区中接收的字节数大于0
  {
    val = Serial.read();//接受Labview下传的舵机角度值
    myservo.write(val);  // 根据角度值,驱动舵机
    Serial.print(val,BYTE);//把接收到的角度值以无符号字节形式
                             //再发回Labview
    delay(15);    //等待舵机,到达转动位置
  }
}


Serial.print(val,BYTE);这个指令,我分析一下,含义是角度值以无符号字节的形式,上传给Labview,0~180度这样的角度值需要几个字节来表达,一个字节就行,因为一个无符号字节所能表达的数是0~255,看来我的计数机基础知识还掌握得不错!


所以Labview的“Visa读取”函数每次读取的字节总数为1,一个字节就包含了Arduino控制器上传的角度信息,当然你看看下面的Labview程序的“Visa写入”函数前面的“字节数组至字符串转换”函数,实际上字节数组也只包含一个字节,这个字节就是Labview下传给Arduino控制器的舵机驱动命令,即角度值。


d157cefc-b75a-4502-8223-7ccf029c0f1b.jpg


看懂了Labview的框图程序,框图程序是前面板的输入、输出控件的逻辑,用户操作的平台是前面板,哈哈,运行一下程序吧,用鼠标转动Labview前面板的“旋钮”控件,看我桌子上的小舵机,随之起舞!


7a9a55e2-95b6-47b2-9ee5-130a2c4fe677.jpg

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2013-3-19 21:30

图片怎么看不到

用户388268 2011-9-1 13:39

很久以前用过Arduino的舵机控制,一直不听使唤,就没有再使用。 现在回忆起来,应该是电源供电能力不够的原因(直接使用了版载电源)。

用户1211942 2010-8-27 19:12

Arduino控制舵机还是比较方便的,但是多了就不好调试了,最好使用专用舵机控制器,有需要以上器材的可以联系我dfrobot.taobao.com
相关推荐阅读
用户374501 2011-10-22 21:38
用LabVIEW前面板遥控乐高NXT机械手车
乐高NXT套件自带的软件是NXT-G软件,它是以国家仪器公司的LabVIEW软件为核心架构的,NXT-G软件界面简单易懂,但要进行复杂功能的程序开发,还需采用更高阶的开发平台,如NI公司的LabVI...
用户374501 2011-10-18 17:20
键盘遥控NXT机器人的LabVIEW编程详解
键盘遥控乐高NXT机器人:图1 基于LabVIEW的键盘遥控NXT机器人示意图视频请观看:  程序下载:键盘遥控labview程序.rar      要用键盘遥控乐高NXT机器人,首先需把键盘的按键...
用户374501 2011-10-09 11:39
乐高Technic伐木车8049驾驶部分电控改造
    最近我购买了乐高Technic伐木车8049套件,大多数买乐高科技套件的LEGO爱好者,到不是为了照着搭建手册体验下套件的魅力,主要还是为了套件里的零件,“零件”圈里人的说法是“肉”,也就是说...
用户374501 2011-09-25 18:42
用Matlab软件为乐高NXT机器人编程
要在matlab环境下给NXT机器人编程,你必须拥有Matlab R2008以上版本,还必须安装德国亚琛大学开发的NXT Toolbox组件。我的版本Matlab 2009a,32位的版本,64位版...
用户374501 2011-08-29 20:40
开博周年,用微软机器人软件MSRS编程实例来纪念
去年,大概这个时间段,我开始在EDN写博客,其实在这以前我也在其他论坛和博客网写些东西,后来我想还是找个技术博客大站来长期保留我的文章,同时也可以分享些东西给其他同仁,于是选择了EDN,哈哈,我的选择...
用户374501 2011-08-27 17:23
用微软机器人软件MSRS给NXT控制器编程
Microsoft Robotics Studio可以使你在PC机上创建程序来远程控制机器人,在这个软件所支持众多公司的机器人控制器中,当然也支持乐高迷手头的NXT控制器。所以赶快去安装免费的微软...
我要评论
3
4
关闭 站长推荐上一条 /3 下一条