Jump to content

    

_dark_

Участник
  • Content Count

    23
  • Joined

  • Last visited

Everything posted by _dark_


  1. Кажется сработал принцип "пока объяснял в чем проблема до самого дошло" )) Пересобрал проект с "чистой" директории, скопировав все исходники, SPL, startup и CMSYS. После добавки всего этого в конфигурацию и минимальных настроек самого проекта, все завелось, после добавления пары инклюдов в свои исходники Вопрос закрыт. зы После пересборки стало выдавать несколько элементарных ошибок, хотя до этого хотя и чистил проект, но сборка была без них (с полной перекомпиляцией).
  2. Столкнулся с такой проблемой на Keil (5.29) Для проекта на STM32F427 не работает SPL,... ну как "не работает"... Например настройка clock и PLL проходит, SystemCoreClock равный 180000000 устанавливается, но стоит вызвать SystemCoreClockUpdate(), как она сбрасывается в 0. "возвращаю" SystemCoreClock = 180000000;, камень запустился; Дебажу SystemCoreClockUpdate(), внутри все временные переменные не отрабатываются, всегда 0. Аналогично при и инициализации UART USART_StructInit(&USART_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART_1RS485, &USART_InitStructure); BRR = 0, т.е. настройки порта не устанавливаются а флаги разрешения прерывания ставятся нормально NVIC_InitStructure.NVIC_IRQChannel = USART_1RS485_IRQn; // UART7_IRQn NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART_1RS485, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ (USART_1RS485_IRQn); USART_ClearITPendingBit(USART_1RS485, USART_IT_RXNE); USART_ClearITPendingBit(USART_1RS485, USART_IT_TXE); USART_ClearITPendingBit(USART_1RS485, USART_IT_TC); USART_ClearITPendingBit(USART_1RS485, USART_IT_ORE_RX); USART_Cmd(USART_1RS485, ENABLE); Но прерывания по приему не возникает ... -------- Прерывание от SysTim работает нормально, при инициализации uint8_t SysTim_Init(uint16_t Tick) { uint8_t result = 0; if ((Tick>4) && (Tick<=1000)){ _iSysTick_Counter = 0; _iSysTick_Step = 1000 / Tick; if (_iSysTick_Step != 0){ if (SysTick_Config(SystemCoreClock / Tick) == 0){ result = 1; } } } return result; } Такой же примерно проект (SysTim, GPIO, прерывания от TIMn, UART, ADC, DMA), но на STM32L151xxx работает и дебажится нормально... Настройки проектов аналогичны, кроме особенностей камня. SPL и CMSYS пробовал разных релизов подключать, сейчас стоят последние скачанные с ST и Keil... Если кто сталкивался с таким или есть мысли куда рыть, буду благодарен за пинок в нужном направлении... Впечатление, такое, что что-то "не включил" в настройках, но чего не хватает не пойму ...
  3. Столкнулся с граблями переноса проекта Keil с одного камня (stm32l151xxx) на другой (stm32f427xxx). После замены всех хидеров SMSIS с L151 на аналогичные F427 выдается ошибки типа: C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\cmsis_armcc.h(57): error: #247: function "__get_CONTROL" has already been defined общее их количество за 500 шт... Это как-то связано еще с версией библиотек CMSIS, во всяком случае для L151 используется core_cm3.h V3.01, а для F427 core_m4.h V4.01... В core_cm3.h V3.01 ссылок на cmsis_armcc.h просто нет... Вот тут похожая ситуация, описывается переход с 4.3.0 на 4.5.0 библиотеку, но не понятно как он ее решил... Никак не могу понять как нужно модифицировать проект, чтобы убрать дублирование объявлений. Прошу пнуть в нужном направлении. (поиском ничего похожего нигде не нашел)
  4. Починил ... Есть две библиотеки STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 и STM32L1xx_StdPeriph_Lib_V1.3.1 (качались с сайта STM, но в разное время) Естественно не вдаваясь в подробности меняя в проекте камень меняю, кроме хидеров перефирии и core_m3.h (V1.3.1) на core_m4.h (V1.8.0), логично? Так вот этого делать не нужно, необходимо было оставить V1.3.1 (т.е. из библиотеки STM32L1xx_StdPeriph_Lib_V1.3.1) ! Это как-то связано с организацией проектов, когда все хидеры библиотек копируются в локальные директории конкретного проекта. В более новых файлах (от 2015-16г) CMSIS есть ссылки на cmsis_armcc.h, который существует в библиотеках самого Keil. ----------- Тогда возникает законный вопрос, тянущий на целую тему: Как правильно обновлять библиотеки в Keil (использовать их новые версии), чтобы подобные конфликты не возникали?
  5. SIM800C

    Такие модули жалом с микроволной отлично паяются. Лучше, конечно если станция "приличная" - легче паять, т.к. поддерживается темп. режим на самом жале. ps "по бедности" даже qfn минимальным размером микроволны вполне надежно паяется.
  6. Цитата(Herz @ Aug 7 2012, 16:05) Пришлось вернуться к этой теме. Уровнемер более полугода функционирует, но за это время приходится менять уже второй геркон. Просто перестаёт реагировать на магнит. Залипание герконов - это основная проблема датчиков уровня такого типа. С ней сталкиваются все производители подобного оборудования. Насколько я знаю решения этой проблемы еще никем не найдено, т.е. это ничем не лечится!. Именно поэтому в промышленности обычно выбирают магнитострикционные или емкостные (и не только) уровнемеры хоть и они дороже. Если этот вопрос не тема диссертации или интерес "прикладника" коммерческой фирмы, то можно о нем забыть, иначе как говорится удачи в нашем нелегком!
  7. WinAVR & External memory

    В общем проблемма решена. Для тех кто наступит на те же грабли: наплюйте на настройки WinAVR через оболочку (Project/Configeration Options) просто пользуйтесь внешним Makefile с правками по рекомендации: http://www.avrfreaks.net/index.php?name=PN...ght=winavr+xram
  8. Кто нибудь знает как лечится ошибка? No such file: Invalid argument collect2: ld returned 1 exit status make: *** [*.elf] Error 1 т.е. AS6 не находит *.elf файла? (его и правда нет, хотя в опциях Build проекта имя файла *.elf введено) Как сделать чтобы создавался *.elf файл? Компиляция проходит без ошибок. Проект конвертнут из WinAVR + AVRStudio 4.18
  9. WinAVR & External memory

    Странно, портится глобальный флаг готовности буфера приема объявленный как volatile uint8_t fCmdComplite = 0; прерывание его выставляет = "1", но где то он портится в "0" и в main() он уже "0"... - свои "сбросы" этого флага убрал... - его положение сместил в .bss 0x00800248 fCmdComplite ... один ---, т.е. не помогает.. (оптимизация Os) .... (в 12:15) Похоже это косяки WinAVR: при оптимизации -О2 удалось "довести" массивы до 768 единиц! Шаманство какое-то!!! Кто нибудь знает как с ним бороться? ..... (18:06) нет все таки, ряд глюков остался... наверняка у меня где-то косяк в коде... кто нибудь знает: WinAVR при различной оптимизации может валидный код "убивать"? для IAR, Keil и ICC, что то я таких проблем не припомню...
  10. WinAVR & External memory

    Поднимаю тему, чтобы не плодить новых. Задача: - разместить в XRAM несколько длинных массивы, оставив все остальное во внутренней RAM Во внутренней памяти все работает. Что делаю: 1) - в оболочке WinAVR указываю доп. сегмент .xdata 0x802000 - переопределяю размещение массивов (размерность сокращена) volatile UCHAR BufAdc[281] __attribute__ ((section (".xdata"))); volatile UINT BufAdc1[281] __attribute__ ((section (".xdata"))); volatile UINT BufAdc2[281] __attribute__ ((section (".xdata"))); - разрешаю работу XRAM (тайменги и конфиг. XRAM сути не меняют, но привожу) MCUCR = (1<<SRE) | (0<<SRW10); XMCRA = (0<<SRL2) | (0<<SRL1) | (0<<SRL0) | (0<<SRW01) | (0<<SRW00) | (0<<SRW11); XMCRB = (0<<XMBK) | (0<<XMM2) | (0<<XMM1) | (0<<XMM0); Размещение: .xdata 0x00802000 0x57d Variables.o 0x00802000 BufAdc 0x00802119 BufAdc1 0x0080234b BufAdc2 Это работает! 2) Увеличиваю размерность одного массива до нужного (в *.h как extern естественно тоже), остальное без изменений. volatile UCHAR BufAdc[1281] __attribute__ ((section (".xdata"))); Размещение: .xdata 0x00802000 0x965 variables.o 0x00802000 BufAdc 0x00802501 BufAdc1 0x00802733 BufAdc2 Не работает, точнее слетает связь по UART! Смотрю по map - все остальные переменные находятся на своих местах, т.е. не менялись... Эти массивы в работе UART при ответах естественно не участвуют. Возвращаю размер на обратно - работает! В чем мой косяк? Прошу пнуть в нужном направлении. (Mega128A + SRAM, WinAVR + AVR Studio 4.18)
  11. ЦитатаВ данном случае Вам просто не стоит вообще писать. Особенно в разделе для новичков. Этим Вы сбиваете людей с толку. В данном случае уважаемый сбиваете с толку новичков именно Вы. Номинальная точность резисторов это технологический разброс и он в общем случае никак не связан с температурной стабильностью (ТКС). См. внимательно даташиты (даю подсказку эти параметры даются в разных графах). Использование резисторов в 0.1% может не дать температурной стабильности, если выбраны R с высоким ТКС. Для лучшей термостабильности требуется выбор с малыми ТКС (допуск по номиналам ряда E с ним не связан). ЦитатаЯ не пойму, что Вы тут нам втолковать пытаетесь? Сначала рассказывали, как круто из 1% резисторов получаются ноль_целых_буй_десятых_процентные резисторы, а потом резко переехали на "плывет внутренний ИОН". И что здесь не понятного?! объясняю на пальцах (пример для студентов) Нужен 10к 0.1% (100ppm) Берем 10к 1% замеряем, к примеру получили R1=10.05к считаем R2=10*10.05/(10.05-10)= 2010к берем ближайший по E96 2М 1% Проверяем с учетом разброса: макс. R=10.05*2010/2020.05=10.000к мин. R=10.05*1990/2000.05=9.9995к получили суммарный R=10к 0.1% (100ррm) и температурная стабильность здесь ни причем. Способ не мой подсмотрел в "Радио" за бородатый год, пользую когда нужно и рад этому. З.Ы. Дискусию по данному вопросу больше вести не буду, всем спасибо.
  12. Цитата(Rst7 @ May 18 2009, 12:44) Кстати, Dimy, огласите СКО. Измерений-то больше 2х было. Специально не считал. На предельных температурах девайс был по 30мин, отсчеты брались раз по 10. Выше указаны пределы шума (трубка), т.е. отсчетов за границами не было. Если брать по 0.95 (худший вариант) задним числом грубо можно считать, что диапазоны соответствуют +/-2СКО. З.Ы. Надеюсь, что просить проверять соответствие шума нормальному распределению никто не будет, и спектральные характеристики считать не заставят
  13. В данном случае плывет внутренний ИОН, лечится это - установкой внешнего опорника (желательно). - наложением линейной поправки (дрейф практически линейный) В данном случае овчинка не стоит выделки, т.к. данный сервис используется только - как информационный (это же не лабораторный вольтметр) - для вывода на 10 пороговый индикатор - предупреждение низком заряде аккумулятора В последнем случае порог предупреждения сработает на ~50мВ раньше что даже хорошо. З.Ы. Слабо представляю себе как кому-то при -40 понадобится знать напряжение аккумулятора с точностью до 5мВ Да там оператору быстрей бы замер сделать на резервуаре и бежать в тепло. На такой температуре и аккумулятору то не сладко...
  14. Не далее как неделю назад была похожая задачка: (прошу в пианиста не стрелять пока он играет на баяне) ) Требуется для переносноого прибора с Li-Ion аккумулятором ввести в меню тест аккумулятора, где вывести - текущее напряжение - остаточную емкость - % зарядки - прогноз в часах времени работы устройства - результат дополнительного теста под нагрузкой (пока в резерве) Аппаратная реализация: - делитель (параллельно нижнему плечу фильтр С 0.1) - питание схемы 3.3V импульсник 1.3МГц - в цепи питания аналоговой части МК LC фильтр (100мкГн, 0.1), маловат пожалуй? - АЦП штатный на борту МК 10 разрядов. Пилот был собран месяц назад. Теперь собираем тест-партию. Собираем первый экземпляр... в одном плече нужен 68к - в кассах нет, ну так нам не впервой. Беру 75к 1% и 1М 1% ставлю параллельно - (ну мастер что тут скажешь) на границах разброса получаем от 69.07к до 70.46к Точность тут практически не изменилась так как подбора не было! (от 0.7% до 1%, в зависимости от того как попадутся разбросы резисторов с + или -) Да не номинал... но пока годится. В подробности не вдаюсь - принимаем решение: требуется режим калибровки через сервис меню. 1. Заводим два параметра (int) Nmin, Nmax - отсчеты АЦП при Umax и Uмin - граничных значений напряжения 2. Их тоже вводим как еще два настроечных параметра (float) 3. До кучи добавляем ввод номинальной емкости аккумулятора (на случай, когда они разные) - итого 5 параметров 4. Реализуем три варианта калибровки: 1) Для стенда: ввод непосредственно значений Nmin, Nmax в EEPROM при подаче граничных значений питания (на стенде) 4.0В и 2.9В - ввод по нажатию Enter на соответствующем параметре - значения Umax и Uмin не меняются и уже введены 2) Калибровка по Umax ввод непосредственно значения Nmax, и ручной ввод Umax при этом выполняем расчет Nmin - ввод Nmax по нажатию Enter на соответствующем параметре - ввод Umax с клавиатуры после внешнего замера на клеммах блока аккумулятора - получив Nmax и Umax при полностью зараяженном аккумуляторе считаем gK_div = u_max/adc_max*0.4; - расчитываем коэффициент деления gADCminBat = u_min/gK_div*0.4 - Nmax 3) Калибровка по Umin (пока не понятно кому понадобится, но пусть будет) ввод непосредственно значения Nmin, и ручной ввод Umin с клавиатуры при этом расчет Umax и Nmax - аналогично п.2) Калибруем по варианту 2). Проверяем: Входим в меню теста аккумулятора - на аккумуляторе 4005мВ - на ЖКИ показывает от 3994мВ до 4047мВ - шум почти 50мВ! Смотрю внимательно (главное знать куда ) ) так и есть - монтажник забыл фильтр С на делителе впаять, а я проверить, мой косяк! Впаиваю. - на аккумуляторе 3960мВ - на ЖКИ показывает от 3958мВ до 3964мВ - 6мВ (0.15%) при разрешении 3.9мВ можно считать что норма для нашей задачи. В прошлую пятницу (15.05) прогнали девайс в климкамере от -40 до +50. Испытания по другому поводу, но посмотрел и этот вопрос (благо все параметры сразу выводил в интерфейс - USB с протоколом ModBus). - напряжение питания от внешнего ИП 4000мВ -40грС от 3938мВ до 3943мВ +50грС от 3997мВ до 4015мВ З.Ы. Вот теперь желающие могут стрелять...
  15. Цитата(Rst7 @ May 16 2009, 22:58) Вы мне будете рассказывать как и что там сделано? Еще господину Herz'у можете рассказать. Его тоже повеселит ... Короче, молодой человек, не учите нас жить. Технологию эту НПО "Меридиан" (тогда еще НПО, сейчас уже нет) уже 40 лет пользует. Может и повеселит - вместе посмеемся. ) ЦитатаКороче, молодой человек, не учите нас жить. Технологию эту НПО "Меридиан" (тогда еще НПО, сейчас уже нет) уже 40 лет пользует. Знакомая фраза где-то я ее уже слышал. Мои посты адресованы не вам лично, а уважаемым форумчанам, которых эти вопросы могут интересовать. Похоже о возрасте вы судите исключительно по количеству постов... без обид )) Немного меньше - данная технология в конце 80-х передавалась из НПО ИТ (НИИ ИИТ)г.Королев в Харькiв (Харьков) как на производственную базу. ЦитатаДля топлива делать такого размера участки смысла нет. "Нет смысла" это как раз для мономолекулярных жидкостей (типа спирта или воды) они не расслаиваются, а НП из-за фракционного состава расслаивается и два соседних сегмента имеют разные коды топлива. Зз-за этого переданная в Харьков конструкция датчиков не работала стабильно (секции по 250 мм и обеспечить точность 1/250 на нефтепродукте в условиях НБ не реально - это вам не топливный бак изделия с чистым продуктом (вот откуда ноги растут! ))), затем сами разработчики в НИИ ИИТ стали уменьшать сегменты в 1996-98г (для УИП-9602) - 125 мм, позже до 64мм, но и этого ИМХО не достаточно. К томуже при 32-8 мм электроника упрощается т.к. требования к относительной точности снижаются. ЦитатаСлишком много коммутации и лишней электроники. Не ужто до сих пор используется матричная коммутация? Не верю, ведь это точно прошлый век (в прямом смысле)! Для коммутации достаточно 2-х проводов (не считая питания и общего электрода). Что значит лишняя электроника? В новых изделиях все больше и больше электроники - она что вся лишняя? ЦитатаДля воды их действительно уменьшают, чтобы использовать тот же зарядовый усилитель, с теми же номиналами в обратных связях. Потому что в воде эквивалентная емкость больше в 20-40 раз. Но с другой стороны, диапазон датчика ПТВ всего миллиметров 300 максимум. Не обязательно, структура датчика может быть регулярной и менять ни размеры сегментов, ни расстояние измерительного зазора нет необходимости, то же касается каскадов электроники, т.е. структура датчика может быть регулярной. Эквивалентная емкость тут не помеха. (...мдя тут аргументация слабовата... ладно добавим диаграммку для наглядности) )) Ну а 300мм это для подтоварки на бензине и ДТ, а на подготовленной нефти требуется до 3000мм, там же требуется измерять и уровень самой нефти, так что датчик лучше иметь совмещенный, а не выделенный подтоварник. ЦитатаЕсли точить уровнемер только под воду, то нужно уменьшить усиление и пользовать полновесные участки миллиметров по сто. ...вариантов много. Но основная проблема заключается не в усилении, - при уменьшении уровня отсчеты сегментов не будут иметь сухих кодов т.к. сегменты не будут сухими (они будут "не высохшими"), и это было бы полбеды, но сенсор в таком состоянии банально начинает "шуметь" и пока сегменты не высохли об уровне вообще речи не идет. Вполне возможно что данная проблема лечится схемотехникой, но тривильный усилитель заряда здесь не годится ИМХО. С подтоварной (под нефтепродуктом) водой проблем нет, т.к. эффект "демпфируется" находящимся сверху топливом. ЦитатаЗнаем мы и "нехранителей" коэффициентов некоторых. Ну так они и точности заявленной не обеспечивают. Речь не о "не хранениии". Воспользуюсь выше приведенным выражением: h=l*(U(n)-K0[n]*U(n-1))/(K1[n]*U(n+1)-K0[n]*U(n-1)), подставляя в него значения K1[k]=Uf(k)/Uf(k+1) и К0[k]=Ua(k)/Ua(k-1) при k=n получаем h=l*U(n)-Ua(n)/Uf(n)-Ua(n), где Ua - "сухой", Uf - "мокрый" код рабочего сегмента, т.е. получаем тривиальное линейное соотношение. Отсюда вывод хранить имеет смысл именно сухие и мокрые коды - разрядность 8 (char) или 16 (int) бит, вместо соотношения (float). Остальное по букварю... ЦитатаПро краевые эффекты - отдельный разговор. Да, пожалуй не здесь, надо же что то и на ноу-хау оставить )) и так уж весь датчик почти расжевали. ЦитатаИ поверьте, подводных камней там куда больше, чем Вам кажется, и чем я тут описал/опишу. Не сомневаюсь и с удовольствием послушаю о них. Люблю когда учат жить!:)) Вот будете у нас в г.Королеве милости просим, тут и погутарим. ЦитатаСпособ заключается в измерении веса трубы, заглушенной с двух концов и висящей в резервуаре. Для простоты конструкции труба подвешивается на балку весов сверху. Как господам инженерам такой вариант? Зачетный вариант - называется сей тип - буйковый уровнемер. Но некоторые сомнения в легкости реализации попробую озвучить (может кому нибудь это сэкономит несколько месяцев). В нем требуется использовать датчик силы , т.е. сделать "практически" весы. Реализация самих весов в 1000-5000 отсчетов не вопрос. Лучшие экземпляры доводят эту величину до 10000-20000 (метрологических!). Вот только у них есть пренеприятнейшее свойство: Долговременная стабильность "0" никакая. Боюсь ошибиться но нормируется дрейф в первые 20мин, а дальше... Попробуйте сами поставить на электронные весы (пусть даже самые крутые лабораторные) гирю в 1кг и подождать 1час и снять ее. Что вы увидите на дисплее весов? Правильно все что угодно только не ноль! Для того чтобы "0" воостановить нужно нажать на пустых весах кнопку >0<. Все проблемма в датчике силы, покупка датчика с малым дрейфом будет разорительно для дачи, а все что меньше 200$... в этом плане мягко говоря не очень. В весах как уже сказано это решается ОСНОВНЫМ ПРИНЦИПОМ ВЕСОВ - периодичностью взвешивания (и нажатием кнопки >0< ))) ). Вот если разгружать периодически тензодатчик (приподнимать буй) то можно реализовать на стоковых датчиках ~200-500р Насколько мне извесно на дешевых датчиках решить проблему не удалось даже солидным весовым фирмам (Тензо-М, МИЭТ - работали как то по этому вопросу с ними года 3 подряд задачка была получить хотябы 2-х месячную стабильность) производящих эти самые датчики. Хорошие новости: датчики такого типа выпускаются, например Сапфир-22ДУ цена около 17000р.
  16. Цитата(Rst7 @ Feb 1 2009, 00:38) Ладно. Рассказываю, как профессионалы делают емкостные датчики и в чем есть проблемы. ... Весь пост не цитирую. Вот только измерение уровня воды не тоже самое что измерение подтоварной воды! ))) Ни один емкостной датчик (сегментируемый) серийно выпукаемый для нефтепродуктов не будет нормально измерять голую воду (правда и его задачи другие). Технология описываемая автором поста не нова - не менее 20 лет.))) Реально работающие датчики на этой технологии STICK (Enraf), ULTRA, СИ ИГЛА работают по схожему принципу, но вот реализованны немного по другому: - измерительные сегменты значительно меньше 8-15 мм (и это не бзик конструкторов а требования условий измеряемой среды) - никто уже давно не хранит абстрактные коэффициенты - это не оптимально, - краевые эффекты устраняются групповой обработкой всех (или скользящего окна отсчетов) сегментов датчиков - собственно в формулах расчета не участвует напряжение, точнее нет смысла его вычислять (ну это уже мелочи) Ну и конечно надеюсь никому не придет в голову использовать такую технологию для измерения уровня воды в бочке на даче, и дело даже не в дороговизне, а в том что такие датчики разрабатывались целыми отделами институтов, а потом технология и конструкция доводились годами.))) З.Ы. Правда в жизни всегда есть исключения, и кто нибудь делает это впервые))).
  17. Цитата(Rst7 @ May 16 2009, 16:20) Запомните - никогда нельзя подбирать резисторы. Ой ли? Речь не идет о подборе резисторов, а о масштабировании делителя напряжения номиналами из стандартных рядов согласно R=R1*R2/(R1+R2). Ествественно это не совсем эквивалентно установки высокоточных и стабильных с малым ТКС и низким шумом, но это работает. Все на что ссылаетесь дальше - букварь - но все зависит от задачи и очень часто (в 99% из 100) не нужно стрелять из пушки по воробьям. Цитата(wim @ May 16 2009, 17:28) Это как? Вы хотите сказать, что можете измерить некую величину с точностью 0,1% прибором с погрешностью 1%? Я этого не утвержал. )) Если посморите даташит на любой АЦП то найдете несколько гисторам распределений шума младшего разряда (от разных факторов). Обычно (но не всегда) можно считать, что эффективное разрешение меньше физического на 1-2 разряда, т.е. 2 последние шумят и шум распределен по определенному закону. (более подробно посмотрите на сайте AD) Конечно на это все наложатся еще шумы сигнала входных цепей и т.п. Так вот точность можно улучшить применив статистическую обработку - расплата скорость реакции прибора, т.к. измеряемый сигнал приходится наблюдать достаточное время для того чтобы накопить статистику. Но здесь все "законно", в принципе ни один серьезный измерительный прибор не работает без подобной обработки. По поводу младших разрядов просто где то был пост, вот и пришлось к слову...
  18. - Решения должны быть простыми, и здесь делитель вне конкуренции. - Хорошей точности делителя можно добиться включив в каждое (или хотя бы в одно) плечо делителя два параллельных резистора, основной и корректирующий. Последний подбирается индивидуально в зависимости от разброса основного. Тем самым можно добиться точности в 5-10 раз выше чем точность резисторов (при 1%-х резисторах до 0.1% в схеме). Немного трудоемко но на небольшой партии допустимо. - Для массового изделия (но экономии "на спичках" то бишь высокоточных резисторах) можно ввести поправочный коэффициент как настроечный параметр в софт контроллера для компенсации индивидуальной погрешности делителя. В этом случае потребуется предварительная калибровка устройства. - Добиться полной разрядности АЦП ("восстановить" значность младших разрядов АЦП) легко введя осреднение по представительной выборке (т.к. процесс практически статический, а шум распределен по Гауссу). З.Ы. городить огород с "ножницами" практически всегда не выгодно (для типовых задач), т.к. точность их должна быть соизмерима с разрешением АЦП, и цена такого решения может превысить разумный предел. ИМХО: если задача усложняется всякими хотелками, то всегда проще (и дешевле в конечном итоге) выбрать соответствующий инструмент, а не пытаться топором прооперировать пациента.
  19. Уже не первая тема заканчивается с результатом - хр..й инструмент Вот пользуемся AS2(М, 3) - без вопросов, цена смешная - около 1000р. Лепить самопал смысла нет когда надо работать! а если учесть что рано или поздно потребуется переход на новые кристалы, которые просто не шьются черте чем... ИМХО: просто инструмент должен быть адекватен задачам.
  20. Мдя... студентам уже лень по тырнету полазить... [attachment=32691:HEF4585B_CNV_3.pdf]
  21. Цитата(evgeny_ch @ May 13 2009, 03:12) ... Опускаем грузило (рывками), до появления звуков шлёпанья о воду, либо изменения натяжения троса, вследствие явления впёрнустости вводу им. Архимеда. Затем измеряем глубину днодоставания посредством измерения длины опущения грузила до дна, т. е. момента, когда натяжение троса станет нулевым. Всё просто, аки грабли. Предлагаю усовершенствовать способ: в качестве груза - ведро на цепи - как раз и побултыхать можно вдоволь - а кольца на цепи можно считать!
  22. Цитата(XVR @ May 14 2009, 11:26) Классическое решение - сортируем массив и берем 5 последних элементов (для Verilog'а не подойдет) Это не будет работать - с большой вероятностью получите пять отсчетов "самого большого" максимума. Для контроля: между любыми двумя найдеными максимумами нужно проверить есть ли хотя бы один минимум...
  23. Цитата(777777 @ Jan 21 2009, 15:31) Это еще зачем? Нужно измерить уровень, давление от него завист строго линейно, значит надо мерять давление на уровне дна резервуара. Да работатать будет... но с рядом ограничений. 1. точность/цена - дешевые датчики типа MPX не дадут высокой точности, но 0.5% выжать из них можно (по крайней мере для НУ) 2. при небольшом высоте столба воды погрешность возрастет очень прилично (зависит от датчика, но это добавка от 50 до N00% от основной погрешности) к примеру, получить точность 1-2мм на высоте столба ниже 1-1.5м серьезная проблема, для широкого диапазона температур (к воде это не относится) нижня граница дополнительных погрешностей будет еще выше (от 3-х м). 3. датчики давления имеют смещение (погрешность) нуля, которая дрейфует со временем и от температуры, ее компенсация отдельная задача Для датчиков у которых эта погрешность незначительна (менее 0.01%) цена улетает за N00$. 4. для дешевых датчиков типа MPX встанет вопрос защиты п/п мембраны и рабочего порта (можно применить заполнение маслом). Т.е. остается взять и зделать, если речь идет о цене в ~1000-2000р (учитавая нижнюю границу на сам датчик в районе 500р), или купить готовое решение, но эт будетет гораздо дороже. Цитата(Who_is_you? @ Jan 22 2009, 10:50) И из всего выше сказанного получается нужно или придумывать самому или искать практическую реализацию датчиков: - сопротивления; - емкостных датчиков. методы могут быть и другими, но то что или самому или ... это одназначно, других методов медицина... Цитата... то скорее всего насос я буду отключать датчиком сопротивления: сопротивление между тросом насоса и пластиной (медь, латунь, нержавейка) прикрепленной чуть выше насоса. А чтобы не было электролиза - полярность после каждого измерения будет менятся. Про медь, латунь и т.п. сплавы забудьте - пленка коррозии убъет датчик очень быстро. - как вариант емкостной сигнализатор с компенсацией влажности, температуры и т.п., аналогично таким, которые делает Turck, т.е. брать принцип, но делать самому (готовые мне не известны). Цитата(Harbinger @ Jan 31 2009, 09:55) Посмотрите на analog.com, там много чего есть, умеющего ёмкость мерять и в цифре результат отдавать. Да там есть занятные игрушки типа AD7746(7), но применять их в быту, а уж тем более в промрешении я б не рискнул. - слишком малый дипазон изменения рабочих емкостей, большой сенсор будет из него постаянно вываливаться из-за всяких примесей и грязи. - конструкция стабильного сенсора не может быть очень простой (и дешевой) при таком решении - слишком большая чувствительность. впрочем мог кто занает как с этими бедами бороться, мне самому лень было городить огород вокруг подобного девайса, а в лоб это скорее средство для общепрома (в станках и т.п. для энкодеров, например).