在本教程中,我们将使FLEX传感器与ATMEGA8微控制器接口。在ATMEGA8中,我们将使用10位ADC(模数转换)功能来完成这项工作。现在,ATMEGA中的ADC不能接受超过+ 5V的输入。
什么是柔性传感器?
甲FLEX传感器是当它的形状改变而改变其电阻的换能器。如下图所示。
该传感器用于感应线性变化。因此,当FLEX传感器弯曲时,电阻会急剧弯曲。如下图所示。
现在,为了将这种电阻变化转换为电压变化,我们将使用分压器电路。在这种电阻网络中,我们有一个恒定电阻和另一个可变电阻。如下图所示,R1是恒定电阻,R2是充当电阻的FLEX传感器。分支的中点被测量。当电阻R2变化时,Vout随之线性变化。因此,有了这个电压,它随线性变化。
现在要注意的重要一点是,控制器用于ADC转换的输入低至50µAmp。基于电阻的分压器的这种负载效应非常重要,因为从分压器的Vout汲取的电流会增加误差百分比,因为现在我们不必担心负载效应。
我们将使用两个电阻器并形成一个分压器电路,以便对于25V的Vin,我们得到5V的Vout。因此,我们要做的就是在程序中将Vout值乘以“ 5”以获得真实的输入电压。
所需组件
硬件: ATMEGA8,电源(5v),AVR-ISP编程器,JHD_162ALCD(16x2LCD),100uF电容器,100nF电容器(5个),100KΩ电阻。
软件: Atmel Studio 6.1,Progisp或Flash Magic。
电路图和工作说明
ATMEGA8的PORTD电路连接到数据端口LCD。在16x2 LCD中,如果有背光,则全部有16个引脚,如果没有背光,则有14个引脚。一个人可以给背光灯供电或离开。现在,在14个引脚中,有8个数据引脚(7-14或D0-D7),2个电源引脚(1&2或VSS&VDD或gnd&+ 5v),第三个用于对比度控制的引脚(VEE控制字符的粗细)如图所示)和3个控制引脚(RS&RW&E)。
在电路中,您可以观察到我只接了两个控制引脚。对比度位和READ / WRITE不经常使用,因此它们可以接地。这使LCD处于最高对比度和读取模式。我们只需要控制ENABLE和RS引脚即可相应地发送字符和数据。
与ATmega8的LCD连接如下:
PIN1或VSS接地
PIN2或VDD或VCC至+ 5v电源
PIN3或VEE到地面(为初学者提供最大对比度)
PIN4或RS(寄存器选择)到uC的PB0
PIN5或RW(读/写)接地(将LCD置于读模式可简化用户的通信)
PIN6或E(启用)到uC的PB1
uC的PIN7或D0至PD0
uC的PIN8或D1至PD1
uC的PIN9或D2至PD2
uC的PIN10或D3至PD3
uC的PIN11或D4至D4
uC的PIN12或D5至PD5
uC的PIN13或D6至PD6
uC的PIN14或D7至PD7
在电路中,您可以看到我们使用了8位通信(D0-D7),但这不是强制性的,我们可以使用4位通信(D4-D7),但是使用4位通信程序变得有点复杂,因此我们只使用了8位通讯。(也请查看本教程:16x2 LCD与AVR微控制器接口)
因此,仅从上表中观察,我们就将LCD的10针连接到控制器,其中8针为数据针,而2针为控制针。
R2两端的电压不是完全线性的。会很吵。为了滤除噪声电容器,如图所示,在分压器电路中的每个电阻器之间放置了电容器。
1K电位器用于调整ADC的精度。现在让我们讨论一下ATMEGA8的ADC。
在ATMEGA8中,我们可以为PORTC的四个通道中的任何一个提供模拟输入,因为选择的是相同的通道都没有关系,我们将选择PORTC的通道0或PIN0。
在ATMEGA8中,ADC的分辨率为10位,因此控制器可以检测到Vref / 2 ^ 10的最小变化,因此,如果基准电压为5V,则每5/2 ^ 10 = 5mV,我们得到一个数字输出增量。因此,对于输入中的每5mV增量,数字输出中的增量为1。
现在我们需要根据以下条件设置ADC的寄存器,
1.首先,我们需要在ADC中启用ADC功能。
2.这里将获得用于ADC转换的最大输入电压为+ 5V。因此我们可以将ADC的最大值或基准设置为5V。
3.控制器具有触发转换功能,这意味着ADC转换仅在外部触发之后发生,因为我们不希望将ADC的寄存器设置为在连续自由运行模式下运行。
4.对于任何ADC,转换频率(模拟值到数字值)和数字输出的精度成反比。因此,为了获得更好的数字输出精度,我们必须选择较小的频率。对于正常的ADC时钟,我们将ADC的预售设置为最大值(2)。由于我们使用的是1MHZ的内部时钟,因此ADC的时钟为(1000000/2)。
这是我们开始使用ADC所需了解的仅有的四件事。
以上所有四个功能均由两个寄存器设置:
红色(ADEN):必须将该位置1以启用ATMEGA的ADC功能。
BLUE(REFS1,REFS0):这两位用于设置参考电压(或我们将要提供的最大输入电压)。由于我们希望参考电压为5V,因此应通过下表设置REFS0。
黄色(ADFR):必须将该位置1,ADC才能连续运行(自由运行模式)。
PINK(MUX0-MUX3):这四个位用于告知输入通道。由于我们将使用ADC0或PIN0,因此无需像表中那样设置任何位。
棕色(ADPS0-ADPS2):这三个位用于设置ADC的预分频器。由于我们使用的是2的预分频器,因此我们必须设置一位。
暗绿色(ADSC):该位置1使ADC开始转换。当我们需要停止转换时,可以在程序中禁用该位。
与ATmega8相连的FLEX传感器在下面给出的C代码中逐步说明。