21-11-2014, 10:38 PM
Hay bastante silencio. No sé si os interesan mis divagaciones sobre estos temas o andais muy perdidos para siquiera opinar.
Intento dar con la solución óptima para el dimeo de motores estudiando distintas alternativas.
De lo contrario una decisión adoptada a la ligera podría condicionar todo el diseño de CAO en una dirección que luego se demostrara inconveniente. Todos los esfuerzos por prevenir este tipo de errores de en las primeras fases de un diseño software son siempre muy rentables. Hasta ahora todas las soluciones al problema del dimeo de motores tienen alguna que otra pega y por eso me ha costado decidirme.
También me ha costado decidirme porque últimamente estoy reconsiderando el tema de Arduino DUE. Ahora creo que para una instalación de un gran acuario tener un controlador central muy completo puede estar muy bien bien, pero en algunas instalaciones domésticas estoy seguro de que mucha gente preferirá optar por pequeños controladores más baratos y que hagan solo algunas cosas.
Siempre pensé que CAO terminaría tirando por Arduino DUE pero en parte gracias a vosotros, ya no lo tengo tan claro. Una habitación con varios acuarios que tengan distintas necesidades de control cada uno puede necesitar un sistema distribuido en lugar deun controlador molótico (de un solo bloque).
Creo que lo único que necesita estar centralizado es el interfaz de control. Voy a completar la nueva version de CAO1, pero en ella me gustaría incluir módulos aprovechables para otro tipo de arquitecturas.
Estoy repensando todo el diseño de CAO y no solo estoy explorando las posibilidades de DUE, también estoy explorando las posibilidades de las placas baratitas como el Arduino Pro Mini 328.
No voy a usar un Timer que solo funcione en DUE ni exclusivo para una placa Arduino en especial. Voy a buscar un dimeo de motor compatible con una amplia variedad de placas y en especial con las más baratitas.
Hay una página interesante.
http://arduino-info.wikispaces.com/Ardui...iderations
He realizado más pruebas. Concretamente he dimeado en Arduino UNO un motor en el pin 9 (los pines 9 y 10 solo entrearían en contacto con la librería servo) y he realizado un programa que realiza el dimeo de un motor con las 5 posibles frecuencias que Arduino puede facilitar en este pin. Creo que me voy a decir por esto.
Supongo que lo mejor es dejar la opción de que la frecuencia de dimeo pueda ser configurada. En mi caso las frecuencias extremas para este pin son 31Khz y 30 Hz. Ambas frecuencias resultan inaudibles mientras que las intermedias provocan ruido. Esta solución es incompatibles con servos pero funcionaría en una amplia variedad de placas Arduino. Os pongo el código por si lo queréis probar.
Intento dar con la solución óptima para el dimeo de motores estudiando distintas alternativas.
De lo contrario una decisión adoptada a la ligera podría condicionar todo el diseño de CAO en una dirección que luego se demostrara inconveniente. Todos los esfuerzos por prevenir este tipo de errores de en las primeras fases de un diseño software son siempre muy rentables. Hasta ahora todas las soluciones al problema del dimeo de motores tienen alguna que otra pega y por eso me ha costado decidirme.
También me ha costado decidirme porque últimamente estoy reconsiderando el tema de Arduino DUE. Ahora creo que para una instalación de un gran acuario tener un controlador central muy completo puede estar muy bien bien, pero en algunas instalaciones domésticas estoy seguro de que mucha gente preferirá optar por pequeños controladores más baratos y que hagan solo algunas cosas.
Siempre pensé que CAO terminaría tirando por Arduino DUE pero en parte gracias a vosotros, ya no lo tengo tan claro. Una habitación con varios acuarios que tengan distintas necesidades de control cada uno puede necesitar un sistema distribuido en lugar deun controlador molótico (de un solo bloque).
Creo que lo único que necesita estar centralizado es el interfaz de control. Voy a completar la nueva version de CAO1, pero en ella me gustaría incluir módulos aprovechables para otro tipo de arquitecturas.
Estoy repensando todo el diseño de CAO y no solo estoy explorando las posibilidades de DUE, también estoy explorando las posibilidades de las placas baratitas como el Arduino Pro Mini 328.
No voy a usar un Timer que solo funcione en DUE ni exclusivo para una placa Arduino en especial. Voy a buscar un dimeo de motor compatible con una amplia variedad de placas y en especial con las más baratitas.
Hay una página interesante.
http://arduino-info.wikispaces.com/Ardui...iderations
He realizado más pruebas. Concretamente he dimeado en Arduino UNO un motor en el pin 9 (los pines 9 y 10 solo entrearían en contacto con la librería servo) y he realizado un programa que realiza el dimeo de un motor con las 5 posibles frecuencias que Arduino puede facilitar en este pin. Creo que me voy a decir por esto.
Supongo que lo mejor es dejar la opción de que la frecuencia de dimeo pueda ser configurada. En mi caso las frecuencias extremas para este pin son 31Khz y 30 Hz. Ambas frecuencias resultan inaudibles mientras que las intermedias provocan ruido. Esta solución es incompatibles con servos pero funcionaría en una amplia variedad de placas Arduino. Os pongo el código por si lo queréis probar.
Código:
#include <Arduino.h>
int led = 9;
int brightness = 0;
// *****************************************************
// Varia la frecuencia de PWM en los pines 9 y 10
// (No es compatible con el uso de las librerías servo)
// *****************************************************
// Modo Divisor Frecuencia
// 0x01 1 31372.55
// 0x02 8 3921.16
// 0x03 64 490.20 <--DEFAULT
// 0x04 256 122.55
// 0x05 1024 30.64
// *****************************************************
void SetPwmFreqP9P10(byte mode) {
if (mode<0x01 || mode>0x05) return;
TCCR1B = TCCR1B & 0b11111000 | mode;
Serial.print("Modo=");
Serial.println(mode);
}
// ***************************
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
// ***************************
void loop() {
for (byte m=0x1; m<=0x5; m++){
analogWrite(led, 0);
delay(6000);
SetPwmFreqP9P10(m);
for (int brightness=0; brightness<=255; brightness++){
analogWrite(led, brightness);
Serial.println(brightness);
delay(100);
}
}
}