Professional Documents
Culture Documents
MỤC LỤC
1
LÊ DUY MINH – 090 4011 740
Cảm biến gia tốc MMA8452Q đo rung động theo 3 phương X, Y, Z với đầu ra
số có độ phân giải 12/8 bít được đóng gói với các hàm nhúng có thể lập trình. Hai
chân ngắt có thể cấu hình với các hàm ngắt nhằm tiết kiệm năng lượng cho vi điều
khiển chủ trong quá trình thu thập dữ liệu liên tục.
Có thể lựa chọn độ phân giải ±2g, ±4g và ±8g với bộ lọc thông cao thời gian
thực cho cảm biến gia tốc MMA8452Q.
Thông số kỹ thuật
- Kích thước: 3x3x1mm.
- Nguồn nuôi: 1,95 – 3,6 VDC.
- Mức điện áp giao tiếp: 1,95 – 3,6 VDC.
- Độ phân giải: ±2g, ±4g, ±8g.
- Tần số lấy mẫu: từ 1,56 Hz đến 800 Hz.
- Có thể cấu hình tín hiệu ra 12 bít hoặc 8 bít.
- Giao tiếp I2C.
- Thiết lập 6 nguồn ngắt khác nhau cho 2 chân ngắt.
- Đo gia tốc theo ba phương X, Y, Z.
Hình 2. Quy định phương đo của cảm biến gia tốc MMA8452Q.
2
LÊ DUY MINH – 090 4011 740
II. GIAO TIẾP I2C GIỮA VI ĐIỀU KHIỂN STM32F103 VÀ CẢM BIẾN GIA
TỐC MMA8452Q
1. Giao tiếp I2C của cảm biến gia tốc MMA8452Q
Dữ liệu gia tốc có thể truy cập qua chuẩn truyền thông I 2C nhằm phù hợp với
việc kết nối cảm biến với vi điều khiển. Cảm biến gia tốc MMA8452Q có thể sinh ra
một ngắt đặc trưng mỗi khi một tập hợp tín hiệu gia tốc được cập nhật nhằm đồng bộ
hóa việc lấy dữ liệu.
Các thanh ghi trong cảm biến MMA8452Q cũng được truy cập qua giao tiếp
I C. Để kích hoạt truyền thông I2C, chân VDDIO phải ở mức điện áp cao. Trường hợp
2
chân VDD ở mức điện áp thấp nhưng chân VDDIO ở mức điện áp cao MMA8452Q
sẽ ở chế độ tắt và giao tiếp I2C bị bỏ qua, vi điều khiển có thể giao tiếp với thiết bị
khác qua đường truyền thông I2C này .
Chân Mô tả
SCL Xung đồng hồ giao tiếp I2C
Bảng 1. Các chân dùng trong truyền thông I2C của cảm biến MMA8452Q
Hai chân tín hiệu liên quan đến truyền thông I 2C, đường tín hiệu xung tuần tự
SCL và đường dữ liệu tuần tự SDA. SDA là đường truyền hai chiều dùng cho việc
truyền và nhận tín hiệu. Yêu cầu vật lý của các đường tín hiệu này là có điện trở kéo
lên nối với VDDIO.
1.1 Hoạt động I2C
Việc thực thi truyền thông trên đường truyền bắt đầu bằng tín hiệu START.
Điều kiện START được định nghĩa bằng việc chuyển mức tín hiệu từ cao xuống thấp
trên đường SDA trong khi đường SCL được giữ ở mức cao. Sau khi tín hiệu START
được truyền bởi vi điều khiển chủ, đường truyền ở trạng thái bận. Byte kế tiếp được
truyền sau lệnh START sẽ bao gồm địa chỉ của cảm biến MMA8452Q trong 7 bít đầu
tiên và bít thứ 8 xác định vi điều khiển sẽ truyền hay nhận dữ liệu từ cảm biến
MMA8452Q. Khi một địa chỉ được truyền đi, mỗi thiết bị trong hệ thống sẽ so sánh
3
LÊ DUY MINH – 090 4011 740
địa chỉ trên đường truyền với địa chỉ của mình. Nếu địa chỉ phù hợp, thiết bị sẽ xác
nhận lại với vi điều khiển chủ. Xung nhịp thứ 9 sẽ là tín hiệu ACK (acknowledge).
Thiết bị truyền sẽ bỏ đường SDA trong suốt chu kỳ ACK, thiết bị nhận sẽ kéo đường
SDA xuống mức thấp trong chu kỳ này.
Sự chuyển mức tín hiệu từ thấp lên cao trên đường SDA trong khi đường SCL
ở mức cao xác định điều kiện STOP. Sự truyền nhận tín hiệu kết thúc bằng STOP.
Một thiết bị chủ có thể lặp lại tín hiệu START trong khi truyền.
Địa chỉ của cảm biến gia tốc MMA8452Q được lựa chọn là 0011100 hoặc
0011101 bằng cách thiết lập chân SA0 ở mức cao hay thấp.
1.1.1 Đọc một byte
Cảm biến gia tốc MMA8452Q có một bộ chuyển đổi ADC có thể lấy mẫu,
chuyển đổi và trả về dữ liệu khi được yêu cầu. Sự truyền 8 bít lệnh được bắt đầu bằng
sườn xuống của xung SCL. Lưu ý rằng dữ liệu truyền về theo trình tự MSB đầu tiên.
Hình trên trình bày biểu đồ thời gian cho việc đọc 1 byte từ cảm biến. Vi điều
khiển truyền tín hiệu START (ST) đến cảm biến MMA8452Q, địa chỉ cảm biến
MMA8452Q (0x1D) với bít R/W ở giá trị “0” (ghi) và cảm biến gửi lại tín hiệu AK.
Sau đó vi điều khiển sẽ truyền địa chỉ thanh ghi cần đọc, cảm biến MMA8452Q sẽ gửi
tiếp tín hiệu AK. Vi điều khiển sẽ lặp lại tín hiệu START (SR) và địa chỉ của cảm
biến gia tốc (1x0D) với bít R/W mang giá trị “1” để đọc giá trị từ thanh ghi đã được
thiết lập trước đó. Cảm biến gia tốc MMA8452Q sẽ gửi tín hiệu AK và truyền dữ liệu
từ thanh ghi xác định lên đường truyền.
4
LÊ DUY MINH – 090 4011 740
Hình 4. Sơ đồ ghi 1 byte tín hiệu từ vi điều khiển chủ lên cảm biến MMA8452Q.
5
LÊ DUY MINH – 090 4011 740
1.2 Lưu đồ thuật toán giao tiếp giữa vi điều khiển STM32F103 và cảm biến gia
tốc MMA8452Q
Hình 5. Lưu đồ thuật toán giao tiếp giữa vi điều khiển và cảm biến.
6
LÊ DUY MINH – 090 4011 740
1.3 Lập trình giao tiếp giữa cảm biến MMA8452Q và vi điều khiển STM32F103
1.3.1 Đọc một byte từ cảm biến gia tốc MMA8452Q
Chương trình con đọc một byte từ cảm biến gia tốc MMA8452Q viết bằng
ANSI C với trình biên dịch MirkoC. Chương trình trả về một byte dữ liệu từ cảm biến
gia tốc MMA8452Q với regIndex là địa chỉ thanh ghi cần đọc của MMA8452Q.
unsigned char read_mma(unsigned char regIndex)
{
unsigned char regValue;
Soft_I2C_Start();
Soft_I2C_Write(ACC_ADDRESS_W);
Soft_I2C_Write(regIndex);
Soft_I2C_Start();
Soft_I2C_Write(ACC_ADDRESS_R);
regValue = Soft_I2C_Read(0);
Soft_I2C_Stop();
return regValue;
}
1.3.2 Ghi một byte lên cảm biến gia tốc MMA8452Q
Chương trình con ghi một byte xuống cảm biến gia tốc MMA8452 viết bằng
ANSI C với trình biên dịch MirkoC. Tham số regIndex là địa chỉ thanh ghi cần đọc
của MMA8452Q và regData là giá trị dữ liệu cần ghi.
void write_mma(unsigned char regIndex,unsigned char regData)
{
Soft_I2C_Start();
Soft_I2C_Write(ACC_ADDRESS_W);
Soft_I2C_Write(regIndex);
Soft_I2C_Write(regData);
Soft_I2C_Stop();
}
1.3.3 Thiết lập chế độ hoạt động của cảm biến MMA8452Q
Cảm biến MMA8452Q có các chế độ Standby và Active. Các thiết lập chỉ có
thể tiến hành ở chế độ Standby ngoại trừ việc lấy mẫu tín hiệu. Người dùng cũng có
7
LÊ DUY MINH – 090 4011 740
thể thiết lập dải tín hiệu đo cho cảm biến (2g, 4g và 8g). Dải tín hiệu đo chỉ có thể
thiết lập ở chế độ Standby bằng cách thay đổi bít FS0 và FS1 của thanh ghi 0x0E.
Chuyển chế độ từ Standby sang Active bằng cách ghi giá trị 0 vào bít 0 của thanh ghi
0x2A.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
0 0 ±2g
0 1 ±4g
1 0 ±8g
1 1 --
Chương trình con thiết lập chế độ Standby, Active và dải đo cho cảm biến
MMA8452Q
void MMA845x_Standby (void)
{
unsigned char n;
n = read_mma(CTRL_REG1);
write_mma(CTRL_REG1, n & ~ACTIVE_MASK);
}
void MMA845x_Active ()
8
LÊ DUY MINH – 090 4011 740
{
write_mma(CTRL_REG1, (read_mma(CTRL_REG1) | ACTIVE_MASK));
}
void MMA845x_SetRange(unsigned char fsRange)
{
unsigned char rgTemp;
MMA845x_Standby();
rgTemp = read_mma(XYZ_DATA_CFG_REG);
rgTemp &= FS_MASK;
rgTemp |= fsRange;
write_mma(XYZ_DATA_CFG_REG, rgTemp);
MMA845x_Active();
}
1.3.4 Thiết lập tần số lấy mẫu
Tần số lấy mẫu (ODR – Output Data Rate) ở chế độ Active và Sleep Mode
Data Rate được lập trình thông qua các bít DR của thanh ghi CTRL_REG1.
Bảng 5. Thiết lập tần số lấy mẫu với các giá trị DR.
9
LÊ DUY MINH – 090 4011 740
Cờ ZYXDR được đặt bằng 1 khi có dữ liệu gia tốc của bất kỳ trục nào. Khi dữ
liệu được đọc, cờ được xóa về 0.
10
LÊ DUY MINH – 090 4011 740
char MMA845x_GetXYZData()
{
status = MMA845x_Read(STATUS_REG);
if((status & 0x0F) == 0x0F)
{
XYZbyte[0] = MMA845x_Read(OUT_X_MSB);
XYZbyte[1] = MMA845x_Read(OUT_X_LSB);
XYZbyte[2] = MMA845x_Read(OUT_Y_MSB);
XYZbyte[3] = MMA845x_Read(OUT_Y_LSB);
XYZbyte[4] = MMA845x_Read(OUT_Z_MSB);
XYZbyte[5] = MMA845x_Read(OUT_Z_LSB);
for(i=0;i<3;i++)
{
XYZAcc[i] = 0x00;
index = 2*i;
XYZAcc[i] = XYZbyte[index];
XYZAcc[i] = XYZAcc[i]<<8;
XYZAcc[i] += XYZbyte[index + 1];
XYZAcc[i] = XYZAcc[i]>>4;
if(XYZbyte[index] > 0x7F)
{
XYZAcc[i] = ~XYZAcc[i] + 1;
}
}
return 0;
}
else
{
return 1;
}
11
LÊ DUY MINH – 090 4011 740
1.5 Định nghĩa các thanh ghi của cảm biến gia tốc MMA8452Q
Việc giao tiếp giữa vi điều khiển STM32F103 và cảm biến gia tốc
MMA8452Q hoàn toàn thông qua việc đọc ghi các giá trị thanh ghi được định nghĩa
trong tài liệu kỹ thuật của cảm biến. Nhằm dễ dàng trong việc lập trình, tên và giá trị
của các thanh ghi được định nghĩa như sau:
13
LÊ DUY MINH – 090 4011 740
Cảm biến gia tốc MMA8452Q có kích thước rất nhỏ (3mm x 3mm x1mm). Để
dễ dàng cho việc kết nối giữa cảm biến và mô đun vi điều khiển STM32F103 và gắn
cảm biến lên đối tượng đo nhóm thực hiện đề tài thiết kế mô đun gắn cảm biến như
hình trên, trong đó:
- 3.3V: chân cấp nguồn 3,3 VDC cho cảm biến. Nguồn này được lấy từ mô đun
vi điều khiển.
- SDA: chân tín hiệu trong truyền thông I2C. Chân này được nối với chân SDA
của vi điều khiển STM32F103 (chân PB7).
- SCL: chân xung nhịp đồng hồ trong truyền thông I 2C. Chân này được nối với
chân SCL của vi điều khiển STM32F103 (chân PB6). Cả hai chân SCL và
SDA đều được nối với nguồn 3,3 VDC bằng điện trở 10K.
14
LÊ DUY MINH – 090 4011 740
- INT1, INT2 các chân ngắt của cảm biến gia tốc MMA8452Q.
- SA0: chân chọn địa chỉ của cảm biến. Chân này được nối với nguồn 3,3 VDC
thông qua điện trở 10K thiết lập địa chỉ 0x1D cho cảm biến. Nếu nối chân này
xuống đất cảm biến sẽ được đặt địa chỉ 0x1C. Trường hợp sử dụng 02 cảm biến
trên một đường truyền I2C ta cần nối chân này của 1 trong 2 cảm biến xuống
đất để tránh trường hợp 2 cảm biến có cùng một địa chỉ gây nhiễu loạn đường
truyền.
- GND: chân đất của nguồn.
15
LÊ DUY MINH – 090 4011 740
16