{"id":2051,"date":"2026-06-21T06:53:25","date_gmt":"2026-06-21T06:53:25","guid":{"rendered":"https:\/\/cnc-mastery.com\/curso\/leccion-33como-funciona-la-interfaz-de-un-control-cnc\/"},"modified":"2026-06-26T03:33:45","modified_gmt":"2026-06-26T03:33:45","slug":"leccion-34-como-funciona-la-interfaz-de-un-control-cnc","status":"publish","type":"post","link":"https:\/\/cnc-mastery.com\/curso\/leccion-34-como-funciona-la-interfaz-de-un-control-cnc\/","title":{"rendered":"Lecci\u00f3n 34: \u00bfC\u00f3mo funciona la interfaz de un control CNC?"},"content":{"rendered":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"El Secreto que nadie te explica: La interfaz CNC\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Nv6gboHLoHk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">La Interfaz de Control CNC: El Cerebro Detr\u00e1s de la Precisi\u00f3n<\/h4>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-ast-global-color-3-color\">1. INTRODUCCI\u00d3N<\/h4>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_02-1024x572.png\" alt=\"\" class=\"wp-image-2070\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_02-1024x572.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_02-300x168.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_02-768x429.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_02-1536x858.png 1536w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_02.png 1557w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\">Imagina a un artista con los ojos vendados. Sabe exactamente qu\u00e9 pintar, tiene un mapa mental perfecto del lienzo, pero no puede ver sus propias manos. Si una r\u00e1faga de viento mueve el caballete, sus pinceladas quedar\u00e1n arruinadas, aunque su cerebro siga creyendo que pint\u00f3 una obra maestra.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\">Una m\u00e1quina CNC puede creer que se movi\u00f3 perfectamente\u2026 aunque en realidad jam\u00e1s lleg\u00f3 a su posici\u00f3n.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\">Bienvenidos al verdadero cerebro de la fabricaci\u00f3n digital. Hoy vamos a quitar el velo del software y sumergirnos en la cruda realidad f\u00edsica: c\u00f3mo los n\u00fameros y l\u00edneas de c\u00f3digo se transforman en pulsos el\u00e9ctricos, luego en campos magn\u00e9ticos y, finalmente, en fuerza mec\u00e1nica bruta. No est\u00e1s a punto de leer un manual t\u00e9cnico; est\u00e1s a punto de entender el latido exacto de la automatizaci\u00f3n industrial.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_16-1024x559.png\" alt=\"\" class=\"wp-image-2072\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_16-1024x559.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_16-300x164.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_16-768x419.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_16.png 1408w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">2. CONTEXTO Y FUNDAMENTOS<\/h4>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">En el pasado, el mecanizado era 100% m\u00fasculo humano y geometr\u00eda aplicada. El operador <em>era<\/em> la interfaz de control: sus manos giraban las manivelas y su cuerpo sent\u00eda la vibraci\u00f3n del metal cortado. Cuando naci\u00f3 el Control Num\u00e9rico (NC) en los a\u00f1os 50, el objetivo era simple pero monumental: reemplazar la mano humana con un sistema automatizado que nunca se cansara y nunca cometiera un error.<\/p>\n<\/p>\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">Pero aqu\u00ed radica el problema fundamental: una computadora no puede girar una manivela directamente. Las computadoras hablan el delicado lenguaje de los bits (ceros y unos a 5 voltios), mientras que los motores industriales demandan corriente cruda, altos voltajes y amperajes masivos.<\/p>\n<\/p>\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">La &#8220;Interfaz de Control&#8221; naci\u00f3 como el traductor definitivo. Es la frontera cr\u00edtica entre el mundo l\u00f3gico del software (el C\u00f3digo G) y el mundo f\u00edsico del hardware (Torque, Voltaje y Magnetismo). Hoy, ya sea en una fresadora industrial de 5 ejes o en una impresora 3D de escritorio, el problema a resolver es exactamente el mismo: \u00bfc\u00f3mo le decimos a un bloque macizo de acero exactamente d\u00f3nde debe estar, con precisi\u00f3n nanom\u00e9trica, cientos de veces por segundo?<\/p>\n<\/p>\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">3. AN\u00c1LISIS T\u00c9CNICO PROFUNDO<\/h4>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_04-1024x572.png\" alt=\"\" class=\"wp-image-2074\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_04-1024x572.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_04-300x168.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_04-768x429.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_04-1536x858.png 1536w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_04.png 1557w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">Vamos a mirar dentro. \u00bfQu\u00e9 es exactamente una interfaz de control? No es solo una placa verde con chips; es una <strong>tuber\u00eda de datos<\/strong> meticulosamente orquestada. Sigamos una sola instrucci\u00f3n: el comando de mover el eje X apenas 1 mil\u00edmetro.<\/p>\n<\/p>\n\n\n<ol class=\"wp-block-list has-ast-global-color-3-color has-text-color\">\n<li><strong>El Cerebro L\u00f3gico (El Controlador\/Software):<\/strong> Todo comienza como una l\u00ednea de c\u00f3digo: <code>G01 X1.0 F100<\/code>. La computadora calcula la trayectoria matem\u00e1tica. Determina que para mover 1 mm a esa velocidad, el motor debe dar exactamente, digamos, 100 micropasos. Inmediatamente genera una se\u00f1al digital: un tren de pulsos cuadrados perfectos a 5 o 3.3 Voltios.<\/li>\n\n\n\n<li><strong>El Muro de Contenci\u00f3n (Aislamiento \u00d3ptico):<\/strong> Este es un punto de vida o muerte para la m\u00e1quina. Una computadora opera con l\u00f3gica fr\u00e1gil. Los motores operan con 48V, 80V, o incluso 220V, un entorno hostil lleno de picos inductivos y ruido el\u00e9ctrico. Si se tocan, la placa base de la computadora se incinera en milisegundos. Aqu\u00ed entra el <strong>Optoacoplador<\/strong>. La se\u00f1al de 5V enciende un microsc\u00f3pico LED interno. La luz cruza un vac\u00edo f\u00edsico dentro del chip y golpea un fototransistor del otro lado. La se\u00f1al ha cruzado el abismo como <em>luz<\/em>, aislando galv\u00e1nicamente y de forma absoluta el lado de alto voltaje de la delicada PC.<\/li>\n\n\n\n<li><strong>El M\u00fasculo (El Driver):<\/strong> El driver (o controlador de potencia) recibe este pulso aislado de &#8220;Paso&#8221; (Step). Pero un pulso es solo informaci\u00f3n, carece de fuerza. El driver act\u00faa como una represa con v\u00e1lvulas electr\u00f3nicas de alta velocidad (MOSFETs o IGBTs). Cuando detecta el pulso, abre violentamente las compuertas, permitiendo que r\u00e1fagas de amperios fluyan desde la fuente de alimentaci\u00f3n principal hacia las bobinas del motor.<\/li>\n\n\n\n<li><strong>El Campo Magn\u00e9tico (El Actuador):<\/strong> Esta avalancha de corriente impacta las bobinas de cobre del motor (paso a paso o servo). Instant\u00e1neamente, crea un campo magn\u00e9tico feroz. El rotor, revestido de imanes permanentes o acero magn\u00e9tico, es violentamente atra\u00eddo hacia este nuevo campo, encajando en su nueva posici\u00f3n. El eje gira. El husillo gira. La herramienta corta.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">4. VISUALIZACI\u00d3N MENTAL OBLIGATORIA<\/h4>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">Para comprender verdaderamente esto, debes dejar de ver la electricidad como magia invisible.<\/p>\n<\/p>\n\n\n<ul class=\"wp-block-list has-ast-global-color-3-color has-text-color\">\n<li><strong>Visualiza la se\u00f1al STEP (Paso)<\/strong> como el metr\u00f3nomo implacable de un baterista. Cada latido (pulso) le dice al sistema que mueva una fracci\u00f3n de grado. Latidos m\u00e1s r\u00e1pidos = mayor velocidad de movimiento.<\/li>\n\n\n\n<li><strong>Visualiza la se\u00f1al DIR (Direcci\u00f3n)<\/strong> como un simple interruptor de v\u00edas de tren. 5 Voltios significa &#8220;avanzar&#8221;, 0 Voltios significa &#8220;retroceder&#8221;. Es un estado, no un evento continuo.<\/li>\n\n\n\n<li><strong>Visualiza el PWM (Modulaci\u00f3n por Ancho de Pulso)<\/strong> que controla la velocidad del husillo (spindle) como un grifo de agua abri\u00e9ndose y cerr\u00e1ndose a la velocidad de la luz. \u00bfQuieres la mitad de la potencia? Lo abres durante 1 milisegundo y lo cierras durante 1 milisegundo. La inercia del motor suaviza estos pulsos violentos convirti\u00e9ndolos en una rotaci\u00f3n constante al 50%.<\/li>\n\n\n\n<li><strong>Visualiza el Campo Magn\u00e9tico<\/strong> dentro del motor como un engranaje invisible e inquebrantable. En lugar de dientes f\u00edsicos entrelazados, son polos magn\u00e9ticos aferr\u00e1ndose unos a otros. Cuando el driver inyecta corriente, est\u00e1 rotando ese engranaje magn\u00e9tico un diente hacia adelante, forzando al rotor f\u00edsico a perseguirlo.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">5. APLICACIONES REALES CNC<\/h4>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_09-1024x572.png\" alt=\"\" class=\"wp-image-2076\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_09-1024x572.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_09-300x168.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_09-768x429.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_09-1536x858.png 1536w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_09.png 1557w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">\u00bfC\u00f3mo se comporta esta teor\u00eda en la trinchera industrial?<\/p>\n<\/p>\n\n\n<ul class=\"wp-block-list has-ast-global-color-3-color has-text-color\">\n<li><strong>Router CNC:<\/strong> La interfaz utiliza puertos paralelos o controladores de movimiento modernos por USB\/Ethernet (como Mach3, LinuxCNC o Masso) para enviar miles de pulsos por segundo a los drivers. Adem\u00e1s, la placa de interfaz activa un rel\u00e9 f\u00edsico de gran tama\u00f1o que enciende el ensordecedor motor principal (spindle).<\/li>\n\n\n\n<li><strong>L\u00e1ser CNC:<\/strong> Aqu\u00ed, la interfaz no solo controla el movimiento f\u00edsico de los motores; <strong>controla la luz misma<\/strong>. La interfaz env\u00eda una se\u00f1al PWM de muy alta frecuencia directamente a la fuente de alto voltaje del tubo l\u00e1ser. Variando el ancho de los pulsos digitales en tiempo real, ordena al l\u00e1ser que queme profundamente (corte) o acaricie la superficie (grabado fotogr\u00e1fico) mientras el cabezal vuela sobre el material.<\/li>\n\n\n\n<li><strong>Plasma CNC:<\/strong> La interfaz de control en una cortadora de plasma enfrenta al peor enemigo posible: el arco de plasma crea una Interferencia Electromagn\u00e9tica (EMI) tit\u00e1nica. Una placa electr\u00f3nica com\u00fan colapsar\u00eda al instante. Las interfaces de plasma industriales usan escudos met\u00e1licos pesados, se\u00f1ales diferenciales (enviando la se\u00f1al y su inversa simult\u00e1neamente para anular el ruido) y m\u00f3dulos THC (Control de Altura de Antorcha) que leen el voltaje bruto del arco el\u00e9ctrico para ajustar el eje Z din\u00e1micamente y evitar que la antorcha choque contra el metal deformado por el calor.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">6. PROBLEMAS Y FALLAS REALES<\/h4>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_10-1024x572.png\" alt=\"\" class=\"wp-image-2086\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_10-1024x572.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_10-300x168.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_10-768x429.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_10-1536x858.png 1536w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_10.png 1557w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">En la teor\u00eda, la tuber\u00eda de datos es perfecta. En el entorno industrial, es una zona de guerra.<\/p>\n<\/p>\n\n\n<ol class=\"wp-block-list has-ast-global-color-3-color has-text-color\">\n<li><strong>P\u00e9rdida de Pasos (La ceguera del Lazo Abierto):<\/strong> \u00bfRecuerdas al artista vendado? Un sistema est\u00e1ndar de motores paso a paso es de &#8220;Lazo Abierto&#8221; (Open Loop). La interfaz env\u00eda 10,000 pulsos y <em>asume ciegamente<\/em> que el motor dio 10,000 pasos. Pero, \u00bfqu\u00e9 pasa si la fresa choca contra un nudo duro en la madera? El motor se atasca f\u00edsicamente. La placa de control sigue contando pulsos, completamente ignorante del desastre. El resultado final: el resto de la pieza se mecaniza varios mil\u00edmetros fuera de lugar. Material arruinado.<\/li>\n\n\n\n<li><strong>Interferencia Electromagn\u00e9tica (EMI):<\/strong> En un taller lleno de soldadoras, variadores de frecuencia y contactores masivos, olas invisibles de ruido electromagn\u00e9tico chocan contra los cables de la interfaz. Si un cable act\u00faa como antena, un pico aleatorio de EMI puede ser malinterpretado por el driver como un pulso de &#8220;Paso&#8221;. La m\u00e1quina se desplaza aleatoriamente, cortando donde no debe. Esta es la raz\u00f3n por la que los cables mallados (apantallados) y la conexi\u00f3n a tierra en estrella no son sugerencias; son leyes absolutas de la f\u00edsica industrial.<\/li>\n\n\n\n<li><strong>Resonancia y Vibraci\u00f3n:<\/strong> Los motores paso a paso no giran de forma fluida; &#8220;saltan&#8221; violentamente de un paso magn\u00e9tico al siguiente. A ciertas velocidades espec\u00edficas, estos impactos repetitivos entran en sinton\u00eda con la frecuencia natural de la estructura de la m\u00e1quina. La m\u00e1quina ruge, vibra incontrolablemente y el motor pierde dr\u00e1sticamente su torque, atasc\u00e1ndose. \u00bfLa soluci\u00f3n de la interfaz? El <em>Microstepping<\/em>: el driver divide electr\u00f3nicamente un paso f\u00edsico en 16 o 32 sub-pasos magn\u00e9ticos sutiles, enga\u00f1ando al motor para que fluya como un r\u00edo en lugar de caer por una escalera.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">7. DEBATES Y CONTROVERSIAS<\/h4>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_12-1024x572.png\" alt=\"\" class=\"wp-image-2078\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_12-1024x572.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_12-300x168.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_12-768x429.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_12-1536x858.png 1536w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_12.png 1557w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\"><strong>La Guerra Sagrada del CNC: Lazo Abierto vs Lazo Cerrado<\/strong><\/p>\n<\/p>\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">Este es el debate m\u00e1s candente en la ingenier\u00eda de control de movimiento. <em>   <strong>Lazo Abierto (Steppers tradicionales):<\/strong> Econ\u00f3micos, brutalmente simples, confiables. Pero ciegos. Si un paso se pierde por una colisi\u00f3n o exceso de carga, se pierde para siempre. <\/em>   <strong>Lazo Cerrado (Servomotores o Steppers H\u00edbridos):<\/strong> El motor tiene un sensor (encoder rotativo) acoplado en su parte trasera. Por cada micro-movimiento, el encoder grita un pulso de <em>retroalimentaci\u00f3n<\/em> de regreso a la interfaz: <em>&#8220;He llegado a mi posici\u00f3n&#8221;<\/em>. Si una fuerza f\u00edsica empuja al motor fuera de su ruta, el driver detecta instant\u00e1neamente el error matem\u00e1tico y bombea corriente m\u00e1xima para forzar al motor a regresar a su lugar.<\/p>\n<\/p>\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">\u00bfSignifica esto que el lazo abierto es basura? Absolutamente no. Para el 90% de las m\u00e1quinas de escritorio y muchos routers industriales ligeros, un sistema de lazo abierto bien calibrado y ligeramente sobredimensionado (para que nunca alcance su l\u00edmite de fuerza) es tecnol\u00f3gicamente perfecto y financieramente insuperable.<\/p>\n<\/p>\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">8. FUTURO Y EVOLUCI\u00d3N<\/h4>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_13-1024x572.png\" alt=\"\" class=\"wp-image-2080\" srcset=\"https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_13-1024x572.png 1024w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_13-300x168.png 300w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_13-768x429.png 768w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_13-1536x858.png 1536w, https:\/\/cnc-mastery.com\/curso\/wp-content\/uploads\/2026\/06\/interfaz_cnc_13.png 1557w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\">El futuro de la interfaz CNC es la extinci\u00f3n del fr\u00e1gil pulso &#8220;Step\/Dir&#8221;.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\">Enviar millones de d\u00e9biles pulsos de 5 voltios a trav\u00e9s de largos cables propensos a interferencias est\u00e1 quedando obsoleto en la alta industria. La evoluci\u00f3n innegable es <strong>EtherCAT<\/strong> (y otros protocolos Ethernet industriales). En lugar de enviar pulsos el\u00e9ctricos uno por uno, el cerebro central emite paquetes de datos digitales altamente encriptados a trav\u00e9s de un cable de red est\u00e1ndar. El mensaje es simple: <em>&#8220;Motor 1, ve a la coordenada X a la velocidad Y&#8221;<\/em>. El driver ahora posee su propio microprocesador de alta potencia que calcula el movimiento localmente. Es virtualmente inmune al ruido el\u00e9ctrico t\u00edpico, permite retroalimentaci\u00f3n instant\u00e1nea de docenas de sensores, y reduce un laberinto de cables en un gabinete a un solo cable de red conectado en cadena. La interfaz ya no es solo un traductor; es una red neuronal distribuida.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-ast-global-color-3-color has-text-color\">9. CIERRE<\/h4>\n\n\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">Una m\u00e1quina CNC no es simplemente una herramienta de corte; es el puente definitivo entre el reino digital de las ideas y la terca realidad f\u00edsica. Cada vez que presionas el bot\u00f3n verde de &#8220;Cycle Start&#8221;, est\u00e1s desatando y controlando una sinfon\u00eda de f\u00edsica invisible. Est\u00e1s tomando un pensamiento humano, codificado como coordenadas matem\u00e1ticas en la memoria de silicio, traduci\u00e9ndolo a destellos de luz a trav\u00e9s del abismo de un optoacoplador, amplific\u00e1ndolo en tormentas magn\u00e9ticas violentas dentro de un estator de acero, y utilizando esa tormenta para desgarrar materia s\u00f3lida, dobleg\u00e1ndola a tu voluntad.<\/p>\n<\/p>\n<p class=\"has-text-align-left has-ast-global-color-3-color has-text-color\">\n<p class=\"has-text-align-left wp-block-paragraph has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3); text-align: left;\">La fabricaci\u00f3n moderna realmente es software convirti\u00e9ndose en magnetismo\u2026 y luego en materia.<\/p>\n<\/p>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Laboratorio Virtual: Interfaz CNC e Interpolaci\u00f3n<\/title>\n  <style>\n    body { background: #0f172a; color: #f8fafc; font-family: 'Segoe UI', sans-serif; margin: 0; padding: 15px; }\n    .container { max-width: 1100px; margin: 0 auto; background: #1e293b; padding: 15px; border-radius: 12px; border: 1px solid #334155; position: relative; }\n    h2 { color: #38bdf8; text-align: center; margin-top: 0; font-size: 1.4em; }\n    p.desc { font-size: 0.9em; color: #94a3b8; text-align: center; margin-bottom: 15px; }\n    \n    .simulation-area { display: flex; justify-content: space-between; align-items: stretch; background: #020617; padding: 20px; border-radius: 8px; border: 2px solid #334155; position: relative; gap: 10px; }\n    \n    \/* PC & Parallel Port *\/\n    .pc-panel { width: 15%; background: #0f172a; padding: 10px; border-radius: 6px; border: 1px solid #1e293b; display: flex; flex-direction: column; align-items: center; }\n    .pc-panel h3 { color: #38bdf8; font-size: 0.85em; margin: 0 0 10px 0; border-bottom: 1px solid #334155; width: 100%; text-align: center; padding-bottom: 5px; }\n    .parallel-port { background: #cbd5e1; padding: 10px 5px; border-radius: 4px; display: flex; flex-direction: column; gap: 4px; width: 80%; border: 2px solid #64748b; }\n    .pin { background: #1e293b; color: #38bdf8; font-size: 0.65em; padding: 3px; text-align: center; border-radius: 50%; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; border: 1px solid #0f172a; font-family: monospace; transition: all 0.1s; }\n    .pin.active { background: #ef4444; color: white; box-shadow: 0 0 8px #ef4444; }\n    .pin-label { font-size: 0.65em; color: #94a3b8; margin-left: 5px; }\n    .pin-row { display: flex; align-items: center; justify-content: space-between; width: 100%; }\n    \n    \/* Interface Board *\/\n    .interface-panel { width: 35%; background: #1e293b; padding: 10px; border-radius: 6px; border: 2px solid #10b981; position: relative; display: flex; flex-direction: column; }\n    .interface-panel h3 { color: #10b981; font-size: 0.85em; margin: 0 0 10px 0; border-bottom: 1px solid #334155; text-align: center; padding-bottom: 5px; }\n    .isolation-barrier { border-left: 2px dashed #ef4444; position: absolute; left: 50%; top: 40px; bottom: 10px; }\n    .isolation-label { position: absolute; left: 50%; top: 20px; transform: translateX(-50%); font-size: 0.6em; color: #ef4444; font-weight: bold; background: #1e293b; padding: 0 5px; }\n    \n    .opto-container { display: flex; flex-direction: column; gap: 8px; margin-top: 15px; z-index: 2; width: 100%; }\n    .opto { background: #0f172a; border: 1px solid #334155; border-radius: 4px; display: flex; justify-content: space-between; align-items: center; padding: 5px; height: 25px; }\n    .opto-side { width: 40%; display: flex; align-items: center; justify-content: center; }\n    .opto-led { width: 8px; height: 8px; background: #334155; border-radius: 50%; transition: background 0.1s; }\n    .opto-led.active { background: #38bdf8; box-shadow: 0 0 5px #38bdf8; }\n    .opto-gap { width: 20%; display: flex; align-items: center; justify-content: center; }\n    .light-beam { height: 2px; width: 100%; background: transparent; transition: background 0.1s; }\n    .light-beam.active { background: #38bdf8; box-shadow: 0 0 5px #38bdf8; }\n    .opto-rx { width: 8px; height: 8px; background: #334155; border-radius: 2px; transition: background 0.1s; }\n    .opto-rx.active { background: #10b981; box-shadow: 0 0 5px #10b981; }\n    .opto-label { font-size: 0.55em; color: #64748b; margin-right: 5px; width: 25px; }\n    \n    .terminals-col { display: flex; flex-direction: column; gap: 15px; margin-top: 15px; }\n    \n    \/* Drivers & Motors *\/\n    .drivers-panel { width: 25%; display: flex; flex-direction: column; gap: 10px; }\n    .motors-panel { width: 20%; display: flex; flex-direction: column; gap: 10px; justify-content: space-around; }\n    \n    .driver { background: #0f172a; padding: 8px; border-radius: 4px; border: 1px solid #334155; }\n    .driver-title { font-size: 0.7em; color: #38bdf8; text-align: center; border-bottom: 1px solid #1e293b; margin-bottom: 5px; padding-bottom: 3px; }\n    .driver-led { width: 6px; height: 6px; background: #ef4444; border-radius: 50%; margin: 0 auto 5px auto; }\n    .driver-led.active { background: #10b981; box-shadow: 0 0 5px #10b981; }\n    \n    .motor { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 80px; position: relative;}\n    .shaft-outer { width: 50px; height: 50px; border-radius: 50%; background: #475569; border: 3px solid #94a3b8; display: flex; align-items: center; justify-content: center; position: relative; transition: transform 0.05s linear; }\n    .shaft-inner { width: 15px; height: 15px; border-radius: 50%; background: #1e293b; }\n    .shaft-pointer { width: 3px; height: 20px; background: #ef4444; position: absolute; top: 4px; left: 23px; transform-origin: bottom center; }\n    .pos-label { font-size: 0.6em; color: #38bdf8; position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); font-family: monospace; white-space: nowrap;}\n    \n    \/* Terminals *\/\n    .term-group { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px; margin-bottom: 4px; }\n    .term { background: #334155; color: #f8fafc; padding: 3px 4px; font-size: 0.65em; font-family: monospace; border-radius: 3px; cursor: pointer; border: 1px solid transparent; text-align: center; flex: 1; min-width: 30%; transition: all 0.2s; z-index: 15; position: relative;}\n    .term:hover { background: #475569; border-color: #38bdf8; }\n    .term.selected { outline: 2px solid #ef4444; z-index: 20;}\n    .term.connected { background: #1e3a8a; border-color: #3b82f6; }\n    \n    #wire-canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 10; }\n    \n    .controls { display: flex; justify-content: center; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 15px; background: #0f172a; padding: 10px; border-radius: 6px; border: 1px solid #334155; }\n    .btn { background: #0ea5e9; color: white; border: none; padding: 8px 16px; border-radius: 5px; cursor: pointer; font-weight: bold; transition: background 0.2s; font-size: 0.9em; }\n    .btn:hover { background: #0284c7; }\n    .btn:disabled { background: #475569; cursor: not-allowed; }\n    \n    .g-input { width: 60px; background: #1e293b; color: #38bdf8; border: 1px solid #334155; border-radius: 4px; padding: 5px; font-family: monospace; text-align: center; font-weight: bold;}\n    .g-cmd { background: #1e293b; color: white; border: 1px solid #334155; border-radius: 4px; padding: 6px; font-weight: bold; outline: none; cursor: pointer; }\n    \n    .status-bar { background: #0f172a; padding: 10px; border-radius: 6px; margin-top: 15px; font-family: monospace; font-size: 0.8em; text-align: center; color: #94a3b8; border: 1px solid #334155; }\n    .status-bar span { color: #10b981; font-weight: bold; }\n  <\/style>\n<\/head>\n<body>\n  <div class=\"container\">\n    <h2>Laboratorio: Interpolaci\u00f3n de Ejes e Interfaz CNC<\/h2>\n    <p class=\"desc\">Conecta la interfaz y env\u00eda c\u00f3digo G. Observa c\u00f3mo el software interpola los movimientos: cada eje gira y parpadea a la velocidad exacta necesaria para empezar y terminar al mismo tiempo.<\/p>\n    \n    <div class=\"simulation-area\" id=\"board\">\n      <canvas id=\"wire-canvas\"><\/canvas>\n      \n      <!-- PC Panel -->\n      <div class=\"pc-panel\">\n        <h3>PC (Software)<\/h3>\n        <div class=\"parallel-port\">\n          <div style=\"font-size:0.5em;color:#475569;text-align:center;margin-bottom:5px;\">LPT1 (DB25)<\/div>\n          <div class=\"pin-row\"><div class=\"pin\" id=\"p2\">2<\/div><span class=\"pin-label\">PUL X<\/span><\/div>\n          <div class=\"pin-row\"><div class=\"pin\" id=\"p3\">3<\/div><span class=\"pin-label\">DIR X<\/span><\/div>\n          <div class=\"pin-row\"><div class=\"pin\" id=\"p4\">4<\/div><span class=\"pin-label\">PUL Y<\/span><\/div>\n          <div class=\"pin-row\"><div class=\"pin\" id=\"p5\">5<\/div><span class=\"pin-label\">DIR Y<\/span><\/div>\n          <div class=\"pin-row\"><div class=\"pin\" id=\"p6\">6<\/div><span class=\"pin-label\">PUL Z<\/span><\/div>\n          <div class=\"pin-row\"><div class=\"pin\" id=\"p7\">7<\/div><span class=\"pin-label\">DIR Z<\/span><\/div>\n        <\/div>\n      <\/div>\n      \n      <!-- Interface Panel -->\n      <div class=\"interface-panel\">\n        <h3>Interfaz de Control<\/h3>\n        <div class=\"isolation-label\">AISLAMIENTO GALV\u00c1NICO<\/div>\n        <div class=\"isolation-barrier\"><\/div>\n        \n        <div style=\"display:flex; justify-content:space-between; height: 100%;\">\n          <!-- Optos -->\n          <div class=\"opto-container\" style=\"width: 60%;\">\n            <div class=\"opto\"><span class=\"opto-label\">PX<\/span><div class=\"opto-side\"><div class=\"opto-led\" id=\"o-led-px\"><\/div><\/div><div class=\"opto-gap\"><div class=\"light-beam\" id=\"o-beam-px\"><\/div><\/div><div class=\"opto-side\"><div class=\"opto-rx\" id=\"o-rx-px\"><\/div><\/div><\/div>\n            <div class=\"opto\"><span class=\"opto-label\">DX<\/span><div class=\"opto-side\"><div class=\"opto-led\" id=\"o-led-dx\"><\/div><\/div><div class=\"opto-gap\"><div class=\"light-beam\" id=\"o-beam-dx\"><\/div><\/div><div class=\"opto-side\"><div class=\"opto-rx\" id=\"o-rx-dx\"><\/div><\/div><\/div>\n            <div class=\"opto\"><span class=\"opto-label\">PY<\/span><div class=\"opto-side\"><div class=\"opto-led\" id=\"o-led-py\"><\/div><\/div><div class=\"opto-gap\"><div class=\"light-beam\" id=\"o-beam-py\"><\/div><\/div><div class=\"opto-side\"><div class=\"opto-rx\" id=\"o-rx-py\"><\/div><\/div><\/div>\n            <div class=\"opto\"><span class=\"opto-label\">DY<\/span><div class=\"opto-side\"><div class=\"opto-led\" id=\"o-led-dy\"><\/div><\/div><div class=\"opto-gap\"><div class=\"light-beam\" id=\"o-beam-dy\"><\/div><\/div><div class=\"opto-side\"><div class=\"opto-rx\" id=\"o-rx-dy\"><\/div><\/div><\/div>\n            <div class=\"opto\"><span class=\"opto-label\">PZ<\/span><div class=\"opto-side\"><div class=\"opto-led\" id=\"o-led-pz\"><\/div><\/div><div class=\"opto-gap\"><div class=\"light-beam\" id=\"o-beam-pz\"><\/div><\/div><div class=\"opto-side\"><div class=\"opto-rx\" id=\"o-rx-pz\"><\/div><\/div><\/div>\n            <div class=\"opto\"><span class=\"opto-label\">DZ<\/span><div class=\"opto-side\"><div class=\"opto-led\" id=\"o-led-dz\"><\/div><\/div><div class=\"opto-gap\"><div class=\"light-beam\" id=\"o-beam-dz\"><\/div><\/div><div class=\"opto-side\"><div class=\"opto-rx\" id=\"o-rx-dz\"><\/div><\/div><\/div>\n          <\/div>\n          \n          <!-- Outputs -->\n          <div class=\"terminals-col\" style=\"width: 35%;\">\n            <div class=\"term-group\" style=\"margin-top:2px;\">\n              <div class=\"term\" id=\"int-px\" data-type=\"pul-x\">XP<\/div>\n              <div class=\"term\" id=\"int-dx\" data-type=\"dir-x\">XD<\/div>\n            <\/div>\n            <div class=\"term-group\" style=\"margin-top:20px;\">\n              <div class=\"term\" id=\"int-py\" data-type=\"pul-y\">YP<\/div>\n              <div class=\"term\" id=\"int-dy\" data-type=\"dir-y\">YD<\/div>\n            <\/div>\n            <div class=\"term-group\" style=\"margin-top:20px;\">\n              <div class=\"term\" id=\"int-pz\" data-type=\"pul-z\">ZP<\/div>\n              <div class=\"term\" id=\"int-dz\" data-type=\"dir-z\">ZD<\/div>\n            <\/div>\n            <div class=\"term\" id=\"int-gnd\" data-type=\"gnd\" style=\"width:100%; margin-top:10px;\">COM \/ GND<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n      \n      <!-- Drivers Panel -->\n      <div class=\"drivers-panel\">\n        <div class=\"driver\" id=\"drv-x\">\n          <div class=\"driver-title\">Driver X<\/div>\n          <div class=\"driver-led\" id=\"led-x\"><\/div>\n          <div class=\"term-group\">\n            <div class=\"term\" id=\"dx-p\" data-type=\"pul-x\">PUL<\/div>\n            <div class=\"term\" id=\"dx-d\" data-type=\"dir-x\">DIR<\/div>\n            <div class=\"term\" id=\"dx-g\" data-type=\"gnd\">GND<\/div>\n          <\/div>\n          <div class=\"term-group\" style=\"margin-top:5px;\"><div class=\"term\" id=\"dx-a\" data-type=\"mot-x\">Mot<\/div><\/div>\n        <\/div>\n        <div class=\"driver\" id=\"drv-y\">\n          <div class=\"driver-title\">Driver Y<\/div>\n          <div class=\"driver-led\" id=\"led-y\"><\/div>\n          <div class=\"term-group\">\n            <div class=\"term\" id=\"dy-p\" data-type=\"pul-y\">PUL<\/div>\n            <div class=\"term\" id=\"dy-d\" data-type=\"dir-y\">DIR<\/div>\n            <div class=\"term\" id=\"dy-g\" data-type=\"gnd\">GND<\/div>\n          <\/div>\n          <div class=\"term-group\" style=\"margin-top:5px;\"><div class=\"term\" id=\"dy-a\" data-type=\"mot-y\">Mot<\/div><\/div>\n        <\/div>\n        <div class=\"driver\" id=\"drv-z\">\n          <div class=\"driver-title\">Driver Z<\/div>\n          <div class=\"driver-led\" id=\"led-z\"><\/div>\n          <div class=\"term-group\">\n            <div class=\"term\" id=\"dz-p\" data-type=\"pul-z\">PUL<\/div>\n            <div class=\"term\" id=\"dz-d\" data-type=\"dir-z\">DIR<\/div>\n            <div class=\"term\" id=\"dz-g\" data-type=\"gnd\">GND<\/div>\n          <\/div>\n          <div class=\"term-group\" style=\"margin-top:5px;\"><div class=\"term\" id=\"dz-a\" data-type=\"mot-z\">Mot<\/div><\/div>\n        <\/div>\n      <\/div>\n      \n      <!-- Motors Panel -->\n      <div class=\"motors-panel\">\n        <div class=\"motor\">\n          <div class=\"term\" id=\"mx-a\" data-type=\"mot-x\" style=\"margin-bottom:5px; font-size:0.55em;\">Cable X<\/div>\n          <div class=\"shaft-outer\" id=\"shaft-x\"><div class=\"shaft-inner\"><\/div><div class=\"shaft-pointer\"><\/div><\/div>\n          <div class=\"pos-label\" id=\"pos-x\">X: 0.00<\/div>\n        <\/div>\n        <div class=\"motor\">\n          <div class=\"term\" id=\"my-a\" data-type=\"mot-y\" style=\"margin-bottom:5px; font-size:0.55em;\">Cable Y<\/div>\n          <div class=\"shaft-outer\" id=\"shaft-y\"><div class=\"shaft-inner\"><\/div><div class=\"shaft-pointer\"><\/div><\/div>\n          <div class=\"pos-label\" id=\"pos-y\">Y: 0.00<\/div>\n        <\/div>\n        <div class=\"motor\">\n          <div class=\"term\" id=\"mz-a\" data-type=\"mot-z\" style=\"margin-bottom:5px; font-size:0.55em;\">Cable Z<\/div>\n          <div class=\"shaft-outer\" id=\"shaft-z\"><div class=\"shaft-inner\"><\/div><div class=\"shaft-pointer\"><\/div><\/div>\n          <div class=\"pos-label\" id=\"pos-z\">Z: 0.00<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    \n    <div class=\"controls\">\n      <select id=\"g-cmd\" class=\"g-cmd\">\n        <option value=\"G01\">G01 (Avance Lineal)<\/option>\n        <option value=\"G00\">G00 (Avance R\u00e1pido)<\/option>\n      <\/select>\n      <span style=\"font-weight:bold; color:#cbd5e1;\">X:<\/span> <input type=\"number\" id=\"g-x\" value=\"50\" class=\"g-input\">\n      <span style=\"font-weight:bold; color:#cbd5e1;\">Y:<\/span> <input type=\"number\" id=\"g-y\" value=\"100\" class=\"g-input\">\n      <span style=\"font-weight:bold; color:#cbd5e1;\">Z:<\/span> <input type=\"number\" id=\"g-z\" value=\"-20\" class=\"g-input\">\n      <button class=\"btn\" id=\"run-btn\" disabled>\u25b6 Ejecutar Bloque G<\/button>\n      <button class=\"btn\" id=\"reset-btn\" style=\"background:#64748b;\">Borrar Cables \/ Inicio<\/button>\n    <\/div>\n    \n    <div class=\"status-bar\" id=\"status-bar\">\n      Estado: Esperando cableado. Conecta Interfaz -> Driver -> Motor. (XP con PUL X, XD con DIR X, etc.)\n    <\/div>\n  <\/div>\n\n  <script>\n    const canvas = document.getElementById('wire-canvas');\n    const ctx = canvas.getContext('2d');\n    const board = document.getElementById('board');\n    \n    function resizeCanvas() {\n      canvas.width = board.offsetWidth;\n      canvas.height = board.offsetHeight;\n      drawWires();\n    }\n    window.onresize = resizeCanvas;\n    setTimeout(resizeCanvas, 200);\n\n    let selectedTerm = null;\n    let connections = [];\n    \n    const colorMap = {\n      'pul-x': '#ef4444', 'dir-x': '#f87171',\n      'pul-y': '#10b981', 'dir-y': '#34d399',\n      'pul-z': '#3b82f6', 'dir-z': '#60a5fa',\n      'gnd': '#94a3b8',\n      'mot-x': '#f43f5e', 'mot-y': '#10b981', 'mot-z': '#3b82f6'\n    };\n\n    const terminals = Array.from(document.querySelectorAll('.term'));\n    terminals.forEach(term => {\n      term.onclick = () => {\n        if (!selectedTerm) {\n          selectedTerm = term;\n          term.classList.add('selected');\n        } else {\n          const srcType = selectedTerm.getAttribute('data-type');\n          const dstType = term.getAttribute('data-type');\n          \n          if (selectedTerm !== term && srcType === dstType && selectedTerm.parentElement.parentElement !== term.parentElement.parentElement) {\n            connections = connections.filter(c => c.dst !== term.id && c.src !== term.id);\n            connections.push({src: selectedTerm.id, dst: term.id, type: srcType});\n            selectedTerm.classList.add('connected');\n            term.classList.add('connected');\n          }\n          selectedTerm.classList.remove('selected');\n          selectedTerm = null;\n          drawWires();\n          checkWiring();\n        }\n      };\n    });\n\n    function drawWires() {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n      ctx.lineWidth = 2.5;\n      \n      drawStaticWire('p2', 'o-led-px', '#ef4444');\n      drawStaticWire('p3', 'o-led-dx', '#f87171');\n      drawStaticWire('p4', 'o-led-py', '#10b981');\n      drawStaticWire('p5', 'o-led-dy', '#34d399');\n      drawStaticWire('p6', 'o-led-pz', '#3b82f6');\n      drawStaticWire('p7', 'o-led-dz', '#60a5fa');\n\n      connections.forEach(conn => {\n        const srcEl = document.getElementById(conn.src);\n        const dstEl = document.getElementById(conn.dst);\n        if (!srcEl || !dstEl) return;\n\n        const srcRect = srcEl.getBoundingClientRect();\n        const dstRect = dstEl.getBoundingClientRect();\n        const boardRect = board.getBoundingClientRect();\n\n        const x1 = srcRect.left + srcRect.width\/2 - boardRect.left;\n        const y1 = srcRect.top + srcRect.height\/2 - boardRect.top;\n        const x2 = dstRect.left + dstRect.width\/2 - boardRect.left;\n        const y2 = dstRect.top + dstRect.height\/2 - boardRect.top;\n\n        ctx.strokeStyle = colorMap[conn.type] || '#fff';\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.bezierCurveTo(x1 + (x2-x1)\/2, y1, x1 + (x2-x1)\/2, y2, x2, y2);\n        ctx.stroke();\n      });\n    }\n\n    function drawStaticWire(id1, id2, color) {\n      const el1 = document.getElementById(id1);\n      const el2 = document.getElementById(id2);\n      if(!el1 || !el2) return;\n      const r1 = el1.getBoundingClientRect();\n      const r2 = el2.getBoundingClientRect();\n      const br = board.getBoundingClientRect();\n      ctx.strokeStyle = color;\n      ctx.globalAlpha = 0.3;\n      ctx.beginPath();\n      ctx.moveTo(r1.left + r1.width\/2 - br.left, r1.top + r1.height\/2 - br.top);\n      ctx.lineTo(r2.left - br.left, r2.top + r2.height\/2 - br.top);\n      ctx.stroke();\n      ctx.globalAlpha = 1.0;\n    }\n\n    let isWired = false;\n    function checkWiring() {\n      const required = [\n        {type: 'pul-x'}, {type: 'dir-x'}, {type: 'mot-x'},\n        {type: 'pul-y'}, {type: 'dir-y'}, {type: 'mot-y'},\n        {type: 'pul-z'}, {type: 'dir-z'}, {type: 'mot-z'}\n      ];\n      \n      let allGood = true;\n      required.forEach(req => {\n        if (!connections.some(c => c.type === req.type)) allGood = false;\n      });\n      if (!connections.some(c => c.type === 'gnd')) allGood = false;\n\n      isWired = allGood;\n      document.getElementById('run-btn').disabled = !isWired;\n      \n      const status = document.getElementById('status-bar');\n      if (isWired) {\n        status.innerHTML = \"Estado: <span>Cableado Completo. Listo para interpolar.<\/span>\";\n      } else {\n        status.innerHTML = \"Estado: Esperando cableado. Faltan conexiones.\";\n      }\n    }\n\n    let currentPos = {x: 0, y: 0, z: 0};\n    let animationId = null;\n\n    function activateOpto(axis, isPulse, state) {\n      const pPin = document.getElementById(axis === 'x' ? (isPulse?'p2':'p3') : axis === 'y' ? (isPulse?'p4':'p5') : (isPulse?'p6':'p7'));\n      const prefix = axis;\n      const type = isPulse ? 'p' : 'd';\n      const led = document.getElementById(`o-led-${type}${prefix}`);\n      const beam = document.getElementById(`o-beam-${type}${prefix}`);\n      const rx = document.getElementById(`o-rx-${type}${prefix}`);\n      \n      if (state) {\n        pPin.classList.add('active');\n        led.classList.add('active');\n        beam.classList.add('active');\n        rx.classList.add('active');\n      } else {\n        pPin.classList.remove('active');\n        led.classList.remove('active');\n        beam.classList.remove('active');\n        rx.classList.remove('active');\n      }\n    }\n\n    function getPulseState(delta, maxDelta, frame, isG00) {\n      if (Math.abs(delta) < 0.001) return false;\n      let ratio = Math.abs(delta) \/ maxDelta;\n      let baseN = isG00 ? 2 : 6; \n      let N = Math.max(1, Math.round(baseN \/ ratio));\n      return (frame % N) < (N \/ 2);\n    }\n\n    document.getElementById('run-btn').onclick = () => {\n      if (!isWired) return;\n      if (animationId) cancelAnimationFrame(animationId);\n      \n      let cmd = document.getElementById('g-cmd').value;\n      let targetX = parseFloat(document.getElementById('g-x').value) || 0;\n      let targetY = parseFloat(document.getElementById('g-y').value) || 0;\n      let targetZ = parseFloat(document.getElementById('g-z').value) || 0;\n\n      let dx = targetX - currentPos.x;\n      let dy = targetY - currentPos.y;\n      let dz = targetZ - currentPos.z;\n\n      let maxDelta = Math.max(Math.abs(dx), Math.abs(dy), Math.abs(dz));\n      if (maxDelta === 0) return;\n\n      document.getElementById('run-btn').disabled = true;\n      document.getElementById('status-bar').innerHTML = `Estado: <span>Ejecutando ${cmd} interpolado...<\/span>`;\n      \n      let isG00 = (cmd === 'G00');\n      let speed = isG00 ? 1.5 : 0.4;\n      let totalFrames = Math.max(20, Math.floor(maxDelta \/ speed));\n      let startPos = {...currentPos};\n      let frame = 0;\n\n      function animate() {\n        frame++;\n        let t = frame \/ totalFrames;\n        if (t > 1) t = 1;\n        \n        let cx = startPos.x + dx * t;\n        let cy = startPos.y + dy * t;\n        let cz = startPos.z + dz * t;\n        \n        \/\/ Update graphics\n        document.getElementById('shaft-x').style.transform = `rotate(${cx * 5}deg)`;\n        document.getElementById('shaft-y').style.transform = `rotate(${cy * 5}deg)`;\n        document.getElementById('shaft-z').style.transform = `rotate(${cz * 5}deg)`;\n\n        document.getElementById('pos-x').innerText = `X: ${cx.toFixed(2)}`;\n        document.getElementById('pos-y').innerText = `Y: ${cy.toFixed(2)}`;\n        document.getElementById('pos-z').innerText = `Z: ${cz.toFixed(2)}`;\n\n        \/\/ Direction logic (true if moving positive)\n        activateOpto('x', false, dx >= 0);\n        activateOpto('y', false, dy >= 0);\n        activateOpto('z', false, dz >= 0);\n\n        \/\/ Pulse logic\n        let pulseX = getPulseState(dx, maxDelta, frame, isG00);\n        let pulseY = getPulseState(dy, maxDelta, frame, isG00);\n        let pulseZ = getPulseState(dz, maxDelta, frame, isG00);\n\n        activateOpto('x', true, pulseX);\n        activateOpto('y', true, pulseY);\n        activateOpto('z', true, pulseZ);\n\n        document.getElementById('led-x').classList.toggle('active', pulseX);\n        document.getElementById('led-y').classList.toggle('active', pulseY);\n        document.getElementById('led-z').classList.toggle('active', pulseZ);\n\n        if (frame < totalFrames) {\n          animationId = requestAnimationFrame(animate);\n        } else {\n          currentPos = {x: targetX, y: targetY, z: targetZ};\n          ['x','y','z'].forEach(a => {\n            activateOpto(a, true, false);\n            activateOpto(a, false, false);\n            document.getElementById(`led-${a}`).classList.remove('active');\n          });\n          document.getElementById('run-btn').disabled = false;\n          document.getElementById('status-bar').innerHTML = \"Estado: <span>Movimiento Interpolado Finalizado.<\/span>\";\n        }\n      }\n      animate();\n    };\n\n    document.getElementById('reset-btn').onclick = () => {\n      if (animationId) cancelAnimationFrame(animationId);\n      connections = [];\n      terminals.forEach(t => { t.classList.remove('connected', 'selected'); });\n      selectedTerm = null;\n      ['x','y','z'].forEach(a => {\n        document.getElementById(`led-${a}`).classList.remove('active');\n        document.getElementById('shaft-'+a).style.transform = `rotate(0deg)`;\n        document.getElementById('pos-'+a).innerText = `${a.toUpperCase()}: 0.00`;\n        const pPinP = document.getElementById(a === 'x' ? 'p2' : a === 'y' ? 'p4' : 'p6');\n        const pPinD = document.getElementById(a === 'x' ? 'p3' : a === 'y' ? 'p5' : 'p7');\n        pPinP.classList.remove('active'); pPinD.classList.remove('active');\n        document.getElementById(`o-led-p${a}`).classList.remove('active');\n        document.getElementById(`o-beam-p${a}`).classList.remove('active');\n        document.getElementById(`o-rx-p${a}`).classList.remove('active');\n        document.getElementById(`o-led-d${a}`).classList.remove('active');\n        document.getElementById(`o-beam-d${a}`).classList.remove('active');\n        document.getElementById(`o-rx-d${a}`).classList.remove('active');\n      });\n      currentPos = {x:0, y:0, z:0};\n      document.getElementById('g-x').value = '50';\n      document.getElementById('g-y').value = '100';\n      document.getElementById('g-z').value = '-20';\n      drawWires();\n      checkWiring();\n    };\n\n    drawWires();\n  <\/script>\n<\/body>\n<\/html>\n\n\n<ol class=\"wp-block-list has-text-color has-ast-global-color-3-color\" style=\"color: var(--ast-global-color-3);\">\n\n\n\n<\/ol>","protected":false},"excerpt":{"rendered":"<p>La Interfaz de Control CNC: El Cerebro Detr\u00e1s de la Precisi\u00f3n 1. INTRODUCCI\u00d3N Imagina a un artista con los ojos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[11],"tags":[],"class_list":["post-2051","post","type-post","status-publish","format-standard","hentry","category-unidad-5"],"_links":{"self":[{"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/posts\/2051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/comments?post=2051"}],"version-history":[{"count":20,"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/posts\/2051\/revisions"}],"predecessor-version":[{"id":2087,"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/posts\/2051\/revisions\/2087"}],"wp:attachment":[{"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/media?parent=2051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/categories?post=2051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cnc-mastery.com\/curso\/wp-json\/wp\/v2\/tags?post=2051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}