STM์˜ MCU์ธ STM32F103C8T6์œผ๋กœ ์•„๋‚ ๋กœ๊ทธ ๋””๋ฐ”์ด์Šค์˜ ADXL345 ๊ฐ€์†๋„(์ž์ด๋กœ) ์„ผ์„œ๋ฅผ I2C๋ฅผ ์ด์šฉํ•˜์—ฌ ์ œ์–ดํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

1) ์ดˆ๊ธฐํ™”

๋จผ์ € ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ ์„ธํŒ…์„ ํ•ด์ค„ ๊ฒƒ์ด๋‹ค. 

txData[0] = 0x31; // Data format control, Range = +/-16g (D1,D0 : 1 1)
txData[1] = 0x0B; // FULL_RES + Range
HAL_I2C_Master_Transmit(&hi2c1, ADXL345_ADDRESS, txData, 2, HAL_MAX_DELAY);

 

(1) ๋ฐ์ดํ„ฐ ํฌ๋ฉง ์„ค์ •

์ด ์„ผ์„œ์˜ ๊ธฐ๋ณธ ํ•ด์ƒ๋„๋Š” 10-bit์ด๋‹ค. ์ตœ๋Œ€ ํ•ด์ƒ๋„๋Š” 13-bit๋กœ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€์†๋„ g ๊ฐ’๋„ 2~16 ์‚ฌ์ด์—์„œ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

txData[0]์— ๋„ฃ์€ 0x31์€ ๋ ˆ์ง€์Šคํ„ฐ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์™€ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ํฌ๋ฉง ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.

๋‹ค์Œ์— txData[1]์— ๋„ฃ์€ 0x0B๋Š” ์œ„ ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ์ค€ ๊ฒƒ์ธ๋ฐ, 0000 1011 ๊ฐ’์œผ๋กœ D3์™€ D1, D0์ด๋‹ค.

 

D3์€ '1'์„ ์ค˜์„œ ํ’€ ํ•ด์ƒ๋„(13-bit)๋กœ ์„ธํŒ…ํ•˜์˜€๋‹ค. (ํ•ด๋‹น ๋น„ํŠธ๊ฐ€ '0'์ด๋ฉด 10-bit)

FULL_RES: ์ด ๋น„ํŠธ๊ฐ€ '1'์˜ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜๋ฉด ์žฅ์น˜๋Š” ์ „์ฒด ํ•ด์ƒ๋„ ๋ชจ๋“œ์— ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ ์ถœ๋ ฅ ํ•ด์ƒ๋„๋Š” 4 mg/LSB ์Šค์ผ€์ผ ํŒฉํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด RANGE์™€ ํ•จ๊ป˜ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น„ํŠธ๊ฐ€ '0'์ด๋ฉด ์žฅ์น˜๋Š” 10๋น„ํŠธ ๋ชจ๋“œ์— ์žˆ๊ณ  RANGE๋Š” ์ตœ๋Œ€ g-Range ๋ฐ ์Šค์ผ€์ผ ํŒฉํ„ฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

 

D1, D0์— '1'์„ ์ค˜์„œ G ๊ฐ’ ๋ฒ”์œ„๋ฅผ ์ตœ๋Œ€์น˜๋กœ ์„ค์ •ํ•˜์˜€๋‹ค.

 

(์ฐธ๊ณ ๋กœ ์œ„ ๋ฐ์ดํ„ฐ ํฌ๋ฉง ๋ ˆ์ง€์Šคํ„ฐ์— ๋ณด๋ฉด D6์— SPI๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ์„ผ์„œ๊ฐ€ SPI๋กœ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์„œ '1'์„ ์ฃผ๋ฉด 3์„  SPI ๋ชจ๋“œ์ด๊ณ , '0'์„ ์ฃผ๋ฉด 4์„  SPI ๋ชจ๋“œ์ด๋‹ค.)

 

(2) ๋ชจ๋“œ ์„ค์ •

๋ชจ๋“œ๋Š” ๊ณ„์ธก ๋ชจ๋“œ์™€ ์Šฌ๋ฆฝ๋ชจ๋“œ๊ฐ€ ์žˆ๋‹ค.

 

๋‹ค์Œ์€ txData[0]์— 0x2D๋ฅผ ๋„ฃ๊ณ  ๋ณด๋‚ด์„œ ํŒŒ์›Œ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ setํ–ˆ๋‹ค.

txData[0] = 0x2D; // Power control register
txData[1] = 0x08; // Measurement mode
HAL_I2C_Master_Transmit(&hi2c1, ADXL345_ADDRESS, txData, 2, HAL_MAX_DELAY);

 

ํŒŒ์›Œ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” taData[1]์— 0x08 (0000 1000) ๊ฐ’์„ ์ฃผ์–ด ๊ณ„์ธก ๋ชจ๋“œ๋ฅผ ์…‹ํ–ˆ๋‹ค.

