Jump to content
den2313

Стабилизация оборотов коллекторного двигателя с помощью оптопары

Recommended Posts

Прошу помощь (теория) по стабилизации оборотов коллекторного двигателя с помощью оптопары. Есть двигатель 100 в,400 ватт ,на валу диск с оптопарой, 24 отверстия, хочу регулировать обороты ШИМом ,но чтоб обороты более менее были стабильны. Подключил двигатель через мост ,транзистор к avr, регулировка "просто" ШИМ- регулируется но момент на низких оборотах зависит от нагрузки, на средних нормально. Задействовал диск- ждем 0, как только 1 то делаю подсчет таймером ,0 стоп и после высчитываю число в таймере, в зависимости от эталона делаю или меньше  OCR или больше. Если двигатель не раскрутился (таймер переполнился) то добавляю Х число -"небольшой рывок" . В теории вроде нормально, но в реале- двигатель стартует и потом как бы "качается" плавно растут и падают обороты. Кто может подсказать что делаю неправильно? Подозрение- что мало время обработки. Или подсчитывать каждый импульс. Мк работает на 8 МГц.

PS. Хочу стабилизировать от 10 оборотов. Пробовал- если разница эталона и числа таймера большая- добавлял (убавлял) OCR немного больше, но только хуже

Edited by den2313

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Нагрузка меняется, ПИД регуляция просто не успеет отследить ( или делать на stm- но я их не знаю). Поэтому хотелось жестко привязать обороты к времени импульса.

Буду читать

Edited by den2313

Share this post


Link to post
Share on other sites

Материалы вебинара Параметры выше, цена ниже. Обновление в линейке AC/DC- и DC/DC-преобразователей MORNSUN

Опубликованы запись, ответы на вопросы и материалы вебинара, посвящённого преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре были рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату, также новая группа продукции – встраиваемые источники питания в кожухе.

Подробнее

Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее

На 10 оборотах из-за датчика у вас будет ощущаться дискретность датчика, поэтому или программно сглаживать(но тогда больших оборотов не достичь) или использовать линейный датчик, индуктивный например - сельсин.


Учение - изучение правил. Опыт - изучение исключений.

Share this post


Link to post
Share on other sites

Материалы вебинара Практическое использование TrustZone в STM32L5

Материалы вебинара, посвященного экосистеме безопасности и возможностях, которые дает новая технология TrustZone в МК STM32L5, содержат две подробные практические работы: создание простого приложения с изоляцией в TrustZone, и пример отладки и тестирования TFM-SBSFU. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

