You are on page 1of 13

Campus Ciudad de Mxico Divisin de Ingeniera y Arquitectura Departamento de Ingeniera Mecatrnica

Laboratorio de Microcontroladores Profesor: Genaro Sola Proyecto final Fecha de Entrega: Noviembre 23 de 2011 Nombres Luis David Lpez Tello Villafuerte, Alejandro Garca Castaeda, Manuel Belmont Quiroz Matrcula(s) A01213438, A01124110, A01215045

Calificacin: OBJETIVOS DEL PROYECTO Crear un robot capaz de mantener el equilibrio por s mismo, adems de utilizar un control remoto para moverlo al mismo tiempo que se equilibra. El control del equilibrio se implement de tipo PD (Proporcional-diferencial), utilizamos un acelermetro analgico (MMA7361L de Freescale semiconductors) para leer las variaciones de voltaje dependiendo de la inclinacin y utilizando el ADC del ATMEGA16 comparamos con valores binarios correspondientes a 0,-30 y 30 de inclinacin, controlando de esta manera el duty cycle de la seal pwm recibida en el puente H (L293D) para determinar la velocidad de los motores de las ruedas en la parte inferior del robot. El control remoto se implementara mediante el uso de mdulos conectados a las salidas TDX y RDX de dos microcontroladores (emisor y receptor); los mdulos utilizados fueron TWS y RWS de wenshing, a frecuencia mxima de 315 MHz, modulado ASK y baud rate de 4800.

TABLA DE VALORES BINARIOS ENTREGADOS POR EL ACELERMETRO

Angulo 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150

voltaje 2.1636 2.129713 2.0895 2.043488 1.9922 1.936163 1.8759 1.811938 1.7448 1.675013 1.6031 1.529588 1.455 1.379863 1.3047 1.230038 1.1564 1.084313 1.0143 0.946888 0.8826 0.821963 0.7655 0.713738 0.6672

ADC 167 165 161 158 154 150 145 140 135 129 124 118 112 107 101 95 89 84 78 73 68 64 59 55 52

Para obtener este valor lo que hicimos fue obtener varias muestras y despus en Excel graficamos y obtuvimos una funcin que se aproximara al comportamiento de la grfica y obtuvimos la siguiente: y = 7E-07x3 - 0.0002x2 + 0.004x + 2.2047 Despus aproximamos todos los valores que podra leer el acelermetro con esta funcin y obtuvimos la tabla que se muestra arriba. El voltaje de referencia que usamos fue un voltaje de 3V que otorga el mismo acelermetro, de modo que no necesitamos de otra fuente y conociendo este voltaje de referencia obtuvimos los valores que tendramos en el micro si pusiramos el bit de ADLAR en 1, de modo que se facilitara el control de las lecturas.

Control El sistema de control utilizado fue el siguiente:

Y la funcin encargada del control segn el error fue la siguiente:

En un principio el control era del tipo PID, el cual incluye una integral de los errores anteriores para compensar en estado estable, sin embargo nos coment el Dr. Fernndez del Busto, maestro de materias de Control, que este trmino hara ms inestable el sistema, por lo que el sistema se redujo a un PD. Documentacin del cdigo implementado: CODIGO EN EL RECEPTOR (CONTROL DE ROBOT)

El programa tiene dos interrupciones, una de estas se encarga de hacer la lectura y la correccin necesaria cada 100 ms y la otra se encarga de recibir lo que se transmita por medio del otro microcontrolador. .include "m16def.inc" .ORG 0X00 RJMP MAIN .ORG 0X16 RJMP RXD .ORG 0X26 RJMP ADCE En el Main bsicamente lo que hacemos es declarar timers, pwm, ADC y las interrupciones necesarias. Se usa el Timer 0 para cada determinado tiempo tomar una muestra. El tiempo que determinamos en un inicio fue de 100 muestras por segundo aunque luego aumentamos este nmero esperando que tuviera un poco ms de equilibrio el pndulo.

MAIN: LDI R16,LOW(RAMEND) OUT SPL,R16 LDI R16,HIGH(RAMEND) OUT SPH,R16 ;SBI DDRD,5 ;SBI DDRD,4 CBI DDRD,0 ;PUERTO DE RECEPCIN sbi portd,0 SER r16 out DDRB,R16 ;PUERTO DE PRUEBA PARA LED ;LDI R16,0X0F ;OUT DDRB,R16 LDI r16,0b00000010 OUT TIMSK,R16 ; interrupciones de comparacin timer0 y timer1, TIMER 2 REFRESCAR LCD LDI R16,0B00100000

