根据LDC1000的特性,制作了一款车辆检测测试板。使用的处理器是STM32F103,与LDC1000的SPI读写操作正常,LDC1000的时钟有外部晶振提供,晶振频率为8Mhz.。在测量外部线圈的电感时,从LDC1000的寄存器Frequency Counter LSB、Frequency Counter Mid-Byte和Frequency Counter MSB读到的值一直为0!外部线圈的电感值为6mH,请问这个问题怎么解决?
user3674641:
与拔码开关设置有关?
Rong Gui Chen:
回复 user3674641:
无关啊!读LDC1000的Status寄存器的数值一直为:0x70。
SurfaceBook:
是不是晶振那边有问题,看看是否连接好,那块的电路也顺便检查一下。
user3917511:
You can downgrade using the firmware attached "LDC1000 Firmware 0x0208," but afterwards, you will have to reinstall version 1.0.2.0, force install the older drivers, and restart your system.
I find it strange how modifying Rpmin and Rpmax would freeze the GUI. Can you describe in more detail your steps to reproduce the problem before the downgrade?
7242.LDC1000 Firmware 0x0208.txt
user3917511:
回复 Rong Gui Chen:
LDC1000GUI,1.0.4.1 LDC1000,0 x0300寄存器配置文件地址值,默认情况下,类型,注册名字0 x00、字节、修订ID0 x01, 0x10,0 x10,Rp_MAX字节0 x02, 0 x3f,0 x3f,Rp_MIN字节0 x03, 0 x15,0 x15,字节,传感器的频率0 x04,0 x17,0×17字节,LDC配置0 x05,0 x00,0 x00字节,时钟配置0 x06,0 x00、0 x00 LSB字节,比较器阈值高0 x07,0 x14,0 x14,字节,比较器阈值高的最高有效位0x08,0 x00、0 x00 LSB字节,比较器阈值低0 x09,0 x15,0 x15,最高有效位字节,比较器阈值低
0 x0a,0 x04、字节、INT销配置
0 x0b,0 x01、字节、权力配置0 x20、字节、状态0 x21,,,字节,接近LSB数据0 x22,,,最高有效位字节,距离数据0 x23,,,字节,频率计数器LSB0 coats,,,字节,频率计数器Mid-Byte0 25,,,字节,频率计数器最高有效位
然后,单击“保存值作为默认值”
JiaChuang Chen:
1:读取时候有数据返回吗?没有返回可能是硬件问题。
2:电感量6mH是不是太大了?你用了多少匝?
3:STM32的SPI是用硬件SPI还是IO口SPI?如果是IO口模拟的SPI,可能时许有问题。
Rong Gui Chen:
回复 JiaChuang Chen:
改用100uH的线圈,从LDC1000寄存器Statis读到的值依旧是0x70。检查了一下LDC1000,没有发现焊接不良的地方。STM32使用硬件SPI,能正常读写LDC1000各个寄存器。LC谐振电路有正常工作,接220uH的线圈,频率大约为100Khz,不过随着频率的升高,振幅会一直下降。外部晶振工作正常。
ming chan:
回复 JiaChuang Chen:
你好,我这几天也在调试LDC-1000,用的是STM32的SPI通信,将硬件电路焊接好之后,下载程序,用金属片感应测试,在示波器上有正确的波形出现,不过杂波很多,LDC的INT引脚也有高低电平的变化,可就是没有读出ProximityData和FrequencyData的值,KEIL4软件仿真和串口打印都是0,不知道是不是SPI通信的问题,SPI的时钟频率和LDC的DCLK时钟频率应该没有关系吧?DCLK的时钟我是这样设置的:
TIM_TimeBaseStructure.TIM_Period = 143; //当定时器从0计数到143,即为144次,为一个定时周期 TIM_TimeBaseStructure.TIM_Prescaler =99; //设置预分频: TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
LDC与SPI通信部分是参考官方例程写的,如下:
SPI_I2S_SendData(SPI1, LDC1000_CMD_RPMAX<<8|TEST_RPMAX_INIT);//配置Rp_MAX(0x01)寄存器 SPI_I2S_SendData(SPI1, LDC1000_CMD_RPMIN<<8|TEST_RPMIN_INIT);//配置Rp_MIN(0x02)寄存器 SPI_I2S_SendData(SPI1, LDC1000_CMD_SENSORFREQ<<8|0x94); //配置Sensor Frequency(0x03)寄存器 SPI_I2S_SendData(SPI1, LDC1000_CMD_LDCCONFIG<<8|0x17); //配置LDC Configuration(0x04)寄存器 SPI_I2S_SendData(SPI1, LDC1000_CMD_CLKCONFIG<<8|0x00); //配置Clock Configuration(0x05)寄存器, //使用TBCLK作为时钟源 SPI_I2S_SendData(SPI1, LDC1000_CMD_INTCONFIG<<8|0x02); //配置INTB Pin Configuration(0x0A), //配置INTB为比较输出标志位(status of Comparator output) SPI_I2S_SendData(SPI1, LDC1000_CMD_THRESHILSB<<8|0x50); //配置Comparator Threshold High(0x06)寄存器低8位 SPI_I2S_SendData(SPI1, LDC1000_CMD_THRESHIMSB<<8|0x14); //配置Comparator Threshold High(0x07)寄存器高8位 SPI_I2S_SendData(SPI1, LDC1000_CMD_THRESLOLSB<<8|0xC0); //配置Comparator Threshold Low(0x08)寄存器低8位 SPI_I2S_SendData(SPI1, LDC1000_CMD_THRESLOMSB<<8|0x12); //配置Comparator Threshold Low(0x09)寄存器高8位 SPI_I2S_SendData(SPI1, LDC1000_CMD_PWRCONFIG<<8|0x01);
问题比较多,但因为实在没找出解决办法,还请探花解答一下,不胜感激!
QIUPING GUO:
回复 ming chan:
当MAX_Rp和MIN_Rp寄存器设置的值与你的线圈不配合是时.是没有数值输出的.
dingliangzhu:
回复 QIUPING GUO:
When the resonance impedance Rp of the sensor drops below the programed Rp_MIN, the Rp output of theLDC will clip at its full scale output. 这是LDC1000手册上说的,貌似没有说输出是0 我也遇到楼主相似的问题,可惜我手头上没有阻抗分析仪,但从手册上不应该输出为零吧。