第一次做项目,ADS1232接称重传感器,不怎么变化,有图~~
我使用ADS1232接2mv/v的称重传感器,使用通道2,增益128,速递10次每秒,关闭温度传感器功能,可读出来的数不管怎么按压传感器都不怎么变,这个传感器是没有问题的,在HX711芯片上用四线制测试吹气都能有变化。可在用六线的ADS1232上数值就不怎么变化了。希望大家给予指点。第一次做实际项目,如果设计中有其他不合理的地方希望大家批评指出,谢谢。
测试环境如下,呵呵,蜗居,只有一个床当桌子了。
串口接收到的从ADS1232中读取出来的十进制数
下面是电源和ADS1232的电路
传感器和PCB的连接
称重传感器的接线图
PCB
#include "ADS1232.H"
#include "port.h"
/*
sbit ADS1232_DOUT= P2^0;
sbit ADS1232_SCLK= P2^1;
sbit ADS1232_PWDN= P2^2;
sbit ADS1232_SPEED = P2^3;
sbit ADS1232_GAIN1 = P2^4;
sbit ADS1232_GAIN0 = P2^5;
sbit ADS1232_A0 = P2^6;
sbit ADS1232_TEMP= P2^7;
*/
#define ADS1232_SCLK_HIGH do{ADS1232_SCLK=1;}while(0);
#define ADS1232_SCLK_LOW do{ADS1232_SCLK=0;}while(0);
#define ADS1232_PWDN_HIGH do{ADS1232_PWDN=1;}while(0);
#define ADS1232_PWDN_LOW do{ADS1232_PWDN=0;}while(0);
#define ADS1232_SPEED_HIGH do{ADS1232_SPEED=1;}while(0);
#define ADS1232_SPEED_LOW do{ADS1232_SPEED=0;}while(0);
#define ADS1232_GAIN1_HIGH do{ADS1232_GAIN1=1;}while(0);
#define ADS1232_GAIN1_LOW do{ADS1232_GAIN1=0;}while(0);
#define ADS1232_GAIN0_HIGH do{ADS1232_GAIN0=1;}while(0);
#define ADS1232_GAIN0_LOW do{ADS1232_GAIN0=0;}while(0);
#define ADS1232_A0_HIGH do{ADS1232_A0=1;}while(0);
#define ADS1232_A0_LOW do{ADS1232_A0=0;}while(0);
#define ADS1232_TEMP_HIGH do{ADS1232_TEMP=1;}while(0);
#define ADS1232_TEMP_LOW do{ADS1232_TEMP=0;}while(0);
void ADS1232_init(unsigned char channel, unsigned char gain, unsigned char speed, unsigned char temp)
{
ADS1232_SCLK = 0;
ADS1232_PWDN_LOW;
if(channel==CHANNEL1)
{
ADS1232_A0_LOW;
}
else if(channel==CHANNEL2)
{
ADS1232_A0_HIGH;
}
if(GAIN_1==gain)
{
ADS1232_GAIN1_LOW;
ADS1232_GAIN0_LOW;
}
else if(GAIN_2==gain)
{
ADS1232_GAIN1_LOW;
ADS1232_GAIN0_HIGH;
}
else if(GAIN_64==gain)
{
ADS1232_GAIN1_HIGH;
ADS1232_GAIN0_LOW;
}
else if(GAIN_128==gain)
{
ADS1232_GAIN1_HIGH;
ADS1232_GAIN0_HIGH;
}
if(SPEED_10==speed)
{
ADS1232_SPEED_LOW;
}
else if(SPEED_80==speed)
{
ADS1232_SPEED_HIGH;
}
if(TEMP_ON==temp)
{
ADS1232_TEMP_HIGH;
}
else if(TEMP_OFF==temp)
{
ADS1232_TEMP_LOW;
}
ADS1232_PWDN_HIGH;
}
char ADS1232_read_value(long int *value)
{
long int temp=0;
unsigned char i=0;
if(ADS1232_READY==ADS1232_DOUT)
{
ADS1232_SCLK_LOW;
for(i=0; i<24; i++)
{
ADS1232_SCLK_HIGH;
temp <<= 1;
if(1==ADS1232_DOUT)
{
temp |= 0x01;
}
ADS1232_SCLK_LOW;
}
ADS1232_SCLK_HIGH;// The 25th SCLK to force DOUT high
ADS1232_SCLK_LOW;
if((temp&0x800000)==0x800000)
{
temp ^= 0Xffffff;
temp = -(temp+1);
}
*value = temp;
return ADS1232_READ_FINISH;
}
else
{
return ADS1232_BUSY;
}
}
下面是ADS1232的驱动代码
主函数也来了int main(void)
{
signed char brightness=8;
long int num = 0;
int i=-20;
char temp=0;
TM1638_init();
TM1638_set_brightness(4);
uart_init(9600);
timer_init();
ADS1232_init(CHANNEL2, GAIN_128, SPEED_10, TEMP_OFF);
EA = 1;
while(1)
{
communicate_with_HMI();
TM1638_display_num(i++);
timer0_main_loop();
key_main_loop();
if(key1_on)
{
LED1 = ~LED1;
}
temp = ADS1232_read_value(&num);
if(temp==ADS1232_READ_FINISH)
{
printf("%8ld\r\n", num);
}
if(f_1s)
{
LED2 = ~LED2;
}
}
} 顶一下吧,希望有人能指点一下。 做这么高精度的采集,7805供电好像不好吧。 一刀断天下 发表于 2013-3-25 22:29 static/image/common/back.gif
做这么高精度的采集,7805供电好像不好吧。
您给推荐个好的电源芯片吧?
或者电源方案,输入是24V工业电源。 你传感器是不是没安装好?还需要一个东西把传感器“托”起来的。 固定端和加载端请先确认。。。
话说,传感器你用原配的插头不是很好么? andyli 发表于 2013-3-26 10:11 static/image/common/back.gif
固定端和加载端请先确认。。。
话说,传感器你用原配的插头不是很好么? ...
您好,客户拿过来的时候,木有那个插头的座,
看来要自己去市场找找了。确实剪掉接线不方便。 wallelectronics 发表于 2013-3-26 09:42 static/image/common/back.gif
你传感器是不是没安装好?还需要一个东西把传感器“托”起来的。
按照德州仪器FAE的建议,做了几个实验
<1>AINP2,AINN2悬空,REFP接基准正,REFPN接基准负,输出结果:8388607(0X7FFFFF)。
<2>AINP2,AINN2悬空,REFP和REFPN短接,输出结果:76700±200左右。
<3>REFP接基准正,REFPN接基准负,AINP2和AINN2短接,输出结果:76700±200左右。
<4>REFP接基准正,REFPN接基准负,AINP2和AINN2短接,输出结果:76700±200左右。
木有效果,
貌似芯片对REFN和REFP很敏感,对AINP2和AINN2很不敏感。 前辈能给个联系方式么?我也在做电子秤,用的是hx711芯片,可是现在出了点问题。想找人请教一下{:cry:} 进口小开关 发表于 2013-3-25 22:45 static/image/common/back.gif
您给推荐个好的电源芯片吧?
或者电源方案,输入是24V工业电源。
推荐用LM2576 输出端加223S 三端滤波器,我们很多工业产品都用这个方案 这种东西用这种供电方式都不好,可以加个电压基准,或是用些稳压芯片自己做电路。 keshipt 发表于 2013-3-26 16:15 static/image/common/back.gif
推荐用LM2576 输出端加223S 三端滤波器,我们很多工业产品都用这个方案
方案很熟悉,哈哈 给传感器供电不是说电压一定要准,你要是来个高精度的2.5V片子做基准的话你就大大的错了,传感器供电和基准要是一个电源,一块波动 这1232可以不接外部晶振?用过124X系列的是需要外接晶振的。短路模拟输入看看会变不? f8023m 发表于 2013-3-27 16:24 static/image/common/back.gif
给传感器供电不是说电压一定要准,你要是来个高精度的2.5V片子做基准的话你就大大的错了,传感器供电和基准 ...
有道理,支持一下,以前还真没想过这个问题 keshipt 发表于 2013-3-26 16:15 static/image/common/back.gif
推荐用LM2576 输出端加223S 三端滤波器,我们很多工业产品都用这个方案
您好,223S是一种什么样的滤波器? 进口小开关 发表于 2013-3-28 07:48 static/image/common/back.gif
您好,223S是一种什么样的滤波器?
三端滤波器
楼主厉害啊 正好也在做电子称。 本帖最后由 lklhzu 于 2014-4-26 15:19 编辑
keshipt 发表于 2013-3-26 16:15
推荐用LM2576 输出端加223S 三端滤波器,我们很多工业产品都用这个方案
开关电源不是比LDO纹波要大吗?为啥不直接用LDO? ldo也要 看psrr的,纹波抑制比。 2mV/V 这个怎么理解?
marshallemon 发表于 2014-6-1 21:48
2mV/V 这个怎么理解?
假如传感器的激励电压是10V,那么这个传感器的满量程输出电压为:10V * 2mV/V = 20mV. 不错 4线和6线没什么本质的区别, 只是在传输距离远的时候能降低长线带来的误差, 做实验的时候应该看不出差别的
另外C3精度算不上高精度, 随便弄弄就行了 {:lol:} 请问楼主这传感器HBM的 哪里买的价格怎么样?
还有这PCB铺地的时候, 画圈的地方怎么搞的? diyzxh 发表于 2015-7-21 20:27
请问楼主这传感器HBM的 哪里买的价格怎么样?
还有这PCB铺地的时候, 画圈的地方怎么搞的? ...
传感器是客户的不清楚去哪里买的。
你说的PCB画圆圈是说哪个地方? 进口小开关 发表于 2015-7-23 10:36
传感器是客户的不清楚去哪里买的。
你说的PCB画圆圈是说哪个地方?
差不多两年了?问题解决没有。。 bad_fpga 发表于 2015-7-23 10:42
差不多两年了?问题解决没有。。
当时项目紧,直接换其他方案的芯片好使了。
ADS1232再也没用过,不知道是因为我程序的问题、线路板的问题还是淘宝买的芯片的问题。 上面的圈里面, 地跟空脚空余的是圆弧怎么搞的?
还有您换了什么芯片方案成功了? 收藏下正准备用ADS1232,看到楼主例子犹豫了 传感器 没有固定啊 悬臂梁的传感器一定要一端固定 f8023m 发表于 2013-3-27 16:22
方案很熟悉,哈哈
你好,在论坛上看见您的留言,试问一下,是不是做过称重传感器的项目,小白一个,求助!
页:
[1]