Jump to content

    

Dimy

Участник
  • Content Count

    21
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Dimy

  • Rank
    Участник

Контакты

  • Сайт
    http://www.igla.info

Информация

  • Город
    Москва
  1. Починил ... Есть две библиотеки 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 (использовать их новые версии), чтобы подобные конфликты не возникали?
  2. Столкнулся с граблями переноса проекта 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 библиотеку, но не понятно как он ее решил... Никак не могу понять как нужно модифицировать проект, чтобы убрать дублирование объявлений. Прошу пнуть в нужном направлении. (поиском ничего похожего нигде не нашел)
  3. SIM800C

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

    В общем проблемма решена. Для тех кто наступит на те же грабли: наплюйте на настройки WinAVR через оболочку (Project/Configeration Options) просто пользуйтесь внешним Makefile с правками по рекомендации: http://www.avrfreaks.net/index.php?name=PN...ght=winavr+xram
  6. Кто нибудь знает как лечится ошибка? No such file: Invalid argument collect2: ld returned 1 exit status make: *** [*.elf] Error 1 т.е. AS6 не находит *.elf файла? (его и правда нет, хотя в опциях Build проекта имя файла *.elf введено) Как сделать чтобы создавался *.elf файл? Компиляция проходит без ошибок. Проект конвертнут из WinAVR + AVRStudio 4.18
  7. 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, что то я таких проблем не припомню...
  8. 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)
  9. ЦитатаВ данном случае Вам просто не стоит вообще писать. Особенно в разделе для новичков. Этим Вы сбиваете людей с толку. В данном случае уважаемый сбиваете с толку новичков именно Вы. Номинальная точность резисторов это технологический разброс и он в общем случае никак не связан с температурной стабильностью (ТКС). См. внимательно даташиты (даю подсказку эти параметры даются в разных графах). Использование резисторов в 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) и температурная стабильность здесь ни причем. Способ не мой подсмотрел в "Радио" за бородатый год, пользую когда нужно и рад этому. З.Ы. Дискусию по данному вопросу больше вести не буду, всем спасибо.
  10. Цитата(Rst7 @ May 18 2009, 12:44) Кстати, Dimy, огласите СКО. Измерений-то больше 2х было. Специально не считал. На предельных температурах девайс был по 30мин, отсчеты брались раз по 10. Выше указаны пределы шума (трубка), т.е. отсчетов за границами не было. Если брать по 0.95 (худший вариант) задним числом грубо можно считать, что диапазоны соответствуют +/-2СКО. З.Ы. Надеюсь, что просить проверять соответствие шума нормальному распределению никто не будет, и спектральные характеристики считать не заставят
  11. В данном случае плывет внутренний ИОН, лечится это - установкой внешнего опорника (желательно). - наложением линейной поправки (дрейф практически линейный) В данном случае овчинка не стоит выделки, т.к. данный сервис используется только - как информационный (это же не лабораторный вольтметр) - для вывода на 10 пороговый индикатор - предупреждение низком заряде аккумулятора В последнем случае порог предупреждения сработает на ~50мВ раньше что даже хорошо. З.Ы. Слабо представляю себе как кому-то при -40 понадобится знать напряжение аккумулятора с точностью до 5мВ Да там оператору быстрей бы замер сделать на резервуаре и бежать в тепло. На такой температуре и аккумулятору то не сладко...
  12. Не далее как неделю назад была похожая задачка: (прошу в пианиста не стрелять пока он играет на баяне) ) Требуется для переносноого прибора с 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мВ З.Ы. Вот теперь желающие могут стрелять...
  13. Цитата(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р.
  14. Цитата(Rst7 @ Feb 1 2009, 00:38) Ладно. Рассказываю, как профессионалы делают емкостные датчики и в чем есть проблемы. ... Весь пост не цитирую. Вот только измерение уровня воды не тоже самое что измерение подтоварной воды! ))) Ни один емкостной датчик (сегментируемый) серийно выпукаемый для нефтепродуктов не будет нормально измерять голую воду (правда и его задачи другие). Технология описываемая автором поста не нова - не менее 20 лет.))) Реально работающие датчики на этой технологии STICK (Enraf), ULTRA, СИ ИГЛА работают по схожему принципу, но вот реализованны немного по другому: - измерительные сегменты значительно меньше 8-15 мм (и это не бзик конструкторов а требования условий измеряемой среды) - никто уже давно не хранит абстрактные коэффициенты - это не оптимально, - краевые эффекты устраняются групповой обработкой всех (или скользящего окна отсчетов) сегментов датчиков - собственно в формулах расчета не участвует напряжение, точнее нет смысла его вычислять (ну это уже мелочи) Ну и конечно надеюсь никому не придет в голову использовать такую технологию для измерения уровня воды в бочке на даче, и дело даже не в дороговизне, а в том что такие датчики разрабатывались целыми отделами институтов, а потом технология и конструкция доводились годами.))) З.Ы. Правда в жизни всегда есть исключения, и кто нибудь делает это впервые))).
  15. Цитата(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) Конечно на это все наложатся еще шумы сигнала входных цепей и т.п. Так вот точность можно улучшить применив статистическую обработку - расплата скорость реакции прибора, т.к. измеряемый сигнал приходится наблюдать достаточное время для того чтобы накопить статистику. Но здесь все "законно", в принципе ни один серьезный измерительный прибор не работает без подобной обработки. По поводу младших разрядов просто где то был пост, вот и пришлось к слову...