์ธก์ •: '0'์€ ๋ถ€ํ’ˆ์„ ๋Œ€๊ธฐ ๋ชจ๋“œ์— ๋†“๊ณ  '1'์€ ๋ถ€ํ’ˆ์„ ์ธก์ • ๋ชจ๋“œ์— ๋†“์Šต๋‹ˆ๋‹ค. ADXL345๋Š” ์ตœ์†Œ ์ „๋ ฅ ์†Œ๋น„๋กœ ๋Œ€๊ธฐ ๋ชจ๋“œ์—์„œ ์ „์›์„ ์ผญ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ดˆ๊ธฐํ™”๋ฅผ ๋๋ƒˆ๋‹ค.

 

๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋„ฃ์„๋• ์‹ฑ๊ธ€ ๋ฐ”์ดํŠธ ๋ผ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•˜์ž.

 

 

2) ๊ธฐ๋Šฅ์ •์˜

์ด์ œ ์„ผ์„œ๊ฐ€ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•œ ๋‚ด์šฉ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ด๋ณด์ž.

void ADXL345_ReadAccel(int16_t *pBuffer)
{
	U08 rxData[6];

	HAL_I2C_Mem_Read(&hi2c1, ADXL345_ADDRESS, 0x32, 1, rxData, 6, HAL_MAX_DELAY);
	// 0x32,33 : DATA x0,1 , x axis data
	// 0x34,35 : DATA y0,1 , y axis data
	// 0x36,37 : DATA z0,1 , z axis data

	pBuffer[0] = ((int16_t)rxData[1] << 8) | rxData[0]; // x
	pBuffer[1] = ((int16_t)rxData[3] << 8) | rxData[2]; // y
	pBuffer[2] = ((int16_t)rxData[5] << 8) | rxData[4]; // z
}

mem read๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ€ํ‹ฐ ๋ฐ”์ดํŠธ ๋ฆฌ๋“œ๋ฅผ ํ•˜์˜€๋‹ค.

x์ถ• lsb์ธ 0x32๋ฒˆ์ง€๋ถ€ํ„ฐ ์—ฐ์†์œผ๋กœ 6๋ฒˆ ์ฝ์œผ๋ฉด x, y, z์˜ lsb, msb ๋ชจ๋‘ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค! ๊ทธ๋ž˜์„œ ๋ฆฌ๋“œ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋Š” 6์นธ์œผ๋กœ ์„ ์–ธํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 ์ด์ œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.

ADXL345_ReadAccel(xyz);

 

๋ณ€์ˆ˜๋Š” x,y,z๋‹ˆ๊นŒ ๋ฐฐ์—ด๋กœ 3์นธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

int16_t xyz[3];

 

์ด์ œ ADXL345_ReadAccelํ•จ์ˆ˜์—์„œ pBuffer๋ฅผ ํ† ํ•ด๋‚ด๋ฉด xyz์— ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.

 

 

3) ๊ฒฐ๊ณผ

	printf("%c[67;5f", 27);
	printf("Accel X: %d \r\n", xyz[0]);
	printf("%c[68;5f", 27);
	printf("Accel Y: %d \r\n", xyz[1]);
	printf("%c[69;5f", 27);
	printf("Accel Z: %d \r\n", xyz[2]);

์ด์ œ ๊ฐ’์ด ์ž˜๋‚˜์˜ค๋Š”์ง€ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜์—ฌ ํ™•์ธํ•ด๋ณด์ž.

 

๋ญ”๊ฐ€ ๋‚˜์˜จ๋‹ค.

์ขŒ์šฐ๋กœ ํ”๋“คํ•ด๋ณด๋ฉฐ ์ด์ œ ํ…Œ์ŠคํŠธํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

 

 

ํ˜น์‹œ๋‚˜ ๋งŒ์•ฝ์— ์œ„ ๊ฐ€์†๋„ ์„ผ์„œ๊ฐ€ ์•„์ง ์—†๋‹ค๋ฉด ์•„๋ž˜์—์„œ ๊ตฌ๋งคํ•ด๋ณผ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Gy-291 ADXL345 3์ถ• ๊ฐ€์†๋„ ์„ผ์„œ๋ชจ๋“ˆ ์ •ํ’ˆ ADXL345 ๋””์ง€ํ„ธ ๊ฒฝ์‚ฌ ์„ผ์„œ ๊ฐ€์† ๋ชจ๋“ˆ ์˜ค๋ฆฌ์ง€๋„ S041 3์ถ• ์ค‘๋ ฅ ๊ฐ€์†๋„ ์„ผ์„œ 2์—ด ๊ธฐ์šธ๊ธฐ ์„ผ์„œ ADXL345 SPI 12C
๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."