Народный осциллограф "Мурзик" на базе STM32F303VCT6 - проект
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
у STM32F446RCT6 есть Camera Interface - 8/14bit, 54mbps
в полтора раза дороже 32F303, и корпус паябельный...
в полтора раза дороже 32F303, и корпус паябельный...
- Fusion
- Грызет канифоль
- Сообщения: 272
- Зарегистрирован: Пт ноя 13, 2009 10:39:32
- Откуда: Москва
- Контактная информация:
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
Да, я уже проверил. STM32F3 и F4 могут забирать с портов за 2 такта. 32 MSPS получается гарантированно.
Правда при этом происходят какие то чудеса.
Процессор на что то иногда отвлекается)
Пока не разобрася на что. Прерывания отключены.
А если забирать с внутреннего АЦП то вроде все чисто.
Вот и получается:
1. STM32F3 + AD9280 + ОУ + делитель + генератор минуса = 32мГц (может 40) Входное сопротивление 1 мОм.
2. STm32F303 (и все!) = 16 мГц Входное сопротивление 100 кОм. Правда всего 4 предела по уровню.
Сейчас собран втотой вариант и что характерно работает и пользуюсь.
А первый... ну наверно неспешно доделаю..
Правда при этом происходят какие то чудеса.
Процессор на что то иногда отвлекается)
Пока не разобрася на что. Прерывания отключены.
А если забирать с внутреннего АЦП то вроде все чисто.
Вот и получается:
1. STM32F3 + AD9280 + ОУ + делитель + генератор минуса = 32мГц (может 40) Входное сопротивление 1 мОм.
2. STm32F303 (и все!) = 16 мГц Входное сопротивление 100 кОм. Правда всего 4 предела по уровню.
Сейчас собран втотой вариант и что характерно работает и пользуюсь.
А первый... ну наверно неспешно доделаю..
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
Fusion писал(а):Да, я уже проверил. STM32F3 и F4 могут забирать с портов за 2 такта. 32 MSPS получается гарантированно.
Правда при этом происходят какие то чудеса.
Процессор на что то иногда отвлекается)
Есть такое. Я после запуска DMA делал __WFI(), проц засыпает до прерывания и, во-первых, меньше помехи на ADC, во-вторых, DMA никто не мешает и должно всегда забирать данные за 2 такта.
-
man_200
- Вымогатель припоя
- Сообщения: 507
- Зарегистрирован: Вс янв 20, 2013 12:45:25
- Откуда: Астана, Казахстан
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
fusion, P-CAD пока осваиваю может по-этому второго слоя не вижу. Печатка на Хмегу 32 односторонняя, судя по-всему? Если так, то площадки с отверстиями соединять проводами согласно схемы? Шина АЦП на какие порты МК включена или тупо делать по печатке? Оптрон не указан, через ключ включу реле или можно применить полевик?
- Fusion
- Грызет канифоль
- Сообщения: 272
- Зарегистрирован: Пт ноя 13, 2009 10:39:32
- Откуда: Москва
- Контактная информация:
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
man_200:
Печатка односторонняя, соединять проводами.
Шина АЦП на порту С.
Оптореле 350В, 100мА cpc1035.
Чтобы не засорять форум давайте в личку что ли.....
Печатка односторонняя, соединять проводами.
Шина АЦП на порту С.
Оптореле 350В, 100мА cpc1035.
Чтобы не засорять форум давайте в личку что ли.....
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
на F030 DMA тоже молотит до F_CPU/2.STM32F3 и F4 могут забирать с портов за 2 такта. 32 MSPS получается гарантированно
вот меандр 15МГц, проц на 60МГц, DMA1.1 в режиме MEM2MEM, приоритет максимум, чтение из GPIOA.IDR:


