Tải bản đầy đủ (.docx) (39 trang)

MSP430G2553 và Cảm biến 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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.21 MB, 39 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CẦN THƠ

BÁO CÁO VI XỬ LÝ
ĐỒ ÁN

Đếm và phân loại sản phẩm
theo khối lượng

Giáo viên hướng dẫn:Trần Hữu Danh

Ngày 3 tháng 5 năm 2018


PHỤ LỤC
Page 1 of 39


I.Cảm biến lực Loadcell …………………………….….………………….…….. 4
1.1) Loadcell………………………………….……..……..……..….. 4
1.2) Cấu tạo ……. ………………………….….…..……………….... 4
1.3) Phân loại……………………………...….….…......……….……. 7
1.4) Ứng dụng của Loadcell ………………....……….........…………. 8
1.5) Các thông số của Loadcell (5kg) …………………....…....….… 9
II.Module HX711…………………………………..……………..….…..…..… 10
2.1) Cấu tạo…………………………….……….………..………..… 11
2.2) Nguyên lý hoạt động…………………………....……....…...… 11
2.3) Thông số kĩ thuật HX711……………………….....….……..… 12
2.4) Timing Clock……………...….…………….……..……..…….. 12
III.MSP430G2553……………………………………………...…….........…….. 13
3.1) Sơ đồ chân……………………………………….....…….…....... 13


3.2) Thông số kỹ thuật và ưu điểm của msp430g2553 …………….. 14
IV.Sơ đồ khối nguyên lý làm việc………………………………...……....……. 15
V.Lưu đồ của chương trình…………………………………….….….…...…… 15
VI.Sơ đồ nguyên lý…………………………………………..….…......…......… 16
VII.Mạch in…………………………………………………..…...….….....…… 17
VII.Phần code chương trình………………………………….……..……..…… 18
IX.Mô hình thực tế…………………………………………….…….……..…… 33
X. Nguyên lý hoạt động………………………………………..….….......…..… 34
XI. Kết quả đạt được……………………………..…….…………….…………. 34
Page 2 of 39


XII. Tài liệu tham khảo……………………………..…….……….....…………. 35

Page 3 of 39


I.Cảm biến lực Loadcell (5kg):
1.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,

1.2)

tĩnh hay các lực biến thiên chậm.
Cấu tạo: Loadcell được cấu tạo bởi hai thành phần,thành 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.

Hình 2: Mạch căn bản của cầu Wheatstone
Page 4 of 39


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ề.

Hình 3:Nguyên lý hoạt động của loadcell

Page 5 of 39


Điện trở của strain gauge đươc tính theo công thức :

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.

Hình 4: Strain gauge (Mô tả thay đổi của lực tác dụng)

Page 6 of 39


1.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)
 Loại theo kích thước và khả năng chịu tải: Loại bé, vừa, lớn
 Loại Loadcell theo hình dạng: Dạng đĩa, dạng thanh, dạng trụ, dạng cầu,
dạng chữ S ,.. như hình dưới

Hình 5 :Các dạng của Loadcell
Page 7 of 39


 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

Hì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

Page 8 of 39


1.5) Các thông số của Loadcell (5kg):
o
o
o
o
o
o
o
o
o
o
o
o
o
o

Điện áp điều khiển: 5-10v
Tín hiệu đầu ra: tín hiệu điện áp
Khói lượng đo lớn nhất: 5kg
Capacity: 5kg

Rated output (Tỷ lệ điện áp ra): 1.0 ± 0.1mV / V
Đại số tuyến tính / Combined error (%R.O): 0.05
Nhiệt độ hoạt động: -20 ~ 65°C
Độ lệch tuyến tính (%): 0,05
Ảnh hưởng nhiệt độ tới độ nhạy %RO/ độ C: 0.003
Ảnh hưởng nhiệt độ tới điểm không %RO/ độ C: 0.02
Trở kháng đầu vào (Ω ): 1066 +- 20
Trở kháng ngõ ra (Ω ): 1000 +- 20
Bảo vệ quá tải / Safety overload (% R.C) : 120
Ultimate overload %RO: 150

