MICROCONTROLADORES Informe final 5 Pregunta2: Generar una onda PWM con 100 ms de periodo y 20% de DUTY CYCLE. El porcentaje de DUTY CYCLE variara en 10% cada vez que se presiona la tecla “+” del teclado de la PC y disminuirá en 10%, utilizando la tecla “-”. Luego de alcanzar sus valores limites no variara. Obtenga las ondas en un osciloscopio y compruebe su funcionamiento con un motor DC, utilizando dos interruptores para establecer el sentido de giro Solución: Primero veamos el informe previo5 cambiemos algunos valores:
Código del programa: /* * AVRGCC37.c * * Created: 22/10/2014 7:07:06 * Author: mayhua */ #include
#include void configurar_puertos () { //puerto d para el virtual terminal //DDRD=0x00; //puerto b como sallida para el pwm y el giro del motor DDRB=0xff; //peurto c como entrada de los interruptores para el giro del motor DDRC=0x00; } void configurar_pwm () { //SE DETERMINA (CONFIGURA) EL ANCHO DEL PULSO TOTAL DEL PWM ICR1H=0x04; //(ICR1=$61A7)//ICR1=$04E1 ICR1L=0xE1; //PERIODO DEL PWM 10MS N=8(PRESCALADOR) //Ahora configuramos el timer 1 :tccr1a tccr1b //***USAMOS EL PIN PB2 MODO DE FORMA DE ONDA 14PWM PREESCALADOR=8// TCCR1A=0<
c=0x0270; //inicilamente pwm al 50% while(1) { //****************llamadas de subrutinas***************// configurar_puertos(); OCR1B=c; //INICIALMENTE 50% configurar_pwm(); //primero sondeo de los interruptores para el giro del motor sell=PINC & 0x30; switch (sell) { case 16: //giro en sentido antihorario PORTB=0x84; break; case 32: //giro en sentido horario PORTB=0x44; break; case 0://motor detenido PORTB=0xC4; break; case 48://motor detenido PORTB=0xC4; break; } //una ves sondeado el sentido de giro //procedemos al sondeo del teclado configurar_usart(); //sondeo del teclado while ((UCSRA & (1<
Simulación:
Para el virtual terminal podemos poner mas palabas como el duty cycle que se esta usando es se moemento Debemos cambiar el valor del duty cycle inicial y de la v ariación del duty cyclecon eso se terminaría todo
/* * AVRGCC38.c * * Created: 27/10/2014 16:09:46 * Author: mayhua */ #include #include void configurar_puertos () { //puerto d para el virtual terminal //DDRD=0x00; //puerto b como sallida para el pwm y el giro del motor DDRB=0xff; //peurto c como entrada de los interruptores para el giro del motor DDRC=0x00; } void configurar_pwm () { //SE DETERMINA (CONFIGURA) EL ANCHO DEL PULSO TOTAL DEL PWM ICR1H=0x30; //(ICR1=$30D3) ICR1L=0xD3; //PERIODO DEL PWM 100MS N=8(PRESCALADOR) //Ahora configuramos el timer 1 :tccr1a tccr1b //***USAMOS EL PIN PB2 MODO DE FORMA DE ONDA 14PWM PREESCALADOR=8// TCCR1A=0<
//giro en sentido antihorario PORTB=0x84; break; case 32: //giro en sentido horario PORTB=0x44; break; case 0://motor detenido PORTB=0xC4; break; case 48://motor detenido PORTB=0xC4; break; } } DATO=UDR; _delay_ms(250); while ((UCSRA & (1<