Функциональный генератор на базе STM32F103

Кто любит RISC в жизни, заходим, не стесняемся.
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

[uquote="Мурик",url="/forum/viewtopic.php?p=3674151#p3674151"]
kloker писал(а):или вы про инициализацию и тактирование ЦАП сейчас?
Именно это. Как настроите периферию и будете выводить данные в ЦАП?[/uquote]
если в ардуино, то напрямую никак, только через либу, запиленую под именно эти чипы на STM. как в принципе и сделано в ихних примерах.
как можно наваять платформонезависимый софт, если железо идеологически и архитектурно разное?
у STM с HAL и LL грабля на грабле, даже между кристаллами в линейке клинит на поворотах, а тут с 8 битных чипов архитектуры 20 летней давности надо взлететь на чипах, ктотрым 8 лет еще нет, и чтобы ничего не переписывать))

это как прога в DOS под LPT программатор, для 8086 камня писаная на Win-10 c Core-i7, осталось виртуалку поднять и pci-e-LPT адаптор с чулана вынуть))))
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Функциональный генератор на базе STM32F103

Сообщение Мурик »

kloker писал(а):как можно наваять платформонезависимый софт, если железо идеологически и архитектурно разное?
То есть вы предлагаете отказываться от преимуществ архитектуры?
Тогда зачем вообще нужен STM32? Пишите под Arduino Uno или Nano.
По аналогии при разработке в ArduinoIDE под ESP8266 или ESP32 нужно отказаться от всего платформозависимого, т. е. от WiFi и т. д. Опять же, в таком случае пишите под Arduino Uno или Nano.
Надеюсь понимаете к чему это я?
СпойлерК тому не используя особенности конкретной платформы теряем многие ее преимущества.
kloker писал(а):у STM с HAL и LL грабля на грабле
Используйте SPL. В ней давно баги устранили.

И все же вы не ответили как настроите периферию и будете выводить данные в ЦАП? Представьте что есть МК STM32 с ЦАП в который нужно вывести синус. Как вы это сделаете. Код не нужен. Просто напишите какой метод используете.
Реклама
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

[uquote="Мурик",url="/forum/viewtopic.php?p=3674286#p3674286"]
kloker писал(а):как можно наваять платформонезависимый софт, если железо идеологически и архитектурно разное?
То есть вы предлагаете отказываться от преимуществ архитектуры?[/uquote]

интересное заключение, а где вы об этом прочли?


про инит ЦАП и синус ничего делать не буду, ибо опыта на Си и STM полгода от силы, и то, потому что сын в колледже Си++ проходит, вместе сидим и перевариваем)) Delphi и Visual Pascal в институте не в счет, и давно и мало.
максисмум на что пока хватает знаний, допилить чужой код, и в ардуине железку прикрутить.

как делают синхронный вывод через ЦАП есть гайды с примерами от СТМ и кучка статей, как на кубе проинить, или ручками через SPL.
по памяти там 2 счетчика юзают для синхры, и по прерыванию запись с массива в регистр ЦАП, и такт на изменение на аналоговом выходе. а вот масштабирование по временной сетке(смена частоты) уже по формуле. сложности только в делителях PLL, ибо их тоже придется менять на ходу, с выключением и реинитом шины и цап
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Функциональный генератор на базе STM32F103

Сообщение Мурик »

kloker писал(а):потому что сын в колледже Си++ проходит
Для МК не обязательно писать на C++. Обычного Си, бейсика или ассемблера достаточно.
kloker писал(а):по прерыванию запись с массива в регистр ЦАП
Не самое оптимальное решение.
Если форма сигнала не изменяется, создается массив и связкой таймер+ЦАП+DMA генерируется сигнал. При этом нет никаких прерываний и действий со стороны процессора. Периферия работает сама по себе.
Поэтому если хотите использовать все возможности МК, ардуина не самый подходящий инструмент.
Реклама
Эиком - электронные компоненты и радиодетали
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

[uquote="Мурик",url="/forum/viewtopic.php?p=3674427#p3674427"].
Поэтому если хотите использовать все возможности МК, ардуина не самый подходящий инструмент.[/uquote]
а кто спорит? ардуина не для того создана, если на то пошло))

