天南地北客
发表于: 2018-6-13 22:11:17 | 显示全部楼层

在本篇文章中,我们将主要介绍一些有关伺服电机的基础知识以及如何将伺服电机与MSP430G2 LaunchPad开发板进行连接。 MSP-EXP430G2是德州仪器提供的开发工具,也称为LaunchPad,用于学习和实践如何使用其微控制器。该开发板属于MSP430产品线类别,我们可以对所有MSP430系列微控制器进行编程。


伺服电机和PWM

在详细讨论之前,首先我们应该了解伺服电机。


伺服电机包含了直流电机、位置控制系统和转动机构。伺服电机在现代世界有很多应用,因此它们有不同的形状和尺寸。我们将在本篇文章中使用的是SG90伺服电机,它是最流行且最便宜的电机之一。 SG90是一款180度伺服器。所以用这个伺服我们可以将轴从0-180度定位。


伺服电机主要有三根导线,一个用于电源,另一个用于接地,最后一个用于位置设置。红线连接到电源,棕线连接到地,黄线(或白)连接到信号。

Servo-Motor.jpg


每个伺服电机都运行在不同的PWM频率上(本教程中使用的最常用频率为50HZ),因此请获取电机的数据表以检查伺服电机工作在哪个PWM周期。


PWM(脉宽调制)信号的频率可以根据伺服电机的类型而变化。这里重要的是PWM信号的DUTY RATIO。根据这个DUTY RATION,控制电子装置调整轴。


如下图所示,对于要移动到9o时钟的轴,开启电源必须为1 / 18.ie。在18ms信号中1ms的ON时间和17ms的OFF时间。


PWM-Pulses-for-Servo_0.gif


对于要移动到12o时钟的轴,信号的ON时间必须为1.5ms,OFF时间应为16.5ms。控制系统在伺服中对该比率进行解码,并根据此比例调整位置。这里的PWM是使用MSP430产生的。


所需的材料

●    MSP430 LaunchPad开发板

●    SG90伺服电机

●    连接导线


电路图和说明

伺服电机与MSP430G2的电路连接图

Circuit-diagram-for-Interfacing-Servo-Motor-with-MSP430G2.png


在MSP430中,我们有预定义的库和PWM函数已经写入这些库中,所以我们不必担心PWM值。您只需放置想要旋转轴的角度,然后通过这些库和微控制器进行操作。

在这里,我们使用PIN 6,即P1.4,它是MSP430的PWM引脚。但是你可以使用任何引脚号。因为所有PWM函数都写入库本身,所以不需要使用PWM引脚进行伺服。


用于控制伺服的头文件是“servo.h”。


我们将使用Energia IDE编写我们的代码。代码简单易懂。它与Arduino相同,可以在示例菜单中找到。下面给出完整的代码,您可以根据需要编辑代码并将其上传到MSP430开发板。

Interfacing-Servo-Motor-with-MSP430G2.jpg


代码

本篇文章使用的完整代码如下:

  1. #include <Servo.h>

  2. Servo sg90servo;    // create servo object to control a servo
  3. int angle = 0;    // variable to store the servo position
  4. void setup()
  5. {
  6.   Sg90servo.attach(4);  // attaches the servo on pin 4 to the servo object
  7. }
  8. void loop()
  9. {
  10.   for(angle = 0; angle< 180; angle++)  // goes from 0 degrees to 180 degrees
  11.   {                                       // in steps of 1 degree
  12.     Sg90servo.write(angle);              // tell servo to go to position in variable 'angle’
  13.     delay(20);                       // waits 20ms for the servo to reach the position
  14.   }
  15.   for(angle = 180;angle>=1; angle--)     // goes from 180 degrees to 0 degrees
  16.   {                                
  17.     Sg90servo.write(angle);              // tell servo to go to position in variable 'angle'
  18.     delay(20);                       // waits 20ms for the servo to reach the position
  19.   }
  20. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 26 | 回复: 45



手机版|

GMT+8, 2024-4-26 09:40 , Processed in 0.044793 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表