Кмитиц 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Проблема состоит в том, что у меня контроллев F2013, соответственно у него 2к памяти. Для преобразования напряжения с АЦП в температуру используется полиномы 6й и 9й степени. Что бы не потерять точность необходимо использовать формат с плавающей точкой, но при его использовании и совершении операций над ним библиотеки умножения занимают минимум 700 байт. Вообщем это слишком жирно. Пробовал сделать свой формат, тоже плавающий, но умножать на 2в степени. После того как перемножал два int, получал long, потом сдвигал вправо до int и увеличивал степень. Но при этом точность падала. В некоторых случаях стала неудовлетворительной. Предложите, чем можно заменить, как обойти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба А что вы дальше с температурой делаете? если посылаете на компьютер или записываете куда, тогда можно так и оставить, а перерасчёт оставтиь компьютеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кмитиц 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Действительно, посылаю на ПК через RS485. Но дело в том, что это датчик температуры с RS выходом, и он должен выдавать значение температуры. Да и работая в сети с самыми разными устройствами нежелательно вешать вычисление на ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Что бы не потерять точность необходимо использовать формат с плавающей точкой, но при его использовании и совершении операций над ним библиотеки умножения занимают минимум 700 байт. Вообщем это слишком жирно. Не понял: 700 байт флеши жалко? Или 700 ОЗУ? - /не верю, многовато что-то/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кмитиц 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Вообщем то жалко и даж очень. Тут еще должно быть много чего. И протокол Modbus RS485 с перестройкой скоростей и опрос АЦП и получение температуры холодного спая от внутреннего сенсора, и еще куча параметров, стандартных для датчиков температуры. А 700 байт это на вскидку. Реально при линковании еще больше пойдет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Вообщем то жалко и даж очень. Тут еще должно быть много чего. И протокол Modbus RS485 с перестройкой скоростей и опрос АЦП и получение температуры холодного спая от внутреннего сенсора, и еще куча параметров, стандартных для датчиков температуры. А 700 байт это на вскидку. Реально при линковании еще больше пойдет... 1) Кусочно-линейная аппроксимация в целых числах не поможет? Я именно так и делаю. Одно значение long на один градус, правда датчик NTC. 2) Теоретически все можно перевести в целочисленную математику, только диапазоны нужно тщательно проверять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Проблема состоит в том, что у меня контроллев F2013, соответственно у него 2к памяти. Для преобразования напряжения с АЦП в температуру используется полиномы 6й и 9й степени. Что бы не потерять точность необходимо использовать формат с плавающей точкой, но при его использовании и совершении операций над ним библиотеки умножения занимают минимум 700 байт. Вообщем это слишком жирно. Пробовал сделать свой формат, тоже плавающий, но умножать на 2в степени. После того как перемножал два int, получал long, потом сдвигал вправо до int и увеличивал степень. Но при этом точность падала. В некоторых случаях стала неудовлетворительной. Предложите, чем можно заменить, как обойти. Какую же точность по температуре и в каком диапазоне Вы пытаетесь получить на выходе, что приходится пускаться в такие тяжкие? Неужели характеристика датчика (какого?) и преобразователя до такой степени нелинейна, что не позволяет обойтись какой-либо кусочной аппроксимацией с 1-байтовой коррекцией? имхо, целочисленной 2-байтовой арифметики с промежуточными результатами в 3-байтовом виде вполне достаточно. Ну и методическая ошибка - утаптывать задачу в приглянувшийся контроллер, а не подобрать контроллер под задачу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кмитиц 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Какую же точность по температуре и в каком диапазоне Вы пытаетесь получить на выходе, что приходится пускаться в такие тяжкие? Неужели характеристика датчика (какого?) и преобразователя до такой степени нелинейна, что не позволяет обойтись какой-либо кусочной аппроксимацией с 1-байтовой коррекцией? имхо, целочисленной 2-байтовой арифметики с промежуточными результатами в 3-байтовом виде вполне достаточно. Ну и методическая ошибка - утаптывать задачу в приглянувшийся контроллер, а не подобрать контроллер под задачу. На счет ошибки согласен. Но контроллер был выбран до того как поручили развели плату и сделали. Осталось писать код и подстраиваться под условия. Точность по температуре надо 0.25% в диалазоне -50-1250. Сигнал обрабатывается от термопары(ТХА). Там для преобразования напряжения в температуру используются полиномы 6й и 9й степени. Вот и выходит что числа слишком большие выходят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyBorshch 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Если не нужна точность (в пределах +- 1градус) и небольшой диапазон температур, то можна обойтись и заданием температуры в виде таблицы, т.е. каждому значению АЦП - соответствующая температура с таблицы. Итого, при диапазоне в 100 град, получится таблица в 200 байт, что очень экономно. Удачи!!! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба 1) Кусочно-линейная аппроксимация в целых числах не поможет? Я именно так и делаю. Одно значение long на один градус, правда датчик NTC.+1. Причем cаму таблицу можно вынести в отдельную м/с EEPROM, которую при необходимости (для снижения энергопотребления) запитать прямо от пина MSP430. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба На счет ошибки согласен. Но контроллер был выбран до того как поручили развели плату и сделали. Осталось писать код и подстраиваться под условия. В MSP не копенгаген, но неужели нет pin2pin и функционально совместимого контроллера с 4 КБ флеша? Точность по температуре надо 0.25% в диалазоне -50-1250. Сигнал обрабатывается от термопары(ТХА). Там для преобразования напряжения в температуру используются полиномы 6й и 9й степени. Вот и выходит что числа слишком большие выходят. На память не надеюсь, но грызут меня сомнения насчет точности ТХА в диапазоне >500 C. И коэффициенты в полиноме аппроксимации ТХА, по-моему, присутствуют все, а не только 6-й и 9-й степени. Варианты: 1) кусочно-линейная аппроксимация (с большой кучей кусочков); 2) аппроксимация 2-й степенью (на меньшем числе кусочков). При этом Вы уложитесь в целочисленную 3-4-байтовую арифметику. При желании внутри каждого кусочка операцию разбиения можно повторить до достижения требуемой точности аппроксимации. Н-р, первая кусочно-линейная нарезка выполняется с 1% точностью, вторая кусочно-линейная нарезка обеспечивает требуемые 0.25%; результат соответствует параболической аппроксимации, считается быстрее (на одно умножение), но таблиц будет чуть больше (с другой стороны, эти таблицы можно будет свести вообще к 1-байтовым). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба В MSP не копенгаген, но неужели нет pin2pin и функционально совместимого контроллера с 4 КБ флеша?Пин-ту-пин с бОльшим объемом Flash нету. Мне, если честно, тоже непонятен выбор такого МК с учетом наличия в устройстве RS485. У MSP430F2013 нету аппаратного модуля USART или USCI, поддерживающего функцию UART. Имеющийся у него модуль USI поддерживает только синхронные интерфейсы SPI и I2C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кмитиц 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 · Жалоба Приглянулась мне мысль насчет кусочно линейной апроксимации после того как построил эти полиномы. Поделив на кусков 50 и записать во флеш-инфо коэффициенты, должно получиться. Спасибо за дельные советы:) А насчет выбора контроллера, так вышлоо, потому что не подумали. Делали схему. Кто то сказал:"я подобное в 1к помещал" так и порешили((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyBorshch 0 2 сентября, 2008 Опубликовано 2 сентября, 2008 · Жалоба А вы на чем пишете? Судя по всему на С. Попробуйте функции программной реализации RS-485, переделать на asm-e. Я думаю, что в этом случае, существено уменьшиться код программы и все влезет в 2 кБ, без всякой апроксимации термопары. Пин-ту-пин с бОльшим объемом Flash нету. Мне, если честно, тоже непонятен выбор такого МК с учетом наличия в устройстве RS485. У MSP430F2013 нету аппаратного модуля USART или USCI, поддерживающего функцию UART. Имеющийся у него модуль USI поддерживает только синхронные интерфейсы SPI и I2C. Но зато у данного контроллера есть 16-битный АЦП с усилителем, наверняка когда данное устройство делали, то преждевременно думали о преобразовании сигнала с термопары. А если использовать внешний 16-битный АЦП + операционник + контроллер, то схема увеличивается как по стоимости, так и по размерам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 2 сентября, 2008 Опубликовано 2 сентября, 2008 · Жалоба Кто то сказал:"я подобное в 1к помещал" так и порешили((( Ну так и флаг ему в руки! Не надо однако забывать, что в 1к флеши в 8 и 16-битных контроллерах разное количество инструкций влезает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться