차량 또는 모터의 속도 / rpm을 측정하는 것은 항상 우리가 시도하는 매력적인 프로젝트였습니다. 따라서이 프로젝트에서는 산업용 PIC 마이크로 컨트롤러를 사용하여 하나를 구축 할 것입니다. 속도를 측정하기 위해 자석 조각과 홀 센서를 사용합니다. 속도를 측정하는 다른 방법 / 센서가 있지만 홀 센서를 사용하면 저렴하고 모든 유형의 모터 / 차량에 사용할 수 있습니다. 이 프로젝트를 수행함으로써 프로젝트가 인터럽트 및 타이머 사용을 포함하므로 PIC16F877A 학습 기술을 향상시킬 것입니다. 이 프로젝트가 끝나면 회전하는 물체가 차지하는 속도와 거리를 계산하여 16x2 LCD 화면에 표시 할 수 있습니다. 이 디지털 속도계 및 주행 거리계 회로 (PIC 포함) 부터 시작하겠습니다.
필요한 재료:
- PIC16F877A
- 7805 전압 조정기
- 홀 효과 센서 (US1881 / 04E)
- 16 * 2 LCD 디스플레이
- 작은 자석 조각
- 전선 연결
- 커패시터
- 브레드 보드.
- 전원 공급
적용되는 속도 및 거리 계산:
실제로 회로 구축을 시작하기 전에 홀 센서와 자석을 사용하여 휠의 속도를 계산하는 방법을 이해하겠습니다. 이전에는 Android 스마트 폰에서 판독 값을 표시하는 Arduino 속도계를 구축하는 데 동일한 기술을 사용했습니다.
홀 센서 는 극성에 따라 자석의 존재를 감지 할 수있는 장치입니다. 작은 자석 조각을 바퀴에 붙이고 바퀴가 회전 할 때마다 홀 센서가 감지하도록 홀 센서를 그 근처에 배치합니다. 그런 다음 PIC 마이크로 컨트롤러의 타이머 및 인터럽트를 사용하여 휠이 한 번 완전히 회전하는 데 걸리는 시간을 계산합니다.
소요 된 시간을 알고 나면 아래 공식을 사용하여 RPM을 계산할 수 있습니다. 1,000 / time 소요되는 시간은 RPS를 제공하고 60을 더 곱하면 RPM이 제공됩니다.
rpm = (1000 / 소요 시간) * 60;
여기서 (1000 / timetaken)은 rps (초당 회전 수)를 제공하고 60을 곱하여 rps를 rpm (분당 회전 수)으로 변환합니다.
이제 차량의 속도를 계산하려면 바퀴의 반경을 알아야합니다. 우리 프로젝트에서는 반경이 3cm에 불과한 작은 장난감 바퀴를 사용했습니다. 그러나 바퀴의 반경을 30cm (0.3m)로 가정 하여 판독 값을 시각화했습니다.
Velocity = (RPM (diameter * Pi) / 60) 이라는 것을 알고 있기 때문에 값에 0.37699를 곱 합니다. 공식은 다음과 같이 단순화됩니다.
v = 바퀴의 반경 * rpm * 0.37699;
속도를 계산하면 유사한 방법을 사용하여 포함 된 거리를 계산할 수도 있습니다. 홀과 자석 배열로 휠이 몇 번 회전했는지 알 수 있습니다. 우리는 또한 바퀴의 반경을 알고 있으며, 바퀴의 반경을 0.3m (R)로 가정하고 둘레 Pi * R * R의 값은 0.2827이라고 가정하여 바퀴의 둘레를 찾을 수 있습니다. 이것은 홀 센서가 자석을 만날 때마다 0.2827 미터의 거리가 바퀴로 덮여 있음을 의미합니다.
Distance_covered = distance_covered + circumference_of_the_circle
이제이 프로젝트가 어떻게 작동하는지 알았으므로 회로도를 진행하여 빌드를 시작하겠습니다.
회로도 및 하드웨어 설정:
이 속도계 및 주행 거리계 프로젝트 의 회로도 는 매우 간단하며 브레드 보드에 구축 할 수 있습니다. PIC 튜토리얼을 따라했다면 PIC 마이크로 컨트롤러 학습에 사용한 하드웨어를 재사용 할 수도 있습니다. 여기 에서는 아래와 같이 PIC 마이크로 컨트롤러로 LED 깜박임을 위해 구축 한 것과 동일한 성능 보드 를 사용했습니다.
PIC16F877A MCU의 핀 연결은 아래 표에 나와 있습니다.
S.No: |
핀 번호 |
핀 이름 |
연결됨 |
1 |
21 |
RD2 |
LCD의 RS |
2 |
22 |
RD3 |
LCD의 E |
삼 |
27 |
RD4 |
LCD의 D4 |
4 |
28 |
RD5 |
LCD의 D5 |
5 |
29 |
RD6 |
LCD의 D6 |
6 |
30 |
RD7 |
LCD의 D7 |
7 |
33 |
RB0 / INT |
홀 센서의 세 번째 핀 |
프로젝트를 빌드하면 아래 그림과 같이 보일 것입니다.
보시다시피 두 개의 상자를 사용하여 모터와 홀 센서를 가까운 위치에 배치했습니다. 회전하는 물체에 자석을 고정하고 자석을 감지 할 수있는 방식으로 홀 센서를 그 가까이에 그대로 둘 수 있습니다.
참고: 홀 센서에는 극성이 있으므로 감지하는 극을 확인하고 그에 따라 배치하십시오.
또한 홀 센서의 출력 핀과 함께 풀업 저항을 사용하는지 확인하십시오.
시뮬레이션:
이 프로젝트의 시뮬레이션은 Proteus를 사용하여 수행됩니다. 프로젝트에는 움직이는 물체가 포함되어 있기 때문에 시뮬레이션을 사용하여 전체 프로젝트를 시연 할 수는 없지만 LCD 작동은 확인할 수 있습니다. 16 진 파일을 시뮬레이션에로드하고 시뮬레이션하기 만하면됩니다. 아래와 같이 LCD가 작동하는 것을 볼 수 있습니다.
속도계와 주행 거리계가 작동하는지 확인하기 위해 홀 센서를 로직 상태 장치로 교체했습니다. 시뮬레이션 중에 로직 상태 버튼을 클릭하여 인터럽트를 트리거하고 위와 같이 적용되는 속도와 거리가 업데이트되는지 확인할 수 있습니다.
PIC16F877A 프로그래밍:
앞서 말했듯이 PIC16F877A 마이크로 컨트롤러의 타이머와 인터럽트를 사용하여 휠이 한 번 완전히 회전하는 데 걸리는 시간을 계산할 것입니다. 이전 튜토리얼에서 타이머를 사용하는 방법을 이미 배웠습니다. 이 기사의 끝에서 프로젝트의 전체 코드를 제공했습니다. 또한 아래에서 몇 가지 중요한 줄을 설명했습니다.
아래 코드 줄은 포트 D를 LCD 인터페이스 용 출력 핀으로 초기화하고 RB0을 외부 핀으로 사용하기위한 입력 핀으로 초기화합니다. 또한 OPTION_REG를 사용하여 내부 풀업 저항을 활성화하고 64도 사전 판매로 설정했습니다. 그런 다음 WE는 글로벌 및 주변 장치 인터럽트를 활성화하여 타이머 및 외부 인터럽트를 활성화합니다. RB0을 외부 인터럽트 비트로 정의하려면 INTE를 high로 만들어야합니다. Overflow 값은 100으로 설정되어 매 1 밀리 초마다 타이머 인터럽트 플래그 TMR0IF가 트리거됩니다. 이렇게하면 밀리 초 타이머를 실행하여 밀리 초 단위로 소요 된 시간을 확인할 수 있습니다.
TRISD = 0x00; // LCD 인터페이스를위한 출력으로 선언 된 PORTD TRISB0 = 1; // 인터럽트 핀으로 사용할 RB0 핀을 입력으로 정의 OPTION_REG = 0b00000101; // Prescalar로 Timer0 64 // PULL UP도 활성화 TMR0 = 100; // 1ms의 시간 값을로드합니다. delayValue는 0-256 사이 일 수 있습니다. TMR0IE = 1; // PIE1 레지스터에서 타이머 인터럽트 비트 활성화 GIE = 1; // 글로벌 인터럽트 활성화 PEIE = 1; // 주변 인터럽트 활성화 INTE = 1; // RB0을 외부 인터럽트 핀으로 활성화
아래 함수는 인터럽트가 감지 될 때마다 실행됩니다. 원하는대로 함수 이름을 지정할 수 있으므로 speed_isr () 로 이름을 지정했습니다 . 이 프로그램은 두 개의 인터럽트를 다룹니다. 하나는 Timer Interrupt이고 다른 하나는 External Interrupt입니다. Timer Interrupt가 발생할 때마다 TMR0IF 플래그가 high가되며, 인터럽트를 지우고 재설정하려면 아래 코드와 같이 TMR0IF = 0을 정의하여 낮게 만들어야합니다.
void interrupt speed_isr () {if (TMR0IF == 1) // 타이머가 오버플로되었습니다 {TMR0IF = 0; // 타이머 인터럽트 플래그 지우기 milli_sec ++; } if (INTF == 1) {rpm = (1000 / milli_sec) * 60; 속도 = 0.3 * rpm * 0.37699; // (휠 반경이 30cm라고 가정) INTF = 0; // 인터럽트 플래그를 지 웁니다. milli_sec = 0; 거리 = 거리 +028.2; }}
마찬가지로 외부 인터럽트가 발생할 때 플래그 INTF가 하이가 될 것입니다. 이것은 또한 INTF = 0을 정의하여 지워야합니다. 소요 된 시간은 Timer Interrupt에 의해 추적되고 External Interrupt는 휠이 한 번의 완전한 회전을 완료 한시기를 결정합니다. 이 데이터를 사용하여 모든 외부 인터럽트 동안 휠이 다루는 속도와 거리가 계산됩니다.
속도와 거리가 계산되면 LCD 기능을 사용하여 LCD 화면에 간단히 표시 할 수 있습니다. LCD를 처음 사용하는 경우 PIC16F877A MCU 자습서가있는 인터페이스 LCD를 참조하십시오.
작동 설명:
하드웨어 및 소프트웨어를 준비한 후 코드를 PIC16F877A에 업로드하기 만하면됩니다. PIC를 완전히 처음 사용하는 경우 PIC16F877A 마이크로 컨트롤러에 프로그램을 업로드하는 방법에 대한 자습서를 몇 개 읽어야합니다.
데모 목적으로 모터의 속도를 조정하기 위해 가변 POT를 사용했습니다. 실시간 응용 프로그램 찾기와 동일하게 사용할 수도 있습니다. 모든 것이 예상대로 작동하면 아래 비디오에 표시된대로 Km / Hr 단위의 속도와 미터 단위의 거리를 얻을 수 있습니다.
프로젝트가 즐거워 졌기를 바랍니다. 그렇지 않은 경우 아래 댓글 섹션이나 포럼을 사용하여 의심을 게시 할 수 있습니다.