Page 848 - 완) I MDP 프로젝트 작품 보고서(전체과 1학년)1.6
P. 848
ARM프로세서에서 출력되는 명령을 스위치로 회로를 구성했다. 평소에는 PA0, 1 그리고
PD0번은 LOW신호가 입력되다가, 스위치를 누르게 되면 High 신호를 입력 받아 알맞은 동작
을 하게 된다. 스위치를 위에서부터 순서대로 S1, S2, S3라고 하면, S1을 눌렀을 때(RFID 태
그 인식) M4(벨트)가 돌아가기 시작하고, M1(문)이 3초 정방향 회전 -> 2초 정지 -> 3초 역
방향 회전을 하게 된다. S2를 눌렀을 때(금속센서인식)는 M2가 0.1초 정방향 회전 -> 8초 정
지 -> 0.1초 역방향 회전을 하게 된다. S3를 눌렀을 때(포토센서&정전센서인식)는 M3가 0.11
초 정방향 회전 -> 8초 정지 -> 0.11초 역방향 회전을 하게 된다.
2) 프로그램 설명
ARM프로세서의 출력명령을 입력받아, 명령에 따라 모터를 알맞게 구동하는 프로그램이다.
먼저 L298의 ENABLE핀에 PWM파형을 넣어 줘야하기 때문에 PORTB의 5번핀인 OC1A에서
PWM파형을 출력하는 함수 pwm()을 만들었다. 그리고 쓰레기를 분류해주는 모터는 delay를
사용해 제어하였다. ARM프로세서의 출력명령을 입력받는 PA0, 1과 PD0은 DDR이라는 명령어
를 사용하여 입력으로 설정하였고, 모터가 연결되어 있는, PD6과 PORTB는 출력으로 설정해
주었다. 입력 핀이 1이 되면 각각에 맞는 동작을 할 수 있도록 if문으로 작성하였다.
#include <tiny2313.h>
#include <delay.h>
void pwm(void) //L298 ENABLE
{
TCCR1A=0x31; //비교매치 OC1B, Phase Correct모드
TCCR1B=0x05; //1024분주
TCCR1C=0x00;
TIMSK=0x20; //OCIE1B인터럽트 인에이블
OCR1B=100;
}
void main()
{
DDRB=0xff; //모터구동, L298을 구동하기위한 pwm파형 출력
DDRD=0xf0; //PIND.0(입력), 모터구동
DDRA=0x00; //ARM의 출력명령 입력
pwm(); //L298 enable
while(1)
{
if(PINA.0==1){ //RFID태그 인식
PORTB=0x81; //컨베이어벨트 동작, 문열림
delay_ms(3000);
PORTB=0x80;
delay_ms(2000);
PORTB=0x82; //문닫힘
delay_ms(3000);
- 841 -