Перейти к содержанию
    

Как состряпать алгоритм синусоидального ШИМ?

41 minutes ago, EdgeAligned said:

Но и максимальное значение увеличится до +2.

Я потому и спросил).  Можно уложить синус в диапазон 0...+1 применив формулу 0,5 + sin(x)/2.:russian_ru:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, MPetrovich сказал:

Можно уложить синус в диапазон 0...+1

Как давно известно: значение синуса в военное время может достигать 2-х. А сейчас у нас какое время?  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так это прямой угол кипит при 100° в военное время 🙂 

А вот если -1 разделить на 2 и прибавить +0,5, то получится... 

Снимок экрана 2023-07-31 202051.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, EdgeAligned said:

Так это прямой угол кипит при 100° в военное время 🙂 

А вот если -1 разделить на 2 и прибавить +0,5, то получится... 

Снимок экрана 2023-07-31 202051.png

А что за калькулятор у Вас такой интересный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дак он практически у каждого есть, кто пользуется виндой. Это стандартный калькулятор, установленный в Win10

Снимок экрана 2023-08-01 114047.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, EdgeAligned said:

Дак он практически у каждого есть, кто пользуется виндой. Это стандартный калькулятор, установленный в Win10

Снимок экрана 2023-08-01 114047.png

Ясно, в 7рке старый простой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тут решил заставить МК ATMega128 считать мне таблицы синусов. Ага, разбежался))) После 15 минут ожидания завершения расчётов понял, что погорячился. Пришлось в EXEL делать таблицы и копировать в программу. Вот гемор то неожиданно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Либо ваша АТМега работала на 32 кГц, либо таблица синусов на 8 тыс.точек 🙂 

В принципе, в самом минимальном варианте достаточно 1/4 периода (0° - 90°), остальное отражается зеркально по оси X и по оси Y. И внутри этого сектора можно взять от 8 до 32 отсчетов. Получается компактно. Да, и вы можете просто забить табличку в эксель и перекопировать значения для инициализации константного массива, так тоже можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, хочу узнать кто как управляет изменением периода синусоиды. Я пока просто 3 фазы на трёх выводах ОС1А, ОС1В и ОС1С получаю без управления периодом. ШИМ настроен на таймере1 8 бит не инвертированный. Значение DutyCycle устанавливаю в прерывании по переполнению таймера.

Есть, на мой взгляд, такие варианты: изменять частоту ШИМ (что мне бы не хотелось); вставлять паузу; повторять значения DutyCycle. Может ещё какие варианты предложите?

7 minutes ago, EdgeAligned said:

Либо ваша АТМега работала на 32 кГц, либо таблица синусов на 8 тыс.точек

Тактовая частота 8МГц, а таблицы 3 шт по 256 точек. Я поставил признак окончания расчёта - гаснет светодиод. И этого я не дождался)))

Вот код:

void sincalc()  
{ 
 uint8_t i=0, iT=255;
  for(i=0; i<=iT; i++) //iT=255
  {
    ifl=(((float)i)/iT );
    F1 = sin(6.28*ifl) ;
    FI1[i] = (uint8_t)(256*(F1+1)/2);
    F2 = sin(6.28*ifl+(6.26/3));
    FI2[i] = (uint8_t)(256*(F2+1)/2);
    F3 = sin(6.28*ifl -(6.26/3));
    FI3[i] = (uint8_t)(256*(F3+1)/2);
    i++ ;
  }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть такой алгоритм, как DDS. Он используется в DDS-генераторах частоты. Правда, в этом случае таблица синуса должна быть достаточно большой, чтобы получить большой диапазон перестройки частоты.

 

Изменено пользователем EdgeAligned

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, EdgeAligned said:

И не дождетесь! 

uint8_t i=0, iT=255;

А что не так то? 8-битное число без знака от 0 до 255.   Если бы 256 было, тогда понятно. Вот в конце цикла лишнее  i++; затесалось, но это не делает цикл бесконечным...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, EdgeAligned сказал:

В принципе, в самом минимальном варианте достаточно 1/4 периода

1/8 периода :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, MPetrovich сказал:

Может ещё какие варианты предложите?

Прямой цифровой синтез (DDS)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Сергей Борщ сказал:

1/8 периода :blush:

Эммм... 360°/4 = 90°, вроде бы так. Сейчас на калькуляторе проверю на всякий случай 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...