Показано с 1 по 10 из 71

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Модератор
    Регистрация
    06.07.2008
    Возраст
    47
    Сообщений
    414
    Вес репутации
    451

    Сообщение Re: Как точно вычислить температуру со штатного датчика двигателя?

    Только что по приколу попробовал оба вида расчета.

    Подключение библиотеки math.h и расчет экспоненты съедает 4к флеша и порядка 250 байт оперативной памяти.

    Код:
    #include <math.h>
    ...
    
    	uint8_t i;
    	double d;
    	double volatile p=0;
    	d=1.545444342+i;
    	p=p+exp(d);
    	if (p==0)
    		p=1;
    	}
    Выполняется примерно 5300 тактов процессора. А там еще наверняка надо будет выполнить кучу действий, кроме вычисления экспоненты (умножения, деления..).

    Код с аппроксимацией 16-битных значений

    Код:
    #define Temp1Count 5
    
    uint16_t Temp1[Temp1Count][2] PROGMEM = 
    // первое значение - абсцисса, второе - ордината
    {
    	{0,40},
    	{5,80},
    	{26,200},
    	{42,300},
    	{70,400},
    };
    ...
    	uint16_t InTemp;
    	uint16_t RealTemp;
    
    	uint16_t InLeftTemp;
    	InTemp=5;
    
    	
    	i=Temp1Count;
    	do
    	{
    		i--;
    		InLeftTemp=pgm_read_word(&Temp1[i][0]);
    	}
    	while ((i>=0)&&(InTemp<InLeftTemp));
    	uint16_t InRightTemp=pgm_read_word(&Temp1[i+1][0]);
    	uint16_t OutLeftTemp=pgm_read_word(&Temp1[i][1]);
    	uint16_t OutRightTemp=pgm_read_word(&Temp1[i+1][1]);
    
    	RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);
    	if (RealTemp==81)
    ...
    Основное затраченное время - выполнение умножений и делений. Выполняется порядка 350 тактов при 4х попаданиях в цикл (20 тактов на цикл). Съедает порядка 160 байт флеш-памяти, не ест оперативную память.
    Тут правда надо четко просчитать, чтобы не было переполнений при умножении, либо вычисление RealTemp делать в int32.

    В общем все зависит от необходимой точности и наличия ресурсов.
    Последний раз редактировалось SBorovkov; 09.08.2010 в 03:18.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •