Народный осциллограф "Мурзик" на базе STM32F303VCT6 - проект

Кто любит RISC в жизни, заходим, не стесняемся.
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение ncp1400 »

у STM32F446RCT6 есть Camera Interface - 8/14bit, 54mbps
в полтора раза дороже 32F303, и корпус паябельный...
Реклама
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Fusion »

Да, я уже проверил. STM32F3 и F4 могут забирать с портов за 2 такта. 32 MSPS получается гарантированно.
Правда при этом происходят какие то чудеса.
Процессор на что то иногда отвлекается)
Пока не разобрася на что. Прерывания отключены.
А если забирать с внутреннего АЦП то вроде все чисто.

Вот и получается:
1. STM32F3 + AD9280 + ОУ + делитель + генератор минуса = 32мГц (может 40) Входное сопротивление 1 мОм.
2. STm32F303 (и все!) = 16 мГц Входное сопротивление 100 кОм. Правда всего 4 предела по уровню.

Сейчас собран втотой вариант и что характерно работает и пользуюсь.
А первый... ну наверно неспешно доделаю..
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Reflector »

Fusion писал(а):Да, я уже проверил. STM32F3 и F4 могут забирать с портов за 2 такта. 32 MSPS получается гарантированно.
Правда при этом происходят какие то чудеса.
Процессор на что то иногда отвлекается)
Есть такое. Я после запуска DMA делал __WFI(), проц засыпает до прерывания и, во-первых, меньше помехи на ADC, во-вторых, DMA никто не мешает и должно всегда забирать данные за 2 такта.
man_200
Вымогатель припоя
Сообщения: 507
Зарегистрирован: Вс янв 20, 2013 12:45:25
Откуда: Астана, Казахстан

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение man_200 »

fusion, P-CAD пока осваиваю может по-этому второго слоя не вижу. Печатка на Хмегу 32 односторонняя, судя по-всему? Если так, то площадки с отверстиями соединять проводами согласно схемы? Шина АЦП на какие порты МК включена или тупо делать по печатке? Оптрон не указан, через ключ включу реле или можно применить полевик?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Fusion »

man_200:
Печатка односторонняя, соединять проводами.
Шина АЦП на порту С.
Оптореле 350В, 100мА cpc1035.

Чтобы не засорять форум давайте в личку что ли.....
Реклама
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение ncp1400 »

STM32F3 и F4 могут забирать с портов за 2 такта. 32 MSPS получается гарантированно
на F030 DMA тоже молотит до F_CPU/2.
вот меандр 15МГц, проц на 60МГц, DMA1.1 в режиме MEM2MEM, приоритет максимум, чтение из GPIOA.IDR:
ИзображениеИзображение

видно что читает по 4 точки на период, без пропусков, т.е. и на F030 получается 30MSPS :)
программным чтением (типа *buf++ = GPIOA->IDR; ...) длительность одного уровня "пляшет" по 1/2/3 семпла на полупериод...
Процессор на что то иногда отвлекается)
задайте макс.приоритет DMA
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Reflector »

ncp1400 писал(а): видно что читает по 4 точки на период, без пропусков, т.е. и на F030 получается 30MSPS :)
Я такое тоже наблюдал :) Частота дискретизации была 19.2M, если подавать на вход 9.6M сгенерированную тем же мк, то получаем идеальную лесенку 0101..., но если подать 16M или 24M, то откуда-то берутся 4 или 3 точки не период. Визуально 16M и 4М выглядят почти одинаково, не дай себя обмануть :)
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение ncp1400 »

проц разогнан до 64М, меандр 32М:
ИзображениеИзображение

судя по ШИМу, частота там не максимальная:
ИзображениеИзображение
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение ncp1400 »

по SysTick получается 5 тактов на пересылку - 12MSPS на 60МГц, преимущества над АЦП F303 нет.
переход в SLEEP на время пересылки не влияет.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Reflector »

ncp1400 писал(а):по SysTick получается 5 тактов на пересылку - 12MSPS на 60МГц, преимущества над АЦП F303 нет.
переход в SLEEP на время пересылки не влияет.
Я и говорил, что 5 тактов. Вчера проверил на F407, там 4. Заявленные 2 такта - это если загрузить в регистры константы и по очереди выводить их в порт, что в данном случае бесполезно.
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Fusion »

