Перейти к содержанию
    

yanvasilij

Свой
  • Постов

    321
  • Зарегистрирован

  • Посещение

Весь контент yanvasilij


  1. Я имел ввиду, если считать референтный резистор абсолютно точным, насколько значительна погрешность АЦП и вообще всей схемы?
  2. Еще раз по алгоритму: 1) Измеряю температуру холодного спая 2) По характеристике из ГОСТа вычисляю ЭДС, которая соответствует этой температуре 3) Измеряю ЭДС на термопаре 4) Прибавляю к ЭДС термопары ЭДС вычисленной в пункте 2 <<<<<<<<<<<<<< Вот тут была ошибка 5) Вычисляю из полученной разницы температуру термопары. И как следствие в рассужедениях: Была так: А верно: Если погрешность датчика температуры холодного спая плюс минус 2 градуса, то обнаруживается занятная ситуация: - Пусть, например, температура на термопаре 100 градусов цельсия, термоэдс по градуировочной таблице для этой температуре 0,647 мВ; - Температура ХС 10 градусов, что по градуировочной таблице соотвествует 0,054 мB, а значит суммарное ЭДС будет равно 0,593 мВ; <<<<<<< Ошибка была тут, я прибавил, а нужно было вычесть - Если у датчика ХС погрешность 2 градуса, то он может показать температуру, например, 12 градусов, что соотвествует 0,065 мВ; - Если я буду производить вычисления опираясь на показания 12 градусов ХС, то ЭДС термопары у меня получится 0,593 мВ + 0,065 мВ = 0,658 мВ, что соответствует температуре 111,8 градуса вместо реальных 100 градусов. <<<<< Ошибка была здесь нужно было прибавить а вычел
  3. Да, виноват, нужно вычитать. Проблема в том, что получается мне нужно подключать эталон при разных температурах холодного спая, так что ли?
  4. Я вот чего никак понять не могу: как калибровать схему с датчиком холодного спая такой точности? Вот у меня прибор, наружу которого выходят только две клеммы для подключения термопары и один последовательный интерфейс для связи. Где то внутри прибора, рядом к клеммой расположен датчик холодного спая. Если делать, как говорит Tanya, то последовательность действий при измерении следующая: 1) Измеряю температуру холодного спая 2) По характеристике из ГОСТа вычисляю ЭДС, которая соответствует этой температуре 3) Измеряю ЭДС на термопаре 4) Вычитаю из ЭДС термопары ЭДС вычисленной в пункте 2 5) Вычисляю из полученной разницы температуру термопары. Если погрешность датчика температуры холодного спая плюс минус 2 градуса, то обнаруживается занятная ситуация: - Пусть, например, температура на термопаре 100 градусов цельсия, термоэдс по градуировочной таблице для этой температуре 0,647 мВ; - Температура ХС 10 градусов, что по градуировочной таблице соотвествует 0,054 мB, а значит суммарное ЭДС будет равно 0,701 мВ; - Если у датчика ХС погрешность 2 градуса, то он может показать температуру, например, 12 градусов, что соотвествует 0,065 мВ; - Если я буду производить вычисления опираясь на показания 12 градусов ХС, то ЭДС термопары у меня получится 0,701 мВ - 0,065 мВ = 0,636 мВ, что соответствует температуре 98,4 градуса вместо реальных 100 градусов. Как же калибровать такой прибор, если датчик холодного спая у него внутри, а я могу только на вход измерения ЭДС подключать эталоны??? Практически везде пишут, что для измерения температуры ХС не нужен датчик большой точности, мол его погрешность не вносит существенных искажений. Я не понимаю, как так?
  5. А в чем принципиальное отличие вычитания ЭДС, а потом вычисления температуры? Разве алгебраически это не одно и тоже? По поводу калибровки я не ясно изложил суть. Мне не нужно калибровать термопару, предполагается, что мне будут подключать стандартные термопары. Получается единственное, что я калибрую, это свою схему измерения термоэдс, подключая ее, например, к калибратору и подавая эталонные значения напряжений. Схема, как можно убедиться, абсолютно линейна, нужно ли ее так калибровать или она уже должна измерять все достаточно точно? И если это нужно, то выходит что нужно отдельно еще таким же образом калибровать канал измерения температуры холодного спая? Если я вычисляю температуру по термоэдс по градуировочной характеристике из ГОСТа, применяя линейную аппроксимацию в промежутках между точками градуировочной характеристики, это достаточный способ борьбы с нелинейностью?
  6. Доброго времени суток! Впервые озадачился измерением температуры с помощью термопары. Схема на базе АЦП AD7792, взята, как есть из даташита: Посидел, почитал, кажется, что разобрался, но вот уверенности нет. В связи с этим следующие вопросы: 1) Правильно ли я понял принцип измерения: Сначала измеряем термоэдс, и по ней вычисляем температуру (например при помощи градуировочных характеристик из ГОСТа); далее измеряю температуру холодного спая с помощью термодатчика на плате; далее вычитаю из вычисленной из термоэдс температуры температуру холодного спая и готово? 2) В качестве датчика температуры холодного спая заложен датчик KTY82/110, однако у этого датчика погрешность до плюс-минус 2 градуса. Получается, если я буду использовать методику, которую я описал в пункте 1, то погрешность измерения с термодатчика сразу возрастает на эти два градуса. Как же быть? Это нормально? 3) Измерительный канал нужно калибровать, значит ли это что нужно калибровать и канал измерения температуры холодного спая? Т.е. мне придется производить две калибровки первую на канале, где подключена термопара, вторую на датчике температуры. 4) Нужно ли вообще такую схему калибровать?
  7. У меня вопрос по этой схеме. Нужно ли это схему калибровать? Я имею ввиду не встроенную калибровку, а именно калибровку всего измерительного канала, при такой схеме подключения. Например есть у меня с десяток плат, сделанных по такой схеме, нужно ли их ВСЕ калибровать на эталоне?
  8. У нас такая же проблема! Будем признательны, если поможете!
  9. У меня все красиво заработало. Спасибо всем кто помогал и принимал участие! Ниже привожу пример на базе все той же dsp библиотеки. Делаю следующее сначала генерирую сигнал, потом загоняю его в FFT: #define FFT_LEN 1024 #define TEST_FREQUENCY 31.969f #define TEST_AMPL 600.0f #define TEST_AMPL3 500.0f #define TEST_FREQUENCY3 64 #define TEST_AMPL4 400.0f #define TEST_FREQUENCY4 72 #define TEST_AMPL5 300.0f #define TEST_FREQUENCY5 96 #define TEST_AMPL6 200.0f #define TEST_FREQUENCY6 128 #define TEST_AMPL2 100.0f #define TEST_FREQUENCY2 160 ... for (u32 i = 0; i < FFT_LEN; i++) { float tmp; tmp = TEST_AMPL * sin( (TEST_FREQUENCY*2*PI/(FFT_LEN-1)) * i); tmp += TEST_AMPL2 * sin( (TEST_FREQUENCY2*2*PI/(FFT_LEN-1)) * i); tmp += TEST_AMPL3 * sin( (TEST_FREQUENCY3*2*PI/(FFT_LEN-1)) * i); tmp += TEST_AMPL4 * sin( (TEST_FREQUENCY4*2*PI/(FFT_LEN-1)) * i); tmp += TEST_AMPL5 * sin( (TEST_FREQUENCY5*2*PI/(FFT_LEN-1)) * i); tmp += TEST_AMPL6 * sin( (TEST_FREQUENCY6*2*PI/(FFT_LEN-1)) * i); tmp += 600; int tmpInt; tmpInt = tmp; fInput[inputShift] = tmp; fInput[inputShift+1] = 0; input[inputShift++] = tmpInt; input[inputShift++] = 0; } for (u32 i = 0; i < FFT_LEN*2; i++) input[i] = fInput[i]; arm_cfft_f32(&arm_cfft_sR_f32_len1024, fInput, 0, 1); arm_cmplx_mag_f32 (fInput, fOutput, FFT_LEN); fOutput[0] = (fOutput[0]*NORMIRATION_COEF)/2; output[0] = fOutput[0]; for (u32 k=1; k<FFT_LEN; k++) { fOutput[k] = fOutput[k]*NORMIRATION_COEF; output[k] = fOutput[k]; } ... Если нужно я могу конечно выложить весь проект, но там сделано на базе STMCube, так что очень много всего лишнего и весит при этом такой проект невменяемо много.
  10. Вообщем кондер на ref действительно помог. Повесили 10 нФ и теперь результаты стоят как вкопанные при включенной внутренней фильтрации. Не нужно никакого осреднения и софтовой фильтрации. Спасибо!
  11. Большое спасибо за советы! Сейчас пробую каждый из них, в той степени в какой это возможно. Но важно сейчас вот что: я проверял поведение микросхемы при подключенном магазине сопротивлений. А подключал я этот магазин через провода, длинной где-то 20 см. каждый. Если резистор нагрузки (тот, что эмулирует термодатчик) повесить напрямую на разъем, то АЦП перестают плавать, результаты как вкопанные (я даже думал, что подвисло), шелохнется максимум на один отсчет. Выходит, что это помеха на проводах. Я только не понимаю откуда она такая, и как с ней бороться (получается, что она не 50 Гц, т.к. у меня уже включен внутренний фильтр на 50 Гц).
  12. 1. Положение резистора действительно нелогично, но он именно там, где нарисован на схеме. Схемотехники мотивировали это тем, что нужно защитить выходную цепь от больших токов, на тот случай если АЦП вдруг закоротит и подаст на свои ноги напряжение питания. Сомнительная мотивация, но другой нет, увы :). 2. Как выглядит конструктивно... Даже не знаю, как ответить, скриншотом платы? АЦП подключен к разъему, на который вешается датчик, у АЦП свое изолированное питание, отдельное от всей остальной схемы. Связь с процессором через изолятор (его я не привел на схеме, подумал лишнее). Вдобавок входа АЦП сплош обвешаны коммутаторами (их я тоже не показал на схеме, показал лишь состояние схемы в одной из комбинаций комутаторов). Эти многочисленные коммутаторы включают двухпроводную схему (ее я и привел), трехпроводную схему и четырехпроводную схему. 3. Все заглушить думаю не выйдет, у меня и так только проц, ацп и комутаторы. Ни одного из них исключить нельзя. А как просыпаться по приему отсчета? Вы имеете ввиду тушить микроконтроллер до завершения преобразования. 4. По поводу AD7792 - я не сомневаюсь в ее работоспособности. Где-то у меня косяк, пока не совсем пойму где. А конденсатор на опорнике - попробую повесить, спасибо!
  13. Сделали, отладчик стал отваливаться реже. Сделали так: соединили металический корпус кабеля USB и корпус разъема на плате. Однако все равно нет-нет да и отвалится при подсоединении USB к плате.
  14. Если измерять падение напряжение просто на резисторе (я эмулирую датчик температуры магазином сопротивлений), то видно, что напряжение на резисторе (на магазине) не "скачет". Там все гладко, смотрел и мультиметром и осциллографом в режиме разности напряжений на двух каналах. Сам сигнал нормальный. Скачут только показания самого АЦП. По поводу того как должно быть: в даташите обещают, что при включенной фильтрации (как это сделано у меня) сам ацп "дребезжит" не более чем на 1 бит. Я бы примирился, если бы он скакал даже 10 отсчетов, но 60-70 такого просто быть не может. Так как же вводить задержку, если АЦП работает в режиме непрерывного измерения (CONTINIUES MODE), то есть он сам долбит измерение за измерением, я лишь забираю результаты. Для single conversation я бы еще понял, но для непрерывного я не понимаю, как вводить задержки, про которые Вы говорите.
  15. Доброго времени суток! Схема следующая (выкинул из нее все лишнее): Делаю следующее: 1) Устанавливаю в регистре CONFIGURATION REGISTER следующие параметры: gain = 8, канал AIN1P+AIN1-, опорное напряжение внешнее, режим считывания однополярный, Bias Voltage Generator отключен, буффер включен; 2) Включаю оба источника тока на ногу out1 - суммарный ток 420 мкА; 3) Делаю внутреннюю калибровку нуля (Internal Zero-Scale Calibration) на частое 4.17 (74 dB (50 Hz and 60 Hz) и по ноге DOUT отслеживаю готовность; 4) Запускаю непрерывное преобразование на частое 4.17 (74 dB (50 Hz and 60 Hz) и по ноге DOUT отслеживаю готовность преобразования, считываю их и вывожу наверх. В результате наблюдаю, что результат преобразования "скачет" на 60-70 отсчетов совершенно непредсказуемым образом (даже цифровая софтовая фильтрация плохо справляется). Осциллографом проверял питания и опорное - оно гладкое хорошое. Что я делаю не так, подскажите пожалуйста, а то я уже озверел.
  16. У нас именно такая модель, причем фирменная. Кучу денег за нее отвалили. А по-поводу заземлений, можно чуть чуть по-подробнее? Разве это не лечится простым объединением земель?
  17. Доброго времени суток! Столкнулись со следующей проблемой: если во время отладки к нашей плате подсоединить кабель USB (у нас реализован USB-device) отваливается отладка c текстом ошибки "Can not acces target. Shutting down debug session". Тоже самое происходит, если присоединить к земле нашей платы землю осциллографа. Так происходит в 9 из 10 случаев (иногда везет и отладка не отваливается). Подскажите, можно ли с этим что то поделать, а то уж сильно мешает работе. Земли USB и GND самого отладчика соединяли - не помогло. Работаем в keil.
  18. STM32F042 pack для Keil 5

    У вас не было такого, что при работе из отладчика, отладчик отваливался сразу после инициализации usb библиотеки?
  19. STM32F042 pack для Keil 5

    smk Вам удалось собрать работающий проект с USB для этого процессора? Сами пытаемся его оживить - пока тщетно. Буду очень признателен, если поделитесь.
  20. Спасибо! Еще идиотский вопрос: А что такое LTO? Оно включается передачей параметра линковщику?
  21. Очень просто: matiec генерирует С файл, в котором производится вызов, например, Вашей функции в которой происходит связь с железом. А эту функция реализована в другом сишном файле. Потом нужно взять все эти сишные файл скомпилить, например в GCC и слинковать. У меня все это делает Beremiz - сначала передает все необходимые данные matiec'y далее берет результат его работы компилирует в gcc и силнковывает с файлом, где реализована привязка с железом.
  22. Сами объекты работают. Если вызывать метод глобального объекта, то он отработается нормально. Но то, о чем вы говорите очень похоже на правду. Я сделал, как описано вот тут и все заработало. А там описано, если я правильно понимаю, то чем Вы говорите.
  23. Доброго времени суток! Компилятор arm-none-eabi-gcc, процессор stm32f407. Объявил два класса, один базовый, другой наследник: class SomeBase { public: virtual void foo (void) = 0; } class SomeDelivered : public SomeBase { public: void foo (void) { printf("hello!\r\n"); } } Далее внутри main'a делаю следующее: SomeDelivered a; /**<<<< Объект объявлен ГЛОБАЛЬНО */ int main (void) { ... SomeBase *p; p = &a; p->foo(); ... } Программа выпадает в HardFault сразу после вызова p->foo(). А если я делаю так: int main (void) { ... SomeDelivered a; /**<<<< Объект объявлен ЛОКАЛЬНО */ SomeBase *p; p = &a; p->foo(); ... } то все работает. В чем дело, помогите пожалуйста?! В keil такая штука работает без проблем и так и так.
×
×
  • Создать...