domingo, 31 de julio de 2011

Basubot III

De entre varias elecciones posibles la que lleva al camino mas simple suele ser la correcta, dijo no se quien alguna vez en algún sitio, creo ...xD

Esta "ida de pelota" viene por lo siguiente: Tengo la costumbre de coger un problema complicado que se me presente y quiera o no lo intento descomponer en varios mas simples fáciles de realizar. Esto esta guay si tu vida es la serie Mc Giver, a mi me trae bastantes "percances" para regocijo y escarnio mio. Pero en este caso, el tecnológico, a sido curioso. Por un lado me dedique a interpretar las señales ptm o algo así ( pendiente de revisión ), estas las genera un receptor Futaba de dos canales, reciclado del coche RC de nitro metano que uso de base para basubot. Según comande la "emisora" también Futaba, modelo T2ER. Con algo de código interpreto las señales recibidas y comando el servo de dirección, esto va guay me digo al ver los resultados, todo gira como debe.

Después me pongo a desarrollar un proto en base l298 y arduino que me maneje un motor 12V 2A, por encima de 20.000khz, frecuencia no audible, que no me genere un molesto pitido al bajar el duty cicle del 100%.  Y tambien guay, tan guay que incluso añado una resistencia de sensado de consumo al circuito y consigo sensar la corriente que pasa por el motor y con esto hago un sensor de torque y un limitador por software de la corriente que pasa po el l298 de cara a no quemarlo, guay me digo de nuevo, control de velocidad, dirección y torque aceptables.

Pero al juntar los dos trozos de codigo en uno solo, me doy cuenta que al toquetear los timer del atmega328p-pu la libreria servotimer2.h del arduino no va bien y el servo se me pira a derechas como los soldados de Franco, con un pitido muy molesto, justo lo que estaba evitando al cambiar la frecuencia del timer, en teoria (mi teoria ...) solo en los pines 11 y 3, con el codigo siguiente:

void setup() {
Serial.begin(9600);
pinMode(servoDosIn, INPUT);
byte mask = B11111000;
TCCR2B &= mask;
TCCR2B |= (0<<CS22) | (0<<CS21) | (1<<CS20);
}



Después de mucho pensar, joe ... es tema de frecuencia ... y si me salto la libreria timer2 y uso un analog ... pos no ... y si con un 555 genero una frecuencia secundaria de la que use el arduino?? ni lo probé por no tener aqui los componentes necesarios, pero me sigue pareciendo una buena idea. Modular los datos mandados al servo de forma aleatoria en base a lo recibido de cara a por obra y gracia de superman que esta en los cielos, controlar el servo de dirección, también fallido. Así que después de un rato largo, pero largo largo largo largo, he decidido no usar el arduino como interface I/O entre el receptor y el servo de dirección, así de simple ... asi que libero al arduino de esta carga de proceso, y yo me libero de generar pwm a dos frecuencias diferentes en un arduino. La otra idea era hacer un arduino dual core, pero esto a parte de una flipada, es otra historia.


Moraleja: "Fijate un objetivo distinto y tomate un vino tinto" que dijo Estopa

No hay comentarios:

Publicar un comentario