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

Rst7

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

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

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

    2

Весь контент Rst7


  1. И еще есть вторая ситуация, когда R2 > 80 Ом. Тоже все ок с мощностями, потому что TC таки задал ограничение на VCC<10В. Если это ограничение не задать, то да, второй области не существует.
  2. Два диапазона там (если при тех условиях, которые Вы привели в начале), от 0 до первого значения, и от второго до бесконечности. При других начальных условиях эти диапазоны могут перекрываться. Что-то Вы промахнулись в расчетах. При VCC=10 имеем ток в цепи 0.56А (ибо 10+7.6) и мощность на резисторе R2 почти 2.5Вт. А надо меньше 1Вт.
  3. Вы, уважаемый, видимо не цените время других людей. Тут как бы все помочь готовы, форум ради этого и существует, но решать школьные задачки с двумя резисторами, когда а) оказывается, задача ТСом уже решена б) ТС, оказывается, желает показать свою гениальность (например, обвинениями сообщества в том, что оно ему тут решение не привело) - это на грани если не нарушениия правил форума, то по меньшей мере - неуважения к приисутствующим. Если что, топик по приведенной ссылке я тоже почитал. Не надо так формулировать, тут собрались уважаемые люди. Хотите оставить след на форуме (в хорошем смысле) - излагайте решение сразу, для потомков останется или кому в работе пригодится, не надо вот этой "проффесорско"-академической театральщины.
  4. Я так понимаю, Вам деньги за часы, а не за результат платят? И ждать на форуме ответов можно до победного вместо того, чтобы уже этот делитель в рабочем приборе работал? 😉 Легко. Все равно все сведется к системе из двух неравенств. Одно - линейное, второе приводится к квадратному уравнению.
  5. Аналитический, папрашу ))))))) Все равно школа. Разве что для того, чтобы с умом взять поправку при прикидке на пальцах (см. выше), надо немножко помнить, о чем рассказывали на парах по матану, и что производная от x^2 равна 2x 😉
  6. Это уже что-то непонятное Вы говорите. Либо опять какая-то нехватка в условиях задачи. По условию 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В.
  7. Окей. Итого, избавляемся от VCC в рассуждениях следующим образом. Ограничение по мощности в 5Вт в резисторе R1 сопротивлением 10Ом говорит о том, что ток в цепи не превысит sqrt(5Вт/10ом)=0.707А. Чтобы при таком максимальном токе не превысить мощность в R2 на уровне 1Вт его сопротивление не должно быть больше, чем 1Вт/0.707А^2=2ом. Это и есть необходимое и достаточное условие для любых значений VCC, при котором не будет превышена мощность 5Вт в резисторе R1. Нафига тут диффуры - непонятно, задача школьная.
  8. При КЗ резистора R2 мощность на R1 при VCC=10В будет 10В^2/10ом=10Вт > 5Вт. Что-то в условиях у Вас не то.
  9. А покажите эту самую корявость в виде графика кучи точек с координатами x и y? Может там сначала надо банально прикинуть матрицу коррекции для того, чтобы из какого-нибудь сдвинутого эллипса сделать нормальный круг в центре координат, а потом уже "индексная дырка" справится без лишних телодвижений?
  10. Ну там для генерации меток используется __LINE__, да. Но вот void *jumper; ... goto *jumper это сугубо GCC'шные дела.
  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. Именно так. Крайне рекомендую ТС прислушаться к нашим советам.
  14. У меня питание это переменка от сети, которая может быть кривая-косая... Я из Да ну хватит Вам RMS напряжения по одному периоду.
  15. Не надо так делать. Будете мучаться со стабильностью. Сделайте лучше вот что. Оцените примерно вид функции PWM=f(Uпитания). Это может быть линейная функция, может быть набор табличных значений. И сделайте управление PWM=PID(Tтекущая,Tуставки)+f(Uпитания) Будет куда веселее работать. Ну и дальше напрашивается классика самообучения - если f(U) сделана таблицей, то можно подобучить на ходу, добавив после расчета PID коррекцию f[U]+=I*k , где k - маленький коэффициент, определяющий скорость обучения, I - значение интегратора.
  16. А зачем? PID-регулятор для того и устроен, чтобы не париться с этой самой статической только не ошибкой, а воздействием. Нужно оно - будет не ноль в I-звене, не нужно - в I-звене будет 0.
  17. Ну мы сейчас про дядю Васю, заменяющего ПИД. Это уже все последующие улучшения. Как и, например, разнообразные способы ограничения I-звена. И много всяких других костылей есть.
  18. Ну если дядя Вася заменяет собой интегральное звено (т.е. на выход суммируются не P, D и I звенья, а P, D и ручка, которую крутят), то именно так. Но если на выходе у нас сумма P, D, I и дяди Васи, то в установившемся режиме в интеграторе будет разность между требуемым воздействием для равновесия груза и ручкой. Т.е. то, что дядя Вася недокомпенсирует, возьмет на себе I-звено.
  19. Интегральная - нет. Потому что она компенсирует DC-составляющую ошибки. Представьте себе груз, поднимаемый двигателем до нужной точки. Вот когда все придет в устойчивое состояние, то в интеграторе будет значение, соответствующее весу груза. Чем больше вес, тем больше нужен мотору момент, чтобы груз не съехал, тем больше будет значение в интеграторе. А ошибка уже да, будет равна нулю, как и P-звено. И D-звено будет равно 0, потому что никто никуда уже не едет, просто удерживает.
  20. Moderator: Будьте добры, объясните, какое отношение имеет данный текст к конкретно этому разделу форума?
×
×
  • Создать...