Loadcell có 4 dây có màu lần lượt là đen, đỏ, trắng và xanh, trong đó có 2 dây để
cấp nguồn và 2 dây cấp tín hiệu ra. Tùy loại loadcell và nhà sản xuất mà các dây
này có chức năng khác nhau nhưng thường thì cặp dây đỏ - đen là dây cấp nguồn,
dây đỏ cấp nguồn dương và dây đen nối mass, 2 dây còn lại là dây tín hiệu (có thể
phát hiện chính xác 2 dây còn lại dây nào là dây tín hiệu dương và dây nào là dây
tín hiệu âm bằng cách mắc thử mạch và nếu tín hiệu cân ra là âm thì đảo 2 dây này
lại thì sẽ không còn hiện tượng này nữa.

Page 9 of 39


Hình 7: Loadcell 5Kg

II.Module HX711:Là modun chuyển đổi ADC (Analog to Digital
Converter) 24bit , HX711 được thiết kế để chuyển đối tín hiệu và ứng dụng điều
khiển công nghiệp để giao tiếp trực tiếp với một cảm biến cầu.
HX711 có khả năng phản ứng nhanh, chống nhiễu tốt, và độ tin cậy cao.

Hình 8 :Module HX711

2.1) Cấu tạo:
Page 10 of 39


Hình 9:Cấu tạo của Module HX711

2.2) Nguyên lý hoạt động:
Cấu tạo chính là HX711 đọc tín hiệu Analog của Loadcell qua kênh gốm 4 dây:
VCC(E+), GND(E-), IN A+ và IN A- rồi chuyển đổi sang tín hiệu digital và truyền
sang vi điều khiển khi có xung CK (Do tín hiệu ra của loadcell là nhỏ (thường
không quá 30mV) những tín hiệu nhỏ như vậy dễ dàng bị ảnh hưởng của nhiều loại
nhiễu như: Nhiễu điện từ, Sự thay đổi điện trở dây cáp dẫn tín hiệu (Do thay đổi
thất thường của nhiệt độ môi trường tác động lên dây cáp truyền dẫn. - v.v...))

Thực tế còn rất nhiều yếu tố khác liên quan đến độ chính xác của hệ thống
cân như:






Quá trình chỉnh định hệ thống.
Nhiễu rung và ồn.
Do tác dụng chuyển hướng lực trong các cơ cầu hình ống.
Quá trình phân tích dò tìm lỗi.
Thay thế các thành phần trong hệ thống cân hoặc các hệ thống
liên quan.
Page 11 of 39



 Đi dây cáp tín hiệu dài.
 Môi trường hoạt động quá kín v.v...

2.3) Thông số kĩ thuật HX711:





Điện áp hoạt động: 2.7 V - 5V
Dòng tiêu thụ <1.5Ma
Tốc độ lấy mẫu:10-80 SPS(Có thể tùy chỉnh)
Độ phân giải điện áp:40mv

2.4) Timing Clock:
- Dữ liệu nhận về trên chân Dout.
- Xung Clock trên chân SCK

Bảng Tần số đáp ứng của HX711

-Với clock duty 50% ,tần số cao nhất trên clock(SCK,), f=2,5Mhz nếu
tốc độ cao hơn 0.2us sẽ gây ra lỗi dữ liệu
-Thời gian mức logic 1 trên SCK không được lớn hơn 50us
Page 12 of 39


 Kết nối Hx711 với Loadcell và MSP430G2553:
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 EDây xanh Loadcell kết nối với A+
Dây trắng Loadcell kết nối với ANgõ ra:
Chân SCK kết nối với chân P1.1của MSP430G2553
Chân DT kết nối với chân P1.2 của MSP430G2553

III.MSP430G2553:
3.1) Sơ đồ chân:

 Ngõ vào:
Chân SCK kết nối với chân P1.1 của MSP430G2553
Chân DT kết nối với chân P1.2 của MSP430G2553
 Ngõ ra: Dữ liệu
Chân P1.4 kết nối với D4 của LCD
Chân P1.5 kết nối với D5 của LCD
Chân P1.6 kết nối với D6 của LCD
Chân P1.7 kết nối với D7 của LCD
Vi điều khiển MSP430G2553 thực hiện điều khiển toàn bộ quá trình chuyển
đổi từ tín hiệu lực đo được thành dữ liệu số thể hiện trung thực nhất và giao tiếp
với các thiết bị khác để trao đổi thông tin

Page 13 of 39


3.2) Thông số kỹ thuật và ưu điểm của msp430g2553
(DIP20):
-Low Supply-Voltage Range: 1.8 V to 3.6 V
- Cấu trúc sử dụng nguồn thấp giúp kéo dài tuổi thọ của Pin (siêu tiết kiệm điện):
+Duy trì 0.1µA dòng nuôi RAM.
+Chỉ 0.8µA real-time clock.
+230 µA/ MIPS.

