zoukankan      html  css  js  c++  java
  • 电子称DIY(贴应变片+写代码)

    第一步、应变片介绍

     

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    第二部分:应变片如何测量应变力的(对应的R1R2R3R4实际上的贴片方法):

     

    电桥的四个臂上接工作应变片,都参与机械变形,同处一个温度
    场,温度影响相互抵消,电压输出灵敏度高。当 4 个应变片的材料、
    阻值都想同时,可推导出以下公式:

     

     

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    第三部分、原理图(带器件参数):

     部分图片来自网络

     (注:以上原理图中的R1R2R3R4均为图二对应的电阻。应和图二所示一致。)

    第四部分、程序代码:

    51代码采集部分:

     1 /*=============================================
     2     AD24位数值提取函数
     3     一般提取6、7、8位数据
     4 =============================================*/
     5 unsigned long ReadCount(void)
     6 {
     7 //         unsigned long Count;
     8          unsigned char i;
     9          ADSK=0;
    10          Count=0;
    11          while(ADDO);
    12          for (i=0;i<24;i++)
    13                  {
    14                  ADSK=1;
    15                  Count=Count<<1;
    16                  ADSK=0;
    17                  if(ADDO) Count++;
    18                  }
    19          ADSK=1;
    20          Count=Count^0x800000;//抑或
    21          ADSK=0;
    22          return(Count);
    23 }

    STM32代码:

     1 /*=============================================
     2     AD24位数值提取函数
     3     一般提取6、7、8位数据
     4 =============================================*/
     5 //#define ADD0_R GPIO_ResetBits(GPIOA,GPIO_Pin_1)
     6 //#define ADD0_S GPIO_SetBits(GPIOA,GPIO_Pin_1)
     7 //#define ADSK_R GPIO_ResetBits(GPIOA,GPIO_Pin_2)
     8 //#define ADSK_S GPIO_SetBits(GPIOA,GPIO_Pin_2)
     9 
    10 unsigned long ADC_ReadCount(void)
    11 {
    12          unsigned char i;
    13             unsigned long Count;
    14             Count=0;
    15             GPIO_ResetBits(GPIOC,GPIO_Pin_5);//ADSK=0;        
    16             delay_us(20);
    17         while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==1)// while(ADDO);
    18                         delay_us(20);
    19          for (i=0;i<24;i++)
    20                  {
    21                  GPIO_SetBits(GPIOC,GPIO_Pin_5);//ADSK=1;
    22                                  delay_us(20);
    23                  Count=Count<<1;
    24                     GPIO_ResetBits(GPIOC,GPIO_Pin_5);//ADSK=0;
    25                                  delay_us(20);
    26                  if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==1) Count++;
    27                                  delay_us(20);
    28                  }
    29          GPIO_SetBits(GPIOC,GPIO_Pin_5);//ADSK=1;
    30                              delay_us(20);
    31          Count=Count^0x800000;//抑或
    32          GPIO_ResetBits(GPIOC,GPIO_Pin_5);//ADSK=0;
    33                              delay_us(20);
    34          return(Count);
    35 }

     完整测试代码:

    51带串口收发采集书籍的完整代码:

      1 #include<reg52.h>
      2 #include <math.h>
      3 #define uint unsigned int 
      4 #define uchar unsigned char 
      5 uchar flag ,a ,i;
      6 uchar code table[]="I Get ";
      7 ///////////////////////////////////////    
      8 sbit ADDO = P1^5;
      9 sbit ADSK = P1^0;
     10 unsigned long Count;
     11     void delay_50ms(uint t);
     12 /*=============================================
     13     AD24位数值提取函数
     14     一般提取6、7、8位数据
     15 =============================================*/
     16 unsigned long ReadCount(void)
     17 {
     18 //         unsigned long Count;
     19          unsigned char i;
     20          ADSK=0;
     21          Count=0;
     22          while(ADDO);
     23          for (i=0;i<24;i++)
     24                  {
     25                  ADSK=1;
     26                  Count=Count<<1;
     27                  ADSK=0;
     28                  if(ADDO) Count++;
     29                  }
     30          ADSK=1;
     31          Count=Count^0x800000;//抑或
     32          ADSK=0;
     33          return(Count);
     34 }
     35 /*============================================
     36 求平均值函数
     37 ===============================================*/
     38 long averageValue(uchar times)
     39     {
     40         uchar i;
     41         long sum = 0;
     42         for (i = 0; i < times; i++)
     43             {
     44                 sum += ReadCount();
     45             }
     46 
     47         return sum / times;
     48     }
     49 /*===============================================
     50 串口初始化函数
     51 ===============================================*/
     52 void init()
     53 {
     54   TMOD=0x20;
     55     TH1=0xfd;
     56     TL1=0xfd;
     57     TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=0;
     58     
     59 }
     60 void delay_50ms(uint t)
     61 {
     62     uint j;
     63     for( ;t>0;t--)
     64         for(j=6245;j>0;j--);
     65         
     66 }
     67 
     68 void main()
     69 {
     70   
     71     unsigned long  num;
     72     uchar s[9];
     73     init();
     74     while(1)
     75     {
     76         /************************************/
     77            num=averageValue(20);
     78             num=num-8650000;
     79            num=num*416;
     80            for(i=8;i>0;i--)
     81                     {
     82                                 s[i-1]=(uchar)num%10+0x30;
     83                             if(num<1)
     84                                     s[i-1]=0x30;
     85                                 num=num /10;
     86                     }
     87                     s[8]='G';
     88         /************************************/
     89 /*==================================================
     90     long val = (averageValue() - _offset);//_offset
     91     return (float) val / _scale;//再.H函数中设置scale = 416.f
     92 
     93 =====================================================*/                    
     94                     
     95                     
     96         
     97            ES=0;//关闭串口中断
     98                     for(i=0;i<9;i++)
     99              {
    100                 SBUF=s[i];//通过串口发送数据
    101                   while(!TI);//检查是否发送数据发送完毕
    102                   TI=0;
    103              }
    104             delay_50ms(4);        
    105     }
    106 
    107 }
    108 
    109 void set() interrupt 4
    110 {
    111   RI=0;
    112     a=SBUF;
    113     flag=1;
    114 
    115 }
    View Code

     STM32完整代码:

    c代码.c 文件

      1 #include<reg52.h>
      2 #include <math.h>
      3 #include <stdio.h>
      4 #define uint unsigned int 
      5 #define uchar unsigned char 
      6 uchar flag ,a ,i;
      7 uchar code table[]="I Get ";
      8 ///////////////////////////////////////    
      9 sbit ADDO = P1^5;
     10 sbit ADSK = P1^0;
     11 unsigned long Count;
     12     void delay_50ms(uint t);
     13 /*=============================================
     14     AD24位数值提取函数
     15     一般提取6、7、8位数据
     16 =============================================*/
     17 unsigned long ReadCount(void)
     18 {
     19 //         unsigned long Count;
     20          unsigned char i;
     21          ADSK=0;
     22          Count=0;
     23          while(ADDO);
     24          for (i=0;i<24;i++)
     25                  {
     26                  ADSK=1;
     27                  Count=Count<<1;
     28                  ADSK=0;
     29                  if(ADDO) Count++;
     30                  }
     31          ADSK=1;
     32          Count=Count^0x800000;//抑或
     33          ADSK=0;
     34          return(Count);
     35 }
     36 /*============================================
     37 求平均值函数
     38 ===============================================*/
     39 long averageValue(uchar times)
     40     {
     41         uchar i;
     42         long sum = 0;
     43         for (i = 0; i < times; i++)
     44             {
     45                 sum += ReadCount();
     46             }
     47 
     48         return sum / times;
     49     }
     50 /*===============================================
     51 串口初始化函数
     52 ===============================================*/
     53 void init()
     54 {
     55   TMOD=0x20;
     56     TH1=0xfd;
     57     TL1=0xfd;
     58     TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=0;
     59     
     60 }
     61 void delay_50ms(uint t)
     62 {
     63     uint j;
     64     for( ;t>0;t--)
     65         for(j=6245;j>0;j--);
     66         
     67 }
     68 
     69 void main()
     70 {
     71   
     72     unsigned long  num;
     73     uchar s[25];
     74     init();
     75     while(1)
     76     {
     77         /************************************/
     78            num=averageValue(20);
     79             num=num-8650000;
     80            num=num*416;
     81             sprintf(s,"称得重量:%f g",num);
     82           
     83         /************************************/
     84 /*==================================================
     85     long val = (averageValue() - _offset);//_offset
     86     return (float) val / _scale;//再.H函数中设置scale = 416.f
     87 
     88 =====================================================*/                    
     89                     
     90                     
     91         
     92            ES=0;//关闭串口中断
     93                     for(i=0;i<25;i++)
     94              {
     95                 SBUF=s[i];//通过串口发送数据
     96                   while(!TI);//检查是否发送数据发送完毕
     97                   TI=0;
     98              }
     99             delay_50ms(4);        
    100     }
    101 
    102 }
    103 
    104 void set() interrupt 4
    105 {
    106   RI=0;
    107     a=SBUF;
    108     flag=1;
    109 
    110 }
    View Code

     .h文件:

    1 #ifndef __AD24_H
    2 #define __AD24_H
    3 #include "stm32f10x.h"
    4 #include "delay.h"
    5 void ADC24_Configtion(void);
    6 long averageValue(unsigned char times);
    7 
    8 #endif 
    View Code

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    附录:(此处R1R2R3R4不一定和第二部分的图2中的R1R2R3R4对应

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------贴应变片-------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    贴应变片:

    用锉刀和粗砂纸等工具将试件在钢板上的贴片位置的油污、漆层、锈迹、电镀层除去,再用细砂纸打磨成 45°交叉纹,之后用镊子镊起丙酮棉球将贴片处擦洗干净,至棉球洁白为止。

     

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    -------------------------------------------------------------------应变片的其他贴法:-----------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    应变片的其他贴法:

    温度补偿:

  • 相关阅读:
    《2018面向对象程序设计(java)课程学习进度条》
    201771010110-孔维滢-实验四 软件项目案例分析
    201771010110-孔维滢 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
    201771010110-孔维滢 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
    201771010110-孔维滢 实验一 软件工程准备—<初步了解软件工程>
    孔维滢《面向对象程序设计(java)》课程学习总结
    孔维滢 20171010110《面向对象程序设计(java)》第十七周学习总结
    201771010110孔维滢《面向对象程序设计Java》第十六周实验总结
    孔维滢 20171010110《面向对象程序设计(java)》第十五周学习总结
    孔维滢 201771010110《面向对象程序设计(java)》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/pertor/p/6516638.html
Copyright © 2011-2022 走看看