19.09.2016, 18:18
|
|
Прописка
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Генератор синусоиды на STM32F746
Здравствуйте Всем. Нужен совет знающих людей. Плата STM32F746Discovery. Генерирую синусоиду на выходе DAC (PA4 подцепившись на разъем P1 Camera). Используется DMA и TIM6 Синусоида 512 точек. Контроллер на максимальной частоте 216Mhz. Шина APB1 (Где висит TIM6) 54Mhz
Необходимо генеривовать частоту вплоть до 5000Hz с шагом в 1 герц. Посчитаем минимальный шаг изменения частоты на верхнем диапазоне. Ставим период таймера 22 (prescaller не используем). Считаем 54000000/(512*22) = 4794Гц. Уменьшим период на единицу, тем самым увеличивая частоту. 54000000/(512*21) = 5022.
Шаг получается в 228 герц. Ужас! Можно конечно уменьшить количество точек синусоиды, скажем до 256, но это не решение проблемы.
Вот собственно и спрашиваю совета. Mожет ли DAC генерировать синусоиду шагом в один герц в диапазоне 50 - 5000Гц? Или нужен другой подход. Какой?
|
|
|
|
19.09.2016, 18:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.01.2007
Сообщений: 3,123
Сказал спасибо: 61
Сказали Спасибо 1,153 раз(а) в 624 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
DDS читайте в Google, например здесь.
|
|
|
|
19.09.2016, 18:48
|
|
Прописка
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Да оно то понятно, что использование к примеру AD9833, решит все. Но на данном этапе меня интересует именно STM и его DAC
|
|
|
|
19.09.2016, 19:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.01.2007
Сообщений: 3,123
Сказал спасибо: 61
Сказали Спасибо 1,153 раз(а) в 624 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Сообщение от Jane9226
|
что использование к примеру AD9833
|
А вы используйте алгоритм , а не стороннюю железяку.
|
|
|
|
19.09.2016, 19:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,054
Сказал спасибо: 3,042
Сказали Спасибо 3,213 раз(а) в 2,183 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Сообщение от avp94
|
А вы используйте алгоритм , а не стороннюю железяку.
|
+1
Классика-же, притом на стареньком AT90S2313 с тактовой 10 МГц (от того-же автора):
"Низкочастотный синусоидальный генератор с шагом сетки 0,01 Гц (диапазон генерируемых частот — 1 ... 50000 Гц)" - http://530.ru/electronics/projects.php?do=p035
|
|
|
|
19.09.2016, 20:19
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Ничего не получится все равно. Нет понимания основ формирования временной базы таймера. Делить частоту надо с умом, а не абы как.
|
|
|
|
19.09.2016, 21:16
|
|
Прописка
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
DDS - "мой выбор" Спасибо. Буду пытаться разобраться в принципах вычисления 12-ти битного числа для DAC, для каждого последующего шага. Если я правильно поняла, нужно использовать два таймера. По прерыванию первого дергать DMA, которое будет брать значение из таблицы синуса и передавать это значение второму таймеру, который по прерыванию(переполнению) обновляет DAC с фиксированной частотой, скажем в 100kHz. И менять частоту прерывания первого таймера (частоту взятия следующего значения из таблицы) Примерно так? Но чувствую что я чего то упустила и недопонимаю
Сообщение от Easyrider83
|
Ничего не получится все равно. Нет понимания основ формирования временной базы таймера.
|
Вот умеете Вы подбодрить, объяснить и обнадежть. Я собственно зашла на форум и спрашиваю совета, что бы как раз это понимание и пришло в виде какойто формулы или понятного для меня объяснения, как это работает. Потому как мой мозг тяжело воспринимает сухой технический язык.
|
|
|
|
19.09.2016, 21:22
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Не так. Все проще. Таймер пинает DMA, который берет значение из памяти и кладет в DAC. Прерывания не требуются, иначе зачем нам тогда DMA? Но основа таймера - делитель, он не в состоянии обеспечить плавную регулировку частоты. Вообще, мы управляем не частотой, а периодом таймера. Меняем число, после которого он обнуляется. К примеру, у нас есть период 10. Значит мы можем его разделить на 2 и 5. И других частот мы не получим потому, что делим на целое число.
|
|
|
|
19.09.2016, 22:22
|
|
Прописка
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Сообщение от Easyrider83
|
Не так. Все проще. Таймер пинает DMA, который берет значение из памяти и кладет в DAC. Прерывания не требуются, иначе зачем нам тогда DMA? Но основа таймера - делитель, он не в состоянии обеспечить плавную регулировку частоты. Вообще, мы управляем не частотой, а периодом таймера. Меняем число, после которого он обнуляется. К примеру, у нас есть период 10. Значит мы можем его разделить на 2 и 5. И других частот мы не получим потому, что делим на целое число.
|
Вот те раз. Так у меня сейчас так и сделано и работает в железе. Я и затеяла эту тему, что бы как то увеличить плавность регулировки частоты, потому как прыжки в 200 Гц в верхнем диапазоне не приемлимы. Народ тут посоветовал смотреть в сторону DDS Согласна на 100% Но не хотелось бы переделывать железяку и встраивать AD9833, поэтому и пытаюсь понять алгоритм вычисления числа для DAC в самом контроллере. Вот нагуглила что то похожее, но там все на немецком
|
|
|
|
19.09.2016, 22:33
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Генератор синусоиды на STM32F746
Имеете в руках мощный контроллер. Можно частоту отправки в ЦАП брать примерно подходящую и считать каждое значение для необходимой частоты сигнала. Фазу ведь посчитаете?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:42.
|
|