Страница 1 из 1

Помогите разобраться с кодом программы

Добавлено: Вс авг 28, 2016 09:36:17
Vozz
Здравствуйте. Откопал в интернете вот такую программу для формирования однофазной синусоиды на STM32F100. Помогите разобраться с кодом программы!

http://catethysis.ru/stm32-tim-dma-pwm-sin/

Конкретно не понятно на сколько прямоугольных импульсов разбивается ШИМ. Автор задает параметр "steps". В пересчете из программы получается на 200 импульсов? Замерял осциллографом их количество - там явно меньше 200 импульсов. Про "precision"вроде как понял, что это частота дискретизации и равна она 1200. Только вот почему именно precision пихается в ARR и CCR счетчика TIM3? Почему в DMA подставляется steps, хотя по идее должен подставляться массив из вычисленных значений синуса из функции fill_sine. Буду благодарен за пошаговое объяснение всего цикла программы, так как в программировании я новичек!
Все началось с того. что мне понадобился трехфазный синус 220 вольт частотой 50 Гц для проверки терминалов релейной защиты. Вот хотелось бы переделать эту программу "под себя" и загнать ШИМ на схему полумоста на полевиках через драйвер IR2130.

В моем понимании программа работает так:

Прописываются дифайны -> создается переменная uint16_t с массивом чисел, число элементов массива равно steps --> с помощью функции fill_sine вычисляется массив синуса а проход по массиву задается переменной i -> настраиваем DMA (не понятно для чего прописаны строчки 4,5,6 в DMA) -> настраиваем счетчик TIM3, пихаем в ARR и CCR значения precision (что такое DBGMCU ? ))) - > настраиваем ножки контроллера для ШИМ - > настраиваем прерывания (с помощью переменных a и b осуществляется сдвиг двух каналов CCR счетчика на 90 градусов) - > крутимся в бесконечном цикле while.

Программа предназначена для управления мостом, но думаю переделать ее под полумост не проблема - всего то нужно удалить несколько строчек кода ))