8051/PIC > DT516-202.c DC MOTOR PWM(딜레이) ADC0 가변저항 속도 제어

TODAY850 TOTAL605,479
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 8051/PIC | DT-516 강좌 | DT516-202.c DC MOTOR PWM(딜레이) ADC0 가변저항 속도 제어

페이지 정보

작성자 키트 작성일2017-08-24 11:13 조회436회 댓글0건

첨부파일

본문

3660040644_Q9ijKczS_dsc01678_ekit.jpg3Ftype3Dw7403660040644_uyosgMJT_dsc01672_ekit.jpg3Ftype3Dw7403660040644_XSBDV765_dsc01675_ekit.jpg3Ftype3Dw7403660040644_cewRKgvf_dsc01676_ekit.jpg3Ftype3Dw7403660040644_aPXSOrh4_dsc01677_ekit.jpg3Ftype3Dw740

 

 

//-------------------------------------------------------------
// 82G516 E/V BOARD ( DT-516 )
//-------------------------------------------------------------
// XTAL : 22.1184Hz
//-------------------------------------------------------------
// filename: DT516-063.c
// ADC 인터럽트사용 입력값 평균
//-------------------------------------------------------------
// filename: DT516-202.c
// DC MOTOR PWM(딜레이) ADC0 가변저항 속도 제어
//-------------------------------------------------------------
#include
//
#include "DT516-main.h"
//
U_I count=0;
//
U_C adc_cnt=0;
U_I adc_sum=0,pwm;
//
void ADC_Interrupt(void) interrupt 9{ // ADC_Interrupt:
    adc_sum+=((ADCH<<8) + ADCL);
    if(++adc_cnt>=64){ adc_cnt=0; count=adc_sum/256; if(count>127)count=127; pwm=count; adc_sum=0; }
    ADCTL=0xE8;
}
//
void Timer_0_Interrupt(void) interrupt 1{ // 7200Hz주기
    P4=0xFF; // FND OFF
    switch(FND_CNT){
        case 0: P0=Seg_Data[count/1000];     FND_COM1=0; break;
        case 1: P0=Seg_Data[(count/100)%10]; FND_COM2=0; break;
        case 2: P0=Seg_Data[(count/ 10)%10]; FND_COM3=0; break;
        case 3: P0=Seg_Data[count%10];       FND_COM4=0; break;
    }
    if(++FND_CNT>3)FND_CNT=0;
    //
    if(delay_buf){ if(--delay_buf==0)delay_flg=1; }
}
//
void pwm_delay(U_C d){  
    U_C i;
    for(i=0;i
}
//
void main(){
    AUXR=(AUXR|0x40); P1=0xFF; P1M0=0xFF; P1M1=0; //P1.ch Hi-impedance input//ADCH=상위(BIT9,8) ADCL=하위
    ADCTL=0xE8; AUXIE=2;                          // ADC0 인터럽트 이네이블
    TMOD=2; ET0=1; TR0=1; EA=1;
    while(1){
        P20=1; P21=0; pwm_delay(pwm); P20=0; P21=0; pwm_delay(127-pwm); 
    }
};i++);<>

//-------------------------------------------------------------

//

        P20=1; P21=0; pwm_delay(pwm); P20=0; P21=0; pwm_delay(127-pwm); 
P20 하나만 변경 하고 있습니다.

P20을 1로 해두고 P21을 제어 해도 됩니다.

        P20=1; P21=0; pwm_delay(pwm); P20=1; P21=1; pwm_delay(127-pwm);  

(위 두 문장의 차이는 H브릿지의 PNP TR을 제어 하느냐, NPN TR을 제어 하느냐의 차이입니다.)

 

모터를 역회전 시키려면

        P20=0; P21=1; pwm_delay(pwm); P20=0; P21=0; pwm_delay(127-pwm); 
        P20=0; P21=1; pwm_delay(pwm); P20=1; P21=1; pwm_delay(127-pwm); 
출력핀의 극성을 바꿔주면 됩니다.

 

L298 데이터시트를 열어서

내부 회로를 보고서 입력핀에 따른 내부 H 브릿지 회로의 동작을 이해 해보세요

댓글 0

조회수 436

등록된 댓글이 없습니다.

8051/PICHOME > 8051/PIC > 전체 목록

게시물 검색

2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기