Перейти к содержанию
    

Rst7

Модератор
  • Постов

    4 619
  • Зарегистрирован

  • Победитель дней

    2

Сообщения, опубликованные Rst7


  1. On 2/26/2023 at 6:58 PM, san822 said:

    Условия задачи примерно следующие.

    VCC - от 0 до 10 Вольт.
    Мощность на резисторе R1 не может превысить 5 Ватт при любых положениях переменного резистора R2 и при любых напряжениях VCC. 
    .... 

    24-02-2023.png

     

    И на схеме R1=10ом.

  2. 4 minutes ago, quark said:

    при сопротивлении R2 не более 2 Ом.

    И еще есть вторая ситуация, когда R2 > 80 Ом. Тоже все ок с мощностями, потому что TC таки задал ограничение на VCC<10В. Если это ограничение не задать, то да, второй области не существует.

  3. 8 minutes ago, san822 said:

    На всякий случай отмечу, что ответ - это диапазон (например, от Х1 Ом до Х2 Ом) значений R2, при котором на нём выделяется мощность не более одного Ватта.

    Два диапазона там (если при тех условиях, которые Вы привели в начале), от 0 до первого значения, и от второго до бесконечности. При других начальных условиях эти диапазоны могут перекрываться.

    1 minute ago, Plain said:

    PR2 = R2 · IR22 = R2 · (UVCC / (R1 + R2))2 = R2 · UVCC2 / (R1 + R2)2 — далее это надо упростить до квадратного уравнения и решить его — ответ, повторю, R2 = 7,639 Ом.

    Что-то Вы промахнулись в расчетах. При VCC=10 имеем ток в цепи 0.56А (ибо 10+7.6) и мощность на резисторе R2 почти 2.5Вт. А надо меньше 1Вт.

  4. 29 minutes ago, san822 said:

    Моя задача уже решена

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

     

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

    • Like 2
    • Upvote 1
  5. 19 minutes ago, san822 said:

    Я пока подожду ещё ответов.

    Я так понимаю, Вам деньги за часы, а не за результат платят? И ждать на форуме ответов можно до победного вместо того, чтобы уже этот делитель в рабочем приборе работал? 😉

    21 minutes ago, san822 said:

    Можно ли, например, в Exel создать калькулятор ?

    Легко. Все равно все сведется к системе из двух неравенств. Одно - линейное, второе приводится к квадратному уравнению.

  6. 4 minutes ago, san822 said:

    Да, это и есть тот самый графический способ решения.

    Аналитический, папрашу )))))))

    Все равно школа. Разве что для того, чтобы с умом взять поправку при прикидке на пальцах (см. выше), надо немножко помнить, о чем рассказывали на парах по матану, и что производная от x^2 равна 2x 😉

  7. 17 minutes ago, san822 said:

    Но, если взять резистор сопротивлением 2 Ома, то мы ограничиваем пределы регулирования резисторной сборки. 

    Нам же нужно диапазон регулировки взять побольше.

    Это уже что-то непонятное Вы говорите. Либо опять какая-то нехватка в условиях задачи.

    По условию VCC может быть любым без превышения мощности на резисторе R1. Это и ограничивает ток в цепи.

    Либо VCC может быть ограничен (как в первом посте 10В)? Тогда да, на допустимых значениях появляется еще один вариант, там, где R2 сильно велик. Это случай будет выглядеть так

    P2=U2^2/R2, а U2=VCC*R2/(R2+R1) => P2=VCC^2*R2/(R2+R1)^2 => VCC^2*R2=P2*(R2+R1)^2 и так далее, квадратное уравнение, выписывать лень, но все еще школа, как она есть.

     

    Конечно, я бы остановился на прикидке на пальцах, т.к. допустимые мощности прилично отличаются. При прикидке на пальцах второй случай будет рассеивать всю мощность на R2, т.е. имеем его сопротивление не менее 10В^2/1Вт=100Ом. Можно вкинуть поправочку, и взять 80Ом. Это почти точно будет 1Вт при VCC 10В.

  8. 1 minute ago, san822 said:

    Да, забыл расставить приоритеты.

    Напряжение VCC может быть от нуля до 10 Вольт, но исключается ситуация, при которой мощность на R1 превысит 5 Ватт. Т

    Т. е. VCC зависит от мощности R1.

     

    Окей. Итого, избавляемся от VCC в рассуждениях следующим образом. Ограничение по мощности в 5Вт в резисторе R1 сопротивлением 10Ом говорит о том, что ток в цепи не превысит sqrt(5Вт/10ом)=0.707А.

    Чтобы при таком максимальном токе не превысить мощность в R2 на уровне 1Вт его сопротивление не должно быть больше, чем 1Вт/0.707А^2=2ом.

    Это и есть необходимое и достаточное условие для любых значений VCC, при котором не будет превышена мощность 5Вт в резисторе R1.

    Нафига тут диффуры - непонятно, задача школьная.

    • Upvote 1
  9. 12 minutes ago, san822 said:

    Условия задачи примерно следующие.

    VCC - от 0 до 10 Вольт.
    Мощность на резисторе R1 не может превысить 5 Ватт при любых положениях переменного резистора R2 и при любых напряжениях VCC. 

     

    При КЗ резистора R2 мощность на R1 при VCC=10В будет 10В^2/10ом=10Вт > 5Вт. Что-то в условиях у Вас не то.

    • Upvote 1
  10. А покажите эту самую корявость в виде графика кучи точек с координатами x и y? Может там сначала надо банально прикинуть матрицу коррекции для того, чтобы из какого-нибудь сдвинутого эллипса сделать нормальный круг в центре координат, а потом уже "индексная дырка" справится без лишних телодвижений?

  11. 1. Ну потому что setjmp/longjmp - совсем другое пальто. Это уже куда ближе к настоящей многопоточности, с собственными стеками потоков и так далее. Другая весовая категория.

    2. Конечно есть. Это хорошая замена тем же конечным автоматам, чья читабельность очень быстро становится равной нулю с увеличением количества состояний.

    3. Да ничего страшного же. Он же в основном в таком виде, типа while(!condition) P_YIELD(); Некоторая сноровка нужна в том, чтобы не забывать, что локальная переменная (не static) не переживет этого вызова, в остальном ничего сложного.

    4. см. п 2

    5. Так это ж самый главный вопрос. Это ж интересно только тем, кто понимает, где и как применять такие протопотоки. А обсуждать, где их применять - мне не очень интересно, есть масса обсуждений в интернетах.

     

    Объективно код тут получается примерно такой же, как и protothreads для GCC с вычисляемым goto. Просто я GCC не считаю достойным компилятором (он давно стал компилятором для x86), а в IAR'е вычисляемых goto нет, но зато можно вышеописанным способом сделать.

  12. Случайно тут в голову идея пришла, в крайнем IAR'е вроде хорошо работает. В отличии от классики (сделанной через Duff's device) можно использовать switch в том числе.

    #define P_START() do{ \
      static void *___jumper___; \
      if (___jumper___) \
      { \
        __asm volatile("BX\t%0\nyield::"::"r"(___jumper___):"r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r14","cc","memory"); \
        __asm volatile("STR\tLR,[%0]"::"r"(&___jumper___):"r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r14","cc","memory"); \
        return; \
      } \
    } while(0)
    
    #define P_YIELD() __asm volatile("BLX\tyield"::: \
                           "r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r14","cc","memory")
    
    int foo(int);
    
    void Test(void)
    {
      P_START();
      for(;;)
      {
        static int counter;
        for(counter=0; counter<8; counter++)
        {
          foo(counter);
          P_YIELD();
        }
      }
    }
    
    #pragma optimize=no_inline
    void main(void)
    {
      for(;;)
      {
        Test();
      }
    }

    Наверное, подобное можно и в GCC, если, конечно, там аллокатор регистров с ума не сойдет.

  13. 1 hour ago, quark said:

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

    Именно так. Крайне рекомендую ТС прислушаться к нашим советам.

  14. Just now, Quantum1 said:
    9 minutes ago, Rst7 said:

    Не надо так делать. Будете мучаться со стабильностью.

    Сделайте лучше вот что. Оцените примерно вид функции PWM=f(Uпитания). Это может быть линейная функция, может быть набор табличных значений. И сделайте управление PWM=PID(Tтекущая,Tуставки)+f(Uпитания)

    Будет куда веселее работать.

    У меня питание это переменка от сети, которая может быть кривая-косая... Я из

    Да ну хватит Вам RMS напряжения по одному периоду.

  15. 11 minutes ago, Quantum1 said:

    В итоге думаю каскадировать  два ПИДа

    Не надо так делать. Будете мучаться со стабильностью.

    Сделайте лучше вот что. Оцените примерно вид функции PWM=f(Uпитания). Это может быть линейная функция, может быть набор табличных значений. И сделайте управление PWM=PID(Tтекущая,Tуставки)+f(Uпитания)

    Будет куда веселее работать.

    Ну и дальше напрашивается классика самообучения - если f(U) сделана таблицей, то можно подобучить на ходу, добавив после расчета PID коррекцию

    	f[U]+=I*k
    	

    , где k - маленький коэффициент, определяющий скорость обучения, I - значение интегратора.

  16. 2 minutes ago, yamantau said:

    Нужно различать объекты управления с самовыравниванием и без самовыравнивания, т.е. где то будет статическая ошибка, где то нет.

    А зачем? PID-регулятор для того и устроен, чтобы не париться с этой самой статической только не ошибкой, а воздействием. Нужно оно - будет не ноль в I-звене, не нужно - в I-звене будет 0.

  17. 18 minutes ago, quark said:

    В классическом случае, дядя Вася только уставку крутит - задает желаемое значение.

    Ну мы сейчас про дядю Васю, заменяющего ПИД.

     

    18 minutes ago, quark said:

    Но можно в эту сумму и уставку еще добавать (дядю Васю)

     

    18 minutes ago, quark said:

    Ну а по хорошему, нужно ограничивать скорость изменения уставки.

    Это уже все последующие улучшения. Как и, например, разнообразные способы ограничения I-звена. И много всяких других костылей есть.

  18. 12 minutes ago, Quantum1 said:

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

    Ну если дядя Вася заменяет собой интегральное звено (т.е. на выход суммируются не P, D и I звенья, а P, D и ручка, которую крутят), то именно так.

    Но если на выходе у нас сумма P, D, I и дяди Васи, то в установившемся режиме в интеграторе будет разность между требуемым воздействием для равновесия груза и ручкой. Т.е. то, что дядя Вася недокомпенсирует, возьмет на себе I-звено.

  19. 30 minutes ago, Quantum1 said:

    Ведь все три составляющие ПИДа должны стремиться к нулю, при достижении целевого значения?

    Интегральная - нет. Потому что она компенсирует DC-составляющую ошибки. Представьте себе груз, поднимаемый двигателем до нужной точки. Вот когда все придет в устойчивое состояние, то в интеграторе будет значение, соответствующее весу груза. Чем больше вес, тем больше нужен мотору момент, чтобы груз не съехал, тем больше будет значение в интеграторе. А ошибка уже да, будет равна нулю, как и P-звено. И D-звено будет равно 0, потому что никто никуда уже не едет, просто удерживает.

×
×
  • Создать...