Página 1 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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:
Página 2 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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.
Página 3 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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)
Página 4 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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
Página 5 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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
Página 6 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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 } }
Página 7 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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
Página 8 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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:
Página 9 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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 } }
Página 10 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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.
Página 11 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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
Página 12 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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
Página 13 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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
Página 14 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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.
Página 15 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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.
Página 16 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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.
Página 17 de 17
Facultad de Ingeniería Mecánica Edificio W Ciudad Universitaria Morelia, Michoacán
Ignacio Franco Torres 2012-2013
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); }
Top Related