Por fin he conseguido que los motores se muevan. Finalmente preparé una pequeña placa para hacer el calibrado.
La placa no corresponde con el circuito final porque no esperaba tener que usar un cristal para el reloj. Al final, para las pruebas, simplemente dejé el pic sin instalar y conecté cada una de las salidas en una placa de pruebas, tal y como muestra el circuito. De hecho, para esta fase de búsqueda manual, en lugar de usar GPIO1 para tomar datos AD, la usé para un led que me hacía las veces de contador de segundos.
Además, la placa estaba preparada para probar los distintos componentes que necesita en diferentes tamaños smd. Aunque para las resistencias tenía claro la potencia que tenían que soportar, para las inductancias y los condensadores no tenía criterio para elegir un tamaño u otro. Primero probé con lo más pequeño que había comprado, y funcionó.
Como decía, las pruebas las he hecho con una búsqueda manual, observando en que momento se producía movimiento. Aún no he implementado el algoritmo de búsqueda que proponen elliptec: Electronic_Frequency_Search_April_2008.
Primero probé con un reloj a 4 Mhz (el interno de un 12f675) y generando el reloj actuando directamente sobre una de las salidas, pero el margen de frecuencias que podía explorar era bastante pequeño: 71k, 83k, 100k, 125k. El motor que usaba para pruebas no se movió.
Luego pensé en probar con un reloj a 20Mhz actuando también directamente sobre una de las salidas, pero haciendo cálculos la resolución de frecuencias que podía alcanzar en el rango a explorar (75k-110k) era siempre superior a 2kHz y el fabricante del motor recomendaba mínimo 1kHz y a ser posible 300Hz. Esto me impulsó a cambiar de pic y pasar al 12f683 que incorpora un módulo PWM. Confiurandolo de forma correcta sí que alcanzaba resoluciones inferiores a 2Khz, pudiendo explorar las siguientes frecuencias:
PR2 | T=(PR2+1)*4*Tosc*PreTMR2 | f (1/T) | f(kz) | Res Duty (bits) | Resolucion f (Khz) | Prueba (segundos) |
45 | 9,20E-06 | 1,09E+05 | 108,70 | 7,52356196 | 2,42 | 16 |
46 | 9,40E-06 | 1,06E+05 | 106,38 | 7,55458885 | 2,31 | 14 |
47 | 9,60E-06 | 1,04E+05 | 104,17 | 7,5849625 | 2,22 | 12 |
48 | 9,80E-06 | 1,02E+05 | 102,04 | 7,61470984 | 2,13 | 10 |
49 | 1,00E-05 | 1,00E+05 | 100,00 | 7,64385619 | 2,04 | 8 |
50 | 1,02E-05 | 9,80E+04 | 98,04 | 7,67242534 | 1,96 | 6 |
51 | 1,04E-05 | 9,62E+04 | 96,15 | 7,70043972 | 1,89 | 4 |
52 | 1,06E-05 | 9,43E+04 | 94,34 | 7,72792045 | 1,81 | 2 |
53 | 1,08E-05 | 9,26E+04 | 92,59 | 7,7548875 | 1,75 | |
54 | 1,10E-05 | 9,09E+04 | 90,91 | 7,78135971 | 1,68 | 26 |
55 | 1,12E-05 | 8,93E+04 | 89,29 | 7,80735492 | 1,62 | 24 |
56 | 1,14E-05 | 8,77E+04 | 87,72 | 7,83289001 | 1,57 | 22 |
57 | 1,16E-05 | 8,62E+04 | 86,21 | 7,857981 | 1,51 | 20 |
58 | 1,18E-05 | 8,47E+04 | 84,75 | 7,88264305 | 1,46 | 18 |
59 | 1,20E-05 | 8,33E+04 | 83,33 | 7,9068906 | 1,41 | 16 |
60 | 1,22E-05 | 8,20E+04 | 81,97 | 7,93073734 | 1,37 | 14 |
61 | 1,24E-05 | 8,06E+04 | 80,65 | 7,95419631 | 1,32 | 12 |
62 | 1,26E-05 | 7,94E+04 | 79,37 | 7,97727992 | 1,28 | 10 |
63 | 1,28E-05 | 7,81E+04 | 78,13 | 8 | 1,24 | 8 |
64 | 1,30E-05 | 7,69E+04 | 76,92 | 8,02236781 | 1,20 | 6 |
65 | 1,32E-05 | 7,58E+04 | 75,76 | 8,04439412 | 1,17 | 4 |
66 | 1,34E-05 | 7,46E+04 | 74,63 | 8,06608919 | 1,13 | 2 |
El barrido se hizo manteniendo la frecuencia activa durante dos segundos, teniendo como resultado que a las frecuencias de 100khz el motor se movía sin problemas en un sentido y a la frecuencia de 84’7Khz el motor empezaba a moverse en el otro.
Todas las pruebas se hicieron con el ciclo de trabajo cercano al 50%.
La gran conclusión fue que un reloj de 20Mhz no era suficiente para explorar el rango de frecuencia con suficiente precisión, ya que la frecuencia de 84’7k parecía no ser todavía la óptima. De hecho, hice pruebas manteniendo el motor durante 8 segundos a esa frecuencia, y el motor nunca pasó de iniciar el movimiento.
El siguiente paso va a ser comprobar si la captura AD y la implementación del algoritmo de búsqueda electrónica lleva a los mismos resultados.
Para resolver el problema de la resolución, sólo puedo irme a pics de la familia 18f, en concreto he seleccionado el 18f14k22 que parece puede funcionar a 64Mhz y que sí que me da un areolución inferior a 1k y muchas veces cercana a los 300hz.
En cualquier caso dejo el código que he utilizado con el 12f683. el mapeo de pins sigue el esquema del circuito. GPIO3 sirve para seleccionar si la búsqueda se hace en el rango de frecuencias hacia adelante o hacia atrás y como he comentado GPIO1 va a un led que cuenta segundos.