JVM-Electronics

  • Aumentar fuente
  • Fuente predeterminada
  • Disminuir fuente

Acelerometros + Servos

E-mail Imprimir PDF

enzocaloHe estado haciendo unas pruebas con los acelerometros de Freescale MMA6262Q y MMA6233Q. Tanto el acelerometro de 1'5 como el de 10 gravedades y funcionan a una tension comprendida entre 2.7 y 3.6v asi que he seguido los pasos de los Datasheet's para construir el circuito e intentar minimizar el prototipo al maximo.

He construido un pequeño circuito/adaptador para poder probar los dispositivos en mis aplicaciones o en cualquier board o circuito, lo que he hecho es adaptarlo al estandar DIP.

Parte_1

Antes de continuar tengo que agradecer a Manolo "Nocturno" que me ha facilitado el package del MMA6262Q para EAGLE, de esta forma que he diseñado el fotolito y he empleado material SMD para su elaboracion... ha quedado como se ve a la derecha. Seguidamente y utilizando el metodo tradicional de insolado de placas, ha quedado un circuito bastante limpio pero a la vez muy diminuto.

Parte_2En la imagen podeis ver como es el MMA6262Q apoyado en el euro y las dimensiones globales del adaptador (aun queda lijarle los bordes ). Para soldar los componentes he utilizado la estacion de soldadura que tengo aplicandole aire caliente y calentando el pcb. He utilizado este soporte para circuitos con lupa al que yo llamo "soporte para circuitos diminutos", un lapiz de flux y uno de limpiador.

flux

soportepinzas

Para poder utlizar este adaptador he colocado bajo unos terminales de pin y asi se puede "pinchar" en cualquier board de pruebas o ponerlo sobre un zocalo DIP en nuesta aplicacion.

MATERIALES

  • 2- Resistencias SMD de 1K (1206)
  • 3- Condensadores de 100nf (1206)
  • 1- Acelerometro bi-axial (x,y) MMA6262Q
Asi que despues de estar un rato observando por la lupa de mi soporte para circuitos diminutos, empañar los componentes de flux y tener la punta del soldador de 15w muy limpia para repasar, el resultado fue este:

acabado_2

La capa brillante que se observa es una laca-barniz que le he dado despues de soldar los componentes para evitar que se oxiden las pistas. He montado los dos adaptadores para poder probar tanto el de 1'5g como el de 10g, el tamaño de los modulos es de 23 x 17 mm. esta es la imagen de los modulos completamente terminados.

CODIGO FUENTE PARA PROBAR EL ACELEROMETRO

Este codigo maneja dos servos de forma que uno afecta al eje X y el otro al eje Y, de forma que cuando el acelerometro esta completamente llano los servos estan al centro de su recorrido (90º) y conforme inclinamos el acelerometro observamos como los servos van girando segun dicha inclinacion. Para ello he utilizado un PIC18F452 a 4Mhz y he empleado dos entradas analogicas (x,y) y dos salidas digitales para los servos.

Es posible adaptar este codigo para cualquier pic que disponga de al menos dos entradas analogicas y dos salidas digitales.
program Acelerometro  

'Programa acelerometro *********************************************************
'Este codigo recorre los 180º de rango del servo cuando desplazamos en X e Y el
'acelerometro MMA6262Q, la version es de Mikrobasic 7.0.3 (beta)
'
'Creado y verificado por: Julio Montagut
'Web: http://www.jvmbots.es
'
'Valores recogidos en modo analogico (8 bits):
' Horizontal: 76.77
' Minimo: 39
' Maximo: 115
'
'-HARDWARE:
' MCU: PIC 18F452
' Cristal: 4 Mhz
' 1- Servo Futaba S3003 conectado a PORTB.0
' 1- Servo Futaba S3003 conectado a PORTB.1
' - Canal X del MMA6262Q conectado a PORTA.0
' - Canal Y del MMA6262Q conectado a PORTA.1
'*******************************************************************************


dim VAD1, VAD2 as word
AD1, AD2 as byte
Tmp1, Tmp2 as byte
Tmp1A, Tmp2A as byte
aa as byte

'Sub-rutina para generar pulsos a los servos 0-255
Sub procedure Pulsout(dim byref Puerto as byte,dim Pin as byte,dim Pos as Byte)
Setbit(Puerto,Pin)
Delay_Cyc(Pos)
Clearbit(Puerto,Pin)
End sub


main:
ADCON1 = $80 ' Configuracion analogica y Vref
TRISA = $FF ' PORTA como entradas
TRISB=0 ' PORTB como salidas

'Inicializacion
PORTB=0
Tmp1=0x7F
Tmp1A=0x7F
Tmp2=0x7F
Tmp2A=0x7F

while TRUE
'Lectura analogica (10 bits)
VAD1 = Adc_Read(0)
VAD2 = Adc_Read(1)

'Conversion de 10 a 8 Bytes del conversor AD
AD1= byte(VAD1 >>2)
AD2= byte(VAD2 >>2)

'Coeficiente de escala para el recorrido completo
Tmp1=((AD1*2)-20)
Tmp2=((AD2*2)-20)

'Corrector del Margen de vibracion
If (Tmp1<(Tmp1A-2)) or (Tmp1>(Tmp1A+2)) then Tmp1A = Tmp1 end if
If (Tmp2<(Tmp2A-2)) or (Tmp2>(Tmp2A+2)) then Tmp2A = Tmp2 end if

'Envio a los servos
For aa=0 to 2
Pulsout(PORTB,0,Tmp1A) 'Enviamos el tren de pulsos para el servo1
Pulsout(PORTB,1,Tmp2A) 'Enviamos el tren de pulsos para el servo2
Delay_ms(20)
Next aa

wend
end.
Última actualización el Sábado, 16 de Mayo de 2009 22:15  
English Spanish