在本教程中,我们将使用力传感器,Arduino Uno和伺服电机开发电路。这将是一个伺服控制系统,其中伺服轴的位置由力传感器上的重量决定。在继续之前,让我们讨论一下伺服和其他组件。
伺服电机用于需要精确的轴运动或位置的场合。不建议将这些用于高速应用。这些建议用于低速,中等扭矩和精确的位置应用。这些马达用于机械手臂,飞行控制和控制系统。伺服电机还用于某些打印机和传真机。
伺服电机有不同的形状和尺寸。伺服电机主要有电线,一个用于正电压,另一个用于接地,最后一个用于位置设置。红线连接到电源,黑线连接到地,黄线连接到信号。
伺服电机是直流电机,位置控制系统和齿轮的组合。直流电机轴的位置由伺服中的控制电子设备根据SIGNAL引脚的PWM信号的占空比进行调整。简单地说,控制电子设备通过控制直流电动机来调节轴的位置。有关轴位置的数据通过SIGNAL引脚发送。通过伺服电机的信号引脚以PWM信号的形式发送到控制器的位置数据。
PWM(脉冲宽度调制)信号的频率可以根据伺服电机的类型而变化。这里重要的是PWM信号的占空比。根据该占空比,控制电子装置可调节轴。
如下图所示,要使轴移动到9o钟,“打开比例”必须为1 / 18.ie。在18ms信号中,“开启时间”为1毫秒,“关闭时间”为17毫秒。
要将轴移动到12o时钟,信号的接通时间必须为1.5ms,断开时间应为16.5ms。
该比率由伺服系统中的控制系统解码,并根据该比率调整位置。
这里的PWM是使用ARDUINO UNO生成的。
因此,到目前为止,我们可以通过更改UNO生成的PWM信号的占空比来控制SERVO MOTOR轴。
现在让我们谈谈力传感器或重量传感器。
为了将FORCE传感器与ARDUINO UNO接口,我们将使用arduno uno中的8位ADC(模数转换)功能。
FORCE传感器是一种传感器,当在表面施加压力时会改变其电阻。力传感器有不同的尺寸和形状。
我们将使用较便宜的版本之一,因为我们在这里不需要太多的准确性。FSR400是市场上最便宜的力传感器之一。FSR400的图片如下图所示。
现在需要注意的是,FSR 400沿长度方向很敏感,力或重量应集中在传感器眼睛中部的迷宫中,如图所示。
如果在错误的时间施加力,则设备可能会永久损坏。
要知道的另一件事是,传感器可以驱动高范围的电流。因此,在安装时请记住驱动电流。此外,传感器的力极限为10牛顿。因此,我们只能施加1kg的重量。如果施加的重量大于1Kg,则传感器可能会出现一些偏差。如果增加超过3Kg。传感器可能会永久损坏。
如前所述,该传感器用于感应压力变化。因此,当将重量施加在FORCE传感器的顶部时,电阻会急剧变化。FS400超重的电阻如下图所示:
如上图所示,传感器两个触点之间的电阻随重量而减小,或者传感器两个触点之间的电导率增加。
纯导体的电阻由下式给出:
哪里,
p-导体电阻率
l =导体长度
A =导体面积。
现在考虑电阻为“ R”的导体,如果在导体顶部施加一定的压力,则由于压力的作用,导体上的面积会减小,导体的长度会增加。因此,根据公式,导体的电阻应增加,因为电阻R与面积成反比,也与长度l成正比。
因此,对于处于压力或重量下的导体,导体的电阻会增加。但是与总阻力相比,这种变化很小。为了进行重大更改,许多导体被堆叠在一起。
这就是上图所示的力传感器内部发生的情况。仔细观察,可以看到传感器内部有多条线。这些线中的每条线都代表一个导体。传感器的灵敏度以导体号表示。
但是在这种情况下,电阻将随着压力而减小,因为此处使用的材料不是纯导体。这里的FSR是坚固的聚合物厚膜(PTF)器件。因此,这些不是纯导体材料设备。它们由一种材料制成,随着施加到传感器表面的力的增加,电阻会降低。
该材料具有FSR曲线所示的特性。
除非我们能读懂它们,否则这种抵抗力的改变是没有用的。控制器只能读取电压的机会,因此,我们将使用分压器电路,从而可以得出电阻随电压变化的变化。
分压器是一个电阻电路,如图所示。在这种电阻网络中,我们有一个恒定电阻和另一个可变电阻。如图所示,R1是恒定电阻,R2是用作电阻的力传感器。
分支的中点被测量。随着R2的变化,我们在Vout有了变化。因此,有了这个电压,电压会随重量而变化。
现在要注意的重要一点是,控制器用于ADC转换的输入低至50µAmp。基于电阻的分压器的这种负载效应非常重要,因为从分压器的Vout汲取的电流会增加误差百分比,因此现在我们不必担心负载效应。
现在,当在力传感器上施加力时,分压器端的电压会随着连接到UNO的ADC通道而改变此引脚,每当传感器上的力发生变化时,我们将获得与UNO的ADC不同的数字值。
该ADC数字值与PWM信号的占空比匹配,因此我们具有与施加在传感器上的力有关的SERVO位置控制。
组件
硬件: UNO,电源(5v),1000uF电容器,100nF电容器(3个),100KΩ电阻,SERVO MOTOR(SG 90),220Ω电阻,FSR400力传感器。
软体: Atmel Studio 6.2或aurdino每晚。
电路图和工作说明
下图显示了通过力传感器控制伺服电机的电路图。
传感器两端的电压不是完全线性的。会很吵。为了滤除噪声,如图所示,在分压器电路中的每个电阻器上放置一个电容器。
在这里,我们将采用分压器提供的电压(线性表示重量的电压),并将其馈入Arduino Uno的ADC通道之一。转换后,我们将获取该数字值(表示权重)并将其与PWM值关联,并将此PWM信号提供给SERVO电机。
因此,有了权重,我们就有了一个PWM值,该PWM值根据数字值改变其占空比。数字值越高,PWM的占空比就越高。因此,对于较高占空比的PWM信号,伺服轴应按照简介中提供的数字到达最右边或最左边。
如果重量较轻,我们将具有较低的PWM占空比,并且按照介绍中的数字,伺服应达到最右边。
这样,我们就可以通过WEIGHT或FORCE实现SERVO位置控制。
为此,我们需要在程序中建立一些指令,我们将在下面详细讨论它们。
如图所示,ARDUINO有六个ADC通道。在这些情况下,它们中的任何一个或全部都可用作模拟电压的输入。UNO ADC的分辨率为10位(所以(0-(2 ^ 10)1023)中的整数值)。这意味着它将映射0到5伏之间的输入电压到0到1023之间的整数。 (5/1024 = 4.9mV)每单位。
在这里,我们将使用UNO的A0。我们需要知道一些事情。
|
首先,Arduino Uno ADC通道的默认参考值为5V。这意味着我们可以在任何输入通道上为ADC转换提供5V的最大输入电压。由于某些传感器提供的电压范围为0-2.5V,使用5V基准电压时,我们获得的精度较低,因此我们有一条指令使我们能够更改该基准值。因此,对于更改参考值,我们有(“ analogReference();”),现在将其保留为。
默认情况下,我们获得的最大板载ADC分辨率为10位,可以使用指令(“ analogReadResolution(bits);”)更改此分辨率。在某些情况下,此分辨率更改可能会派上用场。现在,我们将其保留为。
现在,如果将上述条件设置为默认值,我们可以通过直接调用函数“ analogRead(pin);”从通道“ 0”的ADC读取值,这里的“ pin”代表我们连接模拟信号的引脚,在这种情况下将为“ A0”。ADC的值可以取为整数,例如“ int SENSORVALUE = AnalogRead(A0); ”,则该指令会将ADC之后的值存储在整数“ SENSORVALUE”中。
UNO的PWM可以在PCB板上标为“〜”的任何引脚上实现。UNO中有六个PWM通道。我们将使用PIN3作为我们的目的。
AnalogWrite(3,VALUE); |
从上述情况我们可以直接在相应的引脚上获得PWM信号。括号中的第一个参数用于选择PWM信号的引脚号。第二个参数用于写入占空比。
可以将Arduino Uno的PWM值从0更改为255。将最低“ 0”更改为最高“ 255”。当占空比为255时,我们将在PIN3上获得5V。如果占空比为125,则PIN3上将获得2.5V。
现在让我们谈谈伺服电动机的控制,Arduino Uno具有一项功能,使我们能够通过仅提供度值来控制伺服位置。假设我们希望伺服为30,则可以直接在程序中表示该值。SERVO头文件在内部负责所有占空比的计算。您可以在此处了解有关使用arduino进行伺服电机控制的更多信息。
现在sg90可以从0-180度移动,我们的ADC结果为0-1024。
因此ADC约为伺服位置的六倍。因此,通过将ADC结果除以6,我们将获得大约SERVO手位置。因此,我们有一个PWM信号,其占空比随WEIGHT或FORCE线性变化。这被提供给伺服电机,我们可以通过力传感器来控制伺服电机。