Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/05/2013 #1


Manejar grados de un servo con un teclado matricial
hola que tal , esta semana aprendimos a utilizar servomotores , yo se manejarlos con potenciometros (con un conversor análogo digital) , pero necesito poder entrar los grados que el servo se debe mover, investigue un poco y eso se hace con una ecuación de la recta , es esta
valservo4=(0.01955034213098729227761485860002*valo r4)+5;

pero a mi no me funciona cuando ingreso los grados , les agradesco cualquier ayuda si necesitan el codigo lo puedo subir
16/05/2013 #2

Avatar de Romyggar

Grados ¿Centígrados? (broma)
andres1594 dijo: Ver Mensaje
hola que tal esta semana aprendimos a utilizar servomotores yo se manejarlos con potenciometros (con un conversor análogo digital) pero necesito poder entrar los grados que el servo se debe mover, investigue un poco y eso se hace con una ecuación de la recta es esta
valservo4=(0.01955034213098729227761485860002*valo r4)+5;

pero a mi no me funciona cuando ingreso los grados les agradesco cualquier ayuda si necesitan el codigo lo puedo subir
Amigo andres1594,

Aquí en el foro siempre prestamos ayuda a quien lo necesite con todo el gusto, pero los detalles en que se te puedan ayudar dependen de tí. No podemos adivinar las circunstancias que mencionas, asi que respetuosamente te sugiero que nos expliques mas calmadamente de que se trata tu proyecto y en que necesitas ayuda.

Por ejemplo: yo he hecho varios proyectos con teclado matricial, también con teclado de computador PS/2, etc; y en estos he usado microcontroladores, dsPICs, Máquinas de estado, etc. No todos fueron iguales, y no todos tomaron el mismo tiempo de desarrollo, ni tampoco surgieron los mismos problemas.

De lo que dices, entiendo que deseas ingresar un dato mediante un teclado matricial (grados 0-359), y que un motor se posicione en lo digitado. ¿Estoy en lo correcto?, recuerda que estoy adivinando!. Además, dices que se debe usar una ecuación.

Me surgen preguntas:
- ¿Que limitaciones se tiene? ¿Esto es con un PC, Tablet, Microcontrolador, FPGA?
- ¿Es en una tarjeta de desarrollo?, ¿Que lenguaje usarás para programar?
- ¿Tienes un circuito de control para los motores?....

Espero y no me malentiendas.

Salu2!.
17/05/2013 #3


primero gracias por responder y perdón por no ser mas especifico
el proyecto es manejar un brazo robotico (ya construido) por medio de un pic 18f4550 , utilizamos pic o pcw para programar, este se puede manejar por dos tipos con potenciometros es decir utilizando un cad del pic , o con un teclado determinando asi cuantos grados quieren moverse (obviamente por el teclado)
pero yo se hacer todo eso , el unico problema que tengo es que al ingresar los grados por el teclado matricial 4*3 , por ejemplo si ingreso 10 grados este se mueve 90 grados lo cual no es correcto , entonces busque un poco acerca de esto y me encontre que esto se determina con la ecuacion de la recta , pero de alli es lo que no entiendo
gracias por responder de antemano
19/05/2013 #4

Avatar de Romyggar

Alternativa a la fórmula
andres1594 dijo: Ver Mensaje
primero gracias por responder y perdón por no ser mas especifico
el proyecto es manejar un brazo robotico (ya construido) por medio de un pic 18f4550 utilizamos pic o pcw para programar, este se puede manejar por dos tipos con potenciometros es decir utilizando un cad del pic o con un teclado determinando asi cuantos grados quieren moverse (obviamente por el teclado)
pero yo se hacer todo eso el unico problema que tengo es que al ingresar los grados por el teclado matricial 4*3 por ejemplo si ingreso 10 grados este se mueve 90 grados lo cual no es correcto entonces busque un poco acerca de esto y me encontre que esto se determina con la ecuacion de la recta pero de alli es lo que no entiendo
gracias por responder de antemano

Amigo andres1594, Salu2!

Bueno, ahora que te has explicado mejor, se me ocurre un método mas "lineal" que usar una fórmula, el cual tiene varias "etapas" por decirlo de alguna forma.

Pero para que funcione necesito saber como estas determinando la posición del brazo sobre su eje horizontal (es decir, que en el plano X.Y, el brazo gira estando en el centro, z = 0) a partir de el valor que lees del potenciómetro con el ADC. Porque sé que hay varias formas. (Mencionaré algunas; modulación pwm:según sea el ancho de un pulso, así serán los grados de giro; por valores de voltaje en una tabla que relacione voltaje vs posición X.Y; por tiempo de carga, según sea el valor del potenciómetro, un condensador se carga mas rápido o lento, y el brazo gira hasta que se cargue el condensador, el ADC sirve como comparador de voltaje, siendo el mayor grado de giro el mayor tiempo de carga, etc).

Sin importar que método uses, aqui vá mi planteamiento:

1- Rutina que maneja el teclado matricial, y arroja un valor GGG (grados).

2- Rutina que Calcula la posición actual del brazo (eje X.Y): Esta rutina determina cual es el valor real a posicionar. Por ejemplo el brazo (BRZ desde ahora), tiene un valor inicial de 0°, el primer valor ingresado fué de 70°, luego -sin reiniciar el brazo a su posición por defecto- se ingresa 20°, El BRZ debería retroceder 50°. Según sea la técnica que estés usando para controlar los motores, así será la operación matemática que realizará esta rutina. Quizá y no se necesite si ya tienes integrado este paso en el control de motores.

3- Rutina que convierte los grados ingresados a posición del brazo: esta rutina o método recibe un valor GGG (entero o flotante según sea la precisión que manejes en tus motores), convierte esto a un valor tipo QQQ y llama a la rutina de posicionamiento según sea el método que estés usando, que usará la variable tipo QQQ (depende de tú programa).

------------------------------------------

Por otro lado, haciendo un poco de matemáticas, puedes usar pitágoras para calcular las coordenadas X.Y dado un ángulo en grados:

Busca el apartado "De polares a cartesianas" en este enlance: Coordenadas polares y cartesianas

Pero tendrás que usar al menos las funciones trigonométricas seno y coseno en el PIC18F4550 y según el compilador C que estés usando esto no debería ser un problema.

Entonces, la rutina 2 usaría esta función trigonométrica (en caso tu uses coordenadas cartesianas para posicionar el BRZ).

Salu2! y esperó te sirva!.

PD: Si me comentas como controlas la posición del BRZ, entonces quedará mas claro aún.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.