Я забираю с АЦП за 2 такта ассемблером:
LDRB rez,[#0x50000040] // ADC1
STRB rez,[addressbuffer], #1
LDRB rez,[#0x50000140] // ADC2
STRB rez,[addressbuffer], #1

и так 1024 раза)
Получается 36 МСПС при 72 мГц у F303.
АЦП конечно 18 мГц не тянет, теряет младшие разряды. Но сигнал на мелком экране все равно видно.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Reflector »

Fusion писал(а):Я забираю с АЦП за 2 такта ассемблером:
LDRB rez,[#0x50000040] // ADC1
STRB rez,[addressbuffer], #1
LDRB rez,[#0x50000140] // ADC2
STRB rez,[addressbuffer], #1

и так 1024 раза)
Получается 36 МСПС при 72 мГц у F303.
Пробовал так с порта забирать, правда с ассмом не связывался, но компилятор сделал практически то же самое:

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

ldr r2, [r3, #16]    ;*p++ = GPIOA->IDR;
str r2, [r1, #72]
ldr r2, [r3, #16]    ;*p++ = GPIOA->IDR;
str r2, [r1, #76]
...
На F407 получились 4 такта, как и с DMA. Еще хуже если сохранять в CCM RAM - 5 тактов... Обычно LDR + STR пайплайнятся до 3-х, не уверен, что 2 такта в принципе достижимы... Может если из CCM RAM запускать, ты не так случайно делаешь?
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Fusion »

Про CCM RAM не знаю не изучал еще)
Но в Кейл если поставить оптимизацию на 0, то скорость сразу падает до 5 тактов вместо 2.
Как так может быть пока не понимаю. Он что оптимизирует мой ассемблерный код?
Пробовал на stm32f411 100mHz. Забирает с порта 50 мГц. Но иногда опять пропуски. Редко. Но есть.
Прерывания отключены.
__disable_irq();
__disable_fiq();
Даже не знаю чем там процессор занимается)
Документации мало. На АВР с ассемблером было все четко - как написал так и работает.
Буду разбираться дальше
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение ncp1400 »

замерьте такты Systick. На F030 ldr/str получаются те же 5 тактов, strb допускает смещение максимум 31, пришлось использовать SP
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Fusion »

У меня STRB без смещения.
STRB rez,[addressbuffer], #1 - это автоинкремент addressbuffer на единичку.
Без проверки без цикла 1024 раза - считать/записать.
На вход подаю мегагерц и по клеточкам на дисплее считаю какая скорость.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Reflector »

Fusion писал(а):Про CCM RAM не знаю не изучал еще)
Но в Кейл если поставить оптимизацию на 0, то скорость сразу падает до 5 тактов вместо 2.
Как так может быть пока не понимаю. Он что оптимизирует мой ассемблерный код?
Чего гадать, ставь брейпоинт в релизной сборке и смотри что он там нагенерил... Я первый раз на массив volatile не поставил, так умный компилятор сначала в кучу регистров данные с порта считал, а потом все это сохранил :)
У меня STRB без смещения.
STRB rez,[addressbuffer], #1 - это автоинкремент addressbuffer на единичку.
Без проверки без цикла 1024 раза - считать/записать.
На вход подаю мегагерц и по клеточкам на дисплее считаю какая скорость.
Без разницы есть смещение или нет, все равно команда выполняется одинаковое время. Но я переделал на ассме:

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

asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
4 такта, как не крути :)
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Fusion »

Вроде два такта вижу:

asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");

Но это все справедливо если с порта забирать.
Встроенный АЦП в 303 на 18 мГц непотянет (при 72 тактовой)
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Reflector »

Fusion писал(а):Вроде два такта вижу:

asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
Ладно, проведем очередную проверку, так чтобы без ЛА, частотомеров и подсчета квадратиков :) Выставляем частоту мк 100MHz, создаем цикл на 125000 итераций, внутрь которого помещаем 100 LDR + STR, все это пихаем в бесконечный цикл в начале которого инвертим светодиод. Если каждый LDR + STR выполняется за 4 такта, то на весь вложенный цикл уйдет 4 * 100 * 125000 = 50 млн. тактов или пол секунды, т.е. светодиод должен мигать с частотой 1 Гц, что я и наблюдаю.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Sergi »

Проверяли,интерфейс DCMI может забирать за 2.5 такта, но он не 16 бит и не во всех камнях присутствует
Chettuser

Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр

Сообщение Chettuser »

Извините, что влезаю в процесс, но...
А аналоговую часть уже делали?
Вопрос такой - можно ли так создать искусственную среднюю точку для усилителя. Понимаю, что это в 2 раза заузит входной диапазон (до +-1,6V), но всё же имеет ли такое решение шанс на жизнь?
Жутко не хочется возиться с преобразователем -3,3V, к тому же лишний источник помех.
СпойлерИзображение
Спасибо.
Ответить

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