17
Página 1 de 17 Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán Ignacio Franco Torres 2012- 2013 [email protected] www.fim.umich.mx Email: [email protected] Tel: 4433223500 ext 3107, 3109, 3111 CAPITULO 8 INTELIGENCIA ARTIFICIAL ELECTRÓNICA (16 Hrs) Objetivo: Que el alumno explore en la inteligencia artificial usando elementos electrónicos y conceptos de programación 8.1 INTELIGENCIA ARTIFICIAL. Se le denomina así a la técnica encargada de emular la inteligencia humana aplicada a una máquina o proceso, típicamente consiste en una parte de software (algoritmo) y una de hardware. 8.1.1 ALGORITMOS (SOFTWARE) DE INTELIGENCIA ARTIFICIAL. Es la parte de la inteligencia artificial que mediante una serie de pasos (algoritmo) permite “emular” la inteligencia humana de tal manera de que un robot tenga la capacidad de “pensar”, “razonar” e “interactuar” con el mundo para llevar a cabo las tareas para las cuales fue diseñado y construido. 8.1.2 HARDWARE PARA INTELIGENCIA ARTIFICIAL. ES LA PARTE Es la parte de la inteligencia artificial que mediante una serie de piezas (hardware/circuito) permite “emular” la inteligencia humana de tal manera de que un robot tenga la capacidad de “pensar”, “razonar” e “interactuar” con el mundo para llevar a cabo las tareas para las cuales fue diseñado y construido. Casi siempre el Software y el Hardware están juntos, cuando hay hardware que puede contener software a este se le llama firmware. Firmware es un programa que es grabado en una memoria ROM y establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo. Se considera parte del hardware por estar integrado en la electrónica del dispositivo, pero también es software, pues proporciona la lógica y está programado por algún tipo de lenguaje de programación. El firmware recibe órdenes externas y responde operando el dispositivo. 8.2 HARDWARE/SOFTWARE CON ELEMENTOS DISCRETOS ELECTRÓNICOS. Todos los ejemplos de esta parte del capítulo están conformados por hardware y software y firmware en caso necesario. 8.2.1 PARA EL CONTROL ON/OFF DE UN MOTOR DE CD. Este es el ejemplo más simple de implementar y se muestra en la siguiente figura:

CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 1 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

CAPITULO

8 INTELIGENCIA ARTIFICIAL ELECTRÓNICA

(16 Hrs)

Objetivo: Que el alumno explore en la inteligencia artificial usando elementos electrónicos y

conceptos de programación

8.1 INTELIGENCIA ARTIFICIAL. Se le denomina así a la técnica encargada de emular la inteligencia humana aplicada a una máquina

o proceso, típicamente consiste en una parte de software (algoritmo) y una de hardware.

8.1.1 ALGORITMOS (SOFTWARE) DE INTELIGENCIA ARTIFICIAL. Es la parte de la inteligencia artificial que mediante una serie de pasos (algoritmo) permite “emular”

la inteligencia humana de tal manera de que un robot tenga la capacidad de “pensar”, “razonar” e

“interactuar” con el mundo para llevar a cabo las tareas para las cuales fue diseñado y construido.

8.1.2 HARDWARE PARA INTELIGENCIA ARTIFICIAL. ES LA PARTE Es la parte de la inteligencia artificial que mediante una serie de piezas (hardware/circuito) permite

“emular” la inteligencia humana de tal manera de que un robot tenga la capacidad de “pensar”,

“razonar” e “interactuar” con el mundo para llevar a cabo las tareas para las cuales fue diseñado y

construido.

Casi siempre el Software y el Hardware están juntos, cuando hay hardware que puede contener

software a este se le llama firmware.

Firmware es un programa que es grabado en una memoria ROM y establece la lógica de más bajo

nivel que controla los circuitos electrónicos de un dispositivo. Se considera parte del hardware por

estar integrado en la electrónica del dispositivo, pero también es software, pues proporciona la

lógica y está programado por algún tipo de lenguaje de programación. El firmware recibe órdenes

externas y responde operando el dispositivo.

8.2 HARDWARE/SOFTWARE CON ELEMENTOS DISCRETOS ELECTRÓNICOS. Todos los ejemplos de esta parte del capítulo están conformados por hardware y software y

firmware en caso necesario.

8.2.1 PARA EL CONTROL ON/OFF DE UN MOTOR DE CD. Este es el ejemplo más simple de implementar y se muestra en la siguiente figura:

Page 2: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 2 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP

