完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
ms5611是同时支持I2C和SPI通信协议的气压计芯片。已经很普遍的被用在飞行器控制板上作为高度传感器。开发过stm32的朋友都知道它的硬件I2C是由bug的,一般使用的都是自己编写的软件I2C通信协议。但是其硬件SPI通信却是没有问题的。SPI通信一般会比I2C通信快点。下面先从硬件上说明MS5611在选择SPI的准备。
MS5611要选择使用SPI通信首先需要做的就是把芯片的PS引脚置低。参考数据手册如下: 根据其设计的PCB原理图如下: 下面是主要代码: 1.首先是芯片初始化。 void ms5611_init(void) { // ms5611_cs_init(); ms5611_ba_reset(); read_prom_data(); } 复位芯片可以从数据手册中找到参考,其实很简单就是向芯片发送数据0x1e, void ms5611_ba_reset(void) { MS5611_CS_L; SPI1_Read_Write_Byte(0X1E); MS5611_CS_H; Delay_us(2800); } 初始化第二步是读取prom的数据,这里面有包含计算温度和气压的一些系数。 void read_prom_data(void) { u8 i; for(i=0;i<8;i++) data = ms5611_read(0xa0+2*i); for(i=0;i<8;i++) printf(“data %d = %dn”,i,data); } 下面就是读取数据和运算数据的循环了。 int32_t get_pressure(void) { int64_t D1,dT,OFF,SENS; int64_t pressure; MS5611_CS_L; SPI1_Read_Write_Byte(0X58); MS5611_CS_H; Delay_us(1100); dT = ms5611_read_adc(0x00); dT -= (data[5]<<8); // printf(“dT = %lldn”,dT); OFF = ((int64_t)data[2]<<16) + (((int64_t)data[4]*dT)>>7); SENS = ((int64_t)data[1]<<15) + (((int64_t)data[3]*dT)>>8); MS5611_CS_L; SPI1_Read_Write_Byte(0x48); MS5611_CS_H; Delay_us(1100); D1 = ms5611_read_adc(0x00); pressure = (((D1*SENS)>>21)-OFF)>>15; return pressure; } 使用串口终端获得数据在MATLAB中做出曲线如下图: 与工程代码对应的硬件如下: 该飞控板移植了MDK的cleanflight代码,由于硬件跟cleanflight的并不完全一致,代码有所改动,需要购买板子的可给我留言 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:06 , Processed in 0.699858 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号