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

++index_A;
if (index_A >= SIZE_OF_TABLE)
  index_A = 0;


чем не подходит ? И размер кратный 3 (для 120 градусов)

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


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

1 минуту назад, dimka76 сказал:

На индекс накладывать маску, вот так

Да, но это лишние вычислительные ресурсы, которые можно сэкономить.

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


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

Спецы это слишком заумно.А вот вы покажите как вы будете управлять частотой.?Каким образом модуляция будет "дышать" изменять частоту синуса?

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


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

4 минуты назад, x893 сказал:

чем не подходит ?

Но можно же обойтись без этого. Код будет короче, быстрее, элегантнее.

2 минуты назад, dimir сказал:

А вот вы покажите как вы будете управлять частотой.?

Может пора уже хоть немного почитать про прямой цифровой синтез? Вам уже и ссылку на статью Леонида Ивановича привели, где все разжевано проще некуда.

15 минут назад, Сергей Борщ сказал:
uint32_t Phase_step;            // Этой переменной определяем часоту.

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


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

Каждый сам решает. 256 на 3 не делится, а 360 делится.
Или 720. Зависит от точности синуса (млм что там надо синтезировать)

7 minutes ago, dimir said:

Спецы это слишком заумно.А вот вы покажите как вы будете управлять частотой.?Каким образом модуляция будет "дышать" изменять частоту синуса?

Таймер, DMA и CPU

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


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

2 минуты назад, x893 сказал:

256 на 3 не делится, а 360 делится

зато 2^32 делится с достаточной точностью. Можно складывать с аккумулятором фазы и результат сдвигать для получения индекса.

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


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

4 minutes ago, Сергей Борщ said:

зато 2^32 делится с достаточной точностью. Можно складывать с аккумулятором фазы и результат сдвигать для получения индекса.

Можно. никто не запрещает.
Аккумулятор фазы - очень сложно для меня.
У нас в ПТУ этому не учили

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


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

On 8/22/2022 at 10:01 PM, Сергей Борщ said:
size_t const PERIOD = 256;      // должен быть степенью двойки
uint8_t Envelope[PERIOD * 2];   // огибающая двух периодов синуса, но можно и более хитрую форму
uint32_t Phase_acc;             // аккумулятор фазы

uint32_t Phase_step;            // Этой переменной определяем часоту.


void update()
{
    Phase_acc += Phase_step;
    
    size_t Index = Phase_acc >> 24;
    Phase_A_out = Envelope[Index + 0 * PERIOD / 3] * Amplitude;
    Phase_B_out = Envelope[Index + 1 * PERIOD / 3] * Amplitude;
    Phase_C_out = Envelope[Index + 2 * PERIOD / 3] * Amplitude;
}

В вашем примере с именно вашими значениями, если переменную Index сделать uint8_t, то и таблицы на один период хватит и маску, предложенную мной, не надо.

Все "автоматически" замаскируется.

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


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

В 22.08.2022 в 22:14, Сергей Борщ сказал:

Может пора уже хоть немного почитать про прямой цифровой синтез? Вам уже и ссылку на статью Леонида Ивановича привели, где все разжевано проще некуда.

Это кто такой  профессор?.Дайте ссылку.

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


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

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

Все "автоматически" замаскируется.

Логично. 

1 минуту назад, dimir сказал:

Дайте ссылку

 

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


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

В 22.08.2022 в 22:18, x893 сказал:

Таймер, DMA и CPU

DMA?только эксперимент покажет.Я Фома не верующий в  DMA.

Но у нас нет DAC.

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


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

4 minutes ago, dimir said:

DMA?только эксперимент покажет.Я Фома не верующий в  DMA.

Но у нас нет DAC.

Не повезло. Тогда R-2R поможет

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


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

On 8/23/2022 at 1:24 AM, x893 said:

Аккумулятор фазы - очень сложно для меня.
У нас в ПТУ этому не учили

2001 год, студент сдаёт диплом на модный тогда Z80. Престарелый электорат сонно кивает носом, решительно нихрена не понимая в теме. И тут один из них слышит знакомое слово аккумулятор..

- Скажите голубчик, аккумулятор у вас кислотный или щелочной?

dimir - Нужен всего один таймер, настроенный на частоту шима, и несколько глобальных переменных. Таблица шима тоже только одна нужна.

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


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

8 часов назад, AVI-crak сказал:

Да, у меня мотор на 20КГц шима перегревается, когда хавает 3,5А на холостых оборотах через инвертор. И почти холодный, когда работает от сети на прямую (1,4А).

image.thumb.jpeg.20591357f89836c77bd5cf3b38aa3d69.jpeg

YASA-750, ШИМ=~10кГц, 400об/мин, ~300V, примерно те же ~3.5A по фазам, ~7.6A от батареи, шланги охлаждения (как видно по фотке) - не подключены.

Холостой ход непрерывно ~20мин: внутренние датчики температуры не подключены, но внешний корпус - еле тёплый.

Токи примерные, так как измеряются на нижней границе чувствительности (полный диапазон датчиков фазных токов = 900А, при том что АЦП=12бит).

8 часов назад, AVI-crak сказал:

Инвертор не мой, а чистокровный супердешовый китаец - точно так-же как и у всех сейчас.

У вас - китайский, у меня - свой. Не надо говорить за всех!

4 часа назад, Vasily_ сказал:

В этом году грех жаловаться, дождей совсем нет, и плавимся мы а не моторы. :beach:

Ну сегодня-то грех жаловаться - какой-никакой дождик, а немного намочил. По-крайней мере в Пурчике....

2 часа назад, Сергей Борщ сказал:

Да, но это лишние вычислительные ресурсы, которые можно сэкономить.

Тогда действовать в обратную сторону - в декремент. На ARM-е будет немного меньше операций.  :wink:

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


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

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

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

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

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

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

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

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

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

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