{"id":464136,"date":"2025-06-23T03:00:10","date_gmt":"2025-06-23T03:00:10","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=464136"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=464136","title":{"rendered":"<span>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Copilot<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e8\/059\/70e\/2e805970e2a8605edc511e1d97396648.gif\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e8\/059\/70e\/2e805970e2a8605edc511e1d97396648.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e8\/059\/70e\/2e805970e2a8605edc511e1d97396648.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u044f \u0443\u0436\u0435 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u043b \u0434\u0432\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u0443, \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u2014 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f. \u041d\u0438\u043a\u0430\u043a \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0435\u0451 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043a\u043e\u0433\u043d\u0438\u0442\u0438\u0432\u043d\u043e \u0438 \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 Copilot \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0451 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e \u2014 \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0430\u0437\u0434\u0432\u0438\u043d\u0443\u043b\u0438\u0441\u044c, \u0438 \u0437\u0434\u0435\u0441\u044c \u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Synergy \u0438 RA8 \u043e\u0442 Renesas.<\/p>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438.<br \/>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043a\u0446\u0438\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u043e, \u043f\u0430\u0434\u0430\u0435\u0442 \u041a\u041f\u0414 \u0438 \u0443\u0445\u0443\u0434\u0448\u0430\u044e\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/769004\/\" rel=\"noopener noreferrer nofollow\">\u00ab\u041c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: \u043a\u0430\u043a \u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0428\u0418\u041c \u0432 Renesas Synergy\u00bb<\/a> \u0432\u043e\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u0440\u0430\u0441\u043a\u0440\u044b\u0442?<br \/> \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 RA8 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0428\u0418\u041c. \u042d\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u043c \u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u043b\u043e \u0438\u043b\u043b\u044e\u0437\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c.<\/p>\n<p>\u041d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"https:\/\/habr.com\/ru\/articles\/806435\/\" rel=\"noopener noreferrer nofollow\">\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043c\u043e\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 ARM Cortex-M85<\/a> \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0438 \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c. \u041d\u043e \u043a\u0430\u043a\u0438\u043c \u0431\u044b \u043d\u0438 \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0442\u043e\u0440\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u0435\u043d \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0428\u0418\u041c-\u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.  <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ab8\/020\/47e\/ab802047ea84b292042e81aae890d3b5.JPG\" alt=\"MC80 \u0432 \u0434\u0435\u043b\u0435\" title=\"MC80 \u0432 \u0434\u0435\u043b\u0435\" width=\"1848\" height=\"2328\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ab8\/020\/47e\/ab802047ea84b292042e81aae890d3b5.JPG 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ab8\/020\/47e\/ab802047ea84b292042e81aae890d3b5.JPG 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>MC80 \u0432 \u0434\u0435\u043b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 R7FA8M1AHECFB, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 480 \u041c\u0413\u0446 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 \u0442\u0440\u0451\u0445\u0444\u0430\u0437\u043d\u044b\u0445 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<br \/>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0442\u0440\u0451\u0445\u0444\u0430\u0437\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b TMC6200-TA \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u0438 \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0428\u0418\u041c \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0443\u0442\u0441\u0442\u0440\u044d\u043f-\u0441\u0445\u0435\u043c\u044b, \u043f\u0438\u0442\u0430\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438.<\/p>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043c\u043e\u0442\u043e\u0440\u0430\u043c\u0438, \u0438\u043c\u0435\u044f \u0432\u0441\u0435\u0433\u043e \u0448\u0435\u0441\u0442\u044c \u0444\u0430\u0437, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u2014 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u0432\u0443\u0445 \u043c\u043e\u0442\u043e\u0440\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043a\u043e\u043f\u0438\u043b\u043e\u0442\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c: \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043b\u0438\u0448\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<br \/>\u041d\u0430\u0434\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u00ab\u0433\u043e\u043b\u044b\u043c\u0438\u00bb \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u043b\u0430\u0433\u0430\u044e\u0442 \u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442\u044c. \u041f\u043e\u0440\u0443\u0447\u0430\u0442\u044c \u0438\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u0447\u0438\u043f \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u2014 \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f.<br \/>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e SDK \u0442\u043e\u0436\u0435 \u043c\u0430\u043b\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b: \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u0438\u0448\u0435\u043d\u044b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043f\u0438\u043b\u043e\u0442 \u00ab\u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u00bb \u0438\u0445. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GPT \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438\u0437 PDF-\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u0432 .c- \u0438 .h-\u0444\u0430\u0439\u043b\u044b. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c Copilot \u2014 \u043e\u043d \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432 \u0447\u0451\u043c \u0436\u0435 \u043a\u043e\u0433\u043d\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f\u00bb?<br \/>\u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/article\/edit\/768082\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Synergy \u0438 RA8 \u043e\u0442 Renesas \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043d\u0435\u0442. \u0418 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043d\u043d\u043e\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50b\/4b4\/a2b\/50b4b4a2b6dd82c768f90fb15d4bf495.png\" alt=\"\u041c\u0435\u043c \u043e\u0442 ChatGPT o3\" title=\"\u041c\u0435\u043c \u043e\u0442 ChatGPT o3\" width=\"1024\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/50b\/4b4\/a2b\/50b4b4a2b6dd82c768f90fb15d4bf495.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50b\/4b4\/a2b\/50b4b4a2b6dd82c768f90fb15d4bf495.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0435\u043c \u043e\u0442 ChatGPT o3<\/figcaption><\/div>\n<\/figure>\n<p>\u0418 \u0442\u0443\u0442 \u043f\u043e\u0448\u0451\u043b \u0441\u043b\u0443\u0445, \u0447\u0442\u043e <strong>Copilot <\/strong>\u0443\u043c\u0435\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<br \/>\u0420\u0430\u043d\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043b\u0438\u0431\u043e \u0434\u043e\u043b\u0433\u043e \u0438 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 Simulink \u2014 \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043b\u0438\u0431\u043e, \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0432 \u0438\u0445, \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043a\u043e\u043f\u0438\u043b\u043e\u0442, \u2014 \u044d\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 <strong>General PWM Timer Count Direction and Duty Setting Register (GPTCDDSR)<\/strong>. \u041d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0433\u043b\u0443\u0431\u0436\u0435.<br \/> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/769004\/\" rel=\"noopener noreferrer nofollow\">\u00ab\u041c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041a\u0430\u043a \u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0428\u0418\u041c \u0432 Renesas Synergy\u00bb<\/a> \u044f \u043e\u0442\u0432\u0435\u0440\u0433 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c. \u041d\u043e \u043a\u043e\u043f\u0438\u043b\u043e\u0442 \u0443\u043f\u043e\u0440\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043c\u0435\u043d\u044f \u043a \u043d\u0435\u043c\u0443, \u0438 \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0443, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0432\u0443\u0445\u0442\u0430\u043a\u0442\u043d\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0428\u0418\u041c. \u041d\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438 \u043e\u043f\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043b\u0438\u0431\u043e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0412\u0442\u043e\u0440\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0447\u0443\u0434\u043e \u2014 \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0430 Python. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u044b \u043b\u0438\u043d\u0438\u0439, \u043d\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043d\u0443\u0442 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043e.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u0438\u043f\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0428\u0418\u041c <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import matplotlib.pyplot as plt import numpy as np from matplotlib.widgets import Slider, Button, CheckButtons from scipy.signal import argrelextrema  # === \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b) === TIME_WINDOW = 3.0         # \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0448\u043a\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0441\u0435\u043a) NUM_POINTS = 6000         # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u0434\u043b\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430  # === \u0421\u041e\u0417\u0414\u0410\u041d\u0418\u0415 \u0424\u0418\u0413\u0423\u0420\u042b \u0418 \u041e\u0421\u0415\u0419 === fig = plt.figure(figsize=(16, 10)) # \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043a\u043d\u043e \u043d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u043c\u0438) try:     fig.canvas.manager.window.wm_state('zoomed') except AttributeError:     # \u0415\u0441\u043b\u0438 wm_state \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b     try:         fig.canvas.manager.window.showMaximized()     except AttributeError:         # \u0415\u0441\u043b\u0438 \u0438 showMaximized \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0431\u0435\u0437 \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438         pass  # \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 (\u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430) gs = fig.add_gridspec(5, 1, height_ratios=[1, 1, 1, 1, 1], left=0.1, right=0.95, top=0.92, bottom=0.25, hspace=0.3)  axs = [] for i in range(5):     ax = fig.add_subplot(gs[i, 0])     axs.append(ax)  # \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432 (\u0432\u043d\u0438\u0437\u0443) slider_area = fig.add_axes([0.1, 0.02, 0.85, 0.2]) slider_area.set_visible(False)  # === \u0421\u041e\u0417\u0414\u0410\u041d\u0418\u0415 \u0421\u041b\u0410\u0419\u0414\u0415\u0420\u041e\u0412 === # \u041f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432 slider_height = 0.025 slider_spacing = 0.035  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 PWM ax_pwm_period = fig.add_axes([0.15, 0.18, 0.65, slider_height]) slider_pwm_period = Slider(ax_pwm_period, 'PWM \u043f\u0435\u0440\u0438\u043e\u0434 (\u0441)', 0.5, 2.0, valinit=1.0, valfmt='%.2f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ax_duty_cycle = fig.add_axes([0.15, 0.18 - slider_spacing, 0.65, slider_height]) slider_duty_cycle = Slider(ax_duty_cycle, '\u041a\u043e\u044d\u0444\u0444. \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f', 0.01, 0.99, valinit=0.5, valfmt='%.2f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 ax_dead_time = fig.add_axes([0.15, 0.18 - 2*slider_spacing, 0.65, slider_height]) slider_dead_time = Slider(ax_dead_time, '\u041c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0441)', 0.01, 0.3, valinit=0.1, valfmt='%.3f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 4-\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 ax_stop_time = fig.add_axes([0.15, 0.18 - 3*slider_spacing, 0.65, slider_height]) slider_stop_time = Slider(ax_stop_time, '\u0422\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 HSw (\u0441)', 0.5, 2.5, valinit=1.0, valfmt='%.3f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u0448\u0430\u0433\u0430 \u0441\u0435\u0442\u043a\u0438 ax_grid_step = fig.add_axes([0.15, 0.18 - 4*slider_spacing, 0.65, slider_height]) slider_grid_step = Slider(ax_grid_step, '\u0428\u0430\u0433 \u0441\u0435\u0442\u043a\u0438 (\u0441)', 0.05, 0.5, valinit=0.1, valfmt='%.2f')  # \u041a\u043d\u043e\u043f\u043a\u0430 \u0441\u0431\u0440\u043e\u0441\u0430 ax_reset = fig.add_axes([0.85, 0.18 - 2*slider_spacing, 0.08, 0.06]) button_reset = Button(ax_reset, '\u0421\u0431\u0440\u043e\u0441')  # \u0427\u0435\u043a\u0431\u043e\u043a\u0441 \u0434\u043b\u044f \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 ax_checkbox = fig.add_axes([0.85, 0.18 - 3*slider_spacing, 0.08, 0.04]) checkbox_invert = CheckButtons(ax_checkbox, ['\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c'], [False])  # === \u0413\u041b\u041e\u0411\u0410\u041b\u042c\u041d\u042b\u0415 \u041f\u0415\u0420\u0415\u041c\u0415\u041d\u041d\u042b\u0415 === t = np.linspace(0, TIME_WINDOW, NUM_POINTS) dt_step = t[1] - t[0]  # \u041b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u043e\u0432 \u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 stop_lines = [] edge_lines = []  # === \u0424\u0423\u041d\u041a\u0426\u0418\u042f \u0414\u041b\u042f \u0414\u041e\u0411\u0410\u0412\u041b\u0415\u041d\u0418\u042f \u041b\u0418\u041d\u0418\u0419 \u0424\u0420\u041e\u041d\u0422\u041e\u0412 === def add_edge_lines(ax, rising_edges, falling_edges):     # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u043e\u0432 (\u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0438\u0449\u0435\u043d\u044b \u043f\u0440\u0438 ax.clear())     for edge in rising_edges:         if edge &lt; len(t):             ax.axvline(x=t[edge], color='blue', linestyle=':', alpha=0.7, linewidth=1.5)      for edge in falling_edges:         if edge &lt; len(t):             ax.axvline(x=t[edge], color='red', linestyle=':', alpha=0.7, linewidth=1.5)  # === \u0424\u0423\u041d\u041a\u0426\u0418\u042f \u041e\u0411\u041d\u041e\u0412\u041b\u0415\u041d\u0418\u042f \u0413\u0420\u0410\u0424\u0418\u041a\u041e\u0412 === def update_plots():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432     pwm_period = slider_pwm_period.val     duty_cycle = slider_duty_cycle.val     dead_time = slider_dead_time.val     stop_time_4 = slider_stop_time.val     grid_step = slider_grid_step.val      # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u0430     invert_levels = checkbox_invert.get_status()[0]      # \u0420\u0430\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 5-\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f     if invert_levels:         stop_time_5 = stop_time_4 - pwm_period \/ 2  # \u041e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u043f\u0435\u0440\u0438\u043e\u0434\u0430     else:         stop_time_5 = stop_time_4 + pwm_period \/ 2  # \u041e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u043f\u0435\u0440\u0438\u043e\u0434\u0430      # === \u041f\u0415\u0420\u0415\u0421\u0427\u0415\u0422 \u0421\u0418\u0413\u041d\u0410\u041b\u041e\u0412 ===     # \u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a     f_tri = 1 \/ pwm_period     tri_wave_norm = 1 - 2 * np.abs((t * f_tri) % 1 - 0.5)     tri_wave = tri_wave_norm  # \u041e\u0442 0 \u0434\u043e 1      # \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430     compare_level = np.full_like(t, duty_cycle)      # \u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043b\u044e\u0447     high_side = tri_wave &lt; compare_level      # \u041d\u0430\u0439\u0442\u0438 \u0444\u0440\u043e\u043d\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430     high_side_edges = np.diff(high_side.astype(int))     high_side_rising_edges = np.where(high_side_edges == 1)[0]     high_side_falling_edges = np.where(high_side_edges == -1)[0]      # \u041d\u0438\u0436\u043d\u0438\u0439 \u043a\u043b\u044e\u0447     low_side = (~high_side).astype(int)      # \u041d\u0430\u0439\u0442\u0438 \u0444\u0440\u043e\u043d\u0442\u044b \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430     edges = np.diff(low_side)     rising_edges = np.where(edges == 1)[0]     falling_edges = np.where(edges == -1)[0]      # \u041c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430     low_side_deadtime = np.copy(low_side)     dead_samples = int(dead_time \/ dt_step)      for rise, fall in zip(rising_edges, falling_edges):         if fall - rise &lt; dead_samples:             low_side_deadtime[rise+1:fall+1] = 0             continue         low_side_deadtime[rise+1:rise+1+dead_samples\/\/2] = 0         low_side_deadtime[fall+1-dead_samples\/\/2:fall+1] = 0         # 4-\u0439 \u0433\u0440\u0430\u0444\u0438\u043a: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043b\u044e\u0447, \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435     custom_signal_4 = np.copy(high_side.astype(int))     stop_idx_4 = int(stop_time_4 \/ dt_step)     if stop_idx_4 &lt; len(custom_signal_4):         if invert_levels:             custom_signal_4[stop_idx_4:] = 1  # \u0417\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 1         else:             custom_signal_4[stop_idx_4:] = 0  # \u0417\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 0      # 5-\u0439 \u0433\u0440\u0430\u0444\u0438\u043a: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0436\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0441 \u043c\u0435\u0440\u0442\u0432\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435     custom_signal_5 = np.copy(low_side_deadtime)     stop_idx_5 = int(stop_time_5 \/ dt_step)     if stop_idx_5 &lt; len(custom_signal_5) and stop_idx_5 &gt;= 0:         if invert_levels:             custom_signal_5[stop_idx_5:] = 0  # \u0417\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 0         else:             custom_signal_5[stop_idx_5:] = 1  # \u0417\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 1      # === \u041e\u0411\u041d\u041e\u0412\u041b\u0415\u041d\u0418\u0415 \u0413\u0420\u0410\u0424\u0418\u041a\u041e\u0412 ===     # \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438     for ax in axs:         ax.clear()    # \u0413\u0440\u0430\u0444\u0438\u043a 0: \u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0438 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440     axs[0].plot(t, tri_wave, label=\"\u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a (\u0441\u0447\u0451\u0442\u0447\u0438\u043a)\", linewidth=2)     axs[0].plot(t, compare_level, 'r--', label=\"\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430\", linewidth=2)      # \u041d\u0430\u0439\u0442\u0438 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u043b\u043d\u044b \u0441 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430     # \u0418\u0449\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b high_side (\u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0441 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u043e\u043c)     intersection_indices = []     intersection_indices.extend(high_side_rising_edges)     intersection_indices.extend(high_side_falling_edges)    # \u041e\u0442\u043c\u0435\u0447\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0436\u0438\u0440\u043d\u044b\u043c\u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438     if intersection_indices:         intersection_times = t[intersection_indices]         intersection_levels = np.full(len(intersection_indices), duty_cycle)         axs[0].scatter(intersection_times, intersection_levels, color='red', s=50, zorder=5, label='\u0422\u043e\u0447\u043a\u0430 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430')      # \u0417\u0435\u043b\u0435\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 4-\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430     axs[0].axvline(x=stop_time_4, color='green', linestyle='--', alpha=0.7, linewidth=2, label=f'\u041e\u0441\u0442\u0430\u043d\u043e\u0432 HSw ({stop_time_4:.3f}\u0441)')      # \u0416\u0435\u043b\u0442\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 5-\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430     axs[0].axvline(x=stop_time_5, color='orange', linestyle='--', alpha=0.7, linewidth=2, label=f'\u041e\u0441\u0442\u0430\u043d\u043e\u0432 LSw ({stop_time_5:.3f}\u0441)')    # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0438 \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0441 \u0437\u0435\u043b\u0435\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439 (stop_time_4)     if 0 &lt;= stop_time_4 &lt;= TIME_WINDOW:         # \u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u043b\u043d\u044b \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 stop_time_4         stop_idx_4_interp = stop_time_4 \/ dt_step         if stop_idx_4_interp &lt; len(tri_wave) - 1:             idx_low = int(stop_idx_4_interp)             idx_high = idx_low + 1             frac = stop_idx_4_interp - idx_low             tri_value_4 = tri_wave[idx_low] * (1 - frac) + tri_wave[idx_high] * frac             axs[0].scatter([stop_time_4], [tri_value_4], color='green', s=50, zorder=6, label='\u0422\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 HSw')      # \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0438 \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0441 \u0436\u0435\u043b\u0442\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439 (stop_time_5)     if 0 &lt;= stop_time_5 &lt;= TIME_WINDOW:         # \u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u043b\u043d\u044b \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 stop_time_5         stop_idx_5_interp = stop_time_5 \/ dt_step         if stop_idx_5_interp &lt; len(tri_wave) - 1 and stop_idx_5_interp &gt;= 0:             idx_low = int(stop_idx_5_interp)             idx_high = idx_low + 1             frac = stop_idx_5_interp - idx_low             tri_value_5 = tri_wave[idx_low] * (1 - frac) + tri_wave[idx_high] * frac             axs[0].scatter([stop_time_5], [tri_value_5], color='orange', s=50, zorder=6, label='\u0422\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 LSw')      add_edge_lines(axs[0], high_side_rising_edges, high_side_falling_edges)     axs[0].set_ylabel(\"\u0423\u0440\u043e\u0432\u0435\u043d\u044c\")     axs[0].legend(loc='upper right')     axs[0].grid(True, alpha=0.3)     axs[0].set_xticks(np.arange(0, TIME_WINDOW + grid_step, grid_step))     axs[0].set_ylim(-0.1, 1.1)    # \u0413\u0440\u0430\u0444\u0438\u043a 1: PWM High side     axs[1].step(t, high_side.astype(int), where='post', linewidth=2, color='red')     axs[1].axvline(x=stop_time_4, color='green', linestyle='--', alpha=0.7, linewidth=2)     axs[1].axvline(x=stop_time_5, color='orange', linestyle='--', alpha=0.7, linewidth=2)     add_edge_lines(axs[1], high_side_rising_edges, high_side_falling_edges)     axs[1].set_ylabel(\"PWM High side\")     axs[1].set_ylim(-0.2, 1.2)     axs[1].grid(True, alpha=0.3)     axs[1].set_xticks(np.arange(0, TIME_WINDOW + grid_step, grid_step))    # \u0413\u0440\u0430\u0444\u0438\u043a 2: PWM Low side     axs[2].step(t, low_side_deadtime.astype(int), where='post', linewidth=2)     axs[2].axvline(x=stop_time_4, color='green', linestyle='--', alpha=0.7, linewidth=2)     axs[2].axvline(x=stop_time_5, color='orange', linestyle='--', alpha=0.7, linewidth=2)     add_edge_lines(axs[2], high_side_rising_edges, high_side_falling_edges)     axs[2].set_ylabel(\"PWM Low side\")     axs[2].set_ylim(-0.2, 1.2)     axs[2].grid(True, alpha=0.3)     axs[2].set_xticks(np.arange(0, TIME_WINDOW + grid_step, grid_step))    # \u0413\u0440\u0430\u0444\u0438\u043a 3: High switch output     axs[3].step(t, custom_signal_4.astype(int), where='post', linewidth=2, color='red')     axs[3].axvline(x=stop_time_4, color='green', linestyle='--', alpha=0.7, linewidth=2)     axs[3].axvline(x=stop_time_5, color='orange', linestyle='--', alpha=0.7, linewidth=2)     add_edge_lines(axs[3], high_side_rising_edges, high_side_falling_edges)     freeze_level_4 = \"1\" if invert_levels else \"0\"     axs[3].set_ylabel(\"HSw output\")     axs[3].set_ylim(-0.2, 1.2)     axs[3].grid(True, alpha=0.3)     axs[3].set_xticks(np.arange(0, TIME_WINDOW + grid_step, grid_step))    # \u0413\u0440\u0430\u0444\u0438\u043a 4: Low switch output     axs[4].step(t, custom_signal_5.astype(int), where='post', linewidth=2)     axs[4].axvline(x=stop_time_4, color='green', linestyle='--', alpha=0.7, linewidth=2)     axs[4].axvline(x=stop_time_5, color='orange', linestyle='--', alpha=0.7, linewidth=2)     add_edge_lines(axs[4], high_side_rising_edges, high_side_falling_edges)    # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0435\u0440\u043d\u0443\u044e \u0442\u043e\u043b\u0441\u0442\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0434\u043b\u044f \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 = 0)     deadtime_signal = (custom_signal_4 == 0) &amp; (custom_signal_5 == 0)     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u044e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 0.5 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f     deadtime_line = np.where(deadtime_signal, 0.5, np.nan)  # NaN \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u0438\u043d\u0438\u044e \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0439     axs[4].plot(t, deadtime_line, linewidth=4, color='black', label='\u041c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f')      freeze_level_5 = \"0\" if invert_levels else \"1\"     timing_text = \"\u043e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435\" if invert_levels else \"\u043e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u0435\"     axs[4].set_ylabel(\"LSw output\")     axs[4].set_ylim(-0.2, 1.2)     axs[4].set_xlabel(\"\u0412\u0440\u0435\u043c\u044f (\u0441)\")     axs[4].grid(True, alpha=0.3)     axs[4].set_xticks(np.arange(0, TIME_WINDOW + grid_step, grid_step))     axs[4].legend(loc='upper right')# \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a     invert_status = \"\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439\" if invert_levels else \"\u041e\u0431\u044b\u0447\u043d\u044b\u0439\"     title = (f'PWM: {pwm_period:.2f}\u0441, \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435: {duty_cycle:.2f}, '              f'\u041c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: {dead_time:.3f}\u0441, \u0422\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430: {stop_time_4:.3f}\u0441 ({invert_status})')     fig.suptitle(title, fontsize=12, fontweight='bold')      # \u041f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c     fig.canvas.draw()  # === \u041e\u0411\u0420\u0410\u0411\u041e\u0422\u0427\u0418\u041a\u0418 \u0421\u041e\u0411\u042b\u0422\u0418\u0419 === def on_slider_change(val):     update_plots()  def reset_sliders(event):     slider_pwm_period.reset()     slider_duty_cycle.reset()     slider_dead_time.reset()     slider_stop_time.reset()     slider_grid_step.reset()     # \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0447\u0435\u043a\u0431\u043e\u043a\u0441 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435     checkbox_invert.set_active(0)     update_plots()  def on_checkbox_change(label):     update_plots()  # \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043a \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430\u043c slider_pwm_period.on_changed(on_slider_change) slider_duty_cycle.on_changed(on_slider_change) slider_dead_time.on_changed(on_slider_change) slider_stop_time.on_changed(on_slider_change) slider_grid_step.on_changed(on_slider_change) button_reset.on_clicked(reset_sliders) checkbox_invert.on_clicked(on_checkbox_change)  # === \u0418\u041d\u0418\u0426\u0418\u0410\u041b\u0418\u0417\u0410\u0426\u0418\u042f === # \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 update_plots()  plt.show() <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418 \u0432\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9af\/a5e\/c00\/9afa5ec001edd80dbd3c2c14a4664fd1.png\" alt=\"\u0417\u0434\u0435\u0441\u044c \u0441\u0430\u043c\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c  \u0433\u0440\u0430\u0444\u0438\u043a\u0435\" title=\"\u0417\u0434\u0435\u0441\u044c \u0441\u0430\u043c\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c  \u0433\u0440\u0430\u0444\u0438\u043a\u0435\" width=\"1920\" height=\"1032\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9af\/a5e\/c00\/9afa5ec001edd80dbd3c2c14a4664fd1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9af\/a5e\/c00\/9afa5ec001edd80dbd3c2c14a4664fd1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0434\u0435\u0441\u044c \u0441\u0430\u043c\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c  \u0433\u0440\u0430\u0444\u0438\u043a\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0437\u0443\u043d\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445\u0442\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0428\u0418\u041c.<br \/> \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 GPTCDDSR \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0435\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432 \u043e\u0431\u0435\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0438\u0437\u043b\u043e\u043c\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0428\u0418\u041c. \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0410\u0426\u041f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u041d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u044f \u043f\u043e\u0440\u0443\u0447\u0438\u043b \u043a\u043e\u043f\u0438\u043b\u043e\u0442\u0443 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0428\u0418\u041c \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u2014 \u0438 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u0430.<br \/>\u0412\u043e\u0442 \u043e\u043d\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u044f Set_pwm_enhanced<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/*-----------------------------------------------------------------------------------------------------   Description:     Enhanced PWM switching with two-stage mode transitions for safe motor control.     Implements safe switching between PWM modes (0%, 100%, PWM) using two-stage logic:     - Stage 1: Force both outputs to LOW (safe intermediate state)     - Stage 2: Set target output configuration (0%, 100%, or enable PWM mode)     Current state is determined by reading OADTY and OBDTY bits from GTUDDTYC register.     This prevents shoot-through current by ensuring safe transitions through LOW-LOW state.    Parameters:     motor        - motor identifier (0-(DRIVER_COUNT-1))     phase        - phase identifier (0-(PHASE_COUNT-1))     pwm_level    - PWM duty cycle in steps (0-PWM_STEP_COUNT)     output_enable - output enable flag (0=switches OFF, 1=switches enabled)    Return:     none -----------------------------------------------------------------------------------------------------*\/ FORCE_INLINE_PRAGMA FORCE_INLINE_ATTR void _Set_pwm_enhanced(uint8_t motor, uint8_t phase, uint32_t pwm_level, uint8_t output_enable) {   R_GPT0_Type *gpt_reg = g_gpt_registers[motor][phase];   \/\/ If output is being disabled, force both switches OFF (high-Z state for coast mode)   if (output_enable == PHASE_OUTPUT_DISABLE)   {     T_gtuddtyc_bits gtuddtyc_temp = *(T_gtuddtyc_bits *)&amp;gpt_reg-&gt;GTUDDTYC;      \/\/ Both switches OFF (high-Z state)     gtuddtyc_temp.OADTY           = 0x2;  \/\/ GTIOA = LOW (upper switch OFF)     gtuddtyc_temp.OADTYF          = 1;    \/\/ Enable force mode for GTIOA     gtuddtyc_temp.OBDTY           = 0x2;  \/\/ GTIOB = LOW (lower switch OFF)     gtuddtyc_temp.OBDTYF          = 1;    \/\/ Enable force mode for GTIOB      gpt_reg-&gt;GTUDDTYC             = *(uint32_t *)&amp;gtuddtyc_temp;      \/\/ Update global state arrays for diagnostic display (Z-state: both switches OFF)     g_phase_state_0_percent[motor][phase]   = 0;  \/\/ Not in 0% duty state     g_phase_state_100_percent[motor][phase] = 0;  \/\/ Not in 100% duty state     g_phase_state_pwm_mode[motor][phase]    = 0;  \/\/ Not in PWM mode     g_phase_state_Z_stage[motor][phase]     = 1;  \/\/ In Z-state (high impedance)     return;   }   T_gtuddtyc_bits gtuddtyc_temp     = *(T_gtuddtyc_bits *)&amp;gpt_reg-&gt;GTUDDTYC;   \/\/ Read current state from OADTY and OBDTY bits to determine transition stage   uint8_t current_state_0_percent   = (gtuddtyc_temp.OADTY == 0x2) &amp;&amp; (gtuddtyc_temp.OBDTY == 0x3);  \/\/ 0% duty state: GTIOA=LOW, GTIOB=HIGH   uint8_t current_state_100_percent = (gtuddtyc_temp.OADTY == 0x3) &amp;&amp; (gtuddtyc_temp.OBDTY == 0x2);  \/\/ 100% duty state: GTIOA=HIGH, GTIOB=LOW   uint8_t current_state_pwm_mode    = (gtuddtyc_temp.OADTYF == 0) &amp;&amp; (gtuddtyc_temp.OBDTYF == 0);    \/\/ PWM mode: both force modes disabled   uint8_t current_state_Z_stage     = (gtuddtyc_temp.OADTY == 0x2) &amp;&amp; (gtuddtyc_temp.OBDTY == 0x2);  \/\/ Z-state: both signals LOW (high impedance)    \/\/ Store current states in global arrays for diagnostic access   g_phase_state_0_percent[motor][phase]   = current_state_0_percent;   g_phase_state_100_percent[motor][phase] = current_state_100_percent;   g_phase_state_pwm_mode[motor][phase]    = current_state_pwm_mode;   g_phase_state_Z_stage[motor][phase]     = current_state_Z_stage;    if (pwm_level == 0)   {     \/\/ Target: 0% duty (GTIOA=LOW, GTIOB=HIGH)     if (current_state_0_percent)     {       return;  \/\/ Already in target state     }     if (current_state_100_percent || current_state_pwm_mode)     {       \/\/ Stage 1: Set both signals to LOW (first stage)       gtuddtyc_temp.OADTY  = 0x2;  \/\/ GTIOA = LOW       gtuddtyc_temp.OADTYF = 1;    \/\/ Enable force mode for GTIOA       gtuddtyc_temp.OBDTY  = 0x2;  \/\/ GTIOB = LOW       gtuddtyc_temp.OBDTYF = 1;    \/\/ Enable force mode for GTIOB     }     else if (current_state_Z_stage)     {       \/\/ Stage 2: Set GTIOB to HIGH to complete 0% duty transition       gtuddtyc_temp.OBDTY = 0x3;  \/\/ GTIOB = HIGH (lower switch ON)       \/\/ GTIOA remains LOW (upper switch OFF)     }   }   else if (pwm_level == PWM_STEP_COUNT)   {     \/\/ Target: 100% duty (GTIOA=HIGH, GTIOB=LOW)     if (current_state_100_percent)     {       return;  \/\/ Already in target state     }     if (current_state_0_percent || current_state_pwm_mode)     {       \/\/ Stage 1: Set both signals to LOW (first stage)       gtuddtyc_temp.OADTY  = 0x2;  \/\/ GTIOA = LOW       gtuddtyc_temp.OADTYF = 1;    \/\/ Enable force mode for GTIOA       gtuddtyc_temp.OBDTY  = 0x2;  \/\/ GTIOB = LOW       gtuddtyc_temp.OBDTYF = 1;    \/\/ Enable force mode for GTIOB     }     else if (current_state_Z_stage)     {       \/\/ Stage 2: Set GTIOA to HIGH to complete 100% duty transition       gtuddtyc_temp.OADTY = 0x3;  \/\/ GTIOA = HIGH (upper switch ON)       \/\/ GTIOB remains LOW (lower switch OFF)     }   }   else   {     \/\/ Target: Normal PWM operation (1 to PWM_STEP_COUNT-1)     if (current_state_pwm_mode)     {       \/\/ Already in PWM mode, just update comparator values       uint32_t comp_value = pwm_indx_to_comp[pwm_level];       gpt_reg-&gt;GTCCR[0]   = comp_value;                  \/\/ GTCCRA - primary comparator register       gpt_reg-&gt;GTCCR[2]   = comp_value;                  \/\/ GTCCRC - secondary comparator register #if PWM_DEBUG_VALUES       g_debug_gtccr0_values[motor][phase] = comp_value;  \/\/ Store debug value       g_debug_gtccr2_values[motor][phase] = comp_value;  \/\/ Store debug value #endif       return;     }     if (current_state_0_percent || current_state_100_percent)     {       \/\/ Stage 1: Set both signals to LOW (first stage)       gtuddtyc_temp.OADTY  = 0x2;  \/\/ GTIOA = LOW       gtuddtyc_temp.OADTYF = 1;    \/\/ Enable force mode for GTIOA       gtuddtyc_temp.OBDTY  = 0x2;  \/\/ GTIOB = LOW       gtuddtyc_temp.OBDTYF = 1;    \/\/ Enable force mode for GTIOB     }     else if (current_state_Z_stage)     {       \/\/ Stage 2: Enable PWM mode       \/\/ Set PWM comparator value       uint32_t comp_value = pwm_indx_to_comp[pwm_level];       gpt_reg-&gt;GTCCR[0]   = comp_value;                  \/\/ GTCCRA - primary comparator register       gpt_reg-&gt;GTCCR[2]   = comp_value;                  \/\/ GTCCRC - secondary comparator register #if PWM_DEBUG_VALUES       g_debug_gtccr0_values[motor][phase] = comp_value;  \/\/ Store debug value       g_debug_gtccr2_values[motor][phase] = comp_value;  \/\/ Store debug value #endif        \/\/ Clear force duty values and enable PWM mode       gtuddtyc_temp.OADTY  = 0;  \/\/ Clear GTIOA force duty value       gtuddtyc_temp.OBDTY  = 0;  \/\/ Clear GTIOB force duty value       gtuddtyc_temp.OADTYF = 0;  \/\/ Disable force mode for GTIOA (enable PWM)       gtuddtyc_temp.OBDTYF = 0;  \/\/ Disable force mode for GTIOB (enable PWM)     }   }   \/\/ Apply the configuration   gpt_reg-&gt;GTUDDTYC = *(uint32_t *)&amp;gtuddtyc_temp; } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442 \u043d\u0435 \u0441\u0442\u0430\u043d\u0443 \u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0442\u044c: \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043f\u0438\u043b\u043e\u0442\u043e\u043c. \u042d\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0439 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u043c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u043e \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u0428\u0418\u041c \u0432 100 % \u0438\u043b\u0438 \u0432 0 % \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u2014 \u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0433\u043e.<\/p>\n<p><strong>\u0427\u0442\u043e \u0438\u043c\u0435\u0435\u043c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/strong><br \/>\u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043c\u043e\u0442\u043e\u0440\u0430\u043c\u0438 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c <strong>62.5<\/strong> \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <strong>4.5 <\/strong>\u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u044d\u0442\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0434\u0432\u0443\u0445\u0442\u0430\u043a\u0442\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f 6 \u0444\u0430\u0437 \u0428\u0418\u041c, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 12 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0410\u0426\u041f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u043c\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b EMA (Exponential Moving Average, \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u0435 \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0435\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0435) \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 .<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/920548\/\"> https:\/\/habr.com\/ru\/articles\/920548\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u042d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u044f \u0443\u0436\u0435 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u043b \u0434\u0432\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u0443, \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u2014 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f. \u041d\u0438\u043a\u0430\u043a \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0435\u0451 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043a\u043e\u0433\u043d\u0438\u0442\u0438\u0432\u043d\u043e \u0438 \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 Copilot \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0451 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e \u2014 \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0430\u0437\u0434\u0432\u0438\u043d\u0443\u043b\u0438\u0441\u044c, \u0438 \u0437\u0434\u0435\u0441\u044c \u044f \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Synergy \u0438 RA8 \u043e\u0442 Renesas.<\/p>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438.<br \/>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043a\u0446\u0438\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u043e, \u043f\u0430\u0434\u0430\u0435\u0442 \u041a\u041f\u0414 \u0438 \u0443\u0445\u0443\u0434\u0448\u0430\u044e\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/769004\/\" rel=\"noopener noreferrer nofollow\">\u00ab\u041c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: \u043a\u0430\u043a \u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0428\u0418\u041c \u0432 Renesas Synergy\u00bb<\/a> \u0432\u043e\u043f\u0440\u043e\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u0440\u0430\u0441\u043a\u0440\u044b\u0442?<br \/> \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 RA8 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0428\u0418\u041c. \u042d\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u043c \u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u043b\u043e \u0438\u043b\u043b\u044e\u0437\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c.<\/p>\n<p>\u041d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"https:\/\/habr.com\/ru\/articles\/806435\/\" rel=\"noopener noreferrer nofollow\">\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043c\u043e\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 ARM Cortex-M85<\/a> \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0438 \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c. \u041d\u043e \u043a\u0430\u043a\u0438\u043c \u0431\u044b \u043d\u0438 \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0442\u043e\u0440\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u0435\u043d \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0428\u0418\u041c-\u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.  <\/p>\n<figure class=\"full-width\">\n<div><figcaption>MC80 \u0432 \u0434\u0435\u043b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 R7FA8M1AHECFB, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 480 \u041c\u0413\u0446 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 \u0442\u0440\u0451\u0445\u0444\u0430\u0437\u043d\u044b\u0445 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<br \/>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0442\u0440\u0451\u0445\u0444\u0430\u0437\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b TMC6200-TA \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u0438 \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0428\u0418\u041c \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0443\u0442\u0441\u0442\u0440\u044d\u043f-\u0441\u0445\u0435\u043c\u044b, \u043f\u0438\u0442\u0430\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438.<\/p>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043c\u043e\u0442\u043e\u0440\u0430\u043c\u0438, \u0438\u043c\u0435\u044f \u0432\u0441\u0435\u0433\u043e \u0448\u0435\u0441\u0442\u044c \u0444\u0430\u0437, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u2014 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u0432\u0443\u0445 \u043c\u043e\u0442\u043e\u0440\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043a\u043e\u043f\u0438\u043b\u043e\u0442\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c: \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043b\u0438\u0448\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<br \/>\u041d\u0430\u0434\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u00ab\u0433\u043e\u043b\u044b\u043c\u0438\u00bb \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u043b\u0430\u0433\u0430\u044e\u0442 \u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442\u044c. \u041f\u043e\u0440\u0443\u0447\u0430\u0442\u044c \u0438\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u0447\u0438\u043f \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u2014 \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f.<br \/>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e SDK \u0442\u043e\u0436\u0435 \u043c\u0430\u043b\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b: \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u0438\u0448\u0435\u043d\u044b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043f\u0438\u043b\u043e\u0442 \u00ab\u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u00bb \u0438\u0445. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GPT \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438\u0437 PDF-\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u0432 .c- \u0438 .h-\u0444\u0430\u0439\u043b\u044b. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c Copilot \u2014 \u043e\u043d \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432 \u0447\u0451\u043c \u0436\u0435 \u043a\u043e\u0433\u043d\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f\u00bb?<br \/>\u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/article\/edit\/768082\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Synergy \u0438 RA8 \u043e\u0442 Renesas \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043d\u0435\u0442. \u0418 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043d\u043d\u043e\u0435.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041c\u0435\u043c \u043e\u0442 ChatGPT o3<\/figcaption><\/div>\n<\/figure>\n<p>\u0418 \u0442\u0443\u0442 \u043f\u043e\u0448\u0451\u043b \u0441\u043b\u0443\u0445, \u0447\u0442\u043e <strong>Copilot <\/strong>\u0443\u043c\u0435\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<br \/>\u0420\u0430\u043d\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043b\u0438\u0431\u043e \u0434\u043e\u043b\u0433\u043e \u0438 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 Simulink \u2014 \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043b\u0438\u0431\u043e, \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0432 \u0438\u0445, \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043a\u043e\u043f\u0438\u043b\u043e\u0442, \u2014 \u044d\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 <strong>General PWM Timer Count Direction and Duty Setting Register (GPTCDDSR)<\/strong>. \u041d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0433\u043b\u0443\u0431\u0436\u0435.<br \/> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/769004\/\" rel=\"noopener noreferrer nofollow\">\u00ab\u041c\u0451\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041a\u0430\u043a \u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0428\u0418\u041c \u0432 Renesas Synergy\u00bb<\/a> \u044f \u043e\u0442\u0432\u0435\u0440\u0433 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c. \u041d\u043e \u043a\u043e\u043f\u0438\u043b\u043e\u0442 \u0443\u043f\u043e\u0440\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u043c\u0435\u043d\u044f \u043a \u043d\u0435\u043c\u0443, \u0438 \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0443, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0432\u0443\u0445\u0442\u0430\u043a\u0442\u043d\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0428\u0418\u041c. \u041d\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438 \u043e\u043f\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043b\u0438\u0431\u043e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0412\u0442\u043e\u0440\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0447\u0443\u0434\u043e \u2014 \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0430 Python. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0435\u0439 \u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u044b \u043b\u0438\u043d\u0438\u0439, \u043d\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043d\u0443\u0442 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043e.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u0438\u043f\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0428\u0418\u041c <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import matplotlib.pyplot as plt import numpy as np from matplotlib.widgets import Slider, Button, CheckButtons from scipy.signal import argrelextrema  # === \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b) === TIME_WINDOW = 3.0         # \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0448\u043a\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0441\u0435\u043a) NUM_POINTS = 6000         # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u0434\u043b\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430  # === \u0421\u041e\u0417\u0414\u0410\u041d\u0418\u0415 \u0424\u0418\u0413\u0423\u0420\u042b \u0418 \u041e\u0421\u0415\u0419 === fig = plt.figure(figsize=(16, 10)) # \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043a\u043d\u043e \u043d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u043c\u0438) try:     fig.canvas.manager.window.wm_state('zoomed') except AttributeError:     # \u0415\u0441\u043b\u0438 wm_state \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b     try:         fig.canvas.manager.window.showMaximized()     except AttributeError:         # \u0415\u0441\u043b\u0438 \u0438 showMaximized \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0431\u0435\u0437 \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438         pass  # \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 (\u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430) gs = fig.add_gridspec(5, 1, height_ratios=[1, 1, 1, 1, 1], left=0.1, right=0.95, top=0.92, bottom=0.25, hspace=0.3)  axs = [] for i in range(5):     ax = fig.add_subplot(gs[i, 0])     axs.append(ax)  # \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432 (\u0432\u043d\u0438\u0437\u0443) slider_area = fig.add_axes([0.1, 0.02, 0.85, 0.2]) slider_area.set_visible(False)  # === \u0421\u041e\u0417\u0414\u0410\u041d\u0418\u0415 \u0421\u041b\u0410\u0419\u0414\u0415\u0420\u041e\u0412 === # \u041f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432 slider_height = 0.025 slider_spacing = 0.035  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0430 PWM ax_pwm_period = fig.add_axes([0.15, 0.18, 0.65, slider_height]) slider_pwm_period = Slider(ax_pwm_period, 'PWM \u043f\u0435\u0440\u0438\u043e\u0434 (\u0441)', 0.5, 2.0, valinit=1.0, valfmt='%.2f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ax_duty_cycle = fig.add_axes([0.15, 0.18 - slider_spacing, 0.65, slider_height]) slider_duty_cycle = Slider(ax_duty_cycle, '\u041a\u043e\u044d\u0444\u0444. \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f', 0.01, 0.99, valinit=0.5, valfmt='%.2f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u043c\u0435\u0440\u0442\u0432\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 ax_dead_time = fig.add_axes([0.15, 0.18 - 2*slider_spacing, 0.65, slider_height]) slider_dead_time = Slider(ax_dead_time, '\u041c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0441)', 0.01, 0.3, valinit=0.1, valfmt='%.3f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 4-\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 ax_stop_time = fig.add_axes([0.15, 0.18 - 3*slider_spacing, 0.65, slider_height]) slider_stop_time = Slider(ax_stop_time, '\u0422\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 HSw (\u0441)', 0.5, 2.5, valinit=1.0, valfmt='%.3f')  # \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u0434\u043b\u044f \u0448\u0430\u0433\u0430 \u0441\u0435\u0442\u043a\u0438 ax_grid_step = fig.add_axes([0.15, 0.18 - 4*slider_spacing, 0.65, slider_height]) slider_grid_step = Slider(ax_grid_step, '\u0428\u0430\u0433 \u0441\u0435\u0442\u043a\u0438 (\u0441)', 0.05, 0.5, valinit=0.1, valfmt='%.2f')  # \u041a\u043d\u043e\u043f\u043a\u0430 \u0441\u0431\u0440\u043e\u0441\u0430 ax_reset = fig.add_axes([0.85, 0.18 - 2*slider_spacing, 0.08, 0.06]) button_reset = Button(ax_reset, '\u0421\u0431\u0440\u043e\u0441')  # \u0427\u0435\u043a\u0431\u043e\u043a\u0441 \u0434\u043b\u044f \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 ax_checkbox = fig.add_axes([0.85, 0.18 - 3*slider_spacing, 0.08, 0.04]) checkbox_invert = CheckButtons(ax_checkbox, ['\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c'], [False])  # === \u0413\u041b\u041e\u0411\u0410\u041b\u042c\u041d\u042b\u0415 \u041f\u0415\u0420\u0415\u041c\u0415\u041d\u041d\u042b\u0415 === t = np.linspace(0, TIME_WINDOW, NUM_POINTS) dt_step = t[1] - t[0]  # \u041b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u043e\u0432 \u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 stop_lines = [] edge_lines = []  # === \u0424\u0423\u041d\u041a\u0426\u0418\u042f \u0414\u041b\u042f \u0414\u041e\u0411\u0410\u0412\u041b\u0415\u041d\u0418\u042f \u041b\u0418\u041d\u0418\u0419 \u0424\u0420\u041e\u041d\u0422\u041e\u0412 === def add_edge_lines(ax, rising_edges, falling_edges):     # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u043e\u0432 (\u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0438\u0449\u0435\u043d\u044b \u043f\u0440\u0438 ax.clear())     for edge in rising_edges:         if edge &lt; len(t):             ax.axvline(x=t[edge], color='blue', linestyle=':', alpha=0.7, linewidth=1.5)      for edge in falling_edges:         if edge &lt; len(t):             ax.axvline(x=t[edge], color='red', linestyle=':', alpha=0.7, linewidth=1.5)  # === \u0424\u0423\u041d\u041a\u0426\u0418\u042f \u041e\u0411\u041d\u041e\u0412\u041b\u0415\u041d\u0418\u042f \u0413\u0420\u0410\u0424\u0418\u041a\u041e\u0412 === def update_plots():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432     pwm_period = slider_pwm_period.val     duty_cycle = slider_duty_cycle.val     dead_time = slider_dead_time.val     stop_time_4 = slider_stop_time.val     grid_step = slider_grid_step.val      # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u0430     invert_levels = checkbox_invert.get_status()[0]      # \u0420\u0430\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 5-\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f     if invert_levels:         stop_time_5 = stop_time_4 - pwm_period \/ 2  # \u041e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u043f\u0435\u0440\u0438\u043e\u0434\u0430     else:         stop_time_5 = stop_time_4 + pwm_period \/ 2  # \u041e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u043f\u0435\u0440\u0438\u043e\u0434\u0430      # === \u041f\u0415\u0420\u0415\u0421\u0427\u0415\u0422 \u0421\u0418\u0413\u041d\u0410\u041b\u041e\u0412 ===     # \u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a     f_tri = 1 \/ pwm_period     tri_wave_norm = 1 - 2 * np.abs((t * f_tri) % 1 - 0.5)     tri_wave = tri_wave_norm  # \u041e\u0442 0 \u0434\u043e 1      # \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430     compare_level = np.full_like(t, duty_cycle)      # \u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043b\u044e\u0447     high_side = tri_wave &lt; compare_level      # \u041d\u0430\u0439\u0442\u0438 \u0444\u0440\u043e\u043d\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430     high_side_edges = np.diff(high_side.astype(int))     high_side_rising_edges = np.where(high_side_edges == 1)[0]     high_side_falling_edges = np.where(high_side_edges == -1)[0]      # \u041d\u0438\u0436\u043d\u0438\u0439 \u043a\u043b\u044e\u0447     low_side = (~high_side).astype(int)      # \u041d\u0430\u0439\u0442\u0438 \u0444\u0440\u043e\u043d\u0442\u044b \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430     edges = np.diff(low_side)     rising_edges = np.where(edges == 1)[0]     falling_edges = np.where(edges == -1)[0]      # \u041c\u0435\u0440\u0442\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430     low_side_deadtime = np.copy(low_side)     dead_samples = int(dead_time \/ dt_step)      for rise, fall in zip(rising_edges, falling_edges):         if fall - rise &lt; dead_samples:             low_side_deadtime[rise+1:fall+1] = 0             continue         low_side_deadtime[rise+1:rise+1+dead_samples\/\/2] = 0         low_side_deadtime[fall+1-dead_samples\/\/2:fall+1] = 0         # 4-\u0439 \u0433\u0440\u0430\u0444\u0438\u043a: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043b\u044e\u0447, \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435     custom_signal_4 = np.copy(high_side.astype(int))     stop_idx_4 = int(stop_time_4 \/ dt_step)     if stop_idx_4 &lt; len(custom_signal_4):         if invert_levels:             custom_signal_4[stop_idx_4:] = 1  # \u0417\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 1         else:             custom_signal_4[stop_idx_4:] = 0  # \u0417\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 0      # 5-\u0439 \u0433\u0440\u0430\u0444\u0438\u043a: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0436\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0441 \u043c\u0435\u0440\u0442\u0432\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435     custom_signal_5 = np.copy(low_side_deadtime)     stop_idx_5 = int(stop_time_5 \/ dt_step)     if stop_idx_5 &lt; len(custom_signal_5) and stop_idx_5 &gt;= 0:         if invert_levels:      <\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-464136","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/464136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=464136"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/464136\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=464136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=464136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=464136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}