{"id":1064,"date":"2024-07-25T22:50:00","date_gmt":"2024-07-25T20:50:00","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1064"},"modified":"2024-07-19T11:48:12","modified_gmt":"2024-07-19T09:48:12","slug":"rust-embebido-arduino-servomotor-generacion-de-onda-parte-6","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/25\/rust-embebido-arduino-servomotor-generacion-de-onda-parte-6\/","title":{"rendered":"Rust-Embebido \u00abArduino\u00bb ServoMotor (Generaci\u00f3n de onda) parte 6"},"content":{"rendered":"\n<p>Llegamos a la 6\u00aa entrega con los siguiente temas ya hablados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/09\/rust-embebido-arduino-introduccion-parte-1\/\" title=\"Rust-Embebido \u00abArduino\u00bb Introducci\u00f3n parte 1\">Introducci\u00f3n parte 1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/\" title=\"Rust-Embebido \u00abArduino\u00bb E\/S Digitales parte 2\">E\/S Digitales parte 2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/03\/rust-embebido-arduino-entradas-analogicas-parte-3\/\" title=\"Rust-Embebido \u00abArduino\u00bb Entradas anal\u00f3gicas parte 3\">Entradas anal\u00f3gicas parte 3<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/09\/rust-embebido-arduino-pwm-parte-4\/\" data-type=\"post\" data-id=\"1006\">PWM parte 4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/17\/rust-embebido-arduino-interrupciones-externas-parte-5\/\" data-type=\"post\" data-id=\"1008\" target=\"_blank\" rel=\"noreferrer noopener\">Interrupciones externas parte 5<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Hoy nos toca hablar de un tema interesante que son los TC (Timer\/Counter) que se utilizan para realizar la generaci\u00f3n de onda de los PWM, como vimos en el <a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/09\/rust-embebido-arduino-pwm-parte-4\/\" data-type=\"post\" data-id=\"1006\">POST-Rust-PWM<\/a>, pero en este caso los vamos a programar nosotros para generar esta onda de forma muy personalizada para el uso del servomotor que deseemos.<\/p>\n\n\n\n<p>Tenemos 3 Timer\/Counter (TC) nos van a permitir contar tiempo, que veremos en otro POST, y generar una onda PWM.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"345\" height=\"258\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-3.png\" alt=\"\" class=\"wp-image-1089\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-3.png 345w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-3-300x224.png 300w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/figure>\n\n\n\n<p>Tendremos el ejemplo<a href=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/servomotor.rs\" target=\"_blank\" rel=\"noreferrer noopener\"> servomotor.rs<\/a> que nos permitir\u00e1 realizar los movimientos de un servomotor, adaptando esta generaci\u00f3n de onsa segun el servo que utilicemos.<\/p>\n\n\n\n<p>Utilizaremos el <strong>TC1<\/strong> que como se puede ver en la tabla anterior, es un contador de 16 bits lo que nos va a  permite contar<em><strong> 2^16=65.536<\/strong><\/em>, que es el de mayor precisi\u00f3n ya que los otros dos son de 8 bits (<strong><em>2*8=256<\/em><\/strong>),as\u00ed que lo primero sera definir el pin de salida a utilizar y  el TCx.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Ideales para la Onda de un motor paso a paso ya que son de 16 bits\n\/\/pins.d9.into_output();   \npins.d10.into_output();   \nlet tc1 = dp.TC1;    \/\/TC0 (d6, d5) TC1 (d9, d10) TC2 (d11, d3)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"581\" height=\"224\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-4.png\" alt=\"\" class=\"wp-image-1090\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-4.png 581w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/07\/image-4-300x116.png 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/figure>\n\n\n\n<p>Seg\u00fan la frecuencia que necesitemos, deberemos calcular el Prescalar a utilizar (1-Directo,8,64,256,1024) seg\u00fan la tabla adjunta, as\u00ed como la frecuencia y <em>Ticks<\/em> seg\u00fan el contador.<\/p>\n\n\n\n<p>Tenemos que tener claro que un segundo es igual a 1\/1Hz.<\/p>\n\n\n\n<p>Para conocer el n\u00famero de ticks que necesitaremos usaremos la formula  <em><strong>Ticks = T\u03bcs \/ Tiempo\u03bcs<\/strong><\/em> as\u00ed para tener una frecuencia de 50Hz (0,2segundos) vemos que nos cuadrar\u00eda usar un prescaler de 64 y tendr\u00edamos  <\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>(0,02segundos * 1000000) \/ 4 = 5000 Ticks<\/strong> (el 4 es el tiempo que corresponde al prescaler 64)<\/p>\n\n\n\n<p>Una vez que ya conocemos los <em>Ticks<\/em> que necesarios programaremos el registro <em><strong>ICR1<\/strong><\/em> ya que vamos a utilizar el <strong>TC1<\/strong>, despu\u00e9s definiremos los registros <strong><em>wgm1<\/em><\/strong> para que nos generen un PWM r\u00e1pido con los Tick que se marcaron  en ICR1(1110) y el OC1x con el pin y el prescaler utilizado en la formula.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Definimos los ticks necesarios en icr1\ntc1.icr1.write(|w| w.bits(4999));    \n\n\/\/ En WGM1 se define Fast PWM y OC1B (corresponde al pin 10) con el prescaler a 64 que es lo que se calculo.\ntc1.tccr1a.write(|w| w.wgm1().bits(0b10).com1b().match_clear());  \ntc1.tccr1b.write(|w| w.wgm1().bits(0b11).cs1().prescale_64());     <\/code><\/pre>\n\n\n\n<p>Y con esto finalizamos esta entrada o POST, para finalizar con la proxima en la que trataremos de los contadores de tiempo con un ejemplo de uso del Sonar HC-SR04.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Llegamos a la 6\u00aa entrega con los siguiente temas ya hablados: Hoy nos toca hablar de un tema interesante que son los TC (Timer\/Counter) que se utilizan para realizar la generaci\u00f3n de onda de los PWM, como vimos en el POST-Rust-PWM, pero en este caso los vamos a programar nosotros para generar esta onda de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[3,186,193],"tags":[180,187,195,196],"class_list":["post-1064","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-rust","category-servomotores","tag-pwm","tag-rust","tag-servomotores","tag-timer-counter"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1064"}],"version-history":[{"count":9,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1064\/revisions"}],"predecessor-version":[{"id":1099,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1064\/revisions\/1099"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/996"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1064"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}