黄 健, 吕林涛, 范 晖
(西京学院,陕西 西安 710123)
自动循迹是智能车要解决的一个技术问题,近年来,研究最多的是黑白线循迹,即沿着贴有黑、白线的跑道行驶[1~3],但这种方法受自然光的影响较大,当自然光比较强时,很难区分黑白线。基于此,本文提出了采用细铁丝为跑道(因铁丝受环境影响较小),使小车沿着铁丝行驶。对铁丝的检测,即对金属的检测。早期的金属检测采用模拟电路,检测输出的也是模拟信号,因此其抗干扰能力、精度都较低。本文采用新型数字电感传感器LDC1614,为4通道金属检测传感器,具有I2C接口,可方便与各种微处理器相连。输出28位的数字量可实现对金属物高分辨率、高精度检测。
系统设计框图如图1所示。主控采用STM32F103ZET6[4,5]。LDC1614将采集到的数据通过I2C串行总线传送给STM32,STM32根据LDC1614中2个通道传感器A和B采集的数字量判断铁丝的位置,控制小车的行驶。1.44 in(1in=2.54 cm)TFT真彩屏作为显示设备,用于显示A,B传感器的数字量和时间等信息。
图1 系统框图
LDC1614原理如图2所示,1脚为SCL,是I2C总线中的时钟信号线。2脚是SDA,是I2C总线中的数据线,分别连接到STM32的PE4和PE5引脚上,PE4和PE5作为普通的I/O口,采用模拟I2C的方式与LDC1614进行数据传送,为了保证传输的可靠性,在该引脚上均接有10kΩ的上拉电阻器。LDC1614采用3.3V供电。图中LDC1614的9脚IN0A和10脚IN0B是IN0输入通道;11脚IN1A和12脚IN1B是IN1输入通道,这2个通道分别连接自制电感线圈和电容器,构成LC谐振电路,通过电涡流原理检测金属[6,7]。
图2 STM32与LDC1614连接
自制线圈可通过手工绕制或者在Altium Design中绘制,然后加工而成,直径达到了4 cm。线圈相当于电感,给该电感配置一个合适的电容值。当外部有金属物体时,就会产生LC谐振。LC的谐振频率通过式(1)计算
Fsen=1/3×Fex/Fcnt×RT
(1)
式中Fsen为LC谐振频率;Fex为外部时钟基准频率,采用LDC1614内部晶振产生,取值为4MHz;Fcnt为LDC1614内部计数器值;RT为LDC1614内部寄存器设置的响应时间。对式(1)两边分别求倒数,并适当变化,有
RT×(1/Fsen)=3×Fcnt×(1/Fex)
(2)
式中 1/Fsen为LC谐振周期;1/Fex为基准时钟周期。式(2)表明在RT个LC谐振周期内,使用LDC1614的Fcnt计数器记录基准时钟的个数来推算LC的谐振频率。
根据电涡流原理,要检测细小的金属,必须要产生足够大的涡流,就必须增大电感量L,通过多次实验,绘制了直径为4 cm的电感线圈,线的粗细为0.1 mm,电感量为0.250 mH,与其匹配的电容值的大小为2.5 nF。对金属的检测距离达到3 cm。若要提高检测距离,可适当加大电感量和电容值。
电机TB6612与STM32的连接如图3所示。
图3中AIN1,AIN2,PWMA控制1路电机,对应电机连接端是AO1和AO2; BIN1,BIN2,PWMB控制2路电机,对应电机连接端是BO1和BO2; 可将AIN1,AIN2,PWMA连接到对应的STM32的I/O口,PWMA引脚产生对应的PWM波形,用于电机调速。对应的真值表如表1。
图3 TB6612与STM32的连接
输入AIN1AIN2PWMA输出AO1AO2电机动作HHLLL制动HLHHL正转LHHLH反转LLLLL制动
当电机全速运行时,PWMA输出高电平,要调整速度时,PWMA输出不同占空比的方波。另一路电机BIN1,BIN2,PWMB,BO1,BO2的控制逻辑与表1类似。
显示电路设计如图4所示。
图4 TFT显示电路设计原理
为提高显示屏刷屏速度,采用STM32F103ZET6的硬件SPI1接口与显示屏屏相连。其中SCLK连接到PB3(SPI1_SCLK),DI连接到PB5(SPI2_MOSI),CS连接到PB12(SPI2_NSS)。其余RST为复位信号,GND共地,VCC接3.3 V。
软件编程时,首先对I2C、定时器、SPI接口进行初始化,然后通过I2C接口循环采集LDC1614的金属探测值。为了使检测值稳定、可靠,共循环采集50次,进行冒泡排序,去掉最大值和最小值各10个,用剩下的30个求均值,并将结果送给1.44 in TFT屏显示。LDC1614连接2只传感器,假设左边的传感器为A,右边的传感器为B。小车行驶时,将铁丝放在传感器A和B的中间,当铁丝偏向左边时,A传感器的值增大,控制小车右转;当铁丝偏向右边时,B传感器的值增大,控制小车左转;当铁丝在A,B中间时,A,B传感器的值相等,小车直走。小车的行驶通过TB6612直流电机驱动。按照表1所述的真值表控制小车的前进、后退、左转、右转。
图5给出了其读时序。图中SCL是时钟信号,SDA是数据线。对LDC1614进行读操作时,首先发送所读单元地址,然后分别读出高8位和低8位数据[8~10]。LDC1614双通道的地址寄存器的映射关系如表2所示。
图5 I2C读时序
地址功能描述0X00通道0高16位数据0X01通道0低16位数据0X02通道1高16位数据0X03通道1低16位数据0X7F设备ID号(默认值0X3055)
表2中,按照图5所示的时序,读写0X00和0X01的高16位数据和低16位数据,将其组合成通道0对应的32位数据,通过和0X0FFFFFFF进行“与”运算得到28位有效数据。通过读写0X02和0X03地址得到通道1的28位有效数据。初始化时,为了验证I2C时序的正确性,可通过读写设备ID号实现,若读到的ID号是0X3055,则说明I2C读写时序正确,初始化成功;否则,调试程序。
测试时的跑道如图6所示。测试时,为了增加难度,在转弯处设置了弯道。小车起始位置处于2 m直道的正中心,途经6个弯道,弯道圆弧的半径均为20 cm。最后再回到起点处,顺时针行驶一圈。表3列出了细铁丝位置与传感器的测量值之间的对应关系。
图6 测试场地
测试时,首先将细铁丝放置在传感器A和B的自制线圈的正中心。假设通道0所对应的传感器为A,安装在小车的左边。通道1所对应的传感器为B,安装在小车的右边。当小车按顺时针方向在直道上行驶时,当细铁丝靠近传感器A时,传感器A的测量值降低,传感器B因为远离铁丝,所以其值不变,此时控制小车右转,直至左、右传感器采集值相同为止;反之,细铁丝靠近传感器B时,传感器B的测量值降低,传感器A因为远离铁丝,所以其值不变,此时控制小车左转,直至左、右传感器采集值相同为止。当在弯道行驶时,情况比较复杂,细铁丝靠近的一端的传感器值降低比较快,此时控制小车向传感器的值增大的一方旋转,直至左右两只传感器的测量值接近为止,然后控制小车直走。
表3 细铁丝位置与传感器测量值(数字量)之间对应关系
本文设计了一种能够沿着细铁丝行驶的智能小车,采用新型LDC1614数字电感传感器探测金属,配置适当的电感线圈和电容,可实现对细铁丝的检测,检测距离接近3cm。由于LDC1614是双通道传感器,恰好可以实现对一根细铁丝的检测和循迹。加入适当的软件滤波算法,可使数据处理变得更加稳定、可靠。本设计为智能小车的循迹增加了一种新的思路和方法,克服了光电传感器受强光影响比较大的缺点,可应用在灰尘、污垢、油和潮湿等恶劣环境中,具有一定的实用价值。