видно что читает по 4 точки на период, без пропусков, т.е. и на F030 получается 30MSPS
программным чтением (типа *buf++ = GPIOA->IDR; ...) длительность одного уровня "пляшет" по 1/2/3 семпла на полупериод...
задайте макс.приоритет DMAПроцессор на что то иногда отвлекается)
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
ncp1400 писал(а):видно что читает по 4 точки на период, без пропусков, т.е. и на F030 получается 30MSPS
Я такое тоже наблюдал
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
по SysTick получается 5 тактов на пересылку - 12MSPS на 60МГц, преимущества над АЦП F303 нет.
переход в SLEEP на время пересылки не влияет.
переход в SLEEP на время пересылки не влияет.
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
ncp1400 писал(а):по SysTick получается 5 тактов на пересылку - 12MSPS на 60МГц, преимущества над АЦП F303 нет.
переход в SLEEP на время пересылки не влияет.
Я и говорил, что 5 тактов. Вчера проверил на F407, там 4. Заявленные 2 такта - это если загрузить в регистры константы и по очереди выводить их в порт, что в данном случае бесполезно.
- Fusion
- Грызет канифоль
- Сообщения: 272
- Зарегистрирован: Пт ноя 13, 2009 10:39:32
- Откуда: Москва
- Контактная информация:
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
Я забираю с АЦП за 2 такта ассемблером:
LDRB rez,[#0x50000040] // ADC1
STRB rez,[addressbuffer], #1
LDRB rez,[#0x50000140] // ADC2
STRB rez,[addressbuffer], #1
и так 1024 раза)
Получается 36 МСПС при 72 мГц у F303.
АЦП конечно 18 мГц не тянет, теряет младшие разряды. Но сигнал на мелком экране все равно видно.
LDRB rez,[#0x50000040] // ADC1
STRB rez,[addressbuffer], #1
LDRB rez,[#0x50000140] // ADC2
STRB rez,[addressbuffer], #1
и так 1024 раза)
Получается 36 МСПС при 72 мГц у F303.
АЦП конечно 18 мГц не тянет, теряет младшие разряды. Но сигнал на мелком экране все равно видно.
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
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 - пр
Про CCM RAM не знаю не изучал еще)
Но в Кейл если поставить оптимизацию на 0, то скорость сразу падает до 5 тактов вместо 2.
Как так может быть пока не понимаю. Он что оптимизирует мой ассемблерный код?
Пробовал на stm32f411 100mHz. Забирает с порта 50 мГц. Но иногда опять пропуски. Редко. Но есть.
Прерывания отключены.
__disable_irq();
__disable_fiq();
Даже не знаю чем там процессор занимается)
Документации мало. На АВР с ассемблером было все четко - как написал так и работает.
Буду разбираться дальше
Но в Кейл если поставить оптимизацию на 0, то скорость сразу падает до 5 тактов вместо 2.
Как так может быть пока не понимаю. Он что оптимизирует мой ассемблерный код?
Пробовал на stm32f411 100mHz. Забирает с порта 50 мГц. Но иногда опять пропуски. Редко. Но есть.
Прерывания отключены.
__disable_irq();
__disable_fiq();
Даже не знаю чем там процессор занимается)
Документации мало. На АВР с ассемблером было все четко - как написал так и работает.
Буду разбираться дальше
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
замерьте такты Systick. На F030 ldr/str получаются те же 5 тактов, strb допускает смещение максимум 31, пришлось использовать SP
- Fusion
- Грызет канифоль
- Сообщения: 272
- Зарегистрирован: Пт ноя 13, 2009 10:39:32
- Откуда: Москва
- Контактная информация:
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
У меня STRB без смещения.
STRB rez,[addressbuffer], #1 - это автоинкремент addressbuffer на единичку.
Без проверки без цикла 1024 раза - считать/записать.
На вход подаю мегагерц и по клеточкам на дисплее считаю какая скорость.
STRB rez,[addressbuffer], #1 - это автоинкремент addressbuffer на единичку.
Без проверки без цикла 1024 раза - считать/записать.
На вход подаю мегагерц и по клеточкам на дисплее считаю какая скорость.
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
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 - пр
Вроде два такта вижу:
asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
Но это все справедливо если с порта забирать.
Встроенный АЦП в 303 на 18 мГц непотянет (при 72 тактовой)
asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
Но это все справедливо если с порта забирать.
Встроенный АЦП в 303 на 18 мГц непотянет (при 72 тактовой)
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
Fusion писал(а):Вроде два такта вижу:
asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
Ладно, проведем очередную проверку, так чтобы без ЛА, частотомеров и подсчета квадратиков
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
Проверяли,интерфейс DCMI может забирать за 2.5 такта, но он не 16 бит и не во всех камнях присутствует
-
Chettuser
Re: Народный осциллограф "Мурзик" на базе STM32F303VCT6 - пр
Извините, что влезаю в процесс, но...
А аналоговую часть уже делали?
Вопрос такой - можно ли так создать искусственную среднюю точку для усилителя. Понимаю, что это в 2 раза заузит входной диапазон (до +-1,6V), но всё же имеет ли такое решение шанс на жизнь?
Жутко не хочется возиться с преобразователем -3,3V, к тому же лишний источник помех.

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

Спасибо.



