您要打印的文件是:Arduino专门舵机函数和通信函数的应用

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

作者:佚名    转贴自:http://www.eefocus.com/zhang700309/blog/11-11/233950_edf03.html    点击数:58


下面是我做实验的照片:

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

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

本实验的Arduino设备源于DFrobot官方旗舰店: http://dfrobot.taobao.com/

   传感器扩展板如图:

 


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

 

看到第一张图中的电路板了吗?是两块电路板层叠在一起。还有电位器,电位器转动,舵机也跟着转,这个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控制器的舵机驱动命令,即角度值。



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

 Labview请下载:舵机.zip