меняется не форма сигнала а частота, от 0.1 гц до предельной для ЦАП, потому надо и о интерполяции задумываться на границах диапазона. с инфранизкими частотами даже сложнее задача..
если на борту есть FPU, то и массива с заготовкой формы сигнала не нужно, следующая итерация вычисляется по формуле.

два таймера не для синусоиды, а для потоковых данных, половину буфера заполнять, пока DMA второй половиной ЦАП кормит, а второй таймер следит за битрейтом.
Реклама
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

[uquote="DimKra",url="/forum/viewtopic.php?p=3674035#p3674035"]Прокомментирую вкратце некоторые идеи:
-К572ПА1 в качестве ЦАПа для DDS не годится, слишком медленный. Нужна скорость установления уровня не более нескольких единиц наносекунд.
-Встроенный ЦАП даже при условии разгона всё равно медленнее внешнего резисторного (~ 4,5Мсемпла/сек против ~5 Мегасемплов/сек на F103 && 72MHz)
- Кому-как, а лично мне паять корпуса с более мелким шагом чем у tqfp32 трудно физически.. и руки подводят и зрение. :cry: Так что единственный вариант покупать готовую плату. Кстати платы аля BluePill, но с F303 уже есть в продаже, видел на Али по 300р, к сожалению ссылку не сохранил :facepalm:
-шутка про ассемблерные вставки понравилась :)))[/uquote]

ассемблерные вставки в ардуино под AVR, IDE это позволяет. частенько попадались кстати.
на STM гуру ваяющих в ассемблере в природе не встречал, но поговаривают, что такие существуют.
К572ПА1 я для примера привел, ессно нужны более современные.
если внешняя R2R то берите готовой дип сборкой, их еще продают, только с погрешностью не больше 1 %, не хорошо когда старший бит своим разбросом перекрывает все младшие с запасом, синусоиды потом надкусанные получаются :)

Добавлено after 25 minutes 10 seconds:
кстати вот примерчик показательный:
https://habr.com/ru/post/372453/
Логический анализатор
Самый быстрый режим. Примерно 20 MSPS на каждом канале. Самый быстрый код для этого режима выглядит так:

Код: Выделить всё

u32 i = 0;
dataBuffer.u8[i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
и так далее на весь буфер.
Значение переменной i в этом случае вычисляются на этапе компиляции и в итоге из dataBuffer.u8[++i] = GPIOA->IDR; получается всего 2 операции — загрузить данные в регистр из порта и сохранить данные в память по заранее посчитанному адресу. Никакими циклами такой производительности достичь не получилось.

тем же способом можно и на R2R семплы выплевывать, если мимо тормоза с DMA .
Реклама
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Функциональный генератор на базе STM32F103

Сообщение 240265 »

__asm {

LDRH rez,[#0x4001244C]
STRH rez,[addressbuffer], #2
.
.
.
.
.
}

Так еще быстрей.

Добавлено after 3 minutes 3 seconds:
Но будет джиттер.
IVL ex UA6PJ
DimKra
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс мар 24, 2013 17:21:28

Re: Функциональный генератор на базе STM32F103

Сообщение DimKra »

[uquote="Мурик",url="/forum/viewtopic.php?p=3674427#p3674427"]Не самое оптимальное решение.
Если форма сигнала не изменяется, создается массив и связкой таймер+ЦАП+DMA генерируется сигнал. При этом нет никаких прерываний и действий со стороны процессора. Периферия работает сама по себе. Поэтому если хотите использовать все возможности МК, ардуина не самый подходящий инструмент.[/uquote]

Мурик, вы уже не в первый раз пишите про ардуино какие-то странные вещи. В чём конкретно неподходит то? В частности написать тот же вывод массива через DMA в Arduino IDE ещё быстрее и проще чем в любой другой IDE. Это буквально 5 строк.


[uquote="kloker",url="/forum/viewtopic.php?p=3675071#p3675071"]ассемблерные вставки в ардуино под AVR, IDE это позволяет. частенько попадались кстати.[/uquote]

Вы про что? Я собссно как раз из тех, кто активно использует ассемблерные вставки и на AVR и на ARM :)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Функциональный генератор на базе STM32F103

Сообщение Мурик »

DimKra писал(а):В частности написать тот же вывод массива через DMA в Arduino IDE ещё быстрее и проще чем в любой другой IDE. Это буквально 5 строк.
И что помешало выложить в теме эти 5 строк?
DimKra
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс мар 24, 2013 17:21:28

Re: Функциональный генератор на базе STM32F103

Сообщение DimKra »

Мурик , можно и выложить :) Вот пример, выводит 8-битный синус в ЦАП через DMA . Написал, когда изучал F103ret6.

