본문 바로가기
코스웨어/15년 스마트컨트롤러

20150911-11번-남수진 - 센서(초음파센서) / ARM(PWM)

by 알 수 없는 사용자 2015. 9. 11.
728x90
반응형

센서


  • 초음파 센서
    • 초음파의 진행속도 : 331.5 + (0.607*t) m/s
      • t : 온도
      • 상온에서의 속도 : 약 346m/s
    • 초음파가 어떤 거리를 왕복하는 시간
      • 시간 = 이동거리/속도
      • 예) 초음파가 10cm 거리를 왕복하는데 소요되는 시간
        • t = (10cm*2)/(346m/s)
        • t = 578us
    • 초음파 센서로 측정 가능한 최대 거리 : 3~4m


  • 센서 동작 모드
    • 트리거 입력과 에코 출력 핀을 같이 쓰는 모드
    • 트리거 입력과 에코 출력 핀을 따로 쓰는 모드

  • 프로그래밍에서 고려할 점
    • 트리거 펄스 신호폭이 10us 이상되어야 센서가 정상적으로 동작
    • 에코 펄스의 시간폭을 측정하여 거리를 측정

  • 개인 실습
    • 장애물이 10cm 이내로 들어오면 LED 불이 켜지는 프로그램
    • ARM에서의 초음파 센서 실습 코드에 10cm 이하에서 LED를 ON 시키는 조건문 추가



  • 실행 결과






ARM


  • PWM 데이터시트 분석


  • PWM 블럭 다이어그램


  • PWM 레지스터
    • PWM on/off 제어 
      • PWM_ENA : 시작
      • PWM_DIS : 정지
      • PWM_SR : PWM 동작 상태
    • PWM 펄스 주기&duty 제어
      • PWM_CCNT : 공급 클럭에 맞춰 증가하는 카운터
      • CCNT 값이 CPRD 값과 같아지면 카운터 리셋(or 감소)
        • CPRD : 펄스 주기 결정
      • CCNT 값이 CDTY 값과 같아지면 PWM 출력 토글
        • CDTY : 펄스 duty 결정
        • CDTY의 값이 작아지면 PWM의 duty가 커지며 신호의 전력도 증가
    • PWM 동작 모드 제어
      • PWM_CMRx
        • CCNT 증감 파형
          • Center_Aligned : 피라미드 모양 카운터
          • Left_Aligned : 톱니모양 카운터
        • PWM 초기값
          • low에서 시작
          • high에서 시작

  • PWM 타이밍도





pwm.c 코딩


  • 초기화 함수 작성 순서
    1. PWM 장치에 클럭(MCK) 공급
    2. PWM 핀 설정
      1. 핀 선택
      2. 핀 pull-up disable
      3. PIO 기능 disable
      4. PWM 기능 enable(Peripheral B 기능 on)
    3. CLKA, CLKB 설정
      • 20kHz으로 설정
    4. PWM 동작 설정
      1. PWM 클럭 선택 : CLKA
      2. 카운터 모양 : left-aligned
      3. PWM 출력  : low level start
      4. CUPD 입력으로 PWM의 duty를 변경시키도록
    5. 다음주 계속.....




1. PWM에 MCK 공급

  • PMC_PCER 레지스터의 PWM 장치번호 비트를 set



2. PWM으로 사용할 핀 설정

  • PIOA_PPUDR
    • PA25의 pull-up disable
  • PIOA_PDR
    • PA25의 PIO 기능 off
  • PIOA_BSR
    • PA25의 peripheral B 기능 사용 (PWM2 enable)



3. PWM 카운터(PWM_CCNT)에 사용할 클럭 설정

    • CLKA, CLKB를 20kHz 클럭으로 설정 ( PWM_MR 레지스터 설정)
      1. PREA, PREB로 MCK의 분주비 선택
        • 8분주 선택
      2. 1에서 구한 클럭은 DIVA, DIVB로 나눔
    • DIVx는 30으로 설정



    • 카운터의 클럭으로 CLKA(20kHz)를 선택
      • PWM_CMR 레지스터 사용
      • PWM_CMR은 PWM 채널 각각 따로 존재함




4. PWM 동작 설정(PWM_CMR)

  • CALG 비트 = 0
    • 카운터 모양 : left aligned
  • CPOL 비트 = 0
    • PWM 펄스 시작점 : low level start
  • CPD 비트 = 0
    • Writing to the PWM_CUPDx will modify the duty cycle at the next period start event





728x90