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

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

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

Подробнее

Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Подробнее

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

  • Сообщения

    • Диод сгорел, электролит распёрло, предохранитель сгорает, с чего бы это?
    • Да. И формация, согласно частоте Шумена, меняется, "Капитал" К.М. и "Экономикс" Брю и Макконнел - в прошлом.  Крыша Б. Гейца (в РФии Греф) об этом (цифровой концлагерь, где Баран19 лишь инструмент)
    • Доброе утро. Немного может быть необычный вопрос. Кто что скажет про этот "генератор мяу"(верхняя часть) ? Динамик 50 ом если что есть, за 160р   mew.lay6
    • "Слабое Звено" и ДК легче (перегруз, где змеюка присутсвует). Ослик между ними, по умолчанию. Если два, то каскод рулит.
    • Если не захочу- не буду! Блин, Димон, ты ни как не желаешь понять, чего я тебе толкую! Есть территория, но на ней нету государства, а только фирмы, и мы на ней живём. А будут депутаты и партии- это решать только нам. Наше население упорно не желает осознавать себя народом, чья земля у него под ногами, хозяином. Тебе, я уже спрашивал, накой партии, и депутаты? Вот лично тебе они накой? Президент тебе зачем? Он (и) чего-то делает для тебя, или хоть для кого-то полезного? Производит какую-то продукцию? Достал ты уже со своим СССРом. Он закончился 30 лет назад, 17 марта. И нету его. А территория осталась, наша с тобой территория. Не путинга, не Усманова, и Ротенберга, а наша с тобой. Вроде простая вещь- а ты понять её не хочешь.
    • Вряд ли переполюсовка, 20 секунд - то работало. А диодом, похоже, назван конденсатор. Если это действительно так, то рецепт только один - сложить всё в пакет и к мастеру.
  • 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...