Eso pudiera ser cierto.
Como le comenté a Letal en el otro tema, lo único que sucede cuando es negativo es que la retroalimentación es mayor que la referencia.
Si haces cero tu "error" lo que provocarás es que el motor no funcione, lo cual no es apropiado porque, estarias utilizando un control semi "on-off".
Te sugiero que realices una ecuación (simple regla de 3) en la cual definas tu máximo valor negativo como positivo y ese resultado lo cargues al PWM.
Como se mencionó, si usas 16 bits, estarás usando 15 (16 es el signo); tendrias 32765 incrementos positivos y negativos.
Para el PWM tienes una resolución de 10 bits que es 1023 incrementos.
-32765 es cero en PWM, 0 es 50% en PWM (511), 32765 es 100% (1023).
Lo recomendable es hacer que esos 32765 sean proporcionales a 1023. Con esto "suavisas" la respuesta, caso contrario a como lo quieres hacer de colocar cero en error.
Si tu motor tiene mucha inercia quizá no se observe este fenómeno pero si no es el caso, verás que el motor se para, se prende e incrementa su velocidad, se para cuando sea negativo, se prende cuando sea error positivo, etcétera.
Limitas la vida útil del motor apagándolo y prendiéndolo de esa manera.
Claro que si para tus requerimientos, el utilizar el código de esa manera es suficiente, ni le busques, solo hazlo.
Coméntalo con tus compañeros de equipo ó, simúlalo en Matlab. Coloca varias cantidades en la ecuación que planteas y grafícala. Con una gráfica observarás lo que te digo.
Espero te ayude.
Ando que me lleva la #@$@#!@$@#$%$#!@$%@#$, no he tenido oportunidad de ponerme a fondo a terminar mi PID............. bueno..... si he tenido tiempo pero lo utilizo para dormir
