![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
Свой-
Постов
3 603 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Весь контент adnega
-
По ссылке http://www.st.com/stonline/products/literature/an/15067.pdf можно найти документ "AN2834 How to get the best ADC accuracy in STM32F10xxx devices". Читать в пунктах 1.2.5 и 1.2.6. про паразитные R и C. Идея вкратце такая: большое значение Cain+Cp (ровно как Radc+Rain) могут ограничивать частоту исходного сигнала - т.к. требуется время для перезаряда конденсатора (что было очевидно изначально).
-
Резистор у меня "рукодельный" (т.е. я его специально ставил, чтоб как-то ток ограничивать). Сопротивление 20+33 ома. Про емкость завтра поищу. Что-то видел в доках. Но заранее хочу предупредить, что для меня это не проблема, т.к. я не использую все отсчеты - получается так, что на каждый "нужный" отчет у меня приходится несколько "фиктивных", а последовательное преобразование в АЦП делаю лишь для соблюдения точных временных параметров и сбора в буфер по ДМА. Сигнал затухающий и "фиктивные" выборки стремятся к константе, т.е. до "нужного" отчета у меня оцифровывается сигнал близкий к этой константе (к половине питания) и влияние всегда одинаково. На ум приходят несколько, пожалуй, не самых удачных идей: 1. Поставить повторитель сигнала перед каждым каналом: взять какой-нить быстродействующий ОУ, соединить выход с отрицательным входом, сигнал подавать на положительный вход, выход ОУ без всяких резисторов на ногу АЦП. 2. Менять тайминги (т.е. 1.5 увеличить) или еще хуже между каждым каналом оцифровывать фиктивный с константой. Но это самых худший вариант по скорости. 3. Перетасовать каналы и последовательность оцифровки так, чтобы предыдущий и последующий каналы не сильно отличались по амплитуде. На практике сложно выполнимо. 4. Прикинуть модель работы входных цепей и делать программную коррекцию полученных данных. Потребует хорошей матобработки данных. Но, по-моему, самый перспективных вариант, если еще и п.1 сделать :) 5. "Сгородить" схему, которая бы делала автоматическую компенсацию "следа", т.е. к сигналу, который нужно измерить добавлять "ошибку", такую, чтобы после работы АЦП получать исходный сигнал. Т.е. матобработку из п. 4 "переложить" но внешнюю аналоговую схему. Попробуйте проследить влияние предыдущей оцифровки на последующую - может не такая уж и сложная зависимость. Что-нить типа "из текущей оцифровки вычитай модуль разности текущей и предыдущей оцифровки деленный на 128"...
-
Использовал в таком варианте: При ADCPRE=3 ("PCLK2/8") на частоте PLL 72МГц получаем 9МГц для тактирования АЦП. Tconv=1.5 + 12.5 = 14 тактов => Частота на канал 0.6МГц. Есть ряд замечаний: - начало преобразования можно очень точно задать (с точностью до такта процессора). Используя этот факт можно оцифровывать сигнал с эквивалентной скоростью 72МГц (если начало периодического сигнала тоже синхронизируется до такта); - после преобразования с 1.5 -тактовым промежутком остается "след" от предыдущего преобразования, но это, по-моему, и есть "not tested in production". В моем случае измеряемый сигнал подается на вход через резистор, на входе АЦП, так или иначе, стоит емкость - а ля, интегратор; - DMA рулит! - три канала одновременно не запомнить; - на входе АЦП половинное напряжение питания, как оно там получается - не разбирался. Кста, и при повышении частоты PLL до 96МГц - работает, но это для справки - можно судить об аналоговой части входа АЦП.
-
Вроде, сектор подготавливать надо...
-
Исходник приложил tn13_adc.rar
-
Сенсор на тини13 довольно хорошо работает. Делал сам. 1. Использовал принцип измерения времени заряда RC-цепочки. R - нужно брать гигантское (100 кОм), а C крошечными (12 пф). При таких номиналах входная помеха (50 Гц) неприлично высока, а время заряда всего несколько тактов ядра. 2. На первом этапе просто измерял время заряда - сплошной шум, при касании немного приподнимается средний уровень. Затем начал делать измерения 50 раз в секунду - лучше, но ложных срабатываний много, скорость распознования низкая. 3. Сейчас не начинаю измерение, пока не дождусь, когда сигнал с АЦП не снизится ниже заданного порога. Считаю, что измерение провожу в окресности нуля синусоиды. Работает стабильно и быстро - работаю над автокалибровкой. Дело в том, что сенсор у меня распределенный (провод полтора метра), а надежного заземления нет (заземление сделал из пластины фольги, служащей одной из обкладок конденсатора).
-
И выводы пошустрее, SPI с делителем на два....
-
Вопрос нуба - реально ли?
adnega ответил Hronop тема в В помощь начинающему
А какой вид имеют входные сигналы? Это монотонные функции? Какое время нахождения выше порога? На STM32F103 можно включить непрерывное преобразование 4 каналов (CH0->CH1->CH2->CH3->CH0-> и т.д.) с автоматическим укладыванием в память посредством DMA. Если настроить DMA для работы в кольцевом режиме с генерацией прерывания при половинном заполнении, то по прерыванию можно анализировать порог программно (при этом DMA и АЦП будут работать и получать новые данные). Если превышение есть, то у Вас в буфере уже есть предыстория сигналов на N отсчетов назад. Затем готовите пакет и отправляете хоть по USB. -
Вопрос нуба - реально ли?
adnega ответил Hronop тема в В помощь начинающему
Может, stm32f103 подойдет? АЦП 12 бит. Есть DMA и USB. У АЦП есть аналоговый вотчдог. Посмотрите, по-моему так самое оно )) Кста, и ценник хороший. -
точное число бит указать невозможно, т.к. это переменная величина, зависящая от данных, ибо в протоколе используется bit stuffing
-
может тут? http://mt-system.ru/index.php?id=50781
-
Я логику какую наблюдаю: для АВР грицо, мол, не пользуйте в промышленном управлении, медицинском оборудовании и в космос не пускайте; а у LPC наооборот - позиционируют все (может, кроме космоса). Вот, и мне с одной стороны нужен проц пошустрее и недорогой, а с другой стороны устойчивый к вредным воздействиям со стороны пользователя. Да, LPC мне шустрость нужную обеспечил... но и тревогу тоже. Ни на одном ките (LPC) не видел защиты выводов (оно и понятно), но больше всего поражает, что вопросы выхода из строя не поднимаются (борьба с отказами, предупреждение отказов). Типа, сгорел - я сам виноват. Субъективно, АВР сложнее убить, чем АРМ (LPC). Что посоветуете, если я хочу делать универсальные процессорные модули в мезонином исполнении и передавать другим лицам? Делать защиту серьезную или просто резисторы ставить? ПС. Надо мануал почитать на выходы LPC - какие там допустимые уровни напряжений и токов!!
-
Вчера преподнял ноги питания проца - КЗ на плате пропало. Часть пар питания в КЗ, а часть как у живого. Запаял те, что "живые" - ни JTAG, ни UART0 не работают, отсутствие реакции полное. Генерацию кварца пока посмотреть не могу. Вывод: "ой-ой-ой"... В целом впечатление от LPC - нежные очень. В одном из образцов LPC2101 - не работает генератор RTC. Причем, от внутреннего генератора работает). По-моему, в схему такие процы надо закладывать выводами через буфера. Или быть предельно аккуратным (попробуй добейся этого от других)?
-
Не сочтите меня криворуким или садистом, просто, приходилось сталкиваться... Выходы LPC2468 поштучно выгорали при попадании на них +12В. Проц при этом до сих пор живой, а у этого - чистое КЗ. У меня подозрения, что проц может и работает, а на плате где-то КЗ. (перепаивать времени нету, а жить с тревогой на душе, что может потом где всплывет... сами понимаете) До этого работал с AVR - весьма не убиваемая по моим понятиям штука ))
-
Короткое замыкание линий питания в LPC2368
adnega опубликовал тема в В помощь начинающему
Добрый день! Развел для себя плату на основе LPC2368. Планирую использовать плату просто как средство удобного подключения к ногам 0.5 мм, посему, на плате минимум - только все самое необходимое (схема питания, батарейка RTC, кварцы, JTAG). Запаял одну плату - все работало. Потом при включенном питании стал переключать питание, батарейку RTC, JTAG, кнопку и светодиод с одной платы на другую... в итоге первая "умерла". Между выводами питания короткое замыкание. Все компоненты от шины питания отпаял (конденсаторы, стабилизатор) - остался один проц. Все равно КЗ, на входе куда подключал кнопку звонится 200 ом на землю. Допускаю, что во время переключения какие-нибудь линии замыкались между собой. Вопрос: чтобы такое не повторялось в будущем достаточно ли подключения делать не под напряжением или нужны дополнительные меры защиты (от статики, ограничители тока, и т.п.) Хотел бы из этого происшествия урок извлечь и процов больше не палить )) (или КЗ на плате искать? ;) ) -
LPC2368 voltage
adnega ответил chmind тема в ARM, 32bit
Настроить GPIO, включить питание/тактирование ADC, инициализировать ADC, считывать нужные данные. 1. К какой ноге подводится напряжение (уровень)? Вся ли внешняя обвязка АЦП подключена? 2. Вам готовый проектик нужен? (могу вечером кинуть) -
Спасибо. Теперь я ЭТО увидел (аж стыдно).
-
Добрый день! В LPC2368 есть 2К памяти питающейся от батарейки. Есть проблема с записью данных. Если пишу 32-битными данными с выравниванием на 4, то все ок. Если пишу 8-битными данными, то все 4 байта, которые относятся к слову заполняются одним и тем же 8-битным кодом. В user_manual про Bat RAM указан только размер и начало области. Пример: до записи 0xE0084000 - 00 00 00 00 - 00 00 00 00 после записи байта 01 по адресу 0xE0084000 0xE0084000 - 01 01 01 01 - 00 00 00 00 после записи байта 02 по адресу 0xE0084001 0xE0084000 - 02 02 02 02 - 00 00 00 00 после записи слова 01234567 по адресу 0xE0084000 0xE0084000 - 67 45 23 01 - 00 00 00 00 В листинге - команды для записи байта (типа STRB R0,[R6]) Почему так?
-
Пока не поставил резисторы на 33 Ома (стояли 1 Ом) - порт толком не заработал. Проц LPC2368. Вот ))
-
1. Настроил в target области IROM, IRAM; 2. В user->program after build указал load.bat load.bat { jlink.exe load.ini } load.ini { halt loadbin file.axf, 0x3FFFFFCC SetPC 0x40000000 g q } 3. Все работает. Только бинарные данные из ELF я, скорее всего, достаю не корректно (выкидываю первые 0x34 байта и гружу как есть). Как достать бинарные данные из ELF без всякого "мусора"?
-
Добрый день! Использую Keil и МК LPC2468, есть J-Link. Как отлаживать программу в SRAM? 1. Как разместить код и данные в ОЗУ, правильно записать *.sct? {Я описал *.sct так: LR_IROM 0x40000000 0x00008000{ RW_IRAM 0x40000000 0x00008000{ *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO +RW +ZI) } } По адресу 0x0 - одни нули. По адресу 0x40000000 - BL __scatterload_rt2 (0x40000008). Где вектора прерываний? *.lst - в листинге мой код размещен с адреса 0x0, код с адреса 0x40000000 остутствует. } 2. Как загрузить код и данные в ОЗУ? {По-моему, это должен сделать J-Link, но как ему об этом сказать?} 3. Как начать выполнение кода с адреса 0x40000000? {По-моему, это должен сделать J-Link, но как ему об этом сказать?} 4. В какой момент выполнять MEMMAP=2? {Перед использованием прерываний?} 5. Нужна ли запись во флеш (например, первые 64 байта) или отладчик делает принудительный переход на начало ОЗУ? {Может, и не нужна?}
-
Пожалуйста, киньте исходники на adnega[все такое]mail[тчк]ru парюсь! PS доступ к ftp перекрыт, скачать у иара не получится
-
Добрый день всем! Подскажите пожалуйста, вот уже который день бьюсь, но не могу понять... Сделал USB-device на LPC2378, при подключении компьютеру представляется как CDC, драйвер usbser.sys. 1. Не знаю как правильно реагировать на класс-специфичные запросы (а ля 0x20..0x23)? 2. Как работать с IN конечной точкой, выделенной для управления каналом? В системе появляется порт, но открыть я его не могу...