lb8820265

个性签名:QQ:252669569

  • 2019-06-22
  • 回复了主题帖: 分高者胜:ST传感器闯天下之驱动移植大赛+骨振动传感器评测

    我还是觉得MEMS与BLE最配,所以我移植的主MCU为:NRF52832 (1)想要申请的板子:          运动和环境传感器开发板X-NUCLEO-IKS01A3 (2)预计移植的驱动:           3D加速度+3D陀螺仪    LSM6DSO           3D磁力计    LIS2MDL           3D加速度    LIS2DW12           气压传感器    LPS22HH               温度传感器    STTS751        

  • 2019-06-18
  • 回复了主题帖: NRF24L01+设置为带数据的ACK功能

    小妖11 发表于 2019-6-14 20:04 请教个问题,我第一次发送时候,发送端接收到的ack中的数据,是我第一次接收时写入的数据,还是接收之前写 ...
    无论什么时候,发送端接收到的ACK数据,都是接收端事先放好的,如果接收端没有事先放数据,那发送端接收的就是一个空的ACK数据。所以你第一次发送数据会受到什么数据和发送端无关,只和接收端在这之前放的什么数据有关。

  • 2019-05-24
  • 回复了主题帖: 颁奖:ADI MEMS传感器开启条件状态监测的新纪元直播活动

    哇,感谢EE,感谢ADI:)

  • 2019-05-10
  • 回复了主题帖: MATLAB APP Designer串口调试工具编写

    viphotman 发表于 2019-5-10 10:03 真不知道matlab还能干这事,最后这个能在windows下独立运行吗;像.exe程序那样?
    可以的,MATLAB可以打包成包含库文件的exe和不包含库文件的exe.

  • 2019-05-09
  • 发表了主题帖: MATLAB APP Designer串口调试工具编写

    本帖最后由 lb8820265 于 2019-5-9 23:11 编辑        前面介绍过使用VC6制作串口调试工具的两种方式:SerialPort类串口,mscomm控件串口。这次介绍使用MATLAT制作串口上位机,为何想用MATLAB,因为MATLAB除了不会生孩子,其他的都会,同时MATLAB也是算法研发者的最爱。        MATLAB在2016版本中加入了APPDesigner模块,可以理解为是一个界面设计模块。在matlab中一直有一个界面设计模块叫做GUIDE,设计出来的界面就像VC6设计的,APP Designer就比较像VS设计出来的。APP Designer的界面跟漂亮,控件元素更多。网上可以搜到很多基于GUIDE的串口代码,却少有APPDesigner设计的。今天就来一步一步展示如何设计出一个串口调试工具。       学习MATLAB最好的方法就是查看帮助,在帮助手册中搜索APP Designer就可以,界面如下:      将帮助看完,会对APP Designer有一个比较全面的了解,让我们开始。打开APP Designer      打开MATLAB-->新建-->APP-->App设计工具,如下: 编辑界面                     打开的界面如下:       页面的功能区很明显,拖入如上图所示的控件,并修改控件的ID,      其中下拉菜单添加如下图所示的端口标志。       其他控件的设置详见源码。添加属性—全局变量        界面切换到代码视图-->编辑器-->属性-->公有属性,系统自带添加properties代码。        在中间添加如下代码:添加私有函数—“接收”回调函数         界面切换到代码视图-->编辑器-->函数-->公有属性,系统自带添加代码。        在中间添加如下代码:        该代码的作用是接收的回调函数。启动初始化函数        启动初始化函数的作用是在程序运行前先运行的一段代码,在设计界面右击-->回调-->添加StartupFcn回调, 如下:        系统添加startupFcn函数,添加如下代码:        代码主要是用来设置变量的初始值,确保串口已经释放。“打开串口”回调        切换到设计视图,在“打开串口”按钮上右击-->回调-->添加回调函数,系统自动添加回调函数。      添加如下所示代码:      代码主要是设置串口参数,串口接收回调函数,UI显示。“发送”回调      在发送按钮上同样添加回调函数如下:     代码主要作用是将发送编辑框中的内容发送出去。演示     用VSPD虚拟两个相连的串口,然后使用另一个串口软件,设置波特率115200。运行APP Designer上的绿色的箭头。然后选择串口,点击“打开串口”灯变绿色。然后相互发送数据如下:      源码见附件。(源码需要在APP Designer中打开,新建-->APP-->App设计工具-->打开)

  • 2019-05-02
  • 回复了主题帖: mpu9250 mpu6050 DMP msp430G2553程序使用SPI和IIC直接读取四元素

    晓哲2019 发表于 2019-4-17 15:50 请问改用9250初始化的时候要做什么改动呢?
    完全一样的,只是9250我也只用到了6轴,磁力计没有用到

  • 回复了主题帖: VL53L0测距芯片试用【ST主题月】

    十一和一百一十 发表于 2019-4-28 11:33 你好,我想问一下我用VL6180的官方API时,VL6180x_RangePollMeasurement()函数一直卡在检测VL6180x_Range ...
    这个很可能是IIC没有通,你先确定IIC是正常通讯的,比如给一个寄存器写入,然后读出

  • 2019-03-22
  • 回复了主题帖: 雷军输掉与董明珠十亿赌局,看来台风还是吹不起猪

    懒猫爱飞 发表于 2019-3-21 13:50 1) 该事件本来就是一个伪命题,大会佬们的把戏,且不说国家禁止赌博,且二佬没有签字画押,一切也只是一 ...
    我记得是小米输了只需要支付格力一元的

  • 回复了主题帖: 电赛又要来拉,来投个票,你参加吗

    2013年参加的,选的是运动控制题目,获得省一等奖和全国二等奖:)

  • 2019-03-08
  • 点评了资料: SD卡封装大全

  • 回复了主题帖: 用自己的写真照片做成风筝来放“合理....”吗?

    内容很不错哦,虽然是转帖,但是DIY精神很棒:)

  • 2019-03-03
  • 回复了主题帖: NRF24L01+设置为带数据的ACK功能

    芳草萋萋 发表于 2019-3-2 22:33 楼主,我想问一下,看你的代码,设置带ACK数据时发送端把中断屏蔽了,不屏蔽的话可以不?当发送端接受到带A ...
    是会有中断信号出现的,可是不知道是24l01没有发出中断信号,或者是单片机没捕捉到中断信号。经常发现接收到数据了,却没有触发中断信号。所以就使用查询的方式,要准确些。

  • 2019-01-28
  • 回复了主题帖: 年会抽中了苹果电脑,离职单位要收回,怎么办?

    本帖最后由 lb8820265 于 2019-1-28 20:47 编辑 这种类似的很常见哦。 有的公司会给员工发工作服,也就是高档西服,据说一万五一套,两年发一次,如果刚发不久就离职,那么要按照一万五折旧来退钱才能辞职。。。还有哦,一般公司离职要办理一个多月,如果想拿完年终奖第二年就不来的那种,需要提前写离职申请,然后妥妥的今年的年终奖大概只有正常的一半

  • 2019-01-21
  • 回复了主题帖: 年终回馈:EEWorld 2018年度最具影响力网友评选

    哇,信息确认,感谢EE,真是中奖有愧,虽然很少管理论坛,但是一定会坚持不断的将满满的干货奉献出来。

  • 2019-01-16
  • 发表了主题帖: 当BLE遇到MEMS——姿态解算

    本帖最后由 lb8820265 于 2019-1-16 23:13 编辑      前面介绍了惯性系统的基础知识,这里来介绍如何使用MEMS传感器进行姿态解算,姿态解算就是使用陀螺仪加速度计算出物体当前的姿态。姿态解算姿态解算是惯性导航基础,还是用提问的方式循序渐进的学习。1.     MEMS加速度计输出的是什么?    先来看看MEMS加速度计的工作原理,加速度计的工艺不同内部结构也不同,但是简单来说可以用一个正方体盒子里面装一个小球的模型来模拟,然后6个面都能检测到压力产生形变,进而转化为电信号,然后压力除以质量就是加速度。    将盒子平放在水平面上(左图),底面就承受着重力加速度G。如果让盒子自由落体(中图),那么底面的加速度就为零。是不是很奇怪呢?不动有加速度G,自由下落却没有加速度,因此加速度输出的就是三个方向的加速度与重力加速度和和。由于有重力加速度的参与,想要直接拿MEMS加速度计的输出值积分来惯性导航的小伙伴要失望了。同样会发现,当盒子45度角放置的时候(右图),两个轴的加速度值相等,因此可是用输出的加速度值来算出物体的角度,但是由于也会测加速度,所以小伙伴也要失望了。但是也不是没有办法,下面会介绍。2.     MEMS陀螺仪输出的是什么?    MEMS陀螺仪输出的是旋转角速度。先来看看MEMS陀螺仪的工作原理,不同的陀螺仪有不同的结构,但是总的来说都是使用科里奥利力。就是旋转体系中进行直线运动的质点受到一种使其偏离直线运动的力。产生这样的力有两个要求,一个是载体要旋转,一个是物体需要相对旋转载体运动。当相对运动不变时,力与载体旋转速度成正比。MEMS陀螺仪为了实现不断地产生运动,普遍使用了类似音叉的结构,像音叉一样来回震动来产生相对运动,当旋转时候音叉将会受到科里奥利力进而转化为电势差。如下图所示。    因此MEMS陀螺仪需要有旋转才会产生科里奥利力,转速越快力越大,静止或者往某个方向运动都不会产生力。因此MEMS陀螺仪输出的是以三个坐标轴为旋转轴的旋转速度。由于静态偏差的存在,想要直接拿陀螺仪输出值积分来计算物体角度的小伙伴可能要失望了,但也不是没有办法,下面会介绍。3.     陀螺仪加速度计如何融合?    前面介绍了使用静态时的加速度计两个轴加速度值的关系可以得出物体的角度,同样使用陀螺仪积分也可以得到角度,它们得到的角度值都各有优缺点。使用加速度计可以通过两个轴的受到的重力加速度值很准确的得出长时间静态时候物体的姿态角度,但是当物体动态时将会受到较大的干扰;使用陀螺仪可以通过积分较为准确的计算出短时间内物体的姿态角度,但是长时间积分的会导致误差积累,导致角度不准确。两者刚好可以长处互补,两者融合后就是玉女剑法双剑合璧了。    将两者进行长处互补就叫做数据融合了,陀螺仪加速度的数据融合就是同时使用两个量计算出角度,只是分配给每个量的权值不同,权值可以不变也可以动态改变。在惯性导航中,这样的类似的融合情况非常的多,例如:    陀螺仪加速度计和磁力计的融合。使用陀螺仪加速度得出的偏航角(Yaw)长时间会漂移,但短时间内响应迅速,磁力计得出的偏航角长时间准确,但是短时间响应慢。    IMU惯导系统和GPS的融合,IMU惯性导航长时间会漂移,但是短时间响应速度,GPS长时间稳定但是短时间响应慢。    IMU惯导系统和GPS和气压计的融合,在高度上GPS测量并不是很准确,所以通常会辅助气压计,气压计响应快但是会受天气等的影响,所以通常会将三者进行融合。    融合算法可以简单的用如下公式表示:Rest(n)= (Racc(n-1) * w1 + Rgyro(n-1) * w2 ) / (w1 + w2)+ (Rest(n-1)- Racc(n-1))*w3    其中Rest表示使用递归的方式获得角度的估计值,Racc表示使用加速度计算出的角度值,Rgyro表示使用陀螺仪计算出的角度值,w1表示对加速计算结果的信任程度(权重),w2表示对陀螺仪计算结果的信任程度。由于加速度计是长时间可靠的,所以通常用加速度计的值与估计值的差积分来使结果准确。这里的w3相当于积分系数。    理论上来说,当转动速度快的时候陀螺仪的积分得出的角度比较可信,当转速比较慢时加速度计得出的角度比较可信,也就是速度快陀螺仪的权重要大,速度慢加速度计的权重要大,这就是变权重的算法,卡尔曼滤波就是这个思路。权重不变的典型融合算法有互补滤波和梯度下降法。4.     如何姿态解算?    前面简单的介绍了使用陀螺仪和加速度计融合可以得较为准确的角度,但这是一轴的,要得到三轴的角度,就需要一定的技巧了,专业名词叫做姿态解算。需要了解旋转矩阵和四元数。旋转矩阵在前文已经介绍了,使用一个三维的矩阵可以表示任意姿态的变化。四元数用在姿态解算上可以说是一个创新,就像电力系统中的DQ变换,只是用另一种形式表示罢了,但是却有了简少了计算量,避免了万向节,方便差值等优点,这里不做详细介绍。欧拉角和四元数组成的旋转矩阵公式分别如下:      姿态解算的算法非常的多,这里用最简单的mahony互补滤波算法为例,介绍姿态解算的通常流程。    代码摘录自原点博士: void MahonyAHRSupdateIMU(float gx, float gy, float gz, float ax, float ay, float az) { float recipNorm; float halfvx, halfvy, halfvz; float halfex, halfey, halfez; float qa, qb, qc; 如果加速计各轴的数均是0,那么忽略该加速度数据。否则在加速计数据归一化处理的时候,会导致除以0的错误。 if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) { 把加速度计的数据进行归一化处理。其中invSqrt是平方根的倒数,使用平方根的倒数而不是直接使用平方根的原因是使得下面的ax,ay,az的运算速度更快。通过归一化处理后,ax,ay,az的数值范围变成-1到+1之间。 recipNorm = invSqrt(ax * ax + ay * ay + az * az); ax *= recipNorm; ay *= recipNorm; az *= recipNorm; 根据当前四元数的姿态值来估算出各重力分量。用于和加速计实际测量出来的各重力分量进行对比,从而实现对四轴姿态的修正。 halfvx = q1 * q3 – q0 * q2; halfvy = q0 * q1 + q2 * q3; halfvz = q0 * q0 – 0.5f + q3 * q3; 使用叉积来计算估算的重力和实际测量的重力这两个重力向量之间的误差。 halfex = (ay * halfvz – az * halfvy); halfey = (az * halfvx – ax * halfvz); halfez = (ax * halfvy – ay * halfvx); 把上述计算得到的重力差进行积分运算,积分的结果累加到陀螺仪的数据中,用于修正陀螺仪数据。积分系数是Ki,如果Ki参数设置为0,则忽略积分运算。 if(twoKi > 0.0f) { integralFBx += twoKi * halfex * (1.0f / sampleFreq); integralFBy += twoKi * halfey * (1.0f / sampleFreq); integralFBz += twoKi * halfez * (1.0f / sampleFreq); gx += integralFBx; // apply integral feedback gy += integralFBy; gz += integralFBz; } else { integralFBx = 0.0f; integralFBy = 0.0f; integralFBz = 0.0f; } 把上述计算得到的重力差进行比例运算。比例的结果累加到陀螺仪的数据中,用于修正陀螺仪数据。比例系数为Kp。 gx += twoKp * halfex; gy += twoKp * halfey; gz += twoKp * halfez; } 通过上述的运算,我们得到了一个由加速计修正过后的陀螺仪数据。接下来要做的就是把修正过后的陀螺仪数据整合到四元数中。 gx *= (0.5f * (1.0f / sampleFreq)); gy *= (0.5f * (1.0f / sampleFreq)); gz *= (0.5f * (1.0f / sampleFreq)); qa = q0; qb = q1; qc = q2; q0 += (-qb * gx – qc * gy – q3 * gz); q1 += (qa * gx + qc * gz – q3 * gy); q2 += (qa * gy – qb * gz + q3 * gx); q3 += (qa * gz + qb * gy – qc * gx); 把上述运算后的四元数进行归一化处理。得到了物体经过旋转后的新的四元数。 recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3); q0 *= recipNorm; q1 *= recipNorm; q2 *= recipNorm; q3 *= recipNorm; 将四元数转化为欧拉角 roll =  atan2f(2*q2*q3 + 2*q0*q1, -2*q1*q1 - 2*q2*q2 + 1)*57.3;    pitch =  asinf(2*q1*q3 - 2*q0*q2)*57.3;                                                          yaw  =  -atan2f(2*q1*q2 + 2*q0*q3, -2*q2*q2 -2*q3*q3 + 1)*57.3; }复制代码     整个代码的流程图如下:    代码的流程图结合代码可以很清晰的看懂代码,这里对流程图进行一些解释。1.     加速度计值的归一化    所谓的归一化就是将每个轴的值都除以三个轴数据的平方和,将三维向量转化为单位向量,作用后面介绍。2.     四元数获取重力分量    首先是需要知道如果获取重力分量,重力分量的获取实际上就是四元数组成的旋转矩阵乘以重力分量也就是旋转矩阵的第三列,    代码内容就是这么来的。3.     归一化后的重力加速度和四元数的重力分量进行叉乘    首先要明白叉乘的意义,     将矩阵相乘展开就是代码中的内容。4.     叉乘的结果为何可以用来补偿陀螺仪的角速度    两个向量的叉积得到的结果是两个向量的模与他们之间夹角正弦的乘积a×v=|a||v|sinθ,加速度计测量得到的重力向量和预测得到的机体重力向量已经经过单位化,因而它们的模是1,也就是说它们向量的叉积结果仅与sinθ有关,当角度很小时,叉积结果可以近似与角度成正比。感叹,这里真是太巧妙了!    叉乘的结果就是加速度的重力分量与预测角度的重力分量间的角度差。因为加速度计是在长时间下是可靠的,所以长时间下预测的角度肯定要与加速度计的重力分量重合,这样才是准确的。通过陀螺仪的角速度加上对叉乘结果的比例积分运算进行修正,最后得出正确的角速度。所以互补滤波法得出的角度曲线越靠近正确结果修正的越慢。5.     转化为四元数    前面得到了修正后的角速度值,这里需要将修正后的角度数据积分然后再次变成四元数,思路就是四元数自加然后加上与角速度相关的四元数微分方程。    这里直接给出四元数与角速度相关的微分运算公式:    矩阵运算后就是代码中的内容。6.     四元数转化为欧拉角    由于四元数并不直观,通常还是会将四元数转化为欧拉角,前文中给出了有欧拉角和四元数组成的旋转,将四元数旋转矩阵第三列前两行元素相除可以得到α 角,将矩阵第三行前两列元素相除可以得到γ角,第三行第三列元素可以直接得到β角。所以四元数转化为欧拉角的公式如下:    也就是代码中的内容,乘以57.3是因为公式得出的是弧度值,需要乘180/π转为角度。 此内容由EEWORLD论坛网友lb8820265原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-01-10
  • 加入了学习《机器人学》,观看 机器人学导论

  • 2018-12-12
  • 回复了主题帖: DIY可追踪太阳的太阳能电池板

    lb8820265 发表于 2018-12-11 23:52 楼主怎么判断哪个方向光强度大的呀?是多个光传感器做比较吗?还是不断的转动?
    太阳光和灯不一样,是平行光哦,如果光敏二极管也是平行放的那么阻值会一样的。

  • 回复了主题帖: 该源代码经本次测试后,可以正常运行。可以在MATLAB中实现机械臂的轨迹规划

    楼主这个很有趣,可以多加些图文解释哦,另外是不要机器人工具箱?

  • 2018-12-11
  • 回复了主题帖: DIY可追踪太阳的太阳能电池板

    楼主怎么判断哪个方向光强度大的呀?是多个光传感器做比较吗?还是不断的转动?

  • 回复了主题帖: 小米IoT模组wifi版本只需9.99元,你最想把它用在什么上?

    哈哈,果然WIFI才是IOT主要青睐的,BLE都快活不下去了

最近访客

< 1/6 >

统计信息

已有355人来访过

  • 芯币:1489
  • 好友:16
  • 主题:69
  • 回复:381
  • 课时:--
  • 资源:21

留言

你需要登录后才可以留言 登录 | 注册


安拉木 2018-12-30
网卡了,点了几下没反应,发了很多留言,不好意思了
查看全部