Se muestra un circuito con transistores BJT y con dos formas diferentes de control el de la Izquierda

usa un BJT tipo NPN y la carga se activa cuando se le aplica un pulso positivo de la entrada de

control y se apaga cuando se le aplica 0V. Mientras que el de la derecha usa un BJT tipo PNP y

funciona de manera complementaria, es decir se activa la carga cuando se aplica un voltaje de

disparo de 0V y se desactiva cuando el pulso es positivo.

Por lo que el software deberá generar a través de un circuito electrónico esas señales de control.

En caso de que la carga (LOAD) tenga que se

alimentado con un nivel mayor que el circuito de

control se puede recurrir a un aislamiento eléctrico

que evitar que las fuentes de magnitudes de voltaje

diferente se puedan unir y originar daños

especialmente al circuito de menor tensión como se

muestra en el siguiente ejemplo:

Tres aclaraciones de diseño del circuito.

1. Cuando LOAD es un motor de CD es

recomendable conectar capacitores entre las terminales de alimentación y la carcasa del motor

para eliminar los ruidos generados por las escobillas del motor.

2. La resistencia de base RB se divide en dos partes para evitar que el VCE de saturación del

transistor del optoacoplador pueda continuar disparando al transistor BD139.

3. Los dos circuitos (el de control y el la carga) están aislados eléctricamente.

Si la lógica de control se requiere cambiar para que un “1” lógico active la carga y un “0” lógico la

desactive se propone el siguiente circuito.

Figura 8.2 Control ON/OFF con transistor

BJT y optoacoplador para tener un aislamiento eléctrico.

Page 3: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 3 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

Cabe mencionar que no son los únicos circuitos, hay

muchos más y se requiere que uses tus conocimientos e

imaginación para resolver la problemática que se te

presente.

Ejemplos sin circuitos lógicos. Las señales de control

pueden venir de un circuito digital programable o discreto

como se muestra enseguida donde con un fototransistor

podría ser controlado el motor con la luz. (Foto-motor), cuando haya suficiente luz el motor se

apaga y cuando haya poca luz el motor se enciende.

Se sugiere al alumno hacer el diagrama que funcione de manera opuesta al mencionado, es decir

cuando haya luz se enciende el motor y en caso contrario se apague. ¿ ??????????

Otro circuito podría ser un ventilador controlado por temperatura, cuando la temperatura se eleve

de un “cierto valor”=”temperatura de referencia” se enciende el Ventilador y viceversa cuando la

temperatura este debajo o igual a ese valor se apaga.

El circuito presenta una mejora con

respecto al anterior ya que se usa un

comparador, lo cual permite un mejor

ajuste del control del circuito.

Adicionalmente se muestra que el motor es

alimentado con un relevador sobre todo si

la corriente del mismo es muy grande y no

se dispone de un BJT ó MOSFET que pueda

soportarla.

Estos dos circuitos pueden usarse para seguir o alejarse de la luz o de la temperatura, por ejemplo

un robot seguidor/alejador de luz o de calor.

Figura 8.3 Control ON/OFF con Luz.

(transistor BJT y foto transistor)

Figura 8.4 Control ON/OFF con Temperatura.

(termistor comparador y transistor)

Page 4: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 4 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

8.2.2 PARA EL CONTROL DE VELOCIDAD DE UN

MOTOR DE CD. Ya mencionamos que la forma más común de

control de velocidad es usando PWM.

Enseguida se muestra un circuito típico de control con PWM usando un 555 como elemento de control Para calcular los componentes de este circuito debemos de recordar la teoría del 555 y aunque parezca diferente, básicamente es un 555 en modo oscilador o aestable por lo que la frecuencia de salida estará en función de R1, R2 y C1. Los diodos D1 y D2 y el potenciómetro R2 permiten que este circuito pueda manipular el tiempo en alto TH y el tiempo en bajo TL independiente uno del otro y obtener ciclos de trabajo (duty Cycle) cercanos a 0% y 100% que es la función que se esperaba de el

Y si T=TH+TL permanece constante entonces la Frecuencia (F) también

Para Calcular TH se tiene que: Ecuación 1

Para calcular TL se tiene que: Ecuación 2

De las Ecuaciones 1 y 2 se observa que: Si R2a0 Si R2b0

La frecuencia de la señal de PWM debe ser suficientemente alta para que:

No provoque ruido audible (si es que a uno le molesta) mayor a 5, 20 KHz No se anule la corriente en el motor (no entre en conducción discontínua). Puede

