En ésta aplicación se controlará un servomotor utilizando un potenciómetro por lo cual se utilizará el ADC y un IOPin configurado como PWM.
Creamos 2 objetos Hilo y t.
private Thread t; private Hilo hilo; hilo = new Hilo(this); t = new Thread(hilo);
En nuestro diseño agregamos un botón que llamaremos Inicio y le asignamos un evento.
Para ejecutar el código que se encuentra en el Hilo únicamente lo mandamos a llamar con la función t.start().
JButton btnIniciarPWM = new JButton("Inicio"); btnIniciarPWM .addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { t.start(); //Ejecutar Hilo. }
En la hoja de especificaciones del servomotor se determinan los tiempos del PWM (varían según el fabricante).
Con un periodo de 21.5 ms y un ciclo de trabajo que va desde 0.5 ms a 2.5 ms.
Utilizando la fórmula para obtener el periodo del PWM para SADE determinamos el siguiente valor:
ValorPeriodo = (TiempoPeriodo[S]) * (50,000,000)
ValorPeriodo = (21.5*10^-3) * (50,000,000)
ValorPeriodo = 1,075,000
De igual forma obtenemos el valor mínimo y el valor máximo del ciclo de trabajo.
ValorMínimo = (TiempoCiclo[S]) * (50,000,000)
ValorMínimo = (0.5*10^-3) * (50,000,000)
ValorMínimo = 25,000
ValorMáximo = (TiempoCiclo[S]) * (50,000,000)
ValorMáximo = (2.5*10^-3) * (50,000,000)
ValorMáximo = 125,000
Ahora abrimos la clase Hilo.java.
El código que utilizaremos para nuestra aplicación es el siguiente:
public void run() { // TODO Auto-generated method stub int x; //Variable tipo entero que guarda el valor del ADC sin el complemento a dos. while(true) { byte valor_adc = comando.ADC(1); //Hacemos una lectura utilizando el canal 1 del ADC y la información la guardamos en la variable. if(valor_adc < 0){ x = 255-(~valor_adc); } //Con esta condición quitamos el complemento a dos para trabajar sólo con valores positivos. else{ x = valor_adc; } /*El valor máximo del ADC es 255 y es en éste valor cuando el ciclo de trabajo debe llegar a 125000, entonces sise divide 125000/255 = 490 y este valor se multiplica por "x" */ int ciclo_trabajo = x * 490; /*La siguiente condición la utilizaremos para que el ciclo de trabajo no sea menor de 25000*/ if(ciclo_trabajo < 25000){ ciclo_trabajo = 25000; } comando.PWM(1075000, ciclo_trabajo, comando.G1); //Configuramos el pin G1 como PWM. } }
Y así finaliza nuestra aplicación.
¡Gracias por su interés en SADE!
Cualquier duda o información pueden contactarnos en: [email protected]