加速度计对机器人项目来说是很有价值的附加设备。本文将向您展示一种生成和分析加速数据的方法。
支持信息
加速度计
在一个前一篇文章我介绍了露美Pololu的机器人底盘和定制设计的romi控制PCB。您可以使用以下链接下载完整的原理图和BOM。
RomiRobotControlBoard_schematic_and_BOM.zip
这个PCB包括一个加速计。我选择的部分是ADXL326从模拟设备。它是一个三轴模拟输出设备,从用户的角度来看,它一点也不复杂。正如你所看到的,很少需要外部组件:
唯一涉及到的真正设计工作是选择三个输出电容(C22, C23和C24)的值。每一个这些帽形成一个低通滤波器与内部~32 kΩ电阻;因此,通过选择适当的电容值,您可以根据您的应用程序的需要限制模拟输出的带宽。
从ADXL326获取的表数据表.
我的caps(名义上)是0.022µF,所以根据上面的表格,我的带宽将略高于200hz。
下图展示了ADXL326的x、y和z方向。
图取自ADXL326数据表.
Romi控制PCB的加速度计方向如下:
如果我们将这个方向与数据表和定义的机器人运动方向结合起来在这里,我们可以确定
- 机器人的前进方向对应于负的x轴加速度,
- 反向对应的是x轴正加速度,
- 向右对应的是y轴正加速度,
- 向左对应的是负的y轴加速度。
ADC的
我们将使用EFM8的模数转换器对ADXL326产生的三个模拟加速度信号进行数字化处理。我们将使用完整的14位分辨率和内部生成的2.4 V参考。您可以参考硬件配置文件和ADC.c源文件的ADC配置细节;这些文件,连同所有其他源文件和项目文件,都可以通过点击以下链接下载:
AccelerationData_Source_and_Project_Files.zip
如果你看完整的原理图,你会注意到加速度计输出信号直接连接到ADC输入。不需要抗混叠滤波器带宽限制是通过低通滤波器因为上面所讨论的,我敢肯定,我们不需要一个电压跟随器因为ADC模块selectable-attenuation模块大概包括某种结果在低输出阻抗的电路。
我们将使用ADC的自动扫描功能来收集2400字节的ADC数据。每个样本需要两个字节,我们有三个通道(三个轴),因此我们有(2400/2)/3 = 400个样本每个轴。
传输数据
我们需要把加速度数据拿到电脑上进行可视化和分析。在过去,我使用usb微控制器与自定义Scilab脚本(见这篇文章,包括“支持信息”部分的链接)。然而,我决定转向一个更简单、更通用的系统。前一种方法当然有优势,但它具有限制性(因为您必须使用具有USB功能的微控制器)和复杂性(因为额外的USB固件和所有Scilab开发)。
新方法依赖于雅特(“另一个终端”程序)和Excel。我假设可以使用其他电子表格软件,但这里的说明是针对Excel的。
我欣赏UART通信的简单性,但是计算机不再有串行端口了。对这种情况的最简单的补救是usb到uart转换器;我使用这一个从Pololu。它本质上是CP2104从硅实验室;我可以自己设计,但如果Pololu的售价是5.95美元,那又何苦呢。这个方便的小板子允许我编写固件,就像USB不存在一样——只是发送一个字节,接收一个字节,就像过去的RS-232时代一样。下面的照片显示了Romi控制PCB连接到C2适配器板右边是usb到uart转换器,左边是usb到uart转换器。
注意:如果你从USB供电板,你应该确保你的代码不允许电机被启用。USB端口不是为这种电流吸引而设计的。我建议物理上断开电机,只是为了确定。
当ADC完成1200个样本(每轴400个)时,我们只需将每个字节写出串口,如下所示:
void Transfer_ADCBuffer(unsigned int num_bytes) {unsigned int n;SFRPAGE = UART0_PAGE;SCON0_TI = 0;//确保传输中断标志被清除(n=0;n < num_bytes;n++) {SBUF0 = AutoScan_Memory[n];而(! SCON0_TI);SCON0_TI = 0;} }
ADC被配置为依次从P1.5、P1.6、P1.7、P1.5进行采样,以此类推。
从原理图中可以看到,这将导致数据在内存中的排列如下:z轴、y轴、x轴、z轴、y轴、x轴,等等。ADC配置为大端序,这意味着每个示例将以高字节开始。因此,我们的内存是这样的:
雅特
如果一切正常,则ADC数据将出现在YAT窗口中。以下是你需要做的事情,使它非常容易地检查这些数据,并在Excel中使用它:
- 进入终端->设置,选择“终端类型”为“二进制”。
- 在同一个窗口中,点击“二进制设置”;勾选“Tx和Rx的单独设置”复选框,然后在“Rx”部分的“断开线后”输入“6”。
- 回到主窗口,点击“10”按钮,使数据显示为小数
现在,当您传输数据时,它将出现如下:
这就是我们想要的格式:每一行包含一个数据点,即每个加速度轴的一个双字节样本。
Excel
首先,将YAT数据保存到一个文件中:
现在你可以使用data ribbon上的“From Text”按钮将空格分隔的数据导入Excel中。请注意,此数据块将保持与数据文件的“连接”,因此,要引入新数据,只需使用“刷新”功能(参见下面的视频演示)。
一旦你有了Excel中的原始数据,你可以将其转换为ADC计数和电压(或毫伏)。我把我的工作表设置成这样:
点击放大
在另一张纸上,我有一个从“毫伏”列中提取数据的图表。如果你想使用我的Excel文件,请随意:
Three-Axis_Accelerometer_Data.zip
下面是“自检”输出信号的图(您可以在ADXL326中阅读自检功能数据表).
(最初的上升沿是加速度计启动延迟的结果。)自检使模拟输出假定一个预定值;如果测量到的电压与预期电压对应,就知道加速度计起作用了。由于每个轴的预定值是不同的,自检允许您确认您将样品与正确的轴相关联。
这里是另外两个数据集的图。在第一种情况下,PCB没有移动;在第二个,我用我的手摇动机器人底盘。
下面的视频有助于阐明整个过程:
总结
我们讨论了一个三轴,模拟输出加速度计的硬件实现,我提出了一个直接的方法,将存储的加速度计数据从机器人的微控制器到PC。然后我们将数据移动到Excel中并绘制结果。