pasar en motores chicos, en los grandes por la gran inductancia propia del motor no es importante. También se puede solucionar agregando inductor en serie con el motor. A bajas velocidades (ciclo de trabajo pequeño) puede ser necesario aumentar la frecuencia de pwm para no entrar en conducción discontinua. En otras palabras, mayores frecuencias de pwm nos permitirán regular velocidades más bajas usando el mismo algoritmo de control, sin que el motor esté arrancando/parando constantemente.

Pero tampoco queremos la frecuencia de pwm muy alta porque:

Se genera más ruido eléctrico en el sistema. Hay mayores pérdidas de conmutación debido a menor eficiencia en el elemento de

control (puente H, transistor). Esto suele limitar la frecuencia de operación en los puentes H integrados al orden de los 100 KHz.

Figura 8.5 Control de velocidad con PWM

Page 5: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 5 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

8.2.3 PARA EL CONTROL DE GIRO DE UN MOTOR DE CD. Del circuito de la derecha observamos que se requieren

dos señales de magnitud +12V o 0V considerando 12V=”1”

lógico y a 0V=”0” lógico. Donde Run Enable =”1” activa al

puente para poder trabajar y seguir el estado de la señal

Direction donde un “1” producirá un giro digamos en

sentido de las manecillas del reloj CW y un “0” lógico

producirá el sentido contrario CCW.

Las puertas mostradas son nand funcionando

como inversores, pueden sustituirse con mosfet en

drain común.

8.2.4 PARA EL CONTROL DE UN MOTOR DE PASOS. Se muestra un CI con control para motor a pasos de volts

se muestra que requiere ser alimentado con una fuente de

12V y Tierra y requiere dos entradas de control ENA=

enable =habilita el circuito para operar, STEP donde se le

aplica una señal tipo reloj para ir dando el paso

y que controla el sentido del giro.

Presenta dos opciones más:

(Puente HALF=medio paso y

=paso completo

(Puente OIC).medio paso a baja energía

8.3 HARDWARE/SOFTWARE CON CI PARA INTELIGENCIA ARTIFICIAL.

8.3.1 EL PIC16F877

8.3.2 PLATAFORMA DE DESARROLLO (IDE DE MICROCHIP)

8.3.3 PROGRAMADOR DE PIC, PUERTO PARALELO, SERIE, USB Requiere una parte de Software y una parte de Hardware a esta ultima parte se le llama

comúnmente “Quemador” ya que es el encargado junto con el Software de poner dentro de la

memoria del microcontrolador el programa=firmware deseado para que opere.

Figura 8.6 Control ON/OFF y de Giro

Figura 8.6 Control ON/OFF y

de Giro para un Motor a pasos

Page 6: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 6 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

8.3.4 EJEMPLOS DE PROGRAMAS

8.3.4.1 PUERTO DE ENTRADA DIGITAL

Detectar el estado de un pin del puerto de entrada #if defined(__PCM__) //Compilador para micros con instrucción de 14 bits #include <16f877.h> //Archivo que incluye encabezados y definiciones #use delay (clock = 4000000) #use standard_io(B) void main() { If (input(PIN_A0) == 0) { // Aquí van las instrucciones cuando el pin RA0 del puerto A vale 0 } Else { // Aquí van las instrucciones cuando el pin RA0 del puerto A vale 1 } }

Page 7: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 7 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

8.3.4.2 PUERTO DE SALIDA DIGITAL

Encender y apagar un LED en el puerto B #if defined(__PCM__) //Compilador para micros con instrucción de 14 bits #include <16f877.h> //Archivo que incluye encabezados y definiciones #use delay (clock = 4000000) #use standard_io(B) void main() { set_tris_A(255); set_tris_C(255); set_tris_D(255); set_tris_E(255); // Configuro los puertos A,C,D,E como entradas digitales set_tris_B(254); // Configuro el puerto B como entradas digitales excepto el pin 1 do { output_low(PIN_B0); delay_ms(100); output_high(PIN_B0); delay_ms(100); } while(true); // Bucle infinito }

8.3.4.3 TEMPORIZADORES

#include <16F877A.h>

#fuses XT,NOWDT

#use delay(clock=4000000)

#bit RB7=0x6.7 //definimos RB7 como el pin 7 de la puerta B

#int_TIMER0 //la sig. función tiene que ser la de interrupción del TMR0

void TIMER0_isr(void) //function interrupción TMR0

Page 8: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 8 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

{ if (RB7==0) {

RB7=1; set_TIMER0(0x9C);//inicializa el timer0

} else {

RB7=0; set_TIMER0(0x9C);//inicializa el timer0

} }

void main() { setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_4); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL);