OUT ADMUX,R16 LDI R16,0B11000111 OUT ADCSRA,R16 ;LDI R16,0B01100000 ;OUT SFIOR,R16 LDI R16,0x67 ;BD DE 4800 out UBRRL, r16 LDI R16,0B10000110 OUT UCSRC,R16 LDI R16,0B10010000 OUT UCSRB,R16 LDI R16,20 ; 100 muestras por segundo OUT OCR0,R16 LDI r16, 0b00001101 OUT TCCR0,r16 ; Modo CTC prescaler de 1024 LDI R16,112 STS 0X60,R16 CLR R16 STS 0X61,R16 STS 0X62,R16 Las constantes que declaramos a continuacin son las que se utilizan para realizar el control PD. El control PD es la funcin que utilizamos para determinar el porcentaje de duty cycle necesario para contrarrestar el error. La constante 1 multiplica al error que leemos en el ADC con respecto a 0 y la constante dos multiplica a la diferencia del error anterior y el actual, de modo que si hay un cambio ms drstico el ciclo de trabajo tambin aumente. LDI R16,30 ;CONSTANTES K1 Y K2 STS 0X70,R16 LDI R16,1 STS 0X71,R16 LDI R16,0 STS 0X68,R16 ; DOS VALORES PARA SABER SI CAE PARA ATRAS O PARA ADELANTE STS 0X69,R16 ; 69 ES EL SIGNO ANTERIOR Y 68 ES EL ACTUAL CLR R16 STS 0X90,R16 LDI R16,HIGH(500) STS 0X92,R16 LDI R16,LOW(500) STS 0X93,R16 LDI R16,5 STS 0X91,R16 LDI R16, HIGH(156) OUT OCR1AH,R16 LDI R16,LOW(156) OUT OCR1AL,R16

LDI R16,HIGH(312) OUT ICR1H,R16 LDI R16,LOW(312) OUT ICR1L,R16 LDI R16,0b10100010 OUT TCCR1A,R16 LDI R16,0b00011011 OUT TCCR1B,R16 LDI R16,0 STS 0X72,R16 En esta parte del cdigo determinamos cuando es que el duty cycle ser de 100% de mdo que los motores giren al mximo de velocidad. Para nosotros este proyecto determinamos que cuando el error fuera de 45 grados y hubiera habido un cambio de 65 grados con respecto al error anterior entonces tendramos que emplear el mayor duty cycle. Los valores que corresponden a una diferencia de 45 grados y 65 grados es 48 y 70 como se puede ver en la tabla de Excel utilizada. OBTENUMAX: LDS R16,0X70 LDI R17,48 MUL R16,R17 MOV R16,R0 MOV R17,R1 LDS R18,0X71 LDI R19,70 MUL R18,R19 MOV R18,R0 MOV R19,R1 ADD R18,R16 ADC R19,R17 STS 0X83,R18 STS 0X82,R19 SEI FIN:RJMP FIN Al inicio de esta interrupcin lo que hacemos es leer el valor del convertidor ADC, y lo comparamos con nuestro valor deseado que en este caso es 112. Si el error es menor o mayor entonces se sabe hacia que direccin cae el pndulo y saltamos a las rutinas correspondientes. ADCE: IN R20,SREG PUSH R20

IN R17,ADCH STS 0X67,R17 SBI ADCSRA,ADIF SBI ADCSRA,ADSC MOV R16,R17 SUBI R16,112 BRLO CAEPALANTE Lo que hacemos en esta rutina, al igual de lo que se hace en CAEPALANTE es obtener el valor del error en valor positivo y guardar en la direccin 0x68 el sentido en el que est cayendo el pndulo, de modo que despus sepamos hacia donde ser el giro de los motores. CAEPATRAS: ; EL ADC AUMENTA DE 112 SI VA PARA ATRAS MOV R24,R16 LDI R25,1 STS 0X68,R25 PARAAMBOSLADOS: MOV R16,R24 ;R24= ERROR LDS R17,0X70 ; en 0x70 esta la Una vez que ya tenemos el error entonces lo multiplicamos por la constante 1 que est guardada en memoria y por otro lado obtenemos la diferencia con respecto al error anterior, el problema que tenemos aqu es que el error no nos dice hacia que lado estaba cayendo anteriormente de modo que lo que hacemos es comparar el sentido en el que caa anteriormente y si fuesen distintos entonces la diferencia de los errores sera la suma de estos, de lo contrario se restan. Una vez que se hace esto se multiplica por la constante 2. CONSTANTE 1 MUL R17,R16 MOV R16,R0; PARTE BAJA ERROR*K1 MOV R17,R1; PARTE ALTA ERROR*K1 LDS R18,0X72 ;AQUI ESTA EL ERROR ANTERIOR MOV R19,R24 LDS R20,0X71; AQUI ESTA LA CONSTANTE 2 LDS R22,0X68 LDS R23,0X69 CP R22,R23 BRNE SUMARDIF SUB R19,R18; DIFERENCIA ERRORES BRLO DIFNEG DIFPOS: MUL R20,R19 MOV R20,R0 MOV R21,R1

