如何将伺服电动机与PIC微控制器连接

电子说

1.2w人已加入

描述

伺服电动机是一种特殊的齿轮减速直流电动机,配备有用于控制电动机轴的旋转方向以及位置的电子电路。由于伺服电机允许其输出轴的精确角度定位,因此它们广泛用于机器人技术和无线电控制的汽车,飞机和船只中,以控制其各个零件的运动。在本实验课程中,我们将首先探讨伺服电动机的组成及其工作原理,然后说明如何将其与PIC微控制器接口。

伺服电动机控制使用PIC微控制器

理论

伺服电动机(或伺服)是一个小盒子,其中装有一个直流电动机,通过一系列齿轮连接至电动机的输出轴(伺服臂)和控制该轴位置的电子电路。使用伺服的目的是实现对象的精确角度定位。

为了实现伺服功能,输出轴的瞬时定位信息通过换能器反馈到控制电路。最简单的方法是将电位计连接到输出轴或齿轮系中的某个位置。控制电子设备将电位计的反馈信号(包含轴的当前位置)与控制输入信号(包含轴的期望位置的信息)进行比较,并将实际值和期望值之间的差(称为误差信号)被放大并用于在减少或消除误差所需的方向上驱动直流电动机。当输出轴到达所需位置时,误差为零。典型伺服电机的功能框图如下所示。

微控制器

伺服电机原理

伺服部件(来源:http://tutorial.cytron.com.my/2011/09/19/how-rc-servo-works/)

伺服是脉宽调制(PWM)信号,通常频率为50 Hz。这意味着脉冲应每20ms重复一次。脉冲的宽度决定了输出轴的角度位置。伺服器内部的电子电路将PWM信号转换为成比例的输出电压,并将其与电位计的反馈电压进行比较。如果两者之间存在差异,则控制电路会沿适当的方向驱动电动机,直到差异变为零为止。脉冲宽度的典型值在1.0到2.0毫秒(ms)的范围内。对于标准伺服器,脉冲宽度在1.0毫秒至1.5毫秒之间会使伺服器顺时针旋转(CW),在1.5毫秒至2.0毫秒之间使伺服器能够逆时针旋转(CCW),而1.5毫秒脉冲宽度会使伺服电动机转向它的中心。但是,这些值可能会因电机的品牌和制造而有所不同。建议阅读伺服器的数据表,以找到将伺服器定位在不同角度所需的脉冲宽度的真实值。

大多数伺服器旋转180°。然而。有些可以旋转360°或更大角度。 Servos由于其精确的角度定位而被广泛用作机器人手臂中的活动关节。他们还发现了在无线电(RC)玩具中的应用。例如,在RC汽车中,它们用于转向机构,在RC船中用于控制舵。

伺服电机具有三根电线:两根用于电源(Vcc和地面),第三根用于电源。 Vcc线通常是红色的,接地线是黑色或棕色的。控制信号线为白色,黄色或橙色。本实验中使用的伺服电机来自iCircuit技术,并具有分别用于Vcc,Gnd和控制信号的红色,棕色和黄色导线。它以5.0 V电源供电,并提供180°的角度旋转

典型的伺服电机

微控制器

不同角度位置的伺服定时信息

微控制器

伺服臂的不同角度位置

电路

此电路的电路图实验如下所示。伺服器的控制输入来自PIC16F628A微控制器的RB1引脚,该PIC16F628A微控制器使用外部陶瓷谐振器以4.0 MHz的频率工作。轻触开关连接到RB0引脚,以提供用户输入来控制伺服臂的位置。该实验的操作部分在下面的软件部分中进行介绍。

微控制器

用于伺服电机控制演示的电路图

电路板上的电路设置

软件

PIC16F628A的固件是用用于PIC编译器的MikroC Pro编写的。 Timer0模块用作带预分频器1:256的定时器,以在两个连续的PWM脉冲之间产生大约20 ms的间隔。请记住,时钟频率为4.0 MHz,这导致1 s的机器周期,从而简化了使用Timer0计算延迟的数学运算。 MikroC提供了一个内置的库函数Delay_Cyc(),该函数生成可变的时钟周期延迟。此功能用于将控制脉冲的宽度从0.7毫秒更改为2.3毫秒。当电路第一次上电或复位时,在RB1引脚上连续产生脉冲宽度为0.7 ms的50 Hz PWM信号。该控制信号一直沿顺时针方向将伺服臂一直移动到末端,该末端被视为0角位置。按下连接到RB0引脚的轻触开关时,脉冲宽度增加0.2 ms,这将使轴逆时针(CCW)旋转大约22.5°。因此,每次按下开关,脉冲宽度都会增加0.2 ms,并且轴将进一步沿CCW方向旋转。连续按下开关8次后,脉冲宽度变为2.3 ms,轴到达另一端(180°角位置)。在第9次按下时,脉冲宽度被重置为0.7 ms,并且电机轴沿顺时针方向旋转,直到回到0角位置。在程序中,变量“ i”存储脉冲宽度信息(脉冲宽度= i * 10 * 10微秒),并以2为步长从7变为23。当i = 7时,脉冲宽度为7 * 10 * 10 = 700微秒(0.7 ms),当i = 23时,宽度为2.3 ms。

/*

Lab 21: Servo motor Control using PIC16F628A

MCU: PIC16F628A running at 4.0 MHz, MCLR enabled, WDT is OFF, Brown Out Detect

disabled

Written by: Rajendra Bhatt (www.embedded-lab.com)

2012/03/29

Description: User input switch is connected to RB0 and Servo Control signal

is generated from RB1 pin.

*/

sbit SW1 at RB0_bit;

sbit Control at RB1_bit;

unsigned short i=7, delay;

void interrupt() {

delay = i*10;

Control = 1;

Delay_Cyc(delay); // Generates delay equal to 10*delay clock cycles

Control = 0;

TMR0 = 180; // TMR0 returns to its initial value

INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur

}

void main() {

CMCON = 0x07; // Disable Comparators

TRISB = 0b00000001;

PORTB = 0;

OPTION_REG = 0x07; // Prescaler (1:256) is assigned to the timer TMR0

TMR0 = 180; // Timer T0 counts from 180 to 255 to create ~20 ms period

INTCON = 0xA0; // Enable interrupt TMR0 and Global Interrupts

do{

if(!SW1){ // Change pulse width when Switch is pressed

Delay_ms(300);

i = i+2;

if(i》23) i=7;

}

}while(1);

}

下载完整的源文件和HEX文件

输出

将HEX文件加载到PIC16F628A微控制器之后,您可以观察伺服控制器的运行情况。观看底部的演示视频,以查看该实验的输出。

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分