set_tris_b(0b01111111);//configura RB7 como salida el resto como entrada RB7=0;//inicializo el bit RB7 a 0;

set_TIMER0(0x9C); //inicializa el timer0

//el bucle infinito es necesario ya que si el micro entra en sleep

//desactiva la interrupción del TMR0

while(true); }

8.3.4.4 INTERRUPCIONES

/*---------------------------------------------------------------------------------*\ | Recursos del PIC. Uso de la interrupción por cambio | en las patillas RB4-RB7 del PIC. | autor: biblioman | www.aquihayapuntes.com \*----------------------------------------------------------------------------------*/ #include <16F877.h> //Configuración de los fusibles. #FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG #use delay(clock=4000000) //Frecuencia de reloj 4MHz #byte puerto_B = 0x06 // Identificador para el puerto B. #byte puerto_D = 0x08 // Identificador para el puerto C. #int_RB void RB_isr(void) //función de interrupción { switch(puerto_B) { case 239:

Page 9: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 9 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

puerto_D = 0x06; break;

case 223: puerto_D = 0x5B; break;

case 191: puerto_D = 0x4F; break;

case 127: puerto_D = 0x66; break;

default: break;

} } void main() { set_tris_b(0xFF); //Puerto B como entrada set_tris_d( 0x00 ); // Puerto D como salida. enable_interrupts(INT_RB);//habilita interrupción particular enable_interrupts(GLOBAL);//habilita interrupción global puerto_D =0x00; //inicializo puerto D while(True) { //código principal } }

Page 10: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 10 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

8.3.5 PUERTO DE ENTRADA ANALÓGICO Conversión A/D de 8 bits y se muestra el número binario en LEDS de puerto B #if defined(__PCM__) #include <16f877.h> #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // configuración del micro p quemarlo #use delay (clock = 4000000) // 4MHz #use standard_io(B) // Indica que usará el puerto B #byte puerto_b = 06 // Define una variable llamada puerto_b void main() { int conversion; set_tris_A(255); set_tris_C(255); set_tris_D(255); set_tris_E(255); // Puerto A, C, D, E como entradas digitales set_tris_B(0); // Puerto B como salida digitales puerto_b = 0; // inicializo el puerto B setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); // configuro los pines de la conversión setup_adc(adc_clock_div_32); // configuro el convertidor análogo digital conversion = 0; do { set_adc_channel(0); // escojo el canal a convertir delay_ms(1); // esperar mientras se inicializa el módulo A/D conversion = read_adc(); // leer el valor delay_ms(1); puerto_b = conversion; // visualizo por el puerto_ B } while(true); // bucle }

8.3.6 PUERTO DE SALIDA ANALÓGICO //////////////////////////////////////////////////////////////////////////////////// // VsZeNeR"05 // 6/Noviembre/05 // // Programa: Uso del CCP1 como PWM al 50% y 75% // Version: 1.0 // // Dispositivo: PIC 16F648A Compilador: CCS vs3.236 // Entorno IDE: MPLAB IDE v7.22 Simulador: Proteus 6.7sp3 // // Notas: Usamos el modulo CCP1 como PWM, para ello configuramos el TMR2 de sus tres // formas distintas mediante el preescales(1,4,16) que nos dara distintas frecuencias. // El ciclo viene determinado por (1/clock)*4*t2div*(periodo+1), donde en este caso // clock=4MHz y periodo=127.

Page 11: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 11 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

// Frecuencias: // T2_DIV_BY_1 -> 128us -> 7,81KHz // T2_DIV_BY_4 -> 512us -> 1,95KHz // T2_DIV_BY_16 -> 2,05ms -> 487,8Hz // La anchura de pulso en nivel alto depende de la relacion valor*(1/clock)*t2div donde // valor=%nivel alto del pulso. // Anchura del pulso(Duty): // *Para 50%: // 128us -> 64us -> 64us/(1*(1/4000000)) = 256 // 512us -> 256us -> 256us/(4*(1/4000000)) = 256 // 2.05ms -> 1,02ms -> 1,02ms/(16*(1/4000000)) = 256 // *Para 75%: // 128us -> 96us -> 96us/(1*(1/4000000)) = 384 // 512us -> 384us -> 384us/(4*(1/4000000)) = 384 // 2,05ms -> 1,54ms -> 1,54ms/(16*(1/4000000)) = 384 // Este programa también ha pretendido abarcar como crear archivos .h para // que dicho código sea más estructurado. // Conexiones: B0 -> E // B1 -> RS // B2 -> RW // B4 -> D4 // B5 -> D5 // B6 -> D6 // B7 -> D7 // B3 -> Canal 1 osciloscopio // A0 -> Boton ////////////////////////////////////////////////////////////////////////////////// #include <16f648a.h> //pic a utilizar #include<vs_fuses&demas.h> //libreria manejo fuses #define use_portb_lcd TRUE //definir portb lcd #include<lcd.c> //libreria manejo lcd #include<vs_variables_globales.h> //libreria manejo de funciones #include<vs_funciones.h> //libreria manejo de variables ///PROGRAMA void main(void) { setup_ccp1(CCP_PWM); //ccp1 modo PWM lcd_init(); //inicializa lcd cambia_frec( ); //muestra primera frec cambia_duty( ); //muestra primer ancho de pulso for( ; ; ){ //bucle...

if(!input(PIN_A0)){ //¿se ha pulsado el boton? do{ //SI -> eliminar... }while(!input(PIN_A0)); //...rebotes del boton

opcion++; //apunta a siguiente frec if(opcion>2) //¿ya se han mostrado todas las frec? opcion=0; //SI -> resetea opcion

Page 12: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 12 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

cambia_frec( ); //cambia frecuencia }

if(!input(PIN_A1)){ //¿se ha pulsado el boton?

do{ //SI -> eliminar... }while(!input(PIN_A1)); //...rebotes del boton duty++; //apunta a siguiente frec if(duty>1) //¿ya se han mostrado todas las anchuras de pulso? duty=0; //SI -> resetea duty cambia_duty(); //cambia anchura pulso

} } //...infinito

}

Finalmente se presenta un diagrama donde se usan CI uno como driver para el motor (L293D) y otro como control PIC 16F877A.

Este sería un ejemplo del código de control que controlaría por 2 segundos el motor girando en sentido de las manecillas del reloj. 2 segundos lo parará y por 2 segundos en sentido contrario a las manecillas del reloj. Usando MikroC, que es un lenguaje de programación tipo C para PIC. Código Fuente en: MikroC

void main()

{

CMCON = 0x07; // para apagar los comparadores del PIC

ADCON1 = 0x06; // para apagar el Convertidor de Analógico a

Digital ADC

Page 13: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 13 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

TRISB = 0; // PORT B = PUERTO B como puerto de salida

PORTB = 1; // Pon el bit0=RB0 en alto=VDD= 00000001

Do // ciclo infinito

{

//para encender el motor en sentido del reloj (clockwise ó CW)

// PUERTO B= 00000001

PORTB.F0 = 1;

Delay_ms(2000);//retardo de 2 segundos

//Para parar el motor

PORTB = 0; // o PORTB = 3 00000000 ó 00000011

Delay_ms(2000);// retardo de 2 segundos

// Para encender el motor en sentido contrario del reloj

(counter clockwise ó CCW)

PORTB.F1 = 1; //Puerto B= 0000 0010

Delay_ms(2000);// retardo de 2 segundos

// Para parar el motor

PORTB = 0; // ó PORTB = 3 (3 = 0b00000011)

Delay_ms(2000); // retardo de 2 segundos

}while(1);

}

Señales de Control y estatus del Motor

RB0/IN1 RB2/IN2 Motor Status

LOW=0 LOW=0 Stop=Parado

LOW=0 HIGH=1 Anti-Clockwise= sentido contrario del Reloj

HIGH=1 LOW=0 Clockwise=sentido del Reloj

HIGH=1 HIGH=1 Stop=Parado

Tabla de funcionamiento del L293D

Page 14: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 14 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

Control de un Servo Motor

Publicado por JDhios en Abril 23rd, 2012

Un servomotor es un motor de corriente continua acoplado a una

serie de engranajes con un circuito electrónico para controlar la

dirección de rotación, así como la posición del eje del motor. Los

servomotores permiten la ubicación precisa angular de su eje de

salida y se utilizan en robótica, vehículos teledirigidos, aviones y

barcos para controlar el movimiento de sus diversas partes.

En esta sesión de laboratorio, lo primero que vamos a explorar es en que consiste un servomotor y

cómo funciona y, a continuación se ilustra la manera de interactuar con un microcontrolador PIC

16F628A.

Page 15: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 15 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

Teoría

Un servomotor (o servo) es una pequeña caja que contiene un motor de corriente continua, un eje

de salida (brazo del servo) que está conectado al motor a través de una serie de engranajes, y un

circuito electrónico para controlar la posición del eje. El objetivo de utilizar un servo es lograr un

posicionamiento preciso angular de un objeto.

Con el fin de lograr la función del servo, la información de posición instantánea del eje de salida se

realimenta al circuito de control usando un transductor. Una forma muy sencilla de hacerlo es

colocando un potenciómetro al eje de salida o en alguna parte del tren de engranajes. La electrónica

de control compara la señal de realimentación (que contiene la posición actual del eje) desde el

potenciómetro a la señal de entrada de control (que contiene la información de la posición deseada

del eje), y cualquier diferencia entre los valores reales y deseados (conocido como una señal de

error) se amplifica y se utiliza para accionar el motor de corriente continua en una dirección

necesaria para reducir o eliminar el error. El error es cero cuando el eje de salida llega a la posición

deseada. El diagrama de bloques de funcionamiento de un servomotor típico se muestra a

continuación.

Page 16: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 16 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

La entrada de control a un servo es un ancho de pulso modulado (PWM), generalmente a partir de una frecuencia de 50 Hz. Esto significa que el pulso debe repetirse cada 20 ms. El ancho del pulso determina la posición angular del eje de salida. Un circuito electrónico dentro del servo-convierte la señal PWM a un voltaje de salida proporcional que se compara con la tensión de realimentación del potenciómetro. Si existe una diferencia entre los dos, el circuito de control acciona el motor en una dirección apropiada hasta que la diferencia se hace cero. Un valor típico de ancho de pulso esta entre 1,0 a 2,0 milisegundos (ms). Para un servo estándar, una ancho de pulso entre 1,0 ms a 1,5 ms, el servo gira en sentido horario (CW), entre 1,5 ms a 2,0 ms hace que gire en sentido antihorario (CCW), y un ancho de pulso de 1,5 ms el servomotor para en el centro. Sin embargo, estos valores pueden variar dependiendo de la marca y marca del motor. Se recomienda leer la hoja de datos del servo para encontrar los verdaderos valores de los anchos de los pulsos necesarios para posicionar el servo en diferentes ángulos. La mayoría de los servos giran 180°. Sin embargo. hay algunos que podrían rotar 360° o más. Los servos se utilizan ampliamente como las articulaciones en movimientos en brazos robóticos para su posicionamiento angular preciso. También tienen aplicaciones en juguetes de radio control (RC). Por ejemplo, en los autos de RC se utilizan en el mecanismo de dirección, y en barcos RC para controlar el timón.

Page 17: CAPITULO INTELIGENCIA ARTIFICIAL ELECTRÓNICA 8 (16 Hrs) Artificial Electronica.pdf · Figura 8.1 Control ON/OFF con transistor BJT, NPN y PNP Se muestra un circuito con transistores

Página 17 de 17

Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán

Ignacio Franco Torres 2012-2013

[email protected]

www.fim.umich.mx Email: [email protected]

Tel: 4433223500 ext 3107, 3109, 3111

Un servomotor tiene tres cables: dos son para la alimentación (Vcc y tierra) y el tercer cable es para el control signal. El cable de Vcc es normalmente de color rojo y el de masa es negro o marrón. El cable de señal de control viene en color blanco, amarillo o naranja. /* Lab 21: Servo motor Control usando PIC16F628A

MCU: PIC16F628A a 4.0 MHz, MCLR habilitado, WDT = OFF. Escrito por: Rajendra Bhatt (www.embedded-lab.com) 2012/03/29 Descripción: Switch de entrada conectado a RB0 y salida para el Servo en RB1. */ sbit SW1 at RB0_bit; sbit Control at RB1_bit; unsigned short i=7, delay; void interrupt() { delay = i*10; Control = 1; Delay_Cyc(delay); // Generates delay equal to (10*delay) clock cycles Control = 0; TMR0 = 180; // TMR0 returns to its initial value INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur } void main() { CMCON = 0x07; // Disable Comparators TRISB = 0b00000001; PORTB = 0; OPTION_REG = 0x07; // Prescaler (1:256) is assigned to the timer TMR0

TMR0 = 180; // Timer T0 counts from 180 to 255 to create ~20 ms period INTCON = 0xA0; // Enable interrupt TMR0 and Global Interrupts do{ if(!SW1){ // Change pulse width when Switch is pressed Delay_ms(300); i = i+2; if(i > 23) i=7; } }while(1); }