ADD R16,R20 ADC R17,R21 STS 0X72,R24 RJMP PORCENTAJE DIFNEG: MOV R19,R24 SUB R18,R19 MUL R20,R18 MOV R20,R0 MOV R21,R1 SUB R16,R20 SBC R17,R21 STS 0X72,R24 RJMP PORCENTAJE SUMARDIF: ADD R19,R18 RJMP DIFPOS

CAEPALANTE:; EL ADC DISMINUYE DE 112 SI VA PARA ADELANTE LDI R18,112 SUB R18,R17 MOV R24,R18 LDI R25,0 STS 0X68,R25 RJMP PARAAMBOSLADOS Lo que hacemos en las rutinas siguientes es obtener el porcentaje de duty cycle. Para esto hacemos algo parecido a una regla de tres con respecto al valor mximo que representa el 100% y el resultado de la funcin del PD. Para esto lo que hacemos es primero convertir a BCD este valor as y lo multiplicamos por 100. Luego multiplicamos el valor mximo hasta llegar al nmero que obtuvimos anteriormente y as obtenemos el porcentaje de duty cycle. Este valor luego se multiplica por el 1% del periodo que tendr el PWM y guardamos estos valores en RAM. PORCENTAJE: STS 0X80,R17 STS 0X81,R16 CALL SETEA0 CALL contadors CALL SETEA1 CALL contadors CALL SETEA2 CALL DIVIDE ;///////////////////////////////////////////////////// LDS R16,0X136 LDS R17,0X90 ;HIGH

LDS R18,0X91 ;LOW LDI R19,0 ;HIGH LDI R20,0;LOW MULTIPLICA: ADD R20,R18 ADC R19,R17 DEC R16 BRNE MULTIPLICA STS 0X94,R19 STS 0X95,R20 Una vez que ya tenemos el valor que necesita el timer para generar el PWM adecuado entonces leemos el valor que tenemos en RAM que nos indica hacia donde cae y en base a esto decidimos si la salida PWM ser por OCR1A u OCR1B. Se usan estas dos diferentes salidas pues el puente H que usamos tiene dos entradas dependiendo del sentido en el que uno quiere que giren los motores. Se cargan entonces lo valores en el OCR1 correspondiente y salimos de la interrupcin. MOTORES: ; ; ; ; ; ; ; ; ; ;/* LDS R16,0X68 CPI R16,1 BREQ MUEVEPALANTE MUEVEPATRAS: LDS R16,0X94 OUT OCR1AH,R16 LDS R16,0X95 OUT OCR1AL,R16 LDS R16,0X92 OUT ICR1H,R16 LDS R16,0X93 OUT ICR1L,R16

; ;

OUT OCR1BH,R16 OUT OCR1BL,R16 LDS R16,0X92 OUT ICR1H,R16 LDS R16,0X93 OUT ICR1L,R16

; ; ; ;

LDI R16,0b10000010 OUT TCCR1A,R16 LDI R16,0b00011011 OUT TCCR1B,R16 RJMP SALTE

MUEVEPALANTE: CBI DDRD,5 SBI DDRD,4 LDI R16,0 OUT OCR1AH,R16 OUT OCR1AL,R16 LDS R16,0X94 OUT OCR1BH,R16 LDS R16,0X95 OUT OCR1BL,R16 LDS R16,0X92 OUT ICR1H,R16 LDS R16,0X93 OUT ICR1L,R16 ; ; ; ; ; LDI R16,0b10100010 OUT TCCR1A,R16 LDI R16,0b00011011 OUT TCCR1B,R16 */ SALTE:

