0410 DAY6 ARM

이의혁·2023년 5월 4일
0

PWM 서브 모터 제어(SG90)

  • PWM 주파수 :50Hz
  • 신호폭이 1ms~2ms 범위 내에서 동작한다 1ms를 하면 최속도로 회전, 2ms를 하면 최대 각도로 회전, 1.5ms를 하면 모터가 정지된다.
    2ms :180도
    1.5ms : 90도
    1ms : 0도

시스템 clock이84MHZ
->분주 : 84M / 1680 :50,000HZ(50KHZ)
->주기 : 1/F =1/50,000 = 0.00002sec = 20us
->20ms :20us * 1000

  1. HAL_Delay 를 쓰지 않고 timer로 처리

  2. 0도 -> 90도 -> 180도

extern volatile int t1ms_counter;

if((2000 > t1ms_counter) &&  (t1ms_counter>= 1000))
		{
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,29) ;// 0도
		}

		else if((3000 > t1ms_counter) &&  (t1ms_counter>= 2000))
		{
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,70) ;// 90도
		}

		else if(t1ms_counter>= 3000)
		{
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,112) ;// 180도
			t1ms_counter = 0;
		}

SPI통신(RFID 리더기)


SS가 low를 유지해야 통신을 함.
-CPOL

  • CPOL = 0 : IDLE 상태가 0
  • CPOL = 1 : IDLE 상태가 1

CPHA(Clock Phase,클락 위상) 빨간색 선
-CPHA = 0 (IDLE -> Active)

  • CPOL 이 0이고 CPHA가 0인 상태는 CLOCK이 rising edge일 때 data가 있는지 없는지 검사함 (sampling 작업 : data를 확인하는 작업)
  • CPOL 이 1이고 CPHA가 0인 상태는 CLOCK이 falling edge 일 때 data를 확인(sampling 작업)

-CPHA = 1 (Active -> IDLE) 파란색 선

  • CPOL이 0이고 CPHA가 1이면 CLOCK이 1에서 0으로 떨어질 때

  • CPOL이 1이고 CPHA가 1이면 CLOCK이 0에서 1로 올라갈 때

  • Full-Duplex 를 선택하면 rx,tx둘다 가능

  • IDLE상태가 LOW이고 CPHA을 1 로 설정함으로써
    Active -> IDLE로 갈 때 data를 sampling함
uint8_t rfid_rx;

void rfid_reader_init()
{
	mfrc522_init(&hspi1);
	HAL_Delay(1000); 		//안정화 시간 필요
	rfid_rx = mfrc522_read(VersionReg);
	if (rfid_rx == 0x92)
	{
		printf("RC522v2 Detect !!!\n");
	}
	else if (rfid_rx ==0x91 || rfid_rx ==0x90)
	{
		printf("RC522v1 Detect !!!\n");
	}
	else
	{
		printf("No Detect !!!\n");
	}
}

[STM32] RFID / Servo Motor 연동
uint8_t rfid_key_table[][6] 에 2개의 card key를 등록한다
1.rfid_key_table에 등록된 caed key이면
(1) LCD창에 card번호와 door open문자를 display출력
(2) 서버 모터를 (90도 회전) 3초간 유지 한후
(3) 서버 모터를 0도 회전

***[STM32] ASCII CODE 출력 PROGRAM
for문을 이용 하여 ASCII 문자를 툴력 하는 프로그램을 작성 하시오
1. 16진수 0x00 ~ 0x20 까지는 특수 문자로
printf("%c") 로는 출력 이 되지 않는다.
0는 NUL 1은 SOH와 같이 출력 하고록 한다.
2. 헤더 는 30라인 출력 할 때 마다 출력 한다.

DEC HEX BIN CHAR
=== ==== ==== =====
0 0x00 00000000 NUL

32 0x20 00100000 SP
33 0x21 00100001 !

profile
코딩왕이 되는 길

0개의 댓글