第一次做项目,ADS1232接称重传感器,不怎么变化,有图~~

2020-01-13 18:37发布

我使用ADS1232接2mv/v的称重传感器,使用通道2,增益128,速递10次每秒,关闭温度传感器功能,可读出来的数不管怎么按压传感器都不怎么变,这个传感器是没有问题的,在HX711芯片上用四线制测试吹气都能有变化。可在用六线的ADS1232上数值就不怎么变化了。希望大家给予指点。
第一次做实际项目,如果设计中有其他不合理的地方希望大家批评指出,谢谢。
测试环境如下,呵呵,蜗居,只有一个床当桌子了。
5.png (1.04 MB, 下载次数: 5) 下载附件 2013-3-24 23:18 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
34条回答
进口小开关
1楼-- · 2020-01-13 22:50
  1. #include "ADS1232.H"
  2. #include "port.h"


  3. /*
  4. sbit ADS1232_DOUT  = P2^0;
  5. sbit ADS1232_SCLK  = P2^1;
  6. sbit ADS1232_PWDN  = P2^2;
  7. sbit ADS1232_SPEED = P2^3;
  8. sbit ADS1232_GAIN1 = P2^4;
  9. sbit ADS1232_GAIN0 = P2^5;
  10. sbit ADS1232_A0    = P2^6;
  11. sbit ADS1232_TEMP  = P2^7;
  12. */

  13. #define ADS1232_SCLK_HIGH    do{ADS1232_SCLK=1;}while(0);
  14. #define ADS1232_SCLK_LOW     do{ADS1232_SCLK=0;}while(0);
  15. #define ADS1232_PWDN_HIGH    do{ADS1232_PWDN=1;}while(0);
  16. #define ADS1232_PWDN_LOW     do{ADS1232_PWDN=0;}while(0);
  17. #define ADS1232_SPEED_HIGH   do{ADS1232_SPEED=1;}while(0);
  18. #define ADS1232_SPEED_LOW    do{ADS1232_SPEED=0;}while(0);
  19. #define ADS1232_GAIN1_HIGH   do{ADS1232_GAIN1=1;}while(0);
  20. #define ADS1232_GAIN1_LOW    do{ADS1232_GAIN1=0;}while(0);
  21. #define ADS1232_GAIN0_HIGH   do{ADS1232_GAIN0=1;}while(0);
  22. #define ADS1232_GAIN0_LOW    do{ADS1232_GAIN0=0;}while(0);
  23. #define ADS1232_A0_HIGH      do{ADS1232_A0=1;}while(0);
  24. #define ADS1232_A0_LOW       do{ADS1232_A0=0;}while(0);
  25. #define ADS1232_TEMP_HIGH    do{ADS1232_TEMP=1;}while(0);
  26. #define ADS1232_TEMP_LOW     do{ADS1232_TEMP=0;}while(0);

  27. void ADS1232_init(unsigned char channel, unsigned char gain, unsigned char speed, unsigned char temp)
  28. {
  29.     ADS1232_SCLK = 0;
  30.     ADS1232_PWDN_LOW;
  31.     if(channel==CHANNEL1)
  32.     {
  33.         ADS1232_A0_LOW;
  34.     }
  35.     else if(channel==CHANNEL2)
  36.     {
  37.         ADS1232_A0_HIGH;
  38.     }
  39.    
  40.     if(GAIN_1==gain)
  41.     {
  42.         ADS1232_GAIN1_LOW;
  43.         ADS1232_GAIN0_LOW;
  44.     }
  45.     else if(GAIN_2==gain)
  46.     {
  47.         ADS1232_GAIN1_LOW;
  48.         ADS1232_GAIN0_HIGH;
  49.     }
  50.     else if(GAIN_64==gain)
  51.     {
  52.         ADS1232_GAIN1_HIGH;
  53.         ADS1232_GAIN0_LOW;
  54.     }
  55.     else if(GAIN_128==gain)
  56.     {
  57.         ADS1232_GAIN1_HIGH;
  58.         ADS1232_GAIN0_HIGH;
  59.     }
  60.    
  61.     if(SPEED_10==speed)
  62.     {
  63.         ADS1232_SPEED_LOW;
  64.     }
  65.     else if(SPEED_80==speed)
  66.     {
  67.         ADS1232_SPEED_HIGH;
  68.     }
  69.    
  70.     if(TEMP_ON==temp)
  71.     {
  72.         ADS1232_TEMP_HIGH;
  73.     }
  74.     else if(TEMP_OFF==temp)
  75.     {
  76.         ADS1232_TEMP_LOW;
  77.     }
  78.    
  79.     ADS1232_PWDN_HIGH;
  80. }


  81. char ADS1232_read_value(long int *value)
  82. {
  83.     long int temp=0;
  84.     unsigned char i=0;
  85.    
  86.     if(ADS1232_READY==ADS1232_DOUT)
  87.     {
  88.         ADS1232_SCLK_LOW;
  89.         for(i=0; i<24; i++)
  90.         {
  91.             ADS1232_SCLK_HIGH;
  92.             temp <<= 1;
  93.             if(1==ADS1232_DOUT)
  94.             {
  95.                 temp |= 0x01;
  96.             }
  97.             ADS1232_SCLK_LOW;
  98.         }
  99.         ADS1232_SCLK_HIGH;  // The 25th SCLK to force DOUT high
  100.         ADS1232_SCLK_LOW;
  101.         if((temp&0x800000)==0x800000)
  102.         {
  103.             temp ^= 0Xffffff;
  104.             temp = -(temp+1);
  105.         }
  106.         *value = temp;
  107.         return ADS1232_READ_FINISH;
  108.     }
  109.     else
  110.     {
  111.         return ADS1232_BUSY;
  112.     }
  113. }
复制代码下面是ADS1232的驱动代码
进口小开关
2楼-- · 2020-01-14 00:27
主函数也来了
  1. int main(void)
  2. {
  3.         signed char brightness=8;
  4.     long int num = 0;
  5.     int i=-20;
  6.     char temp=0;
  7.         TM1638_init();
  8.         TM1638_set_brightness(4);
  9.         uart_init(9600);
  10.     timer_init();
  11.     ADS1232_init(CHANNEL2, GAIN_128, SPEED_10, TEMP_OFF);

  12.     EA = 1;
  13.     while(1)
  14.     {
  15.         communicate_with_HMI();
  16.         TM1638_display_num(i++);
  17.         timer0_main_loop();
  18.         key_main_loop();
  19.         if(key1_on)
  20.         {
  21.             LED1 = ~LED1;
  22.         }
  23.         temp = ADS1232_read_value(&num);
  24.         if(temp==ADS1232_READ_FINISH)
  25.         {
  26.             printf("%8ld ", num);
  27.         }
  28.         if(f_1s)
  29.         {
  30.             LED2 = ~LED2;
  31.         }
  32.     }
  33. }
复制代码
进口小开关
3楼-- · 2020-01-14 04:37
顶一下吧,希望有人能指点一下。
一刀断天下
4楼-- · 2020-01-14 09:25
做这么高精度的采集,7805供电好像不好吧。
进口小开关
5楼-- · 2020-01-14 13:53
 精彩回答 2  元偷偷看……
wallelectronics
6楼-- · 2020-01-14 18:20
你传感器是不是没安装好?还需要一个东西把传感器“托”起来的。

一周热门 更多>