Страница 4 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 31 по 40 из 71
  1. #31
    Пользователь
    Регистрация
    21.07.2010
    Возраст
    44
    Сообщений
    82
    Вес репутации
    186

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

    Ребята, а как прописать в скетче чтобы не дискретно значения на ШИМ выдавались 50,100, 250.... и т.д., а плавно изменялись от 50 к 100, от 100 к 150? ну т.е. значения те же, но переход от одного к другому - плавно?
    С уважением, Дмитрий.
    тел. 8 9I6 855 7Ч 95

  2. #32
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

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

    в цикле изменяй хоть от 0 до 255

  3. #33
    Пользователь
    Регистрация
    21.07.2010
    Возраст
    44
    Сообщений
    82
    Вес репутации
    186

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

    Хм. Ты имеешь ввиду выполнять цикл при росте температуры на 1 градус? Ну хорошо, а в обратную сторону если температура пойдет? Мне думается как то проще должно быть.
    С уважением, Дмитрий.
    тел. 8 9I6 855 7Ч 95

  4. #34
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    436

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

    Можно повеситься на прерывание таймера и в отдельных переменных хранить текущее состояние шима и необходимое состояние шима. И по таймеру текущее сдвигать к необходимому.

  5. #35
    Пользователь
    Регистрация
    21.07.2010
    Возраст
    44
    Сообщений
    82
    Вес репутации
    186

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

    А можно пример кода? А то я не силен в таком подходе.
    С уважением, Дмитрий.
    тел. 8 9I6 855 7Ч 95

  6. #36
    Пользователь
    Регистрация
    21.07.2010
    Возраст
    44
    Сообщений
    82
    Вес репутации
    186

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

    В общем, в рабочем режиме выявлен недостаток "плавания" напряжения на датчике температуры которое показывает ардуина. В то время как обычный мультиметр показывает стабильно. Думаю нужно перейти на усредненное значение за определенное время. Сегодня буду дорабатывать скетч. В т.ч. попробую сделать плавный ШИМ.
    С уважением, Дмитрий.
    тел. 8 9I6 855 7Ч 95

  7. #37
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    436

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

    Не знаю как повесить на таймер в ардуине функцию. Я разрабатываю не в среде ардуино, а в AVR Studio. Для обработки прерываний в Arduino есть какие-то функции, поищи, тут на форуме было обсуждение таймера.

    Ну а осуществить плавную регулировку просто

    int CurrentVentPWM;
    int TargetVentPWM;

    void Timer(void) // эта функция должна вызываться определенное количество раз в секунду (сколько - сам считай, 10-20-50?)
    {
    if (CurrentVentPWM>TargetVentPWM)
    {
    CurrentVentPWM--;
    AnalogOutput(CurrentVentPWM,???) // не помню что туда надо писать
    }
    if (CurrentVentPWM<TargetVentPWM)
    {
    CurrentVentPWM++;
    AnalogOutput(CurrentVentPWM,???) // не помню что туда надо писать
    }
    }

    Теперь по поводу дрожания.
    Причины может быть две:
    1. На самом деле вольтметр не ловит какую-то быструю помеху. Он ведь измеряет постоянное напряжение и если есть постоянная помеха с частотой 100 герц, он ее показать не должен. А ардуина очень быстро выполняет преобразование и помеху даже в 2000Гц она поймает по-полной. Решение - пустить сигнал с датчика через RC цепочку. Что это такое можешь почитать на сайте easyelectronics.ru. Я перед тамошним автором кепку снимаю, насколько доступно он умудряется объяснять.
    2. Может быть так, что помеха идет по питанию ардуины. Для того, чтобы таких помех не ловить, надо задемфировтаь вывод aRef и переключить АЦП, чтобы он в качестве опорного напряжения брал не Vcc (напряжение питания МК), а этот aRef. Цепочку, которую надо на aRef включать, в интернете тоже легко найти.

  8. #38
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

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

    Вот так можно отфильтровать помеху
    sensor = analogRead(EngineTempSensorPin); // замер
    delay(1);
    sensor_crt = analogRead(EngineTempSensorPin); // контрольный замер
    if(sensor == sensor_crt) // если замеры равны, то значит нет ошибки

  9. #39
    Пользователь
    Регистрация
    21.07.2010
    Возраст
    44
    Сообщений
    82
    Вес репутации
    186

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

    Обновил скетч в первом посте. Добавил усредненное значение от датчика, упростил код для ШИМ вычисления, ну и так по мелочи подправил...

    Цитата Сообщение от Chip Посмотреть сообщение
    Вот так можно отфильтровать помеху
    Попробовал, но все таки остановился на усредненном значении и скорее всего добавлю РЦ фильтр по входу.

    Цитата Сообщение от SBorovkov Посмотреть сообщение
    Не знаю как повесить на таймер в ардуине функцию...
    Спасибо. Смысл понятен, но прикрутить с пол пинка не удалось. Может подскажет кто-нибудь как работать с функциями таймера?
    Последний раз редактировалось paranom; 15.08.2010 в 05:00.
    С уважением, Дмитрий.
    тел. 8 9I6 855 7Ч 95

  10. #40
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

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

    Выполнение процедуры по таймеру.
    PHP код:
    //Выполнение процедуры по таймеру.
    #include <MsTimer2.h>
      
    static boolean output HIGH;
      
    void flash_led() 
    {
      
    digitalWrite(13, (output==HIGH) ? output=LOW output=HIGH);
    }

    void setup() 
    {
      
    MsTimer2::set(500flash_led); // 500ms интервал вызова процедуры
      
    MsTimer2::start();
    }

    void loop() 
    {
    //Здесь будет ваш код

    Последний раз редактировалось Chip; 15.08.2010 в 12:27.

Страница 4 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

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

Ваши права

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