Đồ án vi xử lý sử dụng MSP430G2553 và Cảm biến trọng lượng loadCell 5kg + HX711 (Có code mẫu và sơ đồ chi tiết + giải thích) Đếm và phân loại sản phẩm theo khối lượng và cảnh báo nếu vượt quá khối lượng
Trang 1I GIỚI THIỆU ĐỀ TÀI
- Em đưa ra mô hình thiết kế và lập trình điều khiển cân điện
tử sử dụng MSP430G2553 hiển thị LCD.
II MỤC TIÊU YÊU CẦU
1 Mục tiêu:
Thiết kế được sơ đồ và giải thuật đề tài.
Giao tiếp được giữa cảm biến cân với MSP430 và giao tiếp giữa MSP430 với LCD.
2 Yêu cầu:
Nắm vững kiến thức về
Sơ đồ chân, cách giao tiếp và các chức năng của linh kiện được sử dụng.
Giải thuật lập trình và điều khiển.
III PHƯƠNG PHÁP THỰC HIỆN:
1 Tìm hiểu và lựa chọn linh kiện:
Đề tài sử dụng cảm biến loadcell loại 10kg
Trở kháng đầu vào : 1066 ±20
Trở kháng ngõ ra : 1000 ±20
Điện áp hoạt động : 5V
Dây đỏ : ngõ vào (+)
Dây đen : ngõ vào (-)
Dây xanh : ngõ ra (+)
Dây trắng : ngõ ra (-)
Trang 2Hình 1 : Cảm biến loadcell 10kg
Trang 31.1) Loadcell : là thiết bị cảm biến dùng để chuyển đổi lực
hoặc trọng lượng thành tín hiệu điện thường được sử dụng để cảm ứng các lực lớn, tĩnh hay các lực biến thiên chậm.
phần thứ nhất là Strain gauge và thành phần còn lại là Load
+Strain gauge Strain gauge là một điệ n trở đặc biệt chỉ nhỏ bằng móng tay, có điện trở thay đổi khi bị nén hay kéo dãn
và được nuôi bằng một nguồn điệ n ổn định, đượ c dán lên
“ Load ” - một thanh kim loại chịu tải có tính đàn hồi
Hình 1: Cấu tạo cảm biến Loadcell
Cấu tạo chính của Loadcell gồm các điện trở strain gauge R1,R2,R3,R4 kết nối thành một cầu trở Wheatstone (như hình dưới) và được dán vào bề mặt thân loadcell.
Trang 4Hình 2: Mạch căn bản của cầu Wheatstone
Một điện áp kích thích được cung cấp cho ngõ vào loadcell (2 góc (1) và (4) của cầu điện trở Wheatstone) và điện áp tín hiệu ra được đo giữa hai góc
Ban đầu cầu cân bằng,điện áp ra bằng 0V.Khi có lực tác động lên điện trở strain gauge(được mắc dưới bàn cân) nó
sẽ thay đổi giá trị => Mạch cầu không còn cân bằng nữa => Xuất hiện điện áp ở 2 điểm (Như hình) Từ đó ta lấy được khối lượng từ mức điện áp trả về
Trang 5Hình 3:Nguyên lý hoạt động của loadcell
Điện trở của strain gauge đươc tính theo công thức :
Trang 6 R= Điện trở strain gauge (Ohm)
L = Chiều dài của sợi kim loại strain gauge (m)
S = Tiết diện của sợi kim loại strain gauge (m2)
P= Điện trở suất vật liệu của sợi kim loại strain gauge
Khi dây kim loại bị lực tác động sẽ thay đổi điện trở
Khi dây bị lực nén, chiều dài strain gauge giảm, điện trở sẽ giảm xuống.
Khi dây bi kéo dãn, chiều dài strain gauge tăng, điện trở sẽ tăng lên
Điện trở thay đổi tỷ lệ với lực tác động
Trang 7Hình 4: Strain gauge (Mô tả thay đổi của lực tác dụng)
Trang 81.3) Phân loại:
Có thể phân loại Loadcells như sau:
Loại Loadcell theo lực tác động: chịu kéo (Shear Loadcell), chịu nén (Compression Loadcell), dạng uốn (Bending), chịu xoắn (Tension Loadcell)
Trang 9Hình 5 :Các dạng của Loadcell
Loại loadcell theo tín hiệu mã hóa:
o Tín hiệu từ Loadcell số (Digital Loadcell) truyền về bộ chỉ thị là dạng số (Đếm
xung =>Vi điều khiển =>hiển thị)
o Tín hiệu từ Loadcell tương tự (Analog Loadcell) truyền về bộ chỉ thị là dạng
điện áp.( Tín hiệu ra dạng tương tự => Khuếch đại =>ADC => vi điều khiển
=>hiển thị) o
Trang 10Hình 6:Digital Loadcell và Analog Loadcell
1.4) Ứng dụng của Loadcell:
Một ứng dụng khá phổ biến thường thấy của Loadcell là được sử dụng trong các loại Cân điện tử và chiếc cân kĩ thuật đòi hỏi độ chính xác cao cho tới những chiếc cân có trọng tải lớn trong công nghiệp như cân xe tải.Có một số loại Loadcell được gắn vào đầu của ngón tay robot để xác định độ bền kéo và lực nén tác động vào các vật khi chúng cầm nắm hoặc nhấc lên, và một vài ứng dụng phổ biến
khác
Trang 11 Hx711 là mạch đọc giá trị cảm biến loadcell với độ phân giải 24bit và chuyển sang giao tiếp 2 dây (clock và data) để gửi dữ liệu cho vi điều khiển.
Điện áp hoạt động: 2,7-5v
Dòng điện tiêu thụ: <1,5mA
Độ phân giải: 24 bit ADC
Ngõ vào:
Dây đỏ của Loadcell kết nối với E+
Dây đen Loadcell kết nối với
E-Dây xanh Loadcell kết nối với A+
Dây trắng Loadcell kết nối với
A- Ngõ ra:
Chân SCK kết nối với chân P1.0 của MSP430G2553
Chân DT kết nối với chân P1.5 của MSP430G2553
Hình 2: Mạch chuyển đổi ADC HX711
Trang 12 MSP430G2553
Ngõ vào:
Chân SCK kết nối với chân P1.0 của MSP430G2553
Chân DT kết nối với chân P1.5 của MSP430G2553
Ngõ ra: Dữ liệu
Chân P2.2 kết nối với D4 của LCD
Chân P2.3 kết nối với D5 của LCD
Chân P2.4 kết nối với D6 của LCD
Chân P2.5 kết nối với D7 của LCD
Hình 3: Sơ đồ chân của MSP430G2553
LCD loại 16x2
Trang 13Hình 4: LCD 16x2
2 Sơ đồ khối:
Trang 143 Lưu đồ:
4 Sơ đồ nguyên lí:
Trang 15#define ADDO P1OUT5
#define ADSK P1OUT0
#define ADDO_IN P1IN5
#define ADDO_DIR P1DIR5
#define ADSK_DIR P1DIR0
Trang 16unsigned long ReadCount(void);
void main( void )
Trang 17unsigned long ReadCount(void){
unsigned long Count;
Trang 20#define BlankSpace ' '
Register select pin connected to P0.0
Enable pin connected to P2.2
#define LCD_D4 _P2_OUT->_BIT.b2
#define LCD_D5 _P2_OUT->_BIT.b3
#define LCD_D6 _P2_OUT->_BIT.b4
#define LCD_D7 _P2_OUT->_BIT.b5
#define LCD_RS_DIR _P2_DIR->_BIT.b0
#define LCD_EN_DIR _P2_DIR->_BIT.b1
#define LCD_D4_DIR _P2_DIR->_BIT.b2
#define LCD_D5_DIR _P2_DIR->_BIT.b3
#define LCD_D6_DIR _P2_DIR->_BIT.b4
#define LCD_D7_DIR _P2_DIR->_BIT.b5
void DataBus(char value);
void LCD_CmdWrite( char cmd);
void LCD_Initilize();
void LCD_Write_Char( char dat);
Trang 21void LCD_GoToLineTwo();
void LCD_GoToXY(char row, char col);
void LCD_Write_String(char *string_ptr);
void LCD_Write_Number(unsigned int num);
void LCD_Write_Int(unsigned long n);
void LCD_Write_Float(float x, unsigned char coma);
void LCD_Write_Reg(char *name, int n);
void LCD_DisplayRtcTime(char hour,char min,char sec);
void LCD_DisplayRtcDate(char day,char month,char year);
Trang 22LCD_EN=0;
DataBus((cmd<<4) & 0xf0); // Send the Lower Nibble of the command to LCD LCD_RS=0; // Select the Command Register by pulling RS LOW LCD_EN=1; // Send a High-to-Low Pusle at Enable Pin
Trang 23P2SEL &= ~BIT7;
LCD_CmdWrite(LCD_RETURN_HOME); //Initilize the LCD in 4bit Mode LCD_CmdWrite(0x28);
LCD_CmdWrite(LCD_CURROR_OFF); // Display ON cursor ON
LCD_CmdWrite(LCD_CLEAR); // Clear the LCD
LCD_CmdWrite(LCD_LINE_ONE); // Move the Cursor to First line First Position
LCD_RS=1; // Select the Data Register by pulling RS HIGH
LCD_EN=1; // Send a High-to-Low Pusle at Enable Pin
delay_cycles(10);
LCD_EN=0;
delay_cycles(100);
Trang 24LCD_RS=1; // Select the Data Register by pulling RS HIGH
LCD_EN=1; // Send a High-to-Low Pusle at Enable Pin
and go to First line First Position
Trang 25char number
Trang 26//now pos points to the given XY pos
Trang 27unsigned char buffer[16];
unsigned char i,j;
if(n == 0)
{ LCD_Write_Char('0');
return;
} for(i=15; i>0 && n>0; i )
{
buffer[i] = (n%10)+'0';
n /= 10;
}
Trang 28{ LCD_Write_Char(buffer[j]);
Trang 29x=((float)x-temp); //*mysqr(10,coma);
if(coma!=0)
switch(coma){
case 1: x*=10;
break;
case 2: x*=100;
if(x<10) {LCD_Write_Char('0');}
break;
case 3: x*=1000;
if(x<100) {LCD_Write_Char('0');}
else if(x<10) {LCD_Write_Char('0'); LCD_Write_Char('0');}
break;
case 4: x*=10000;
if(x<1000) {LCD_Write_Char('0');}
else if(x<100) {LCD_Write_Char('0'); LCD_Write_Char('0');}
else if(x<10) {LCD_Write_Char('0'); LCD_Write_Char('0'); LCD_Write_Char('0');}
break;
}
Trang 30for(i = 0; i < size; i++) {
if((n & (mask >> i)) != 0) {
LCD_Write_Char('1');
} else {
LCD_Write_Char('0');
}
Trang 33// THU VIEN PORT MSP430x2xx
// VIET BOI : NGUYEN QUOC CUONG (QCN) TDH-K39 CAN THO
UNIVERSITY
// Version : 2.0
// Email: cuongb1306128@student.ctu.edu.vn
Trang 35union reg* _P1_OUT = (union reg*)0x21 ;
union reg* _P1_IN = (union reg*)0x20 ;
#define P1OUT0 _P1_OUT->_BIT.b0
#define P1OUT1 _P1_OUT->_BIT.b1
#define P1OUT2 _P1_OUT->_BIT.b2
#define P1OUT3 _P1_OUT->_BIT.b3
#define P1OUT4 _P1_OUT->_BIT.b4
#define P1OUT5 _P1_OUT->_BIT.b5
#define P1OUT6 _P1_OUT->_BIT.b6
#define P1OUT7 _P1_OUT->_BIT.b7
#define P2OUT0 _P2_OUT->_BIT.b0
#define P2OUT1 _P2_OUT->_BIT.b1
#define P2OUT2 _P2_OUT->_BIT.b2
#define P2OUT3 _P2_OUT->_BIT.b3
#define P2OUT4 _P2_OUT->_BIT.b4
#define P2OUT5 _P2_OUT->_BIT.b5
#define P2OUT6 _P2_OUT->_BIT.b6
#define P2OUT7 _P2_OUT->_BIT.b7
#define P1DIR0 _P1_DIR->_BIT.b0
#define P1DIR1 _P1_DIR->_BIT.b1
#define P1DIR2 _P1_DIR->_BIT.b2
Trang 36#define P1DIR4 _P1_DIR->_BIT.b4
#define P1DIR5 _P1_DIR->_BIT.b5
#define P1DIR6 _P1_DIR->_BIT.b6
#define P1DIR7 _P1_DIR->_BIT.b7
#define P2DIR0 _P2_DIR->_BIT.b0
#define P2DIR1 _P2_DIR->_BIT.b1
#define P2DIR2 _P2_DIR->_BIT.b2
#define P2DIR3 _P2_DIR->_BIT.b3
#define P2DIR4 _P2_DIR->_BIT.b4
#define P2DIR5 _P2_DIR->_BIT.b5
#define P2DIR6 _P2_DIR->_BIT.b6
#define P2DIR7 _P2_DIR->_BIT.b7
#define P1IN0 _P1_IN->_BIT.b0
#define P1IN1 _P1_IN->_BIT.b1
#define P1IN2 _P1_IN->_BIT.b2
#define P1IN3 _P1_IN->_BIT.b3
#define P1IN4 _P1_IN->_BIT.b4
#define P1IN5 _P1_IN->_BIT.b5
#define P1IN6 _P1_IN->_BIT.b6
#define P1IN7 _P1_IN->_BIT.b7
Trang 37#define P2IN2 _P2_IN->_BIT.b2
#define P2IN3 _P2_IN->_BIT.b3
#define P2IN4 _P2_IN->_BIT.b4
#define P2IN5 _P2_IN->_BIT.b5
#define P2IN6 _P2_IN->_BIT.b6
#define P2IN7 _P2_IN->_BIT.b7
#endif
6 Mô hình thực tế:
Trang 39 Khi mạch hoạt động, cảm biến Loadcell từ dạng tương tự analog kết nối với mạch khếch đại HX711 để biến đổi ADC dạng tín hiệu tương tự sang dạng tín hiệu số.
Mạch khuếch đại HX711 cho ra dữ liệu và xung để cấp vào ngõ vào của chân biến đổi ADC MSP430G2553 để xuất dữ liệu ra ngoài.
Vẫn còn sai số nhưng không đáng kể
Chưa thiết kế được chức năng phụ như lưu kết quả cân
được…!!!!