2020大创笔记(二)

主要记录抄代码的心得体会
(读书人的事儿,怎么能叫抄呢!)

文章目录

  • 2020大创笔记(二)
    • 一、MPU6050数据的读取
    • 二、内部定时器2
    • 三、一阶互补滤波算法
    • 四、位置式/增量式PID算法

一、MPU6050数据的读取

Wire库:https://www.arduino.cc/en/Reference/Wire
利用IIC总线实现通信:
(1)初始化MPU6050

void setMPU()
{
// 设置电源管理方式 power management_1Wire.beginTransmission(0x68);Wire.write(0x6b);Wire.write(0);Wire.endTransmission();// 设置角速度分辨率 GYRO_CONFIGWire.beginTransmission(0x68);Wire.write(0x1b);Wire.write(0);Wire.endTransmission();// 设置线加速度分辨率 ACCEL_CONFIG    Wire.beginTransmission(0x68);Wire.write(0x1c);Wire.write(0);Wire.endTransmission();
}

(2)从MPU6050读数据

float acc[3];
void setup()
{......Wire.begin();getData(acc);......
}void getData(float acc[])
{static float data[20];Wire.beginTransmission(0x68); // 通信部分夹在beginTransmission()和  endTransmission之间Wire.write(0x3b);Wire.requestFrom(0x68,14);while(Wire.available()<14); // 等待14帧传送完Wire.endTransmission();for(int i = 0;i <= 13;i ++){data[i] = Wire.read()<<8|Wire.read();}
}

这个读取数据的方法和GY-30数据光强传感器的读取方法是一样的,要用Wire.requestFrom()向主机要数据,然后用左移之后按位与,将两字节一次性读出来。
(3)GY-30数字光强传感器

int BH1750address = 0x23;// 主设备地址
int i;// 读取缓存区数据的计数器
byte buff[2];// 用来存储向主设备索取的两个字节void BH1750_int(int address)
{Wire.beginTransmission(address);Wire.write(0x10);Wire.endTransmission();
}int BH1750_read(int address)
{int i = 0;Wire.beginTransmission(address);Wire.requestFrom(address,2);// 从元件手册可以看到,每次通讯发送两个字节,组成一个16位二进制数while(Wire.available()){buff[i] = Wire.read(); // 每次读一个字节i++; }Wire.endTransmission();return i;
}

二、内部定时器2

MsTimers2.h库:https://playground.arduino.cc/Main/MsTimer2/

参考Atmel328P的数据手册,可以发现它将定时器2专门列了一章进行讲解。就像51单片机的方式2一样,Arduino定时器2也可以自动重装,相比之下,Arduino定时器是给出定时时长,不用计算定时器初值,非常方便。

如上图示,在使用MsTimer2库函数的时候,需要着重注意其中断服务程序的声明格式:不带参数的,返回值为void类型的中断服务程序。这一点要格外注意。
和51单片机编程一样,在进入中断的时候要保护现场和断点。写这篇博客的时候我还没有安装破解版的VS2017和Visual Micro,免费正版的调试功能还没学会,因此没法查看具体是怎么进行现场保护的,现在只知道在中断函数中加入sei()语句,程序不会跑飞:

void INT2()
{sei();......
}

具体是怎么样实现的,我打算之后学习一下Arduino的汇编语法,配置好功能完善的盗版软件,在进入中断的时候查看SRAM的资源分配。

三、一阶互补滤波算法

写博客的时候还不知道原理…打算日后写一个滤波器的库,把这些方法都放进去。不知道权重系数是怎么确定的,很奇怪。以项目中计算角度为例:

void CalculateAngle()
{static float gyo_last = 0;float Gyo = (accgyo[2] + gyo_last) / 2;                        //角速度一阶滤波gyo_last = accgyo[2];static double gyo_angle = 0;float acc_angle = 57.296 * atan(accgyo[1] / accgyo[0]);     //根据加速度计算的倾角,弧度转换成角度//gyo_angle = Angle + Gyo * 0.005;                          //角速度积分计算的倾角// 一阶互补滤波 Angle = sufficent * acc_angle + (1 - suffcient) * (Angle + Gyo * dt)// suffcient 为权重系数,dt为积分时间,在这里是每5ms中断一次 //Angle = 0.005*acc_angle + 0.995*gyo_angle;  Angle = 0.005*acc_angle + 0.995*Angle + Gyo * 0.005;
}

四、位置式/增量式PID算法

PID还夹生,主要是用的不多,看别人的吧~
https://blog.csdn.net/as480133937/article/details/89508034

2020大创笔记(二)相关推荐

  1. 2020大创笔记(一)

    2020大创笔记(一) 这篇博客主要记录对购买的原件的组装和调试过程中遇到的问题和解决方法 这是最后一年做大创了,这次虽然是报了四个人,但是主要工作都由我一个人负责,主要是觉得一个项目太多人的,任务的 ...

  2. SpringCloud 2020笔记二

    SpringCloud 2020笔记二 Spring Cloud 2020 笔记一 五.GateWay Spring生态系统之上建立的 API 网关服务 基于Spring FrameWork 5.Pr ...

  3. Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...

  4. Altium Designer 2020 学习笔记(一)-----原理图及原理图库部分(配动态图操作演示)

    本篇文章主要与大家简要分享一下,我在AD学习过程中的一些学习笔记,本篇文章主要关于原理图及原理图库部分. 本系列文章链接: -------------------------------------- ...

  5. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  6. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  7. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  8. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  9. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  10. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

最新文章

  1. 微信小程序修改整体背景颜色
  2. flex4实现图片的动态切换
  3. 重庆市档案局(馆)数据备份一体机项目
  4. VTK修炼之道62:体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制
  5. 通信 / DHCP 四次握手
  6. [react] React中你有使用过getDefaultProps吗?它有什么作用?
  7. Oracle中通过Function,存储过程,触发器,调用实现解析Clob字段中存在的xml字符串...
  8. 【LeetCode笔记】461. 汉明距离(Java、位运算)
  9. matlab中dfft,2-DFFT 该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
  10. 太极助手发公开信解释越狱捆绑原因
  11. 中国橡胶防老剂4020市场现状与投资预测报告(2022版)
  12. 2019年湖南省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书-A卷
  13. 作文第一次用计算机350,第一次作文350字
  14. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)...
  15. 可以真正带你理清同步阻塞与同步非阻塞与异步阻塞与异步非阻塞的文章
  16. 文墨绘学【书法双师】
  17. vue配置favicon.ico图标
  18. 在CSS中实现height:100%-200px; width:100%-200px,既长度或宽度百分百减去200px
  19. AcWing 204. 表达整数的奇怪方式
  20. “ 请找出下面重复的字”

热门文章

  1. Windows 64位安装 memcached
  2. 网站SEO优化数据分析之跳出率+停留时间
  3. python如何执行部分代码_python如何运行代码
  4. 好的vue框架-模板
  5. html给文字添加阴影效果,如何设置样式之添加文字阴影、边框阴影或者添加自己的CSS...
  6. 让你相见恨晚的Photoshop 技巧
  7. photoshop技巧分享:psd格式批量转换jpg格式一键完成
  8. 【成功的忙人】在北京30套房的小哥:人一闲,就废了!
  9. Pandoc:一个超级强大的文档格式转换工具
  10. “未安装任何音频输出设备”解决办法