-Bộ tương tự hiệu suất cao cho các phép đo chính xác
-Bộ giám sát điện áp nguồn.
-16 bit RISC CPU cho phép được nhiều ứng dụng, thể hiện một phần ở kích thước
Code lập trình.
+Thanh ghi lớn nên loại trừ được trường hợp tắt nghẽn tập tin khi đang làm việc.
+Thiết kế nhỏ gọn làm giảm lượng tiêu thụ điện và giảm giá thành.
+Tối ưu hóa cho những chương trình ngôn ngữ bậc cao như C, C++Tối ưu hóa cho
những chương trình ngôn ngữ bậc cao như C, C++
-Có 7 chế độ định địa chỉ.
-Khả năng ngắt theo véc tơ lớn.
+ Trong lập trình cho bộ nhớ Flash cho phép thay đổi Code một cách linh hoạt,
phạm vi rộng, bộ nhớ Flash còn có thể lưu lại như nhật ký của dữ liệu.
-Tần số bên trong lên đến 16 MHz với bốn chế độ tần số được hiệu chỉnh
-Crystal 32 kHz
-Năm chế độ tiết kiệm năng lượng

Page 14 of 39


IV.Sơ đồ khối nguyên lý làm việc :
Tín hiệu

Tín hiệu
MSP430G255

Hx711

Loadcell
Analog


Digital

3

V.Lưu đồ của chương trình :
Bắt đầu

Khởi tạo LCD hiển thị
thông tin đề tài

Đọc khối lượng Loadcell, phân
loại và hiển thị khối lượng đọc
được

Hiển thị khối lượng đo được
Page 15 of 39

LCD


VI.Sơ đồ nguyên lý:

Page 16 of 39


Page 17 of 39


VII.Mạch in:


Page 18 of 39


VII.Phần code chương trình:
#include "msp430.h"
#include "intrinsics.h"
#include "string.h"
#include "stdio.h"
//---------------------------------------------------------------------------union reg {
struct bit {
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
}_BIT;
unsigned char _BYTE;
};
union reg* P2_DIR=(union reg*)0x2a; //khai bao dia chi o nho
union reg* P2_OUT=(union reg*)0x29;
union reg* P2_SEL=(union reg*)0x2e;
union reg* P2_IN=(union reg*)0x28;
Page 19 of 39


union reg* P1_SEL=(union reg*)0x26;
union reg* P1_DIR=(union reg*)0x22; //khai bao dia chi o nho

union reg* P1_OUT=(union reg*)0x21;
union reg* P1_IN=(union reg*)0x20;
//============================================
#define MCLK_F 1
/***************************************************
* HARD DEFINITIONS
***************************************************
/* Display ON/OFF Control definitions */
#define DON

0x0F /* Display on

*/

#define DOFF

0x0B /* Display off

*/

#define CURSOR_ON 0x0F /* Cursor on

*/

#define CURSOR_OFF 0x0D /* Cursor off

*/

#define BLINK_ON


0x0F /* Cursor Blink

*/

#define BLINK_OFF 0x0E /* Cursor No Blink */
/* Cursor or Display Shift definitions */
#define SHIFT_CUR_LEFT

0x04

#define SHIFT_CUR_RIGHT 0x05
#define SHIFT_DISP_LEFT 0x06
#define SHIFT_DISP_RIGHT 0x07
/* Function Set definitions */
#define FOUR_BIT 0x2C /* 4-bit Interface

*/

#define EIGHT_BIT 0x3C /* 8-bit Interface

*/

Page 20 of 39


#define LINE_5X7

0x30 /* 5x7 characters, single line */

#define LINE_5X10 0x34 /* 5x10 characters


*/

#define LINES_5X7 0x38 /* 5x7 characters, multiple line*/
// Map: LCD PIN <-> Output_Port _ out/dir -> Output_Pin#define
LCD_RS
P1_OUT -> _BIT.b0
#define LCD_RS_DIR
#define LCD_EN

P1_DIR -> _BIT.b0
P1_OUT -> _BIT.b3

#define LCD_EN_DIR

P1_DIR -> _BIT.b3

#define LCD_DATA_4

P1_OUT -> _BIT.b4

#define LCD_DATA_4_DIR P1_DIR -> _BIT.b4
#define LCD_DATA_5

P1_OUT -> _BIT.b5

#define LCD_DATA_5_DIR P1_DIR -> _BIT.b5
#define LCD_DATA_6