1 оборот -24 сигнала с датчика, 1/24 секунды, 10 оборотов -1/240 секунды, не думаю что дискретность большая, скорее контроллер не успевает рассчитать значение. Схемы что я видел в интернете обычно на операционниках, и обратная связь- конденсатор с сопротивлением (коррекция) ,причем в одной из них ( промышленная) время реакции на увеличение оборотов одно а на снижение другое (видимо чтоб не "раскачивался"). Теории мне не хватает, придется изучать :( 

Share this post


Link to post
Share on other sites

Обороты без указания единиц измерения обычно подразумеваются как оборотов в минуту. А у вас обороты в секунду, задача решаемая. У вас просто получилась неустойчивая САР, нужно просчитать всё и определить критерий устойчивости. И ещё одна особенность регуляторов - вам придётся выбирать компромисс между точностью поддержания частоты, устойчивости и длительности переходных процессов. Сейчас у вас регулятор работает точно, устойчиво но переходной процесс очень длительный на грани перехода в автоколебания - т.е. вы находитесь на границе устойчивости регулятора, какая-нибудь устойчивая переменная нагрузка на вал и он свалится в автоколебания - бесконечный переходный процесс... С другой стороны, если на двигатель повесите маховик - система регулятор-двигатель станет устойчивей.


Учение - изучение правил. Опыт - изучение исключений.

Share this post


Link to post
Share on other sites

Я тоже так думал- мотор " инертный", ШИМ увеличивается из-за сигнала датчика, а пока мотор наберет обороты ШИМ уже слишком велика и начинается обратный отсчет, в таком случае попробую время записи в ШИМ немного увеличить

Или перевести скорость изменения датчика в ЦАП и подать на вход ШИМ, но получится аналоговая схема

Share this post


Link to post
Share on other sites

Нет, только эта мера не поможет. У тебя сейчас программный ПИ-регудятор, надо в его контур добавить ещё и дифференциальную составляющую, тогда будет быстрее стабилизирваться но уменьшится точность.

Самая сложная часть в ПИД-регуляторе, это правильно под задачу и конкретный объект подобрать коэффициенты для Пропорциональной, Интегральной и Дифференциальной составляющих. Причем если на столе мотор без нагрузки будет работать прекрасно то под нагрузкой нужны будут уже другие коэффициенты... И вся суть науки - просчитать начальную точку математически, а потом уточнить коэффициенты на реальном объекте. При этом желательно иметь измерительные приборы чтобы не подбирать их наобум а точно знать ухудшаешь ты характеристику или улучшаешь. Очень хорошо было бы иметь в арсенале тахограф, иначе настройка регулятора будет на уровне гадалки.


Учение - изучение правил. Опыт - изучение исключений.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • надо заранее покупать "ессентуки" просто
    • Ну, справедливости ради, надо заметить, что бывают такие запои, что лучше не просыпаться
    • Мы его поставили только для того, чтобы ничего не сжечь и увидеть, если в схеме неисправность. Без этого резистора эта схема работает (в статике, в динамике - без разницы) так: Светодиод - это практически стабилитрон. В широком диапазоне токов на нём будет примерно тот же "вольт с хвостиком". На базо-эмиттерном переходе транзистора, находящегося в режиме близко к открытому, тоже будет фиксированное напряжение, практически не зависящее от тока, примерно 0,7 В. Это вы можете видеть на вашей схеме. А ток через светодиод будет определяться произведением тока базы (3 В - 1,93 В)/ 10 кОм = 0,107 мА на коэффициент усиления по току транзистора, равного 250. Итого, ток через светодиод равен 0,107 мА * 250 = 26 мА. Это вы тоже можете видеть на своей схеме. Если убрать резистор в коллекторе, то напряжение на коллекторе просто с 2,3 В увеличится до 3 В, что практически никак не повлияет на режим работы этой схемы. Транзистор на грани открытия, но не в насыщении, ток коллектора (практически он же - ток эмиттера) ограничен током базы, т.е. фактически резистором в базе транзистора. Такая схема (без коллекторного резистора) не очень стабильна в диапазоне температур, но в комнате это не страшно, зато позволяет "выжать" максимальный ток. Поэтому, чтобы ещё увеличить ток через светодиод, этот резистор можно спокойно убрать. Но если будет достаточно полученных 26 мА, можно его и оставить, - на коллекторе ещё остаётся 2,3 В, этот резистор на ограничение тока ещё не влияет. Он начнёт влиять на ограничение тока только с уровня (3 В - 1,22 В)/ 27 Ом = 66 мА.   Тогда лучше ограничиться током до 60 мА.   Нет.  "Поможет" уменьшение номинала резистора в базе. Зная теперь h21 транзистора, его легко пересчитать. Чтобы поднять ток до 60 мА (точно в импульсе безопасно практически для любого ИК-светодиода), номинал резистора в базе должен быть (3 В - 1,93 В)/(60 мА / 250) = 4,3 кОм. Ток с выхода контроллера (он же - ток в базу) при этом будет 0,24 мА - гораздо меньше максимально-допустимого. Если вы про ИК-светодиод и про ток через него, то да, конечно. Чем больше ток, тем больше излучение, тем больше сигнал на входе приёмника. Но с дальностью действия ток связан нелинейно. При увеличении тока в два раза дальность увеличится существенно меньше, чем в два раза. Надеюсь теперь вы без проблем доведёте свой пульт "до ума".
    • А почему такой высоковольтный полевик применяется? 900В куда столько, чем плох 8n60? 600В вполне годится для обратнохода а вот 500 уже на удачу.
    • а есть ли в продаже заводские платки Парафинн мини?
    • И тебе главное не перепутай детальки
  • Similar Content

    • By sunjob
      добрый день
      проект v-usb
      выкус из спецификации/инета/форумов:
      - реализация не полностью соответствует стандарту
      - работа на 100% не гарантируется
      - питание по USB / с компа может провалиться до 4-4.5В (а F_CPU идет в "притирочку" ...)  :))
      у всех рекомендованных схем подключения (3 шт) имеются те или иные очевидные минусы.



      как следствие стабильно может работать только при "определенных условиях"
      в планах поработать с библиотекой.
      для начало решил "набросать" альтернативный вариант. (так сказать, попытаться закрыть все возможные дыры в подключении)


       
      достаем помидоры, баркова, мысли, высказываемся (заранее благодарен)
      tag: v-usb, usb, avr, atmega328p, avr-gcc, linux/mac-osx
      NO atmega32u4, NO arduino pro micro etc...

    • By Ivarrr
      Помогите понять где ошибка... не получается реализовать попеременный опрос 2ух каналов АЦП. Данные с одного канала должны передаваться на первый индикатор как напряжение, а со второго, соответственно на второй индикатор как сила тока.
       
      #define F_CPU 8000000U
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <stdlib.h>
      #include <util/delay.h>
      #define INDICATOR PORTD
      #define RANK PORTB
      unsigned int UR1=0, UR2=0, UR3=0, UR4=0; //переменные для деления на разряды значения напряжения
      unsigned int IR1=0, IR2=0, IR3=0, IR4=0; //переменные для деления на разряды значения силы тока
      int GainControl=1;
      int current_ch=0;
      float I, U;
      unsigned char voltage, current;
      unsigned int NUMS [10] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000}; // от 0 до 9
      int main(void)
      {
          DDRB=0xFF; PORTB=0x00; //ножки порта B для разряда
          DDRC=0x00; PORTC=0x00; //ножки порта C для АЦП
          DDRD=0xFF; PORTD=0xFF; //ножки порта D для индикаторов
          
          TCCR0 |= (1<<CS01); TCCR0 &= ~((1<<CS00) | (1<<CS02)); //настройка частоты таймера f/8
          TIMSK |= (1<<TOIE0); //разрешение прерываний по переполнению таймера
          TCNT0=0; // обнуление счетчика
          
          ADCSRA |= ((1<<ADEN) | (1<<ADSC) | (1<<ADPS2)); // запуск АЦП, запуск преобразования, предделитель 16
          ADCSRA &= ~((1<<ADFR) | (1<<ADIF) | (1<<ADPS1) | (1<<ADPS0)); // режим преобразвания прерывестый, флаг перобразования опущен, предделитель 16
          ADMUX |= ((1<<REFS0) | (1<<REFS1)); //источник опорного напряжения 2.56В
          ADMUX &= ~((1<<ADLAR) | (1<<MUX0) | (1<<MUX1) | (1<< MUX2) | (1<<MUX3)); // направление записи, измерительная ножка ADC0;
          
          sei(); // вкл прерывания
          while (1) 
          {
              if (ADCSRA & (1<<ADIF))
              {
                          U_Convert((U*5.00/1024)*100);
                          I_convert((I*5.00/1024)*100);
              }
          }
      }
      void U_Convert (unsigned int U_num)  //деление на разряды напряжения
      {
          UR1=U_num/100;
          UR2=U_num%100/10;
          UR3=U_num%10;
      }
      void I_convert (unsigned int I_num) //деление на разряды тока
      {    IR1=I_num/100;
          IR2=I_num%100/10;
          IR3=I_num%10;
      }
      ISR (TIMER0_OVF_vect)
      {        
          if (GainControl == 1) {INDICATOR = 0b11111110; RANK = NUMS[UR1];} //отображение 1ого разряда напряжения
          if (GainControl == 2) {INDICATOR = 0b11111101; RANK = NUMS[UR2];} //отображение 2ого разряда напряжения
          if (GainControl == 3) {INDICATOR = 0b11111011; RANK = NUMS[UR3];} //отображение 3ого разряда напряжения    
          if (GainControl == 4) {INDICATOR = 0b11110111; RANK = NUMS[IR1];} //отображение 1ого разряды силы тока
          if (GainControl == 5) {INDICATOR = 0b11101111; RANK = NUMS[IR2];} //отображение 2ого разряды силы тока
          if (GainControl == 6) {INDICATOR = 0b11011111; RANK = NUMS[IR3];} //отображение 3ого разряды силы тока
          GainControl++;
          if (GainControl > 6) GainControl=0; //  мониторинг переменной для управления затворами    
      }
      ISR (ADC_vect) 
      {
          if (current_ch == 0)
            {
                U = ADC;
                voltage = (U*2.56/1024)*100;
                ADMUX |= (1<<MUX0);
                current_ch = 1;
                ADCSRA |= (1<<ADSC);
            }
            else
            {
                I = ADC;
                current = (I*2.56/1024)*100;
                ADMUX &= ~(1<<MUX0);
                current_ch = 0;
                ADCSRA |= (1<<ADSC);
            }
      }
    • By Обычный Человек
      Микроконтроллер ATmega328p, внешний кварц 16МГц. Компилятор avr-gcc с оптимизацией O1

      Написал код для управление шаговым двигателем. Работает так: требуемая скорость задается переменной STP1_ReqSpeed, дальше с частотой 100Гц срабатывает таймер TIM0, который высчитывает с какой частотой надо подавать сигналы на вход шагового драйвера. TIM1 работает в режиме частотно импульсной модуляции и по прерыванию меняет значение пина на противоположное.

      Управление работает, скорость регулируется, но по какой то причине случаются пропуски шагов. Чаще всего во время ускорения. Количество пропусков от 0 до 4, обычно 2-3, длятся 32мс.

      Из кода вырезал неиспользуемое. Заменить прерывания на аппаратный ШИМ возможности нет. Как убрать эти пропуски?
      Осциллограммы:
       
       
    • By Артур Измаилов
      1.Создать схему в которой два светодиоды загораются в следующей последовательности:  1 и 2, 2 и 3, 3 и 4, …, 15 и 16, 1 и 2 и т.д. (т.е. создается эффект движения двух светодиодов).
      Дано условие выше. Решение задачи нужно представить в Proteus. Код для программирования пишу в AtmelStudio 7. Схему собрал в Proteus. Вывел 16 светодиодов через 2 порта (Порт B и Порт D). МК использовал ATMEGA 8 вариации в корпусе DIP с 28 ножками (SPDIL28). 
      До этого смог написать схему, чтобы работали светодиоды в последовательности 1.2.3.4.5....16.1.2.3.4 и тд. Делал через оператор FOR. Однако с этим кодом начались проблемы. Помогите пожалуйста. 
      Нижу представил изображение кода. 
      Заранее спасибо!
       

    • By Lisitsin
      Собираем компьютер ZX Spectrum на микроконтроллерах AVR своими руками!
      Проект открытый, все исходники и информация проекта по ссылке
      https://yadi.sk/d/9S2S0ZmNqsLykQ
      Проект печатной платы выполнен в PCAD-2006, программное обеспечение разработано в AVRStudio  4b401
      Здесь отвечу на все возникающие вопросы и помогу со сборкой и запуском
×
×
  • Create New...