【经验】角速度传感器MLX90609的数字输出指南,简化数字输出使用
MLX90609是MELEXIS公司推出的一款角速度传感器。MLX90609角速度传感器是一个完整的陀螺仪系统,使用5V电源供电,工作温度范围为-40~85℃,可输出两个与垂直于装配表面的角速率成比例的输出信号,其中一路输出信号采用模拟电压格式(输出为2.5V,角速率为零,满量程角速率根据旋转方向产生4.5V或0.5V的输出),另一路输出为数字SPI 格式。可满足不同实际应用的使用需求。
本文简述由SPI逻辑控制的MLX90609内部ADC的工作原理。它包括一些用C语言编写的提示和SW示例,简化了MLX90609数字输出的使用,所有例子均与Keil Cx51编译器相兼容。
工作原理
MLX90609数字输出基于2通道11位逐次逼近模拟的数字转换器(ADC)。主通道0用于数字化角速率上电压(OUTAR-引脚)的输出。通道1可用于数字化内部温度传感器(OUTTEMP引脚)的输出。
图1:MLX90609 ADC的工作原理图
ADC包括一个双通道多路复用器,采样保持电路(S/H),一个11位连续近似寄存器(SAR),数模转换器(DAC)和一个模拟比较器(COMP)。
SAR产生一系列11位代码,为DAC提供存储在S/H电容中的输入信号,SAR还包括控制S/H电路并生成转换结束信号(EOC)的逻辑。多路复用器由SPI的ADCC指令定义的CHAN位控制,它将OUTAR电压的3/4(CHAN = 0)或整个OUTTEMP电压(CHAN=1)连接到S/H电路。COMP提供了一个反馈,让SAR在转换过程中定义一个近似方向,在最后一个近似阶段生成的11位代码是一个转换结果,可以作为SPI的串行数据流读取。
ADCC 的SPI指令来启动转换。该指令打开ADC(即位ADEN = 1),设置必要的通道(位CHAN)并开始转换。要读取转换状态,可以使用ADCR或STATR指令。转换完成后,可以在ADCR指令的响应中读取结果。下面的转换公式反映了典型的ADC行为,可用于评估OUTAR和OUTTEMP引脚上的电压:
ADCcode表示AD转换的11位结果。上电后,ADC处于睡眠模式。在使用ADC进行数据采集之前,建议首先使用初始虚拟转换。 转换后,ADC可以再次进入睡眠模式。由于ADC消耗约0.25 mA,因此可以在睡眠模式下保存该值。为了通过输入电阻的最小电流,可以将输入SCLK和SS保持在高电平,将MOSI保持在低电平,而不使用SPI。通过这种方式,可以节省大约0.25mA的总电流消耗。而且不要重载输出OUTAR,根据MLX90609数据表,OUTAR负载不得超过200k,OUTAR过载会导致额外的输出非线性。
ADC控制的SPI指令
MLX90609通信接口与基于四条线的标准SPI兼容:MOSI,MISO,SS(或NSS)和SCLK(或SCK)。它始终从待机模式开始运行,SPI时钟极性和相位的模式是固定的:CPHA=1,CPOL=1。有关SPI时序特性和其他详细信息,请参见MLX90609数据手册。
有三个SPI指令用于控制MLX90609 ADC:STATR,ADCC和ADCR。这些指令中的每一个都包括8位指令和16位响应,该指令通过MOSI线串行传输到MLX90609。之后,可以通过MISO-line连续接收响应,最高有效位(MSB)是发送和接收的第一个位,信号SCLK是主设备生成的串行时钟,它初始化任何传输和接收,并提供数据同步。当SPI处于活动状态时,SS-line必须处于零状态,通过对SS-line电平置高位可以截断或完全取消响应,下表给出了ADC所用标志位的说明:
ADEN | ADEN位选择ADC的电源管理模式: ADEN = 0:ADC切换到休眠模式,不允许AD转换。 ADEN = 1:允许AD转换。 该位由ADCC命令设置。上电后,ADEN位清零。 |
BUSY | 在MLX90609的初始化过程中,该位在复位后置1。它落后了顺利完成程序。当BUSY = 1时,仅发送拒绝答案。 |
CHAN | CHAN位用于选择ADC的输入源。 CHAN = 0:角速率通道。 CHAN = 1:温度传感器通道。 该位由ADCC命令设置。上电后,CHAN清零。 |
EOC | AD转换位结束。 EOC位表示ADC状态。 EOC = 0:ADC正在进行且无法重新启动,结果仍然无效。 EOC = 1:AD转换已完成,可以重新启动。 如果EOC = 0,任何启动ADC的尝试都将被拒绝答案拒绝。 |
OPC | 未知的操作代码。当未识别接收的操作代码时,该位置位。 |
X | 这些位保留或具有未定义状态。 |
状态读取命令(STATR):
STAR指令: | |||||||||||||||
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||||||||
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | ||||||||
START响应 | |||||||||||||||
Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
0 | X | EOC | X | X | X | X | X | X | X | X | X | CHAN | ADEN | X | X |
ADC控制命令(ADCC):
ADCC指令: | |||||||||||||||
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||||||||
1 | 0 | 0 | 1 | CHAN | ADEN | 0 | 0 | ||||||||
ADCC响应 | |||||||||||||||
Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
0 | X | EOC | X | X | X | X | X | X | X | X | X | CHAN | ADEN | X | X |
ADC读取命令(ADCR):
ADCR指令: | |||||||||||||||
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||||||||
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||||||
ADCR响应 | |||||||||||||||
Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
0 | X | EOC | X | AD10 | AD9 | AD8 | AD7 | AD6 | AD5 | AD4 | AD3 | AD2 | AD1 | AD0 | 0 |
AD10…AD0 | AD转换的结果。 这些位仅在EOC位置1时有效。 |
拒绝响应:
拒绝指令: | |||||||||||||||
Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
1 | OPC | EOC | X | X | BUSY | X | X | X | X | X | X | X | X | X | X |
ADC工作原理
ADC处理的一般顺序如下:
步骤A:ADC如果不是工作模式,则将ADC置于工作模式;
步骤B:开始新的转化;
步骤C:等待转换结束;
步骤D:读取结果数据;
步骤E:如果需要,转到步骤B或将ADC置于睡眠模式。
本节介绍实现上述序列的两种方法。第一种方法基于轮询,而第二种方式使用延迟。需要轮询或延迟以确保在新转换(ADCC指令)之前和读取结果(ADCR指令)之前完成先前的转换。
基于轮询的数字数据采集
这种方法不需要使用外部计时器和晶体振荡器,因为转换的结束是由MLX90609轮询定义的。另一方面,轮询需要大量使用MLX90609的SPI,因此可以通过引脚上的数字信号产生额外的输出噪声。轮询也不提供数据获取的周期性,而这些周期性是下一次数据处理所需要的。
数字数据采集算法包括三个轮询过程。在图2的流程图中,两个基于ADCC或ADCR指令的轮询过程的方法都包含一个循环,该循环构建在对响应的第15和第13位(EOC)进行检查的基础上,在ADCC轮询期间不需要其他位。因此,ADCC响应可以在接收到的第3位之后到处被截断,对于ADCR指令,必须接收完整的16位响应,因为它包含转换的11位结果。
整个流程的第2阶段中的ADCC指令设置ADC的活动模式。下一个ADCC指令开始转换,以测量位CHAN指定的通道上的信号。这里使用轮询来确保前一个adc周期结束。使用ADCR指令的轮询过程在转换结束后提供有效的数据输出。最终ADC可以在没有轮询的情况下关闭,因为此时转换已经完成。
使用ADCC指令轮询过程
完整投票程序的图表流程
使用ADCR命令轮询过程
图2:基于轮询的数字数据采集
下面您可以看到用C语言编写的两个轮询过程的示例:ADCC_polling和ADCR_polling。如果MLX90609接受ADCC指令,则函数ADCC_polling返回“0”。否则,它返回错误代码“1”。函数ADCC_polling返回上次数字转换的11位结果。否则,它返回一个错误代码“0xFFFF”。
两个函数都使用函数SPI_EXCH,这是一个最简单的8位SPI交换过程:unsigned char (unsigned char out)。输入参数out是主机发送到MLX90609的字节。该函数返回一个字节,该字节在传输的同时从miso行逐位接收,在返回之前,该函数将恢复默认的MOSI-stale (零级别)。
根据使用的主设备的结构,SPI_EXCH函数可以以不同的方式实现。使用嵌入式硬件SPI可以节省主机的处理时间,如果主服务器没有硬件SPI,可以使用软件实现代替。
下面的代码给出了一个为8051核心微控制器编写的SPI软件实现示例:
/* The example code assumes that the part specific header file is included */
sbit SCLK = P1^0; /* Any available 8051-ports */
sbit MISO = P1^1; /* can be used to emulate */
sbit MOSI = P1^2; /* SPI signals: */
sbit NSS = P1^3; /* SCLK, MISO, MOSI and NSS */
/* Macros NSS_Low and NSS_High are needed for ADCC_polling and ADCC_polling */
#define NSS_Low NSS = 0
#define NSS_High NSS = 1
unsigned char SPI_EXCH(unsigned char out)
{
unsigned char support, inp;
for (inp = 0, support = 0x80; support != 0; support >>= 1)
{
MOSI = out & support;
SCLK = 0;
SCLK = 1;
if(MISO) inp |= support;
}
MOSI = 0;
return inp;
}
8051的可寻址输入-输出端口被指定用来模拟spil信号。该示例还包括在ADCC_polling和ADCR_polling函数中使用的两个宏(NSS_Low和NSS_High)的定义。
/* The example code assumes that the part specific header file is included */
/* Function SPI_EXCH() and macros NSS_Low and NSS_High must be defined above */
#define EOC_COUNT 100
/* Polling procedure with ADCC command */
bit ADCC_polling(bit chan, bit aden)
{
unsigned char counter = 0; /* counter to avoid endless polling */
unsigned char tmp, adcc;
adcc = (aden) ? 0x94:0x90; /* NSS = 0; */
if(chan) adcc |= 0x08;
Start:
NSS_Low; /* NSS = 0; */
SPI_EXCH(adcc); /* Send ADCC-instruction */
tmp = SPI_EXCH(0x00); /* Read the first byte of the answer */
NSS_High; /* NSS = 1; */
if((tmp & 0x80) == 0) return 0; /* ADCC has been successfully sent */
else if(tmp & 0x20) return 1; /* HW Error! */
else if((++counter) < EOC_COUNT) goto Start; /* Continue polling */
else return 1; /* HW Error: long polling */
}
/* Polling procedure with ADCR command */
unsigned int ADCR_polling(void)
{
union intData
{unsigned int dd;
unsigned char d[2];
}inp;
#define Dat_H inp.d[0]
#define Dat_L inp.d[1]
#define Dat_HL inp.dd
unsigned char counter = 0; /* counter to avoid endless polling */
Start:
NSS_Low; /* NSS = 0; */
SPI_EXCH(0x80); /* Send ADCR-instruction */
Dat_H = SPI_EXCH(0); /* Read the first byte of the answer */
Dat_L = SPI_EXCH(0); /* Read the last byte of the answer */
NSS_High; /* NSS = 1; */
if(Dat_H & 0x80) return 0xFFFF; /* HW Error! */
else if(Dat_H & 0x20) return (Dat_HL & 0xFFF)>>1; /* Result is valid */
else if((++counter) < EOC_COUNT) goto Start; /* Continue polling */
else return 0xFFFF; /* HW Error: too long polling */
}
2)基于延迟的数字数据采集
根据MLX90609数据表的转换时间内部ADCμs总是小于115。因此115μs之后总会转换完成。转换的结果将是有效的,即使不检查EOC位,也可以发送下一个ADCC指令来启动新的转换。
图3显示了使用延迟而不是极化的adc循环的时间图,我们假设在ADCC指令的第一个上升的SCLK边缘之前,已经设置了EOC位(ADC没有在进行中),这个条件可以保证不会超过115μs发送ADCC指令。在这种情况下,该MLX90609 AD-conversion将从第八个SCLK 上升沿开始执行ADCC指令。ADCC响应是预定义的,可以跳过。在接下来的延迟如果超过115μs, ADCR指令开始转换完成后,可以用来读取AD10…AD0数转换结果,EOC位总是设置在ADCR响应中。
图3:基于延迟的ADC处理时间图
AD转换正在进行时没有SPI活动。这种基于延迟的方法将SPI活动最小化,从而减少额外的输出噪声。采集过程可以建立在定时器中断的基础上,周期大于115μs。在这种情况下,服务程序可以从形成正SS脉冲开始,然后ADCR命令可以读取先前AD转换的结果。在程序结束时,应发送8位ADCC指令以开始新的转换。
正SS脉冲截去SPI命令,但它不影响ADC。因此,可以在AD转换正在进行时,在发送ADCC指令之后精确地生成信号SS的上升沿。图4显示了一个没有轮询的通用数据采集算法。
图4:基于延迟的数字数据采集
- |
- +1 赞 0
- 收藏
- 评论 0
本文由GHjames翻译自MELEXIS,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关研发服务和供应服务
相关推荐
【成功案例】基于MLX90609EEA-N2角速率传感器的加油站安防护栏防撞击报警器的设计
Melexis推出的可以同时具有模拟量和SPI通讯的角速率传感器MLX90609,可以通过检测加油站按防护栏撞击的角速率判断防撞柱是否被撞击,并且其具有低加速度和角速率交叉敏感度,可以有效保证数据输出的准确性。该方案能有效降低了霍尔开关和磁铁方案的安装施工难度和成本。
【经验】Melexis开发环境MLXIDE编译例程出错原因分析
部分新手工程师在使用Melexis(迈来芯)的开发环境MLXIDE会出现编译例程错误的问题,本文将对MLXIDE编译例程出错原因进行分析,供各位工程师参考及使用。
【经验】melexis磁仿真工具使用介绍
Magnetic design simulator是MELEXIS公司提供的一个免费的在线磁仿真工具。该工具可以帮助用户快速探索设计空间的磁性和机械参数,模拟和评估磁位置传感器的性能。本文介绍Magnetic design simulator的使用方法。
三轴霍尔传感器MLX90363和MLX90365,MLX90316的区别是什么?
MLX90363是SPI输出方式,并且可以实现线性位移,角度,3D测量。MLX90365是模拟量或PWM输出,可以实现线性位移和角度测量。MLX90316输出方式是模拟/PWM/spI,可以实现360°角度测量。
世强代理TE、芯科、EPSON、Melexis、SMI、TT等主流传感器选型
世强作为TE、芯科、EPSON、Melexis、SMI、TT等的官方授权一级分销商,可供应角速度、动态心率、温湿度、磁传感器、压力传感器、扭矩与位置、磁簧开关、飞行时间测距等传感器产品,可为汽车电子、智能机器人、物联网、医疗设备、智能家居、新能源等领域提供解决方案及技术支持。
【应用】角速度传感器MLX90609实现机械臂的角度检测
MLX90609是Melexis公司推出的一款角速度传感器。该传感器是一个完整的陀螺仪系统,MLX90609使用5V电源供电,工作温度范围为-40-85℃,可输出两个与垂直于装配表面的角速率成比例的输出信号,其中一路输出信号采用模拟电压格式(输出为2.5V,角速率为零,满量程角速率根据旋转方向产生4.5V或0.5V的输出),另一路输出为数字SPI 格式。笔者同时介绍了如何设计机械臂位置传感系统。
SPI数字信号输出角度传感器MLX90363是否需要编程校准工具PTC04来编程调试?
SPI数字信号输出角度传感器MLX90363不需要编程校准工具PTC04来编程调试,可通过带SPI端口的MCU来实现通讯调试。
想提升EPS系统精度?试试扭矩极佳的Hall器件
电动助力转向系统是汽车转向系统的发展方向,并将挑战液压转向系统。而本方案将采用迈来芯基于IMC技术的角速度传感器和17个点矫正功能的线性HALL位置传感器。
VGA小车的磁钉传感器世强是否有推荐方案
VGA小车的磁钉是用来作为导航使用的,磁钉一般都是NS极的磁铁材料,而VGA小车下方有霍尔传感器来识别到磁钉,通常相邻的磁钉之间相距1米左右,才能保证磁强度分布不重叠。所以VGA小车还需要角速度传感器来识别盲区导航。霍尔传感器推荐是Melexis品牌的三轴霍尔传感器MLX90365:Melexis(迈来芯) MLX90365位置传感器 详细数据手册,角速度传感器建议采用EPSON的XV-8000CB:XV-8000CB微型陀螺仪传感器数据手册
需要一款角速度传感器,具体要求为:SPI输出、能够实现360度检测、汽车级芯片,请问是否有合适的型号推荐?
推荐MLX90363,可以满足SPI输出,360度检测的要求。
【产品】5V电源供电的角速度传感器,具有低加速度和角速率交叉敏感度
MLX90609是Melexis公司推出的一款角速度传感器。MLX90609角速度传感器是一个完整的陀螺仪系统,使用5V电源供电,工作温度范围为-40-85℃,可输出两个与垂直于装配表面的角速率成比例的输出信号,其中一路输出信号采用模拟电压格式(输出为2.5V,角速率为零,满量程角速率根据旋转方向产生4.5V或0.5V的输出),另一路输出为数字SPI 格式。可满足不同实际应用的使用需求。
电子商城
品牌:MELEXIS
品类:smart LIN Driver for small motors
价格:¥78.3170
现货: 135,657
品牌:MELEXIS
品类:smart LIN Motor Driver
价格:¥28.7710
现货: 91,000
品牌:MELEXIS
品类:3-wire hall effect Latch
价格:¥1.7951
现货: 58,883
品牌:MELEXIS
品类:Integrated Current Sensor IC
价格:¥15.3811
现货: 50,899
品牌:MELEXIS
品类:Micro/Mini LIN Slave Controller
价格:¥12.3240
现货: 43,225
品牌:MELEXIS
品类:Triaxis Position Sensor IC
价格:¥22.8370
现货: 39,302
现货市场
服务
可定制1027S、1097、1093A、1099、991系列,粘度:900~2万;硬度:70~90D;固化速度:5~15min;粘接强度:15~20Mpa;不同规格包装形式。
最小起订量: 1支 提交需求>
可定制2512KL、2512KT、2512KB、2512KH、2482L系列;粘度:3000~20万;硬度:30~40A;表干时间:5~15min;固化速度:2.4mm/24H;粘接强度:1.2~1.7Mpa;
最小起订量: 1支 提交需求>
登录 | 立即注册
提交评论