Код: Выделить всё

#include <libmaple/dac.h>
#include <dma_private.h>
uint8_t wave[256]; //массив синусоиды
void setup() {
for(uint16_t n=0; n<256; n++){wave[n]=255*(sin(TWO_PI*float(n)/256)+1)/2 ;}// синус
dac_init(DAC,DAC_CH1);
DAC->regs->CR =  DAC_CR_EN1 | DAC_CR_BOFF1 | DAC_CR_TEN1 | (1<<5) | DAC_CR_DMAEN1;
TIMER2_BASE->CR2= 1<<5; TIMER2_BASE->ARR=1; 
TIMER2_BASE->CR1=1;

dma_init(DMA2);
dma_setup_transfer(DMA2,DMA_CH3,&DAC->regs->DHR8R1,DMA_SIZE_8BITS, (uint8_t*)wave, DMA_SIZE_8BITS, (DMA_FROM_MEM|DMA_MINC_MODE|DMA_CIRC_MODE) );
dma_set_num_transfers(DMA2, DMA_CH3, 255);
dma_enable(DMA2, DMA_CH3);

}

void loop() {  }
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

готового решения из всех теоретических изысканий и взаимных замеров IQ, я так понимаю, не предвидится..
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Функциональный генератор на базе STM32F103

Сообщение 240265 »

А это http://arduino.ru/forum/proekty/generat ... ent-457249 что не готовое ?
IVL ex UA6PJ
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

[uquote="240265",url="/forum/viewtopic.php?p=3675764#p3675764"]А это http://arduino.ru/forum/proekty/generat ... ent-457249 что не готовое ?[/uquote]
я про бой двух интеллектов))
ветку по ссылке я в первую очередь пересмотрел, и буду пробовать.
DimKra
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс мар 24, 2013 17:21:28

Re: Функциональный генератор на базе STM32F103

Сообщение DimKra »

К сентябрю будет версия 3.5 :) В частотометре можно будет вкл/откл делитель на 8. и ещё планирую новый режим - одновибратор. По нажатию кнопки будет генерировать импульс длительностью от одного такта мк (~13,8nS) и длиннее. А пока в отпуск собираюсь.. :music:
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Функциональный генератор на базе STM32F103

Сообщение 240265 »

Ну да, ssss же сказал что все это " ерунда получается" :))). Хорошо отдохнуть!
IVL ex UA6PJ
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Функциональный генератор на базе STM32F103

Сообщение Мурик »

DimKra писал(а):В частности написать тот же вывод массива через DMA в Arduino IDE ещё быстрее и проще чем в любой другой IDE.
DimKra писал(а):Вот пример, выводит 8-битный синус в ЦАП через DMA.
Во первых, строк больше чем 5.
Во вторых, с таким подходом можно написать в другой IDE и отладить, что в ArduinoIDE недоступно.
ArduinoIDE ничего не упрощает. Код платформозависимый. Пока что одни недостатки.
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

Спасибо за конструктив, и приятно отдохнуть!))

Добавлено after 8 minutes 16 seconds:
И да, одновибратор это полезная штука.
Хорошо бы еще счетчик импульсов с компаратором на входе прикрутить, чтобы возможность отлова тех самых иголок в постоянке появилась.
Дебажить аппаратные глюки без таких ловушек сложновато, вч осцилом даже поймать сложно.
man_200
Вымогатель припоя
Сообщения: 507
Зарегистрирован: Вс янв 20, 2013 12:45:25
Откуда: Астана, Казахстан

Re: Функциональный генератор на базе STM32F103

Сообщение man_200 »

Да! Теоретические изыскания пока ни как не сказываются на практическом конструктиве в ЛУТ исполнении из рассыпных деталей.
Видать придется самому печать рисовать
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

Re: Функциональный генератор на базе STM32F103

Сообщение kloker »

софт и схема есть, уже половина работы выполнена, осталось под свою комплектуху плату нарисовать.
ну или в архиве яндекс диска у пользователя 240265 нужное поискать
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Функциональный генератор на базе STM32F103

Сообщение 240265 »

Там нету.
IVL ex UA6PJ
Ответить

Вернуться в «ARM»