Помогите разобраться с кодом программы
Добавлено: Вс авг 28, 2016 09:36:17
Здравствуйте. Откопал в интернете вот такую программу для формирования однофазной синусоиды на 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.
Программа предназначена для управления мостом, но думаю переделать ее под полумост не проблема - всего то нужно удалить несколько строчек кода ))
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.
Программа предназначена для управления мостом, но думаю переделать ее под полумост не проблема - всего то нужно удалить несколько строчек кода ))