電子稱DIY(貼應變片+寫代碼)


第一步、應變片介紹

 

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

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

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

第二部分:應變片如何測量應變力的(對應的R1\R2\R3\R4實際上的貼片方法):

 

 

電橋的四個臂上接工作應變片,都參與機械變形,同處一個溫度
場,溫度影響相互抵消,電壓輸出靈敏度高。當 4 個應變片的材料、
阻值都想同時,可推導出以下公式:

 

 

 

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

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

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

第三部分、原理圖(帶器件參數):

 

 部分圖片來自網絡

 (注:以上原理圖中的R1\R2\R3\R4均為圖二對應的電阻。應和圖二所示一致。)

 

第四部分、程序代碼:

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

 

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

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

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

附錄:(此處R1\R2\R3\R4不一定和第二部分的圖2中的R1\R2\R3\R4對應

 

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

 

-----------------------------------------------------------------------貼應變片-------------------------------------------------------------------------------------------------

 

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

 

貼應變片:

用銼刀和粗砂紙等工具將試件在鋼板上的貼片位置的油污、漆層、銹跡、電鍍層除去,再用細砂紙打磨成 45°交叉紋,之后用鑷子鑷起丙酮棉球將貼片處擦洗干凈,至棉球潔白為止。

 

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

-------------------------------------------------------------------應變片的其他貼法:-----------------------------------------------------------------------------------------

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

應變片的其他貼法:

 

溫度補償:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM