ti推出的电感数据转换器ldc1000,ldc1000是一款一种非接触式、短程传感技术的传感器芯片,具有低成本、高分辨率遥感的导电性。
由于ldc技术的优势明显,非常适合工厂流水线上的运动状态的传感检测,在工业机器人及智能工厂等工业领域将发挥良好作用。
ldc 技术的主要优势:
• 更高的分辨率:可通过 16 位共振阻抗及 24 位电感值,在位置传感应用中实现亚微米级分辨率;
• 更高的可靠性:提供非接触传感技术避免受油污尘土等非导电污染物的影响,可延长设备使用寿命;
• 更高的灵活性:允许传感器远离电子产品安放,处于 pcb 无法安放的位置;
• 更低的系统成本:采用低成本传感器及传导目标,无需磁体;
• 无限可能性:支持压缩的金属薄片或导电油墨目标,可为创造性创新系统设计带来无限可能;
• 更低的系统功耗:标准工作时功耗不足 8.5mw,待机模式下功耗不足 1.25mw。
ldc1000的底层驱动程序:
#ifndef ldc1000_cmd_h_ #define ldc1000_cmd_h_
/************************************** ************* vcc ****************** ************* clk ****************** ************* di ****************** ************* do ****************** ************* cs ****************** ************* gnd ****************** **************************************/
#define ldc1000_do 3 //in #define ldc1000_cs 5 //out #define ldc1000_di 6 //out #define ldc1000_clk 7 //out
#define ldc1000_cs_set() data_out(ldc1000_cs,1) #define ldc1000_di_set() data_out(ldc1000_di,1) #define ldc1000_clk_set() data_out(ldc1000_clk,1)
#define ldc1000_cs_clr() data_out(ldc1000_cs,0) #define ldc1000_di_clr() data_out(ldc1000_di,0) #define ldc1000_clk_clr() data_out(ldc1000_clk,0)
#define ldc1000_do_in gpio_get(portb,ldc1000_do)
#define dly_ldc1000clk() delay250ns(1)
#define rpmax 0x13 #define rpmin 0x3a
// ldc commands
#define ldc1000_cmd_revid 0x00 #define ldc1000_cmd_rpmax 0x01 #define ldc1000_cmd_rpmin 0x02 #define ldc1000_cmd_sensorfreq 0x03 #define ldc1000_cmd_ldcconfig 0x04 #define ldc1000_cmd_clkconfig 0x05 #define ldc1000_cmd_threshilsb 0x06 #define ldc1000_cmd_threshimsb 0x07 #define ldc1000_cmd_threslolsb 0x08 #define ldc1000_cmd_threslomsb 0x09 #define ldc1000_cmd_intconfig 0x0a
#define ldc1000_cmd_pwrconfig 0x0b #define ldc1000_cmd_status 0x20 #define ldc1000_cmd_proxlsb 0x21 #define ldc1000_cmd_proxmsb 0x22 #define ldc1000_cmd_freqctrlsb 0x23 #define ldc1000_cmd_freqctrmid 0x24 #define ldc1000_cmd_freqctrmsb 0x25
// ldc bitmasks
#define ldc1000_bit_amplitude 0x18 #define ldc1000_bit_resptime 0x07 #define ldc1000_bit_clksel 0x02 #define ldc1000_bit_clkpd 0x01 #define ldc1000_bit_intmode 0x07 #define ldc1000_bit_pwrmode 0x01 #define ldc1000_bit_statusosc 0x80 #define ldc1000_bit_statusdrdyb 0x40 #define ldc1000_bit_statuswakeup 0x20 #define ldc1000_bit_statuscomp 0x10
void delay250ns(uint32 ms);
void data_out(uint8 pin,uint8 level);
void ldc1000_write(char addr, char data);
void ldc1000_read(uint8 addr,char *data,char len); void ldc1000_init();
#endif /* ldc1000_cmd_h_ */
#include “ldc1000_cmd.h” char orgval[20];
/************************************************************************* * 函数名称:delayms
* 功能说明:延时函数(不准确),内核频率为100m时较为准确 * 备 注:
*************************************************************************/ void delay250ns(uint32 ms) {
uint32 i, j;
for(i = 0; i 《 ms; i++) {
for(j = core_clk_mhz/8; j 》 0; j--)
{
asm(“nop”); } } }
/*******************************************************************************
* function name : data_out
* description : sccb数据线的状态 包括输入输出 电平 * input : uint8 pin 输入?输出? 1为输出 0输入 * :uint8 data 电平
*******************************************************************************/
void data_out(uint8 pin,uint8 level) {
if(level) {
gpio_pdor_reg(ptb_base_ptr) |= 1《《pin; //第0位输出1 } else {
gpio_pdor_reg(ptb_base_ptr) &= ~(1《《pin); //第0位输出0 } }
void ldc1000_write(char addr, char data) {
uint8 addr=0,dat=0,i=0;
addr = addr & 0x7f; dat = data;
ldc1000_cs_clr(); //片选低 dly_ldc1000clk();
ldc1000_clk_clr(); // set clock line low for(i=0;i《16;i++) {
if(i《8)//写8位命令段 {
if(addr&0x80) ldc1000_di_set(); else ldc1000_di_clr(); dly_ldc1000clk();
ldc1000_clk_set(); // set clock line high
addr 《《= 1; // shift data_buf dly_ldc1000clk();
ldc1000_clk_clr(); // set clock line low } else {
if(dat&0x80) ldc1000_di_set(); else ldc1000_di_clr(); dly_ldc1000clk();
ldc1000_clk_set(); // set clock line high dat 《《= 1; // shift data_buf dly_ldc1000clk();
ldc1000_clk_clr(); // set clock line low } }
dly_ldc1000clk();
ldc1000_cs_set(); //片选高 }
void ldc1000_read(uint8 addr,char *data,char len) {
uint8 addr=0,dat=0,i=0,j=0;
addr = addr | 0x80;
ldc1000_clk_clr(); // set clock line low for(i=0;i《8;i++)//写8位命令段 {
if(addr&0x80) ldc1000_di_set(); else ldc1000_di_clr(); dly_ldc1000clk(); ldc1000_clk_set();
addr 《《= 1; // shift data_buf dly_ldc1000clk();
ldc1000_clk_clr(); // set clock line high }
for(i=0;i《len;i++) {
dat=0;
for(j=0;j《8;j++) {
dat 《《=1 // right shift data_buf
dly_ldc1000clk(); ldc1000_clk_set(); // set clock line high
dly_ldc1000clk();
if(ldc1000_do_in) dat |= 0x01; // read data ldc1000_clk_clr(); // set clock line low }
data[i] = dat; } }
void ldc1000_init() {
/* 打开b端口的时钟源 */
sim_scgc5 |= sim_scgc5_portb_mask
/* ldc使用io端口初始化 */
portb_pcr3 = port_pcr_mux(1); portb_pcr5 = port_pcr_mux(1); portb_pcr6 = port_pcr_mux(1); portb_pcr7 = port_pcr_mux(1);
gpio_init(portb,ldc1000_clk,gpo,low); gpio_init(portb,ldc1000_di,gpo,low); gpio_init(portb,ldc1000_cs,gpo,low); gpio_init(portb,ldc1000_do,gpi,low);
/* ldc寄存器初始化 */
ldc1000_write(ldc1000_cmd_rpmax, rpmax); ldc1000_write(ldc1000_cmd_rpmin, rpmin); ldc1000_write(ldc1000_cmd_sensorfreq, 0x94); ldc1000_write(ldc1000_cmd_ldcconfig, 0x17); ldc1000_write(ldc1000_cmd_clkconfig, 0x02); ldc1000_write(ldc1000_cmd_intconfig, 0x02);
ldc1000_write(ldc1000_cmd_threshilsb, 0x50); ldc1000_write(ldc1000_cmd_threshimsb, 0x14); ldc1000_write(ldc1000_cmd_threslolsb, 0xc0); ldc1000_write(ldc1000_cmd_threslomsb, 0x12);
ldc1000_write(ldc1000_cmd_pwrconfig, 0x01);
//read all registers ldc1000_cs_clr(); dly_ldc1000clk();
ldc1000_read(ldc1000_cmd_revid , orgval , 12); dly_ldc1000clk();ldc1000_cs_set(); }
目前最好用的扫地机器人是哪款
关于一种在GSM下行全频带内用于可穿戴设备的高效射频能量收集技术
【新闻中心】安科瑞祝安徽省2023年建筑电气年会圆满闭幕
安装衬氟阀门的注意事项
京东下一个乐视?京东裁员谣言被官方否定
LDC1000的底层驱动程序
用碳纳米管研制高效太阳能电池的方法
采购请认准绿色生产安规电容
虚拟技术(VR)游戏领域发展迅猛
VR新篇章:HTC Vive Focus VR下月发售 《活死人之夜》恐怖升级
工业网关有哪些能力有哪些类型
智能配电系统在大型综合建筑中的应用
便携手持式三坐标测量仪-几何尺寸测量-形位公差测量-CASAIM
压敏电阻是普通电阻吗?它们有什么不同?
打印机扫描功能怎么用,其实很简单
手机双摄成潮流,专业技术角度解析智能手机单/双摄那种好
物联网未来的趋势将会是怎样的
神工股份科创板申请已获上交所受理,募资11亿元投建8英寸抛光片等项目
全球第一本人工智能教材,进入中国高中生的课堂了!
汽车CE认证EMC标准分类及趋势变化