-
아두이노 라이브러리 | 자기 엔코더 센서 AS5600 모듈Technology/Arduino 2024. 11. 26. 16:31
1. 자기 엔코더 센서 AS5600 모듈
엔코더 센서는 물체가 회전할 때마다 디지털 신호를 출력하는 전자 소자로, 스텝모터에 부착하여 사용할 경우에는 모터의 회전 위치를 알 수 있어 서보모터처럼 제어하거나, DC모터에 부착하여 사용할 경우에는 모터의 회전 속력을 측정할 수 있다. 엔코더 센서는 동작 원리에 따라 흔히 광학식과 자기식으로 나눌 수 있는데, 해당 예제에서 다루고자 하는 자기 엔코더 센서 AS5600 모듈은 자기장 검출부에 해당하는 소자 위로 자석이 회전하면 자석의 회전 방향을 알아낼 수 있다. 이때 위 아래가 아닌 좌우로 N극과 S극을 가진 특수한 자석을 사용해야 올바르게 동작한다. AS5600 모듈은 DC 3.3V를 기반으로 동작하며, 이를 위한 전원 단자와 접지 단자를 가지고 있다. 이외에 검출하고자 하는 회전방향을 선택할 수 있는 디지털 단자와, 마이크로컨트롤러와 I2C 통신을 하기 위한 직렬 데이터 단자와 직렬 클럭 단자를 가지고 있다. 아래 링크로 접속하면 자기 엔코더 센서 AS5600 모듈을 구매할 수 있다.
2. 논리 전압 변환
AS5600 모듈은 DC 3.3V 기반으로 동작하기 때문에, I2C 통신 시 주고 받는 디지털 신호의 논리 전압 또한 DC 3.3V이다. 만약 아두이노 우노와 같이 논리 전압이 DC 5V인 마이크로컨트롤러와 디지털 신호를 주고 받고자 한다면 안정적인 통신을 위해 논리 전압을 변환할 필요가 있다. 논리 전압 변환 모듈은 낮은 논리 전압을 높은 논리 전압으로, 혹은 높은 논리 전압을 낮은 논리 전압으로 변환한다. 해당 모듈을 이용하면 논리 전압이 서로 다른 전자 소자들도 원활하게 통신할 수 있다. 총 네 개의 채널을 지원하고 있으며, 낮은 논리 전압에 해당하는 전원과 높은 논리 전압에 해당하는 전원, 그리고 접지를 연결하여 사용한다. 아래 링크로 접속하면 논리 전압 변환기를 구매할 수 있다.
3. 아두이노 라이브러리 추가
아두이노 플랫폼에는 AS5600 모듈과 I2C 통신을 하기 위한 알고리즘이 라이브러리로 구현되어 있다. 그러나 기본적으로 제공되는 라이브러리는 아니기 때문에 라이브러리를 IDE에 추가하는 과정이 필요하다. 아두이노 IDE 상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타나는데, 해당 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 'AS5600'을 입력하자. 라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타나는데, 'AS5600' 최신 버전을 선택하여 설치하도록 하자. 아래 링크로 접속하면 해당 라이브러리에 대한 설명과 사용 방법을 확인할 수 있다.
4. 예제
4.1. 회로 구성
4.2. 프로그램 작성
#include <AS5600.h> // AS5600 라이브러리 추가 AS5600L magneticEncoder; // magneticEncoder라는 이름의 AS5600 객체 생성 void setup() { Serial.begin(115200); // 시리얼 통신 시작 (통신 속도: 115200 bps) Wire.begin(); // I2C 통신 시작 magneticEncoder.begin(4); // 회전방향 단자 정의, GND와 연결한 경우 번호 무관 // 양의 회전방향 정의, 회전방향 단자를 GND와 연결한 경우 시계 방향이 양의 방향 magneticEncoder.setDirection(AS5600_CLOCK_WISE); // I2C 통신 상태 확인 int b = magneticEncoder.isConnected(); Serial.print("Connect: "); Serial.println(b); delay(1000); } void loop() { // 엔코더 값을 비트 단위(0~4095)로 읽은 후 시리얼 모니터에 출력 Serial.print(magneticEncoder.readAngle()); Serial.print("\t"); // 엔코더 값을 비트 단위(0~4095)로 읽은 후 시리얼 모니터에 출력 Serial.print(magneticEncoder.rawAngle()); Serial.print("\t"); // 엔코더 값을 비트 단위(0~4095)로 읽은 후 각도 단위(0~359)로 변환 // 시리얼 모니터에 출력 후 줄 바꿈 Serial.println(as5600.rawAngle() * AS5600_RAW_TO_DEGREES); delay(500); // 500 ms 대기 }
[함께 읽으면 좋은 페이지]
참고문헌
- RobTillaart. (2022). AS5600. GitHub. https://github.com/RobTillaart/AS5600. 2024.11.26.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 라이브러리 | I2C 멀티플렉서 TCA9548A 모듈 (0) 2024.11.27 아두이노 | BLDC모터 (0) 2024.11.25 아두이노 라이브러리 | 서보모터 정밀 제어 (0) 2024.11.24 아두이노 프로젝트 | 휴대용 냉각기 (0) 2024.11.23 아두이노 | 펠티어 열전소자 (0) 2024.11.22