SBI DDRD,5 CBI DDRD,4 LDI R16,0 OUT OCR1BH,R16 OUT OCR1BL,R16

LDS R16,0X68 STS 0X69,R16 POP R20 OUT SREG,R20 RETI Estas rutinas preparan el nmero que se va a convertir a BCD, as como el apuntador de donde se va a escribir. SETEA0: LDI R20,HIGH(0X104) LDI R21,LOW(0X104)

LDS R16,0X94 OUT OCR1AH,R16 LDS R16,0X95 OUT OCR1AL,R16 ; LDI R16,0

LDI R22,HIGH(0X81) LDI R23,LOW(0X81) LDI ZH,HIGH(0X900<<1) LDI ZL,LOW(0X900<<1) MOV XH,R20 MOV XL,R21 CLR R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 MOV XH,R20 MOV XL,R21 ST X+, R16 ST X+, R16 ST X, R16 RET SETEA1: LDI R20,HIGH(0X112) LDI R21,LOW(0X112) LDI R22,HIGH(0X83) LDI R23,LOW(0X83) LDI ZH,HIGH(0X900<<1) LDI ZL,LOW(0X900<<1) MOV XH,R20 MOV XL,R21 CLR R16 ST X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 RET SETEA2: LDI R20,HIGH(0X11E) LDI R21,LOW(0X11E) LDI R22,HIGH(0X12A) LDI R23,LOW(0X12A) MOV XH,R20 MOV XL,R21 CLR R16

ST X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 ST -X,R16 MOV YH,R22 MOV YL,R23 CLR R16 ST Y,R16 ST -Y,R16 ST -Y,R16 ST -Y,R16 ST -Y,R16 ST -Y,R16 ST -Y,R16 STS 0X136,R16 STS 0X135,R16 RET Esta es la rutina que efecta la divisin que se menciono anteriormente. DIVIDE: SUMADORES: LDI R20,0X01 LDI R21,0X12 LDI R22,0X01 LDI R23,0X1E MOV XH,R20 MOV XL,R21 MOV YH,R22 MOV YL,R23 LD R16,Y LD R17,X ADD R16,R17 CPI R16,10 BRSH SUMASIG ST Y,R16 RJMP SIG SUMASIG: SUBI R16,10 ST Y,R16 LD R16,-Y INC R16 ST Y+,R16 SIG: LD R16,-Y LD R17,-X ADD R16,R17

CPI R16,10 BRSH SUMASIG1 ST Y,R16 RJMP SIG1 SIG4: SUMASIG1: SUBI R16,10 ST Y,R16 LD R16,-Y INC R16 ST Y+,R16 SIG1: LD R16,-Y LD R17,-X ADD R16,R17 CPI R16,10 BRSH SUMASIG2 ST Y,R16 RJMP SIG2 SUMASIG2: SUBI R16,10 ST Y,R16 LD R16,-Y INC R16 ST Y+,R16 SIG2: LD R16,-Y LD R17,-X ADD R16,R17 CPI R16,10 BRSH SUMASIG3 ST Y,R16 RJMP SIG3 SUMASIG3: SUBI R16,10 ST Y,R16 LD R16,-Y INC R16 ST Y+,R16 SIG3: LD R16,-Y LD R17,-X ADD R16,R17 CPI R16,10 BRSH SUMASIG4 ST Y,R16 RJMP SIG4 SUMASIG4: SUBI R16,10 ST Y,R16 SIG8:

LD R16,-Y INC R16 ST Y+,R16

LD R16,-Y LD R17,-X ADD R16,R17 CPI R16,10 BRSH SUMASIG5 ST Y,R16 RJMP SIG5 SUMASIG5: SUBI R16,10 ST Y,R16 LD R16,-Y INC R16 ST Y+,R16 SIG5: LD R16,-Y LD R17,-X ADD R16,R17 CPI R16,10 BRSH SUMASIG6 ST Y,R16 RJMP SIG6 SUMASIG6: SUBI R16,10 ST Y,R16 LD R16,-Y INC R16 ST Y+,R16 SIG6: LD R16,-Y LD R17,-X ADD R16,R17 CPI R16,10 BRSH SIG8 ST Y,R16

COMPAREMOS: LDI R20,0X01 LDI R21,0X00 LDI R22,0X01 LDI R23,0X18 MOV XH,R20 MOV XL,R21 MOV YH,R22 MOV YL,R23

