Как автор рассчитал время сравнения в ардуино мега 2560
- Войдите на сайт для отправки комментариев
Втр, 23/08/2022 - 20:36
Здравствуйте! Я нашел код по методу векторной ШИМ. чилал и думал, но не понял. время T0, T1 , T2 мы знаем по формуле. Но когда в коде автор написал такие значения t1_compA = 59664; t1_compB = 65008;... Подскажите, пожалуйста! Как рассчитать, чтобы получить такие значения? const uint16_t t_load = 59136; const uint16_t t1_compA = 59664; const uint16_t t1_compB = 65008; const uint16_t t3_compA = 60240; const uint16_t t3_compB = 64432; const uint16_t t4_compA = 61808; const uint16_t t4_compB = 62864; const uint16_t t5_compA = 61232; https://github.com/083chandan/SpaceVector_PWM/blob/master/refrences/Timing%20diagram/Waveforms%20Timings.pngt uint16_t t5_compB = 63440;
Перестарался со вставкой кода, ничего не понятно - где код, где текст, где комментарии...
Берётся значение времени и делится на длительность такта МК и ещё раз делится на на предделитель таймера. Полученное будет искомым кол-вом тактов, которое и используется как точки сравнения А и B (COMPA и COMPB) для таймера.
Так ты прочти внимательнее что тебе в #2 написали!
то есть: на пример для t1_compA = 59664; t1_compA = 334us/(1/16e6)/256.
Скажите, как правильно рассчиать?
в проекте, они рассчитали и объяснили как получить время.
А в коде шесть разных времени, Вы можете объяснить как получить такие времени?
А так понятнее ?
59136 - начало отсчета
Большое спасибо Вам за помощь!
Скажите, пожалуйста! как перенаписать код, чтобы равно 1/2500=400 ms.
И можно ли подключить потенцимеотр, чтобы получить переменную частоту?
Вы делить не умеете ! 1/2500=0.000400 это 400 мкС как в скетче.
Глянь, рази интереса хотя бы: https://arduino.ru/forum/otvlechennye-temy/atmega8-lto-perenos-koda-s-arduino?page=2#comment-663833
Автор кода не учитывает накладные расходы на вызов прерывания и перезагрузку счетчика - цикл будет несколько больше чем 400 мс !
Мой вопрос в вашем ответе.
Скажите, как поправить код, ровно 400 us?
Я загурузил .hex в протусе, измерил но не точно.
Создайте в Proteus проект с кодом. Скопируйте код и запустите отладку. Точки останова ставьте там где меняется состояние сигналов. В окне просмотра регистров AVR есть счетчик тактов - по нему и считайте/подгоняйте значения, которые грузятся в таймеры.