BASIC4MCU | 8051/PIC | DT-516 강좌 | DT516-201.c DC MOTOR PWM 제어 (ADC0 가변저항으로 속도 제어)
페이지 정보
작성자 키트 작성일2017-08-24 11:11 조회2,039회 댓글0건첨부파일
본문
ADC0의 가변 저항을 조정 해서 ADC값을 읽은 후
그 값을 PWM 출력 해서 L298에 입력 합니다.
// filename: DT516-062.c // ADC 입력값 평균
// filename: DT516-043.c // PWM 6ch LED
두개 파일을 짜집기 해서 만들었습니다.
L298 입력 두개 선중 한개 선은 5V에 연결 하고
L298 enable 신호도 5V에 연결 합니다.
다른 한개 선은 PWM 출력에 연결 합니다.
저속의 PWM 출력
고속의 PWM 출력
(신호선 1개가 5V에 연결 되었으므로 PWM출력은 LOW구간이 긴 것이 고속입니다.)
//-------------------------------------------------------------
// 82G516 E/V BOARD ( DT-516 )
//-------------------------------------------------------------
// XTAL : 22.1184Hz
//-------------------------------------------------------------
// filename: DT516-062.c
// ADC 입력값 평균
// filename: DT516-043.c
// PWM 6ch LED
//-------------------------------------------------------------
// filename: DT516-201.c
// DC MOTOR PWM 제어 (ADC0 가변저항으로 속도 제어)
//-------------------------------------------------------------
#include
//
#include "DT516-main.h"
//
U_I count=0;
//
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; }
}
//
U_I read_ADC(U_C ch){ //ch:0~7
ADCTL=0xE8|ch; //ADC on & speed 270clk/start ADC //ch
while(!(ADCTL & 0x10));
return ADCH;
}
//
void main(){
U_I i,sum;
TMOD=2; ET0=1; TR0=1; EA=1;
P1M0=1; P1M1=0; //P1.ch Hi-impedance input//ADCH=상위(BIT9,8) ADCL=하위
while(1){
sum=0;
for(i=0;i<256;i++)sum+=read_ADC(0); count=sum>>7;
if(count>255)count=255;
//
CCAP0H=CCAP0L=count; CCAPM0=0x42; CCON=(CCON|0x40); // PWM_Ch_0
delay_ms(10);
t_delay_ms(10);
}
}//-------------------------------------------------------------
댓글 0
조회수 2,039등록된 댓글이 없습니다.