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...

  • Сообщения

    • И тебе главное не перепутать резистор с конденсатором
    • Александр, привет! Извиняюсь, что редко захожу на форум. Вы знаете, как не было, так и нет. Статистика, туды её в качель (судя по всему, по требованиям правительства РБ и лично ..., т.к. правительство в РБ полностью подчиняется ... ), требует от медиков не отражать в больничных, в сводках о количестве реальном. А мне пока не суждено было с ним встретится. @Александр Д. , искренне завидую Вам, что у вас там все получилось. Помню, у нас с Вами, @Александр Д. , получилась встреча в Минске. Кстати, если будете вновь у своего друга в Минске, звоните, СМС пересылайте. Встретимся! Владимир Маленович, @malenich , я тебе вновь объявляю - если  в Беларусь будешь собираться, дай знать. Попробую в любую точку Беларуси  добраться, лишь бы встретиться с тобой! Спсб!
    • к бабке не ходи ладненько - давай - удачи .
    • А я не ипу в отличие от тебя   У тебя конечно, погорит все
    • рад) терь ты не сможешь ипать мозг - ни себе - ни людям  я не колдовал) просто поставил как есть - эти молотилки должны давать кпд в 90% , есть нагревы - перегревы - долго он не отработает - и на выходе будет гуамно) вот и все .
  • 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...