LDI R18,7 REPITAMOSS: LD R16,X+ LD R17,Y+ CP R17,R16 BRLO NOTIENECASO INC R16 CP R17,R16 BRSH SCHLUSS DEC R18 BRNE REPITAMOSS

MOV XL,R21 RJMP GIRAs AUMENTAs: LD R17,-X INC R17 ST X,R17 SUBI R16,10 MOV XH,R20 MOV XL,R21 RJMP REGRESAs DECREMENTAs: DEC R23 RJMP SIGAMOSs CONTADORHs: INC R25 CPI R25,1 BREQ DECREMENTAs INC R23 SIGAMOSs: LDI R19,0 CPI R25,2 BREQ CAMBIAs MOV YH,R22 MOV YL,R23 LD R18,Y RJMP GIRAs CAMBIAs: LDI R25,0 INC R24 CPI R24,5 BREQ VOLVERs DEC R21 MOV YH,R22 MOV YL,R23 LD R18,Y RJMP GIRAs VOLVERs: RET Esta parte del cdigo es una interrupcin cada que se completa la recepcin desde el transmisor, estamos probando con solo dos instrucciones: adelante si el valor recibido es menor a 3 y atrs si es mayor; las rutinas muevepatras y muevepalante solo seran modificadas por 10ms y la interrupcin de control estabilizara despus de ese tiempo. RXD: IN R20,SREG PUSH R20 IN R19,UDR OUT PORTB,R19

NOTIENECASO: LDS R16,0X136 INC R16 STS 0X136,R16 RJMP SUMADORES SCHLUSS:RET Esta rutina es la encargada de convertir el nmero binario a BCD. contadors: ;/////////////// MOV XH,R20 MOV XL,R21 MOV YH,R22 MOV YL,R23 LDI R19,0 LDI R25,0 LDI R24,0 LD R18,Y GIRAs: MOV XH,R20 MOV XL,R21 INC R19 CPI R19,9 BREQ CONTADORHs LPM R16,Z+ ROR R18 BRCS SUMAs RJMP GIRAs SUMAs: LD R17,X ADD R16,R17 CPI R16,10 BRSH AUMENTAs REGRESAs: ST X,R16 MOV XH,R20

CPI R19,3 BRLO MUEVEPATRAS2 RJMP MUEVEPALANTE2

RJMP SALIR

MUEVEPALANTE2: MUEVEPATRAS2: SBI DDRD,5 CBI DDRD,4 LDI R16,0 OUT OCR1BH,R16 OUT OCR1BL,R16 CBI DDRD,5 SBI DDRD,4 LDI R16,0 OUT OCR1AH,R16 OUT OCR1AL,R16 LDS R16,0X94 OUT OCR1BH,R16 LDS R16,0X95 OUT OCR1BL,R16 LDS R16,0X92 OUT ICR1H,R16 LDS R16,0X93 OUT ICR1L,R16 SALIR: POP R20 OUT SREG,R20 RETI

LDS R16,0X94 OUT OCR1AH,R16 LDS R16,0X95 OUT OCR1AL,R16 ; ; ; LDI R16,0 OUT OCR1BH,R16 OUT OCR1BL,R16 LDS R16,0X92 OUT ICR1H,R16 LDS R16,0X93 OUT ICR1L,R16 ; ; ; ; LDI R16,0b10000010 OUT TCCR1A,R16 LDI R16,0b00011011 OUT TCCR1B,R16

.org 0x900 .db 1,2,4,8,6,2,4,8,6,2,4,8,6,2,4,8 .db 0,0,0,0,1,3,6,2,5,1,2,4,9,9,8,6 .db 0,0,0,0,0,0,0,1,2,5,0,0,0,1,3,7 .db 0,0,0,0,0,0,0,0,0,0,1,2,4,8,6,2 .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3

CODIGO EN EL TRANSMISOR Lo que hace ste cdigo es utilizar el valor de data available del integrado MM74C92 para entrar a una interrupcin externa en el transmisor y enviar por el puerto TXD el valor correspondiente, los valores se restringieron a 0,1,2 para diagonal izquierda, adelante,diagonal derecha y el 8,9,A para sus contrapartes inferiores .include "m16def.inc" .ORG 0X00 RJMP MAIN .ORG 0X02 RJMP TECLADOLISTO MAIN: LDI R16,LOW(RAMEND) OUT SPL,R16 LDI r16,HIGH(RAMEND) out SPH,r16 LDI R16,0x67 ;BD DE 4800 out UBRRL, r16 LDI R16,0B10000110 OUT UCSRC,R16 LDI R16,0B00001000 OUT UCSRB,R16

