串口通讯
只能在两个设备之间进行若要三台设备两两通信,则每个设备得需要两组窗口,为3组相互独立的窗口通讯为解决这个问题:设计了总线通讯,有多种,I2C为其中一种
I2C通信
特点
同步、半双工带数据应答支持总线挂载多设备可以是软件IC和硬件IC
时钟线和数据线
主机:任何情况下,主机完全掌握SCL线,在空闲状态下,主机可以主动发起对SDA控制,只有在从机发送数据和从机应答时,主机才会转交SDA的控制权给从机SCL时钟线在任何时刻都只能被动的读取,从机不允许控制SCL线,SDA数据线,从机不允许主动发起对SDA的控制,只有在主机发送读取从机的命令后,从机应答的时候,从机才能短暂的获取SDA的控制权主机拥有SCL的绝对控制权,所以主机的SCL可以配置成推挽输出,所有从机的SCL都配置成浮空输入或者上拉输入为了实现输出输入半双工,避免总线没协调好导致电源短路,I2C规定禁止所有设备输出强上拉的高电平,采用外置若上拉电阻加开漏输出的电路SCL和SDA各添加一个上拉电阻,阻值一般为7KΩ左右
SCL和SDA的状态
当SCL和SDA都为高电平,为空闲状态时当SCL为高电平,SDA为下降沿的的状态时,为开始发送数据,起始发送数据完成当SCL为高电平,SDA为上升沿的的状态时,为数据发送完成
发送数据的过程为下
当时钟线为高电平时,数据线上的数据必须保持稳定,比如时钟线为高时,数据线上的数据始终为高,完成逻辑1的传输,保持低电平则为0。
例子:单片机向从设备写信息
假设上述是主机给24C02发送数据:由上可知:24C02的设备地址位1010000,主机在24C02的00000000的存储位置写入00001111的数据
读写数据位:读数据置写数据置0第一个应答信号:信号时由从机发送给主机,如果从机收到之前的信息,回复0,没有收到或者读取接收完成回复1第二个应答信号:单片机需要存储器返回一个应答信号第三个应答信号:发送完数据后,需要再给主机发送应答信号0,告诉主机写入成功最后写入停止位:SCL为高电平,SDA为上升沿
读数据帧
前半部分:指定地址写,后半部分,指定地址读首先写入设备地址,然后写数据,接下来写寄存器的地址,在收到从机的应答信号之后,主机再发送一个起始号,再发送一遍设备地址,然后才能发送读数据,接下来,存储器会把寄存器中的数据发送给单片机。最后一部分的数据可以多来几个,就可以写多个数据,地址指针在读后会自增,就可以连续读出一片区域的寄存器,效率也会变高。主机给应答:从机就会继续发,主机给非应答,从机不会再法发,交出SDA的控制权,从机控制SDA发送一个字节的权力,开始于读写标志位结束于主机给应答位为1
开漏输出和推挽输出
任何设备在任何时刻都可以输入,但在输出部分,采用的是开漏输出推挽输出:上面一个开关管接到正极,下面一个开关管接到负极,上面导通输出高电平,下面导通输出低电平,因为这是通过开关管直接接到正极和负极的,所以这个是强上拉和强下拉的模式开漏输出:去掉强上拉的开关管,输出低电平时下面导通是强下拉,输出高电平时,下面断开但是没有上管了,引脚浮空,故所有设备只能输出低电平而不能输出高电平
为了避免高电平造成的引脚浮空,需要在总线外面SCL和SDA各置一个上拉电阻,弱上拉开漏加弱上拉模式:同时兼具的输入和输出的功能要输出时,就去拉杆子或者放手操作杆子变化就行了要输入时,就直接放手然后观察杆子高低就行了因为开路模式下,输出高电平就相当于断开硬件,所以在输入之前可以直接输出高电平,不需要再切换成输入模式第三就是这个模式会有个“线与”的现象,只要有任意一个或多个设备,输出了低电平,,总线就处于低电平只有所有的设备都输出高电平,总线才处于高电平
两个实验
异步时序和同步时序
a、异步时序
好处:省一根时钟线,节省资源坏处:对时钟要求严格,发送方和接收方时钟不能由过大的偏差传输过程中,单片机进中断,发送方时序暂停,接受方仍会按照约定的速率读取,传输出错故异步时序的缺点:非常依赖硬件外设的支持,必须有USART电路才能方便的使用,否则很难用软件模拟。
b、同步时序
设计时钟线,则对传输的时间要求变低在单方面暂停传输时,时钟线也暂停,传输双方都能定格在暂停的时刻,可过段时间再来继续,极大的降低单片机对硬件电路的依赖,没有硬件电路的支持,也可以很方便的用软件手动翻转电平来实现通信
MPU6050
•MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景•3轴加速度计:测量X、Y、Z轴的加速度•3轴陀螺仪传感器:测量X、Y、Z轴的角速度
MPU6050参数
•16位ADC采集传感器的模拟信号,量化范围:-32768~32767•加速度计满量程选择:±±±±16•陀螺仪满量程选择:±250、±500、±1000、±2000•可配置的数字低通滤波器•可配置的时钟源•可配置的采样分频•I2C从机地址:11010001101001例如从机地址为0x6|0)当作从机地址,因为传输的时候是8个字节,前七个是地址,最后一位是数据读写位
若物体运动剧烈,选择大量程,防止加速度或角速度超出了量程若物体运动平缓,选择小量程,则测量的分辨率比较大满量程越大测量范围就越广满量程越小测量分辨率就越高满量程和加速度是线性关系可配置数字低通滤波器:配置寄存器对输出数据进行低通滤波,消除数据抖动,使数据输出平缓时钟源通过分频器的分频,可以为AD转换,给内部其他电路提供时钟控制分频系数就可以控制AD转换的快慢
MPU6050硬件电路
a、左上角LDO
为低压差线性稳压器,输入端可以是3V到5V,经过后输出稳定3V的电压
b、右下角J1CON1模块
左下角XCL和XDA通常就是用于外接磁力计或者气压计当接上磁力计或气压计之后,MPU6050的主机接口可以直接访问这些扩展芯片的数据把这些扩展芯片的数据读取到MPO6050里面,在MPO6050里面会有DMP单元,进行数据融合和姿态解算若不需要MPO6050的解算功能,可以把磁力计或气压计直接挂载在SCL和SDA总线上AD0引脚:是从机地址的最低位,接低电平时候,7为从机地址为1101000,接高电平时,7位从机地址是110100AD0接了一个电阻,故悬空是低电平状态,若想要接高电平,可以把AD0直接引导VCC上,强上拉至高电平INT:中断输出引脚,可以配置芯片内部的一些事件来触发中断引脚的输出比如数据准备好了、I2C主机错误等
文章为作者独立观点,不代表股票交易接口观点