Страница 14 из 14 ПерваяПервая ... 4891011121314
Показано с 131 по 140 из 140
  1. #131
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    48
    Сообщений
    13,255
    Вес репутации
    10

    По умолчанию Re: Фен паяльный

    странно, а раньше тоже AMS1117 стоял?

  2. #132
    Местный Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    118
    Вес репутации
    31

    По умолчанию Re: Фен паяльный

    Да, я выпаял его из нерабочей и впаял в рабочую (она работает с ним) Что то не получается управлять вентилятором с другого пина. Вращая ручку энкодера ни чего не происходит вплоть до достижения максимального значения - тогда моторчик запускается на полную.
    Последний раз редактировалось Kevin; 17.05.2018 в 00:15.

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

    По умолчанию Re: Фен паяльный

    Может в коде ошибка?

  4. #134
    Местный Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    118
    Вес репутации
    31

    По умолчанию Re: Фен паяльный

    Возможно. Нужно ведь как то второй таймер подключить? int motorPin = 6; заменить на 9 недостаточно?
    PHP код:
    #include "U8glib.h"
    #include "rus6x12.h"
    #include <CyberLib.h> //Библиотека от Cyber-Place.ru
    //===========================================================
    U8GLIB_SSD1306_128X64 u8g(A4/* data=*/ A3/* cs=*/ A2/* dc=*/ A1/* reset=*/ A0); // наш дисплей  ||
    //===========================================================
    volatile uint8_t ticDimmer;
    int motorPin 6;
    int motorSpeed 75;                   // Изначальная скорость двигателя
    int fanPower 170;                    // Изначальная мощность фена
    int stepFen 5;                       // шаг изменения мощности
    int stepMoto 5;                       // шаг изменения мощности
    int selectMode 0;                    // Что изменять, скорость или мощность фена
    // ===================================  энкодер   ===================== 
    unsigned long currentTime;
    unsigned long loopTime;
    #define PIN_ENCODER_CLK 3
    #define PIN_ENCODER_DT 5
    #define PIN_ENCODER_SW 7 
    unsigned char ENCODER_CLK;
    unsigned char ENCODER_DT;
    unsigned char ENCODER_CLK_prev=0;
    // =================================== Кнопка энкодера   =====================
    bool     button_state      false;
    bool     button_auto_state false;
    uint32_t ms_button         0;
    uint32_t ms_auto_click     0;
    // ===================================  дисплей   =====================
    void draw(void) {
      
    u8g.setFont(u8g_font_courR24n);            // тонкие цифры
      
    u8g.setPrintPos(1522);
      
    u8g.print(fanPower);

      
    u8g.setPrintPos(1564);
      
    u8g.print(motorSpeed);

      
    u8g.setPrintPos(-270);
      
    u8g.print("*");
       
     
    // if(selectMode == 1 && (millis() & 512))
      
    if(selectMode == 1)
      {  
      
    u8g.setPrintPos(7823);
      
    u8g.print(".");
      }
      
    //if(selectMode == 2 && (millis() & 512))
      
    if(selectMode == 2)
      {
      
    u8g.setPrintPos(7859);
      
    u8g.print(".");
      }
    // =================================== 
      
    u8g.setPrintPos(816);
      
    u8g.setFont(rus6x12);
      
    u8g.print("температура");

      
    u8g.setPrintPos(8443);
      
    u8g.print("обороты");
    // =================================== 
      
    u8g.setFont(u8g_font_courR14r);
      
    u8g.setPrintPos(9527);
    //  u8g.print(SetPower);

      
    u8g.setPrintPos(9564);
    //  u8g.print(SetSpeed);
      
    // ===================================    ===================== 
      
    u8g.drawLine(7707764);      // Вертикальная линия
      
    u8g.drawLine(803212832);    // Горизонтальная короткая линия

    //  u8g.drawBitmapP(0, 0, 1, 24, Termometr);
    //  u8g.drawBitmapP(-2, 47, 2, 14, Cooler);
    }
     
    void setup()  {
    // =================================== Диммер  ===================== 
    //TCCR0B = TCCR0B & 0b11111000 | 5;
      
    TCCR1B TCCR1B 0b11111000 5;
      
    Dimmer fanPower;
      
    D4_Out;  //Настраиваем порты на выход
      
    D4_Low;  //установить на выходах низкий уровень сигнала
      
    D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль
      
    attachInterrupt(0detect_upLOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
      
    StartTimer1(halfcycle40); //время для одного разряда ШИМ
      
    StopTimer1(); //остановить таймер
    // ===================================  энкодер   ===================== 
      
    pinMode(PIN_ENCODER_CLKINPUT);
      
    pinMode(PIN_ENCODER_DTINPUT);
      
    pinMode(PIN_ENCODER_SWINPUT_PULLUP); //  Кнопка энкодера
      
    pinMode(motorPinOUTPUT);
      
    currentTime millis();
      
    loopTime currentTime
      
    Serial.begin(9600);           // для отладки
    //======================  Обновление дисплея ======================
            
    u8g.firstPage();  
            do {
    draw();} while( u8g.nextPage() );
    //======================  Обновление дисплея ======================


    void loop()  
    {
       
    analogWrite(motorPinmotorSpeed);  // Устанавливаем первоначальную скорость
    // =================================== Кнопка энкодера   =====================
      
    uint32_t ms    millis();
      
    bool pin_state digitalRead(PIN_ENCODER_SW); 
      if( 
    pin_state  == LOW && !button_state && ( ms ms_button ) > 50 )// Фиксируем нажатие кнопки  
      
    {
        
    button_state      true;
        
    button_auto_state false;  
        
    ms_button         ms;
        if(
    selectMode == 1)
        {
          
    selectMode 2;  
          
    Serial.println("Press key");
        }
        else
        {
          
    selectMode 0;
        }
    //======================  Обновление дисплея ======================
            
    u8g.firstPage();  
            do {
    draw();} while( u8g.nextPage() );
    //======================  Обновление дисплея ======================
      
    }
      if( 
    pin_state  == LOW && ( ms ms_button ) > 2000 && ( ms ms_auto_click )>500 // После 2000 мс нажатия кнопки каждые 500 мс фиксируем событие нажатия  
      
    {
        
    button_auto_state true;
        
    ms_auto_click     ms;
        
    selectMode 1;
        
    Serial.println("Auto press key");    
    //======================  Обновление дисплея ======================
            
    u8g.firstPage();  
            do {
    draw();} while( u8g.nextPage() );
    //======================  Обновление дисплея ======================
      
    }  
      if( 
    pin_state == HIGH && button_state && ( ms ms_button ) > 50  // Фиксируем отпускание кнопки 
      
    {
        
    button_state      false;   
        
    ms_button         ms;
        if( !
    button_auto_state )
        
    Serial.println("No Press key");
      }
    // =================================== Вал энкодера   =====================  
      
    currentTime millis();
      if(
    currentTime >= (loopTime 5))
      { 
    // проверяем каждые 5мс (200 Гц)
        
    ENCODER_CLK digitalRead(PIN_ENCODER_CLK);        // считываем состояние выхода А энкодера 
        
    ENCODER_DT digitalRead(PIN_ENCODER_DT);         // считываем состояние выхода B энкодера    
        
    if((!ENCODER_CLK) && (ENCODER_CLK_prev))
        {                                      
    // если состояние изменилось с положительного к нулю
          
    if(ENCODER_DT)                        // выход В в полож. сост., значит вращение по часовой стрелке
          
    {
            if (
    selectMode == 1)  
            {
              if(
    fanPower stepFen >= 0)
              
    fanPower -= stepFen;              // увеличиваем мощность фена, не ниже 0    
            
    }
            
    //else
            
    if (selectMode == 2
            {
              if(
    motorSpeed stepMoto <= 255)
              
    motorSpeed += stepMoto;          // Прибавляем скорость   
            
    }   
          }   
          else                                
    // выход В в 0 сост., значит вращение против часовой стрелки 
          

            if (
    selectMode == 1)  
            {
              if(
    fanPower stepFen <= 255
              
    fanPower += stepFen;            // уменьшаем мощность фена, но не более чем до 255    
            
    }
           
    // else
            
    if (selectMode == 2
            {
              if(
    motorSpeed stepMoto  >= 0)
              
    motorSpeed -= stepMoto;          // уменьшаем скорость 
            
    }           
          }   
    //======================  Обновление дисплея ======================
            
    u8g.firstPage();  
            do {
    draw();} while( u8g.nextPage() );
    //======================  Обновление дисплея ======================
        
    }   
      
    ENCODER_CLK_prev ENCODER_CLK;     // сохраняем значение А для следующего цикла 
      
    loopTime currentTime;
      }   
      
    Dimmer fanPower;                    
    }

    // ===================================  обработчик и прерываний  ===================== 
    void halfcycle() //прерывания таймера
    {
      
    tic++; //счетчик
      
    if(Dimmer tic D4_High//управляем выходом
    }
    void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
    {
      
    tic=0//обнулить счетчик
      
    ResumeTimer1(); //запустить таймер
      
    attachInterrupt(0detect_downHIGH); //перепрограммировать прерывание на другой обработчик
    }
    void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
    {
      
    StopTimer1(); //остановить таймер
      
    D4_Low//логический ноль на выходы
      
    tic=0//обнулить счетчик
      
    attachInterrupt(0detect_upLOW); //перепрограммировать прерывание на другой обработчик

    Последний раз редактировалось Kevin; 17.05.2018 в 00:36.

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

    По умолчанию Re: Фен паяльный

    StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
    Timer1 тоже занят
    остается только Timer2

  6. #136
    Местный Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    118
    Вес репутации
    31

    По умолчанию Re: Фен паяльный

    Получилось на 11 пин

  7. #137
    Местный Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    118
    Вес репутации
    31

    По умолчанию Re: Фен паяльный

    Вроде работает нормально - регулирует обороты и температуру. Встроенную термопару пока подключать не стал - измеряю температуру термопарой мультиметра. Заметил что температура не очень стабильна, а при добавлении оборотов немного падает (что и не удивительно). Вот и думаю - надо как то сделать поддержание установленной температуры, но боюсь что намудрю. Как лучше реализовать данное действо. Думаю так:

    1. Регулируя температуру, устанавливать мощность диммера на примерную величину (к примеру 170 единиц диммера = 200 градусов)
    2. Задать переменной (к примеру setTemp) значение 200
    3. И далее в секундном таймере делать проверку - если температура на термопаре фена больше setTemp на 10, то уменьшить мощность диммера на -1. А если меньше - то прибавить.

    Верна ли логика моих мыслей?
    Последний раз редактировалось Kevin; 17.05.2018 в 20:25.

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

    По умолчанию Re: Фен паяльный

    Логика верна, но нужно регулировать дельту в обе стороны. как на понижение так и на увеличение температуры

  9. #139
    Местный Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    118
    Вес репутации
    31

    По умолчанию Re: Фен паяльный

    Цитата Сообщение от Chip Посмотреть сообщение
    как на понижение так и на увеличение температуры
    А я вроде про повышение писал

    Цитата Сообщение от Kevin Посмотреть сообщение
    ....
    3. И далее в секундном таймере делать проверку - если температура на термопаре фена больше setTemp на 10, то уменьшить мощность диммера на -1. А если меньше - то прибавить.

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

    По умолчанию Re: Фен паяльный

    Не внимательно прочитал

Страница 14 из 14 ПерваяПервая ... 4891011121314

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

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

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

Ваши права

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