Для работы с аналоговыми сигналами удобно использовать Digital signal processing for STM32 microcontrollers К примеру произвести FFT ( Fast Fourier Transformation) и сразу будет видно все компоненты сигнала. Если появятся видеос по ДСП , обязательно посмотрел бы!
Здравствуйте, если бы Вы замерили данный синусоидальный сигнал на обычном осциллографе, то увидели бы что частота синусоиды не 26,7 кГц, а 13,33кГц. Реализованный вами счетчик clk_counter почему-то считает такты на частоте HCKL/2, при условии если у вас тоже HCLK=84МГц.
Интересно, если в строке вывода времени периода всё умножить на 2, а в строке вывода частоты разделить всё на 2, то это уже будет больше соответствовать действительности. Сигнал смотрел на осциллографе.
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*)sin_tab1, 128, DAC_ALIGN_12B_R); Як стартувати не з нульової адреси в масиві, а скажімо з 35-ї ? Дякую
Спасибо за примеры! Подскажите - почему во всех примерах у меня выскакивает одна ошибка: error: #20: identifier "GPIO_SPEED_FREQ_VERY_HIGH" is undefined error: #20: identifier "GPIO_SPEED_FREQ_LOW" is undefined
Показания осциллографа отличаются ровно в два раза - частота в два раза меньше, чем на дисплее, а период, соответственно, в два раза больше. Показания на дисплее получились точно как на видео. Может где-то ошибка в частотах тактирования?
Надо было у меня же спросить. Чет посчитать я могу. Вот пример расчета для функции HAL_Delay(). Dly = 1000 / freq / 2; Где freq - требуемая частота импульсов, а dly - время в миллисекундах для функции задержки.
В смысле? Что-то не то в проекте? Нам же нужна частота полного синусоидального колебания. Причем не сколько частота, сколько период. Вы про какие задержки?
А, понял, сорри. Видимо отвлекли от видео, я пропустил, что мы считали. :-) Ну вот по этой формуле я как раз считал задержку для генерации меандра заданной частоты.
Понятно. Тут нам важно отследить за сколько тактов мы управимся благодаря DMA с передачей всего массива. Надо потом ещё анализатором померить будет. Ему всё равно, какой формы колебания, для него они все квадратные)
можно было воспользоваться функцией синус с библиотеки math.h unsigned short sinys[64]; for(unsigned char a = 0; a < 64; a++){ sinys[a] = (unsigned short)(4095.0 * sin(6.28*(float)a/64.0)+4095.0); } HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)sinys, 64, DAC_ALIGN_12B_R);
Учусь работать с СТМ32 по Вашим урокам. Но как увидел получения синус через таблицу то просто орнул в голос. Без обид, но это метод для школьников максимум. Ожидал увидеть задание частоты дискретизации, определения приращения угла от заданной частоты в герцах, ВЫЧИСЛЕНИЯ синуса по новому углу и выдачу нового отсчёта в ЦАП. П.С. в темах про АЦП тоже отсутствует пониятие дискретизация и получение значений со строго определённой частотой. А без этого не построить форму сигнала для дальнейшего анализа.
А я и не знал, что люди сюда приходят учиться строить синус программно. Мало того, я не знал, что это так важно. Поэтому не придал этому значения. Урок-то вообще-то по программированию периферии контроллера.
Принимайте не как критику, а как пожелание к уделению внимания к таким параметрам. На прошлых уроках (АЦП по прерываниям и ДМА) меня очень смутило что осталось не понятным с какой частотой получаем выборки, как на это влиять и получать значения с точно заданной частотой? Вопрос конечно решил, путём симбиоза двух уроков. Но был удивлён отсутствием такой инфы. Я понимаю что большинство измеряет вялые процессы типа температуры, и там секундой позже - не беда. Но для цифровой обработки сигналов нужна строгая определённость.
Быстродействие! Как оказалось на практике, функция sin() очень медленная. Даже более быстрая sinf() тоже тормозит. В итоге лучше заранее сделать большую таблицу с не менее 360 значений, и потом из нее брать наиболее близкий угол. Частота выборок постоянна. А вот приращение угла зависит от частоты. Добавляй приращение и бери из таблицы ближайший угол.
Добрый день! Я делал в Excel. Разделил 360 градусов на желаемое количество ступеней и сделал столбец из этих значений, а затем другой столбец заполнил с вычислением синуса углов, благо есть такая формула, ну и округлил соответственно.
На некоторых есть и больше двух. Но также можно внешние DAC использовать. Есть по I2C/SPI, но они дороже. На I2S дешевле. Но где есть I2S, там есть и DAC. Но их можно и комбинировать.
Пожалуйста, поаккуратнее с выражениями. Также с серией восклицательных знаков. 217 - это сэмплрейт, а частота синусоиды - это другое. В одном периоде синусоиде должно быть как минимум 10 сэмлов, это как минимум. Но чтобы увидеть какую-то картину, надо хотя бы 20. Так что посчитайте.
@@narodstream552 Может быть это тебе нужно пересчитать и перечитать частоту звука: от 20(Гц) до 20(кГц). У тебя выводится 217(кГц), т.е. в 10 раз больше. У тебя проблемы с арифметикой?
217 килогерц - это частота измерений, а не частота синуса. а нам нужно измерить частоту синуса 20 килогерц. Делим 217 на 20 получим меньше 11 килогерц. Если начнем измерять 20 килогерц, то на один период синуса у нас получится 11 измерений, маловато, я считаю. С арифметикой у меня всё хорошо. С тригонометрией, линейной алгеброй и прочими отраслями высшей математики тоже не плохо - курсовые делал в своё время всей группе. А Вам надо разобраться в отличии сэмпл-рейтинга с частотой. У осциллографов есть и то и другое. У моего UNI-T частота 25 мегагерц, а сэмплрейтинг 250. Там отношение 1 к 10, но практика показала, что это мало, желательно для пущей полноты картины 1 к 20. я подавал 25 мегагерц - синус виден но не отчетливо, а вот при 12 мегагерц - отчётливо.
Для работы с аналоговыми сигналами удобно использовать Digital signal processing for STM32 microcontrollers К примеру произвести FFT ( Fast Fourier Transformation) и сразу будет видно все компоненты сигнала. Если появятся видеос по ДСП , обязательно посмотрел бы!
Сапсибо вам огромное)
Здравствуйте, если бы Вы замерили данный синусоидальный сигнал на обычном осциллографе, то увидели бы что частота синусоиды не 26,7 кГц, а 13,33кГц. Реализованный вами счетчик clk_counter почему-то считает такты на частоте HCKL/2, при условии если у вас тоже HCLK=84МГц.
Интересно, если в строке вывода времени периода всё умножить на 2, а в строке вывода частоты разделить всё на 2, то это уже будет больше соответствовать действительности. Сигнал смотрел на осциллографе.
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*)sin_tab1, 128, DAC_ALIGN_12B_R);
Як стартувати не з нульової адреси в масиві, а скажімо з 35-ї ? Дякую
Hi, Is there a way to change the amplitude of the sin wave while it is running on the TFT screen, like using potentiometer?
Спасибо за примеры! Подскажите - почему во всех примерах у меня выскакивает одна ошибка:
error: #20: identifier "GPIO_SPEED_FREQ_VERY_HIGH" is undefined
error: #20: identifier "GPIO_SPEED_FREQ_LOW" is undefined
Показания осциллографа отличаются ровно в два раза - частота в два раза меньше, чем на дисплее, а период, соответственно, в два раза больше. Показания на дисплее получились точно как на видео. Может где-то ошибка в частотах тактирования?
Возможно.
Надо было у меня же спросить. Чет посчитать я могу. Вот пример расчета для функции HAL_Delay().
Dly = 1000 / freq / 2;
Где freq - требуемая частота импульсов, а dly - время в миллисекундах для функции задержки.
В смысле? Что-то не то в проекте? Нам же нужна частота полного синусоидального колебания. Причем не сколько частота, сколько период. Вы про какие задержки?
А, понял, сорри. Видимо отвлекли от видео, я пропустил, что мы считали. :-) Ну вот по этой формуле я как раз считал задержку для генерации меандра заданной частоты.
Понятно. Тут нам важно отследить за сколько тактов мы управимся благодаря DMA с передачей всего массива. Надо потом ещё анализатором померить будет. Ему всё равно, какой формы колебания, для него они все квадратные)
Кстати, мне тут идут из Москвы дисплеи от МЭЛТ, аналоги HD44780. Сделать обзор? Будет кому интересно, не?
А вот и посмотрим. Думаю дисплеи - это всегда интересно.
можно было воспользоваться функцией синус с библиотеки math.h
unsigned short sinys[64];
for(unsigned char a = 0; a < 64; a++){
sinys[a] = (unsigned short)(4095.0 * sin(6.28*(float)a/64.0)+4095.0);
}
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)sinys, 64, DAC_ALIGN_12B_R);
частота = част таймера / 64
период = 1 / частота
попробовал синус почему-то вышел очень корявый с всплесками, не подскажите в чем может быть дело?
может помехи, посмотри при меандре будут ли помехи.
Учусь работать с СТМ32 по Вашим урокам. Но как увидел получения синус через таблицу то просто орнул в голос. Без обид, но это метод для школьников максимум. Ожидал увидеть задание частоты дискретизации, определения приращения угла от заданной частоты в герцах, ВЫЧИСЛЕНИЯ синуса по новому углу и выдачу нового отсчёта в ЦАП. П.С. в темах про АЦП тоже отсутствует пониятие дискретизация и получение значений со строго определённой частотой. А без этого не построить форму сигнала для дальнейшего анализа.
А я и не знал, что люди сюда приходят учиться строить синус программно. Мало того, я не знал, что это так важно. Поэтому не придал этому значения. Урок-то вообще-то по программированию периферии контроллера.
Принимайте не как критику, а как пожелание к уделению внимания к таким параметрам. На прошлых уроках (АЦП по прерываниям и ДМА) меня очень смутило что осталось не понятным с какой частотой получаем выборки, как на это влиять и получать значения с точно заданной частотой? Вопрос конечно решил, путём симбиоза двух уроков. Но был удивлён отсутствием такой инфы. Я понимаю что большинство измеряет вялые процессы типа температуры, и там секундой позже - не беда. Но для цифровой обработки сигналов нужна строгая определённость.
А меня теперь всё время за эту таблицу будут понукать? Мне может урок из-за этого удалить?
Быстродействие! Как оказалось на практике, функция sin() очень медленная. Даже более быстрая sinf() тоже тормозит. В итоге лучше заранее сделать большую таблицу с не менее 360 значений, и потом из нее брать наиболее близкий угол. Частота выборок постоянна. А вот приращение угла зависит от частоты. Добавляй приращение и бери из таблицы ближайший угол.
Вы проделали большую работу. Спасибо вам. Ничего удалять не надо.
Добрый день. Подскажите, пожалуйста, как таблицу значений синуса рассчитать! Спасибо.
Добрый день! Я делал в Excel. Разделил 360 градусов на желаемое количество ступеней и сделал столбец из этих значений, а затем другой столбец заполнил с вычислением синуса углов, благо есть такая формула, ну и округлил соответственно.
@@narodstream552 дайте пожалуйста файлик
Можно вопрос массив синуса по какой формуле вы вычисляли в Exel?
Точно не помню, но, по-моему, просто вычислял синус, а потом умножал его на пять. А величины в ряду от нуля до 2 ПИ.
@@narodstream552 можете дать ссылку.Я не прошу другое ?
Я не сохранял, поэтому рассказал принцип. Это важнее, лучше понять, чем копировать.
@@narodstream552 метод тыка у меня вся жизнь такая спасибо
У STm32 есть максимум 2 цапа а если мне нужно больше что мне тогда делать?
На некоторых есть и больше двух. Но также можно внешние DAC использовать. Есть по I2C/SPI, но они дороже. На I2S дешевле. Но где есть I2S, там есть и DAC. Но их можно и комбинировать.
а формулу я нашёл
Поздравляю!
только у вас это не синус.а пила
Цель не в этом данного урока. Цель - научиться работать с периферией.
@@narodstream552 понял
26:31 - 13(МГц) не годится для звука? Ты гонишь!!!!! У тебя же у самого 217(кГц) выводится. Даже ультразвук еще выведет.
Пожалуйста, поаккуратнее с выражениями. Также с серией восклицательных знаков. 217 - это сэмплрейт, а частота синусоиды - это другое. В одном периоде синусоиде должно быть как минимум 10 сэмлов, это как минимум. Но чтобы увидеть какую-то картину, надо хотя бы 20. Так что посчитайте.
@@narodstream552 Может быть это тебе нужно пересчитать и перечитать частоту звука: от 20(Гц) до 20(кГц). У тебя выводится 217(кГц), т.е. в 10 раз больше. У тебя проблемы с арифметикой?
217 килогерц - это частота измерений, а не частота синуса.
а нам нужно измерить частоту синуса 20 килогерц.
Делим 217 на 20 получим меньше 11 килогерц.
Если начнем измерять 20 килогерц, то на один период синуса у нас получится 11 измерений, маловато, я считаю.
С арифметикой у меня всё хорошо. С тригонометрией, линейной алгеброй и прочими отраслями высшей математики тоже не плохо - курсовые делал в своё время всей группе.
А Вам надо разобраться в отличии сэмпл-рейтинга с частотой. У осциллографов есть и то и другое.
У моего UNI-T частота 25 мегагерц, а сэмплрейтинг 250. Там отношение 1 к 10, но практика показала, что это мало, желательно для пущей полноты картины 1 к 20. я подавал 25 мегагерц - синус виден но не отчетливо, а вот при 12 мегагерц - отчётливо.
следующий комментарий был удалён по причине присутствия в нём национальной розни.
Здесь публичное сообщество и здесь все равны.