SBI DDRD,1 CBI DDRD,2 ser r16 out DDRB,R16 CLR R16

;SALIDA TXD ;INT0

OUT DDRA,R16 PUERTO A

;LECTURA

LDI R16,0B01000000 ;INT1 EN RISING EDGE OUT GICR,R16 LDI R16,0B00000011 OUT MCUCR,R16 SEI FIN: RJMP FIN TECLADOLISTO: IN R20,SREG PUSH R20 IN R19,PINA ;out portB,r19 CPI R19,11 BRLO ESCALAGRANDE RJMP SALIR ESCALAGRANDE: CPI R19,8 BRLO ESCALACHICA RJMP TXD

ESCALACHICA: CPI R19,3 BRSH SALIR RJMP TXD SALIR: POP R20 OUT SREG,R20 RETI TXD: ;out portB,r19 ;CLR R16 ;SER R17 CICLO:SBIS UCSRA,UDRE RJMP CICLO ;OUT UDR,R16 ;OUT PORTB,R16 ;OUT UDR,R17 ;OUT PORTB,R17 OUT UDR,R19 OUT PORTB,R19 ;OUT UDR,R17 ;OUT PORTB,R17 ;OUT UDR,R16 ;OUT PORTB,R16 RJMP SALIR

MOTORES La configuracin para los motores de las ruedas fue de la siguiente manera (utilizando L293D): En Vcc1 y Vc conectamos la fuente de 9 V, pusimos en activo el pin 1(activo en 1); el pin 2 funcionara como entrada del PWM; en los pines 3 y 6 conectamos el motor del ventilador; los pines 4 y 5 se puentean y se mandan a tierra; el pin 7 lo utilizamos para poner PWM en caso de que giro en sentido contrario. El motor del lado opuesto tiene la misma configuracin con los pines correspondientes de alimentacin, PWM y enable.

CONCLUSIONES: El desarrollo del proyecto fue un poco apresurado debido a las limitaciones de tiempo que tuvimos por otras materias, sin embargo pudimos implementar un controlo rudimentario (ya que no hemos llevado la materia) por lo menos esa parte fue implementada de forma correcta aunque no ptima; por la parte de control remoto tuvimos muchos problemas, la comunicacin fue programada de forma correcta, pero tardamos en darnos cuenta de los errores fsicos de uno de los microcontroladores que estbamos usando, la solucin fue utilizar otro; despus de hacer esto la comunicacin cableada funcion pero el tiempo no fue suficiente para implementar el uso de los mdulos ya que la modulacin ASK no es del todo eficiente y se recibe mucha interferencia, por lo que se habra tenido que implementar CRC , un patrn definido de datos o un checksum para filtrar el ruido de los datos que se deseaban recibir. Adems de lograr la comunicacin cableada, no tuvimos el tiempo suficiente an para implementar de sta manera. La conexin se realiz de la manera siguiente:

Cabe mencionar que se utiliza un atmega16, y la parte del max232 es omitida ya que los voltajes TTL entre los microcontroladores ya son compatibles.

tambin tuvimos algunas complicaciones en el rea del control, pues desconocamos del tema, sin embargo pudimos realizar un mtodo en el cual me parece que donde se puede mejorar para tener mejores resultados es en variar las constantes, de manera que el cambio de errores tenga ms, o menos peso en la funcin; por otro lado, tambin se podra hacer algo ms en la frecuencia a la que se manda la seal, pues nosotros mandbamos una frecuencia continua con un cierto DC durante 10ms y quizs se tendra que tener un mejor control en el tiempo en el que se manda la seal. Otro de los problemas fue que en la construccin del pndulo dada la simetra de los motores se colocaron ambos del mismo lado, haciendo que el sistema tendiera a caerse hacia un lado. Buscamos compensar este error colocando ms peso del otro costado pero tambin esto significaba ms peso y por lo tanto es ms inestable y cae ms rpido. Al final nos parece que el resultado que obtuvimos fue bueno, pues en ocasiones el pndulo llegaba a balancearse por s solo por aproximadamente 5 segundos.