P1_OUT -> _BIT.b6


#define LCD_DATA_6_DIR P1_DIR -> _BIT.b6
#define LCD_DATA_7

P1_OUT -> _BIT.b7

#define LCD_DATA_7_DIR P1_DIR-> _BIT.b7
//============================================
//CHUONG TRINH DELAY:
void delay_ms(unsigned int ms){
while(ms--){
__delay_cycles(1000);
}}
unsigned int value;
//================================
void lcd_delay_us (unsigned long t)
{ int i;
Page 21 of 39


for (i = 0; i__delay_cycles(MCLK_F);
}
void lcd_delay_ms (unsigned long t)
{ int i;
for (i = 0; i__delay_cycles(MCLK_F*1000);
}
//============================================
//THU VIEN LCD 1602:

//**************************************************
// Send a byte of data (rs == 1) or command (rs == 0) to LCD
//**************************************************
void lcd_put_byte(unsigned char rs, unsigned char data)
{ LCD_RS = 0;
if(rs) LCD_RS = 1;
lcd_delay_us(20);
LCD_EN = 0;
// send the high nibble
if (data&BIT4) LCD_DATA_4 = 1;
else LCD_DATA_4 = 0;
if (data&BIT5) LCD_DATA_5 = 1;
else LCD_DATA_5 = 0;
if (data&BIT6) LCD_DATA_6 = 1;
else LCD_DATA_6 = 0;
if (data&BIT7) LCD_DATA_7 = 1;
Page 22 of 39


else LCD_DATA_7 = 0;
lcd_delay_us(20);
LCD_EN = 1;
lcd_delay_us(20);
LCD_EN = 0;
// send the low nibble
if (data&BIT0) LCD_DATA_4 = 1;
else LCD_DATA_4 = 0;
if (data&BIT1) LCD_DATA_5 = 1;
else LCD_DATA_5 = 0;
if (data&BIT2) LCD_DATA_6 = 1;

else LCD_DATA_6 = 0;
if (data&BIT3) LCD_DATA_7 = 1;
else LCD_DATA_7 = 0;
lcd_delay_us(20);
LCD_EN = 1;
lcd_delay_us(20);
LCD_EN = 0;
}
// Initialization for LCD module
//**************************************************
void lcd_init(void)
{// Set all signal pins as output
LCD_RS_DIR = 1;
LCD_EN_DIR = 1;
Page 23 of 39


LCD_DATA_4_DIR = 1;
LCD_DATA_5_DIR = 1;
LCD_DATA_6_DIR = 1;
LCD_DATA_7_DIR = 1;
LCD_RS = 0;
LCD_EN = 0;
lcd_delay_ms(200);

// delay for power on

// reset LCD
lcd_put_byte(0,0x30);
lcd_delay_ms(50);

lcd_put_byte(0,0x30);
lcd_delay_ms(50);
lcd_put_byte(0,0x32);
lcd_delay_ms(200);
lcd_delay_ms(2);

// delay for LCD reset
// wait for LCD

lcd_put_byte(0,FOUR_BIT & LINES_5X7);
type
lcd_delay_ms(2);

// Set LCD

// wait for LCD

lcd_put_byte(0,DOFF&CURSOR_OFF&BLINK_OFF);
display off
lcd_delay_ms(2);

// wait for LCD

lcd_put_byte(0,DON&CURSOR_OFF&BLINK_OFF);
display on
lcd_delay_ms(2);

//

// wait for LCD


lcd_put_byte(0,0x01);
home
lcd_delay_ms(2);

//

// clear display and move cursor to

// wait for LCD
Page 24 of 39


lcd_put_byte(0,SHIFT_CUR_LEFT);
mode
lcd_delay_ms(2);

// wait for LCD

lcd_put_byte(0,0x01);
home
lcd_delay_ms(2);

// cursor shift

// clear display and move cursor to

// wait for LCD

}

//**************************************************
// Clear the LCD
//**************************************************
void lcd_clear(void)
{
lcd_put_byte(0,0x01);
lcd_delay_ms(2);

// display off

// wait for LCD}

void lcd_gotoxy(unsigned char col, unsigned char row)
{ unsigned char address;
if(row!=0)
address=0x40;
else
address=0;
address += col;
lcd_put_byte(0,0x80|address);
lcd_delay_ms(2);

// wait for LCD

}
//**************************************************
void lcd_putc(char c)
Page 25 of 39



×