FPGA|CPLD|ASICwilliam hill官网
直播中

王鸿

8年用户 740经验值
擅长:电源/新能源 嵌入式技术 光电显示
私信 关注
[经验]

【锆石A4 FPGA试用体验】模量实时监测与运算

本帖最后由 超级开发板 于 2017-10-8 09:56 编辑

此帖将介绍基于硬件描述语言的模量实时监测与运算,采用性能卓越的锆石A4 FPGA开发板 085641ztwhyjmhnymlrwch.jpg
材料预备:
锆石 A4 FPGA开发套件一套,
运动模量检测模块一枚,
ttl转u***编程器一个(如果您的运动模量检测装置可直接连接电脑烧录内容,此器物可略去),
杜邦线若干,
至少有一个手是能动的操作人员一名
电脑或x86开发板一台
带有VGA接口的电视机或显示屏或投影机一台

上一节中,我们讲解了VGA显示的方法,
这一节,我们主要来讲解捕捉交互模量信号与识别的方法。
首先,我们来确定模量检测方案,就是如下图所示的模量捕捉模块,

20170927_234835.jpg


为了让大家更直观的认识模量捕捉模块的物理采集方式构造,我们来看下面这张手绘的构造简化示意图,

首先,我们来看看普通的重力感应,这个稍稍也能感应左右摇晃和移动

849689.jpg


这个上下左右,偶尔也能碰到左下右下,为了使精度更高,可以更多触角,三维下应该是个刺猬状,下图是平面剖视图状态:
zl.jpg
,然后这一模型的模量在普通状态下每个角为1或0,如果想检测力度,有两个方法,一个是别用钢珠,用水银,利用水银的张力检测电阻值变化,因为加速度会使接触面改变,不过它的导电性能好,阻值变化不大,如果不是很精密的设备不容易检测,这样就要设计变更了,上面这图可以长长短短,或者简化一下,如下图所示,

jsd.jpg

加速冲击力度越大,越到里面的探针都能触碰到,
然后我们考虑这检测模块装到手上后,由于我们人类的手如图万向螺杆般转动,比五轴加工中心的活动能力都高,模块并不是直上直下或者平整的移动,模块还可能发生倾斜等,我们开发者在测试中,可能刻意去保持它的平衡,然而一来这样太累,二来如果不是开发者用就会感觉不适应,我们要让消费者直接去使用它们而不必了解其中原理,于是我们需要有一个稳定的量去检测倾斜,然后把加速度的方向配合这个量算进去,而这个稳定的量就是重力了,重力在地表保持垂直向下,这样,如果我们检测到重力为左了,加速度的下其实是右,其实这个轴量不能直接称为下,这儿只是方便大家理解,这个下只有重力向下,也就是模块平放没有倾斜时才是下。

所以这样一来,我们需要采用一个有加速度计与重力感应的模块了,
这样,算法也大致确定下来了,就是把重力的倾斜偏移量累计到加速度的上下前后左右中,这样就能知道动了哪边,然后,由于还存在平面旋转,所以,要不就多几个轴量,要不就加个向前校准功能。为了方便使用,我们多加几个轴量,使交互感最优化,当然,编程难度跟设备成本也都增加了,不过换来直接无忧无虑完美使用的用户体验,这一点点代价相当值得。


锆石A4开发板的处理速度很快,模量多几个轴运算速度依旧是杠杠的。
20170927_234526.jpg
模量检测的参考代码如下,如果你们模块不同稍稍修改即可:
  1. x_n_b[0] = x_aposteriori_k[0];         //角速度
  2.   x_n_b[1] = x_aposteriori_k[1];
  3.   x_n_b[2] = x_aposteriori_k[2];
  4.   b_x_aposteriori_k[0] = x_aposteriori_k[6];  // 加速度
  5.   b_x_aposteriori_k[1] = x_aposteriori_k[7];
  6.   b_x_aposteriori_k[2] = x_aposteriori_k[8];
  7.   z_n_b[0] = x_aposteriori_k[9];        //磁力计
  8.   z_n_b[1] = x_aposteriori_k[10];
  9.   z_n_b[2] = x_aposteriori_k[11];
  10.   for (i = 0; i < 3; i++) {
  11.     c_a[i] = 0.0F;
  12.     for (i0 = 0; i0 < 3; i0++) {
  13.       c_a[i] += a[i + 3 * i0] * b_x_aposteriori_k[i0];
  14.     }

  15.     d_a[i] = 0.0F;
  16.     for (i0 = 0; i0 < 3; i0++) {
  17.       d_a[i] += b_a[i + 3 * i0] * z_n_b[i0];
  18.     }

  19.     x_apriori[i] = x_n_b[i] + dt * wak[i];
  20.   }

  21.   for (i = 0; i < 3; i++) {
  22.     x_apriori[i + 3] = wak[i];
  23.   }

  24.   for (i = 0; i < 3; i++) {
  25.     x_apriori[i + 6] = c_a[i];
  26.   }

  27.   for (i = 0; i < 3; i++) {
  28.     x_apriori[i + 9] = d_a[i];
  29.   }
状态转换偏移矩阵:
afeaab19d7dcb39fbf7db890200f2b46.jpg

这是编译好的固件,直接往模块烧录,然后直接连接至锆石FPGA开发板即可收到模量信号
F0moliang.rar (6.88 MB)
(下载次数: 0, 2017-9-16 17:23 上传)


然后锆石板子上用这个固件:
a4io.rar (2.88 MB)
(下载次数: 0, 2017-9-16 17:29 上传)

直接将模量换算成图形化显示输出


下一篇:互动实时检测威廉希尔官方网站


回帖(1)

王鸿

2017-9-6 22:16:14
蹄子烫到,正在迅速恢复中
举报

更多回帖

发帖
×
20
完善资料,
赚取积分