6.24.2009

KRI

Kontrol PWM motor dengan ADC pada robot manual KRI (KONTES ROBOT INDONESIA pada AVR mega


Mengendalikan motor kanan dan kiri dengan menggunakan potensiometer.
gambar rangkaiannya.
(gambar adcdr)
















potensiometer untuk roda kiri diletakkan di PORTA.0
potensiometer untuk roda kanan diletakkan di PORTA.1

enable maju untuk roda kiri diletakkan di PORTD.0
enable mundur untuk roda kiri diletakkan di PORTD.1
PWM untuk roda kiri diletakkan di PORTD.2

enable maju untuk roda kanan diletakkan di PORTD.3
enable mundur untuk roda kanan diletakkan di PORTD.4
PWM untuk roda kanan diletakkan di PORTD.5

#include
#define pwmki PORTD.2
#define pwmka PORTD.5
#define ADC_VREF_TYPE 0×00
unsigned char adcki,adcka;
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0×40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0×10)==0);
ADCSRA|=0×10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0×00;
DDRA=0×00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0×00;
DDRB=0×00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0×00;
DDRC=0×00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0×00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;

// ADC initialization
// ADC Clock frequency: 156,250 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0×86;

while (1)
{
// Place your code here
adcki=read_adc(0);
adcka=read_adc(1);
if(adcki>128)
{
pwmki=(adcki-128)*2;
PORTD.0=1;PORTD.1=0;
}
if(adcki<=128) pwmki=(255-adcki)*2; PORTD.0=0;PORTD.1=1; if(adcka>128)
{
pwmka=(adcka-128)*2;
PORTD.3=1;PORTD.4=0;
}
if(adcka<=128) { pwmki=(255-adcka)*2; PORTD.3=0;PORTD.4=1; } }; }

Tidak ada komentar:

Posting Komentar