Jump to content

Kostyanskiy

Members
  • Content Count

    48
  • Joined

  • Last visited

Everything posted by Kostyanskiy

  1. Есть ли способ подобрать их менее трудозатратно ?
  2. Я знаю, что мой подход в некоторых моментах не допустим, но в данном случае это прокатило: по расчетам, у меня должен стоять резистор 47,7 Ом, ближайший аналог 51 Ом, но у меня было только 120 Ом когда буду собирать окончательную версию схемы, поставлю тот который рассчитал Да и прям с МК, такой сигнал... А под нагрузкой вот: Беда... ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Итак, вернемся к нашим баранам, я как не настраиваю PID регулятор ему до лампочки, он живет своей жизнью: то он очень точно подстраивает напряжение и работает отлично, стабилизирует выходное напряжение не в зависимости от выходного сопротивления, а через неопределенное время начинает сбоить, то сразу после прошивки МК, ведет себя не предсказуемо. Что делать?
  3. Да учитывается, МК считает напряжение по формуле обычного делителя напряжения Uвх = Uвых * (R1+R2)/R2 Uвых = ADC(Входное преобразованое напряжение) * Aref(5вольт)/1024(разрядность АЦП) Потом это впихивается в PID регулятор и вывод в ШИМ
  4. Возможно я слепой или чего-то не понимаю, но осциллограф показывает только напряжение Uбэ -0.5 Вольта Uкэ Не понял: И я не понял как определить поведение тока осциллографом(если это возможно) Но тогда почему на резисторе R14 есть ШИМ модуляция(вместо полевика там npn биполярник С945)
  5. Кстати, этот момент мне тоже интересен. В следствии колебание напряжения как ведет себя ток?
  6. Куда мне до них, я пока им и в подметки не гожусь, но я учусь, и буду идти к своей цели, чего бы мне этого не стояло. У меня закончились logic level транзисторы, но даже этот транзистор открылся и смог "раскачать" биполярник, в последующем я заменил его на биполярный С945, и все работает нормально. Тогда почему в горячей части БП не используют полевики, он же из линейного режима не вылезут? Мультиметр показывает выходное напряжение на нагрузке преобразователя Вот на выходе МК: Вот на коллекторе Q1: Вот на нагрузке: Вопрос 1: Почему на нагрузке нету пульсаций, от слова совсем никаких? Вопрос 2: На базе просто постоянный сигнал, а на коллекторе ШИМ, это связано с направлением тока?
  7. Скважность 0 до 255, выходное напряжение преобразователя от 0.592 до 12.09 вольт Готов ответить Здесь я с вами не согласен уважаемый, граничная частота КТ818ГМ составляет 3МГц. Греется при больших токах на 8 - 9 ампер, но и частота низкая, всего-то 31 кГц Напряжение питания всего 24 вольта, не особо понял что вы имеете ввиду Спасибо учту CEF2N6A
  8. Не обращайте внимания, установлен простой дроссель из компьютерного блока питания, 20-40 микрогенри
  9. Пока 12 вольт, могу 24 подать Да, меняется, при не прерывном сигнале максимальное напряжение питание, при разной скважности или частоте(я и то, и то пробовал тыкать) напряжение меняется, так что я все по силовой схеме сделал правильно, а вот по программной не уверен Я тоже так подумал, схему сделал, но пока в железе не проверял, это не линейная схема, и я не думаю что это нужно 31 кГц, этого мало, но что есть, то есть
  10. Здравствуйте, столкнулся с перерегулировкой выходного сигнала. Применен PID регулятор. На входе АЦП МК мега8, стоит делитель напряжения который измеряет выходное напряжение(Обратная связь), МК рулит полевым транзистором, а он уже управляет биполярным. В настройке регулятора я задаю напряжение, к примеру, 3 вольта. В итоге, все 8, но не смотря на это, изменение сопротивления выходной нагрузки не сильно изменяет напряжение на ней. Подскажите, как калибровать этот регулятор и что нужно сделать, чтобы избежать перерегулирование сигнала? Алгоритм PID регулятора не мой, а позаимствован у Alex Gyver #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) #define R1 99.8 //KOm, сопротивление последовательного резистора, вольтметр #define R2 9.85 //KOm, сопротивление последовательного резистора, вольтметр #define K (R1+R2)/R2 int PID(float input, float setpoint, float kp, float ki, float kd, float dt, int minOut, int maxOut) { float err = setpoint - input; static float integral = 0, prevErr = 0; integral = constrain(integral + (float)err * dt * ki, minOut, maxOut); float D = (err - prevErr) / dt; prevErr = err; return constrain(err * kp + integral + D * kd, minOut, maxOut); } uint16_t AdcReadValue(const int pin) { //PC0 ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADMUX = (0<<REFS1)|(1<<REFS0); ADMUX &=~ (1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0); ADCSRA |= (1<<ADSC); //Начинаем преобразование while((ADCSRA & (1<<ADSC))); //проверим закончилось ли аналого-цифровое преобразование return (uint16_t) ADC; } int main(void) { cli(); DDRB |= (1<<3); TCCR2 |= (1<<WGM20)|(1<<WGM21)|(1<<COM21)|(1<<CS20); OCR2 = 0; sei(); float Voltage = 0; float Vset = 3.00; while (1) { Voltage = ((AdcReadValue(0)* 5.0) / 1024.0) * K; OCR2 = PID(Voltage, Vset, 1.0, 0.5, 2, 0.001, 0, 255); } }
  11. Вопросы уже отпали, спасибо Благодарю, попробую на досуге))
  12. Я просто хочу разобраться во внутренней логике работы значений TOP, BOTTOM, Immediate, и как с ним работать
  13. Ну, подключил сервопривод а ему нужен период 20 мкс с изменениям длительности импульса
  14. То есть, рисунок я сделал правильно, а что на счёт режима 15, что там тогда изменяет частоту, если OCR1A изменяет длительность импульса? И то, и другое
  15. Насколько я понял, это должно быть вот так, не уверен, в принципе, везде период одинаковый, но по спадающиму фронту
  16. Здравствуйте, мне надо изменить частоту ШИМ, я знаю, что этим занимается бит ICR1 в режиме 14. Я просто понять не могу в чем разница между ICR1 и OCR1A, кроме двойной буферизации второго, и как в режиме 14 ICR1 изменяет частоту если для этого есть OCR1A. На рисунке я отметил красным что мне не понятно, кроме последнего столбца, это флаг, это понятно. И что означает update of OCRx? Это значение OCR1A/B?
  17. Я правильно понимаю принцип работы, (условие: кнопка нажата) if((0b00001000 & 0b00001000) == 0) Но тогда почему у меня не работает эта конструкция if((0b00001000 & 0b00001000) == 1), а эквивалентная ей заработала if((0b00001000 & 0b00001000) != 0) Спасибо за помощь, проблемы были в следующем: -Плохой контакт -Не правильно подключен светодиод -Мой недосып
  18. А в чем проблема, катод к минусу, анод к плюсу
  19. Здравствуйте, решил в своем проекте подключить кнопку, но МК странно себя ведет, создал отдельный проект, подумал, что что-то в моем основном коде не так, но нет, этот код не работает и в отрыве от основного, что странно. Вот: #include <avr/io.h> int main(void) { DDRD |= (1<<0); //Выход DDRD &=~ (1<<3); //Вход while (1) { if(PIND & 0b00001000) PORTD |= (1<<0); else PORTD &=~ (1<<0); } } Проблема в том, что когда у меня лог. 1 на 3 порте, то светодиод гаснет, а по логике как бы должно быть (0b00001000 & 0b00001000) - подать лог. 1 на пин 0, (0b00000000 & 0b00001000) - подать лог. 0 на пин 0
×
×
  • Create New...