Мощный стабилизатор тока для диодов на Attiny85

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

схемка интересная, но 2к на закрытие ключа не маловато?
Я вот тоже дорисовал :)))
СпойлерИзображение
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение oleg110592 »

сильно не всматривался в вашу схему - похоже что должна работать. В моей же схеме, если транзистор будет греться можно поставить полумост из двух транзисторов npn и pnp или драйвер как у вас.
Реклама
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

oleg110592 писал(а):сильно не всматривался в вашу схему - похоже что должна работать. В моей же схеме, если транзистор будет греться можно поставить полумост из двух транзисторов npn и pnp или драйвер как у вас.
В моей схеме что самое лучшее это мк с оу сидят на так сказать отдельном от силовой части питании (на схеме специально так нарисовано) и по идее не должно быть помех от ключа.
Простые схемы для новичков и китайцев. Я все же за качество, хотя нагромождение тоже не всегда приводит к положительному результату.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение oleg110592 »

как раз глянул питание ОУ, если посчитать, на входах будет напряжение равное 18В минус падение на 3 светодиодах (приблизительно 3В * 3= 9). Итого на входах ОУ будет 18-9=9В. Будет ли он нормально работать при питании 5В. Наверное надо запитывать от 18В.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

кстати да! не учел этого, надо бы в протеусе проверить, балансный вход все мозги затуманил :)))
протеус дает добро :))) хотя мож и глюк Ku=10 для ОУ
СпойлерИзображение
все же это глюк
Реклама
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

пока собрал дифференциальный усилитель, вроде работает, завтра соединю все во едино и займусь АЦП Ku=~29,5 хотя есть смещение в 10мВ, но это мелочи.
СпойлерИзображение
При использовании одного канала АЦП без разницы какой выбрать?
Собрал сегодня все водино и столкнулся с несколькими проблемами:
1. на ОУ был возбуд, решилось увеличением сопротивления с 1,8к до 9,1к с выхода ОУ
2. 300мВ смещения при подключении к любой средней точке выше 0 и ниже Uпит. с замкнутыми входами ОУ между собой, что приводит к 1- забить и учитывать в программе, либо где-то копать, но не знаю где :(
кто подскажет где я накосячил? компилируется без ошибок, но в железе даже шим перестал запускаться
PB1-выход шим (OC1A)
PB3-вход ADC (ADC3)
Спойлер

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>
unsigned int adc_counter,current;
volatile unsigned long current_value;
__attribute__((OS_main))


ISR(ADC_vect)
{
ADCSRA = 0; // Выключаем АЦП 
current_value = current_value + ADCH; // Суммируем измеренные значения тока и помещаем в буфер
adc_counter++; // Увеличиваем счетчик выборок АЦП на 1
// Включаем АЦП
ADCSRA |= (1 << ADEN)|(1 << ADSC)|(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0)|(1 << ADIE);
}
void main(void) 
{
    // Crystal Oscillator division factor: 1
    CLKPR=0x80;
    CLKPR=0x00;
    PORTB=0b00000000;
    DDRB=0b00001000;
    // Enable the PLL
    PLLCSR=0x02;
    // Wait for the PLL to lock
    while ((PLLCSR & 1)==0);
    // Enable the 64MHz clock
    PLLCSR|=0x04;
    TCCR1=0x61; //64
    //TCCR1=0x62; //32
    //TCCR1=0x63; //16
    //TCCR1=0x64; //8
    GTCCR=0x00;
    TCNT1=0x00;
    OCR1A=0x00;
    OCR1B=0x00;
    OCR1C=0xFF;
    // Analog Comparator initialization
    // Analog Comparator: Off
    ACSR=0x80;
    ADCSRB=0x00;
	OCR1A=128;  // шим 50%
ADMUX |= (1 << REFS1)|(0 << REFS0)|(0 << REFS0); // Внутренний ИОН 1,1V
ADMUX |= (0 << MUX3)|(0 << MUX2)|(1 << MUX1)|(1 << MUX0); // Подключаем канал ADC3
ADCSRA |= (1 << ADEN) // разрешение АЦП
|(1 << ADSC)
|(1 << ADLAR) //8-bit ADC
// запуск преобразования
|(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0) // предделитель на 64
|(1 << ADIE); // разрешение прерывания от АЦП
sei(); // Глобально разрешаем прерывания

while (1)
	{
      if (adc_counter>10)
      {
		  ADCSRA = 0;
		  current = (current_value/adc_counter);
		  if (current > 93)
		  {
			  OCR1A--;
		  }
		  if (current<92)
		  {
			  OCR1A++;
		  }
	  }		  
		  current_value = 0;
		  adc_counter = 0;
		 ADCSRA |= (1 << ADEN)|(1 << ADSC)|(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0)|(1 << ADIE); //включаем ADC
      }
	 
}
с шим разобрался накосячил с DDRB :)))
Реклама
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

Все :))) вроде заработало, держит ток 2,52-2,61
вот рабочий код
Спойлер

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>
unsigned int adc_counter,current;
volatile unsigned long current_value;
__attribute__((OS_main))


SIGNAL(SIG_ADC)
{
ADCSRA = 0x00; // Выключаем АЦП 
current_value = current_value + ADCH; // Суммируем измеренные значения тока и помещаем в буфер
adc_counter++; // Увеличиваем счетчик выборок АЦП на 1
//Включаем АЦП
ADCSRA=0b11111101;
}
int main(void) 
{
    // Crystal Oscillator division factor: 1
    CLKPR=0x80;
    CLKPR=0x00;
    PORTB=0b00000000;
    DDRB=0b00000010;
    // Enable the PLL
    PLLCSR=0x02;
    // Wait for the PLL to lock
    while ((PLLCSR & 1)==0);
    // Enable the 64MHz clock
    PLLCSR|=0x04;
    TCCR1=0x61; //64
    //TCCR1=0x62; //32
    //TCCR1=0x63; //16
    //TCCR1=0x64; //8
    GTCCR=0x00;
    TCNT1=0x00;
    OCR1A=0x00;
    OCR1B=0x00;
    OCR1C=0xFF;
    // Analog Comparator initialization
    // Analog Comparator: Off
    ACSR=0x80;
    ADCSRB=0x00;
	OCR1A=10;  // шим 50%
	
ADMUX=0b10100011;
ADCSRA=0b11111101;
sei(); // Глобально разрешаем прерывания

while (1)
	{
      if (adc_counter > 20)
      {
		  ADCSRA = 0x00;
		  current = (current_value/adc_counter);
		  if (current_value > 164)
		  {
			  OCR1A--;
		  }
		  if (current_value<162)
		  {
			  OCR1A++;
		  }
	 }		  
		  current_value = 0;
		  adc_counter = 0;
		ADCSRA=0b11111101;
      }
	 
}
Все банально просто в алгоритме регулировки...
теперь можно приниматься за улучшения если у кого есть идеи, у меня пока нет
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение oleg110592 »

поздравляю
__attribute__((OS_main)) или выкинуть вообще или поставить над main (небольшая экономия)
http://electronix.ru/forum/lofiversion/ ... 89-50.html
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

да оно меня не напрягает, и так только на 10% использована память :)))

Возникла идея немного другого алгоритма стабилизации.
предположим ADCH для выбранного тока будет равным 100 (значение напряжения на шунте)
начальная установка для шим OCR1A = 10 тогда регулировка сводится к одному выражению:
OCR1A=OCR1A*100/ADCH
причем происходит мгновенная реакция на изменение тока вызванного например резким увеличением питания к примеру на 5 вольт

для случая как в программе ADCH=164
OCR1A=OCR1A*164/ADCH
1. подали питание OCR1A=10*164/15(ADCH предположим очень маленькое значение)=109
2. OCR1A=109*164/140=127
....
n. OCR1A=215(предположим)*164/164=215 для случая с неизменным входным напряжением
прыгнуло напряжение питания:
n+k. OCR1A=215*164/255=138
т.е. реакция на изменение пропорциональна в процентном соотношении
вроде все хорошо, но чувствую есть где то подвох, который я не заметил еще.
Спойлер

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>
__attribute__((OS_main))
SIGNAL(SIG_ADC)
{
OCR1A=OCR1A*164/ADCH;
}
int main(void) 
{
    CLKPR=0x80;
    CLKPR=0x00;
    PORTB=0b00000000;
    DDRB=0b00000010;
    PLLCSR=0x02;
    while ((PLLCSR & 1)==0);
    PLLCSR|=0x04;
    TCCR1=0x61; //64
    GTCCR=0x00;
    TCNT1=0x00;
    OCR1A=0x00;
    OCR1B=0x00;
    OCR1C=0xFF;
    ACSR=0x80;
    ADCSRB=0x00;
    OCR1A=10;     
ADMUX=0b10100011;
ADCSRA=0b11111101;
sei(); // Глобально разрешаем прерывания

while (1)
   {
    }
    
}
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

данный алгоритм не заработал в железе, деление сжирает слишком много ресурсов
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Alexeyslav »

Сделай ассиметричную скорость снижения тока - например повышение тока на 1 за такт, а понижение - 16 единиц за раз(с проверкой возможного выхода за пределы нуля). Либо сравнивай измеренное значение тока не с установленным значением, а вычисляй разницу между измеренным и установленным а потом в зависимости от величины разницы делать +-1 +-4 +-16 к ШИМ и т.д. можно даже в + делать меньшие значения чем в -.

Ведь всеравно, твоё измеренное значение запаздывает по сравнению с актуальным из-за RC-цепи в аналоговой части и если обнаружил сильную перегрузку по току - то она длится по крайней мере уже десяток циклов ШИМ. Из-за этого кстати можно поиметь непрекращающиеся осцилляции.

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

Поэтому я и предлагаю ввести разные коэффициенты в интегральную составляющую(скорость изменения ШИМ-сигнала) в зависимости от величины отклонения от нормы. При сильном отклонении регулятор становится грубым но быстрым.
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

пока оставил первый вариант, по скорости реакции вроде норм себя чувствует, по плавности свечения тоже давольно стабилен.
Аватара пользователя
113
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт мар 14, 2014 14:29:22
Откуда: Moscow

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение 113 »

Добавлю свои 5 коп. Правда на MSP430F2012 и ток 0,3-0,4А.

Код: Выделить всё

while(1)
	{
			
		if(P1IN & 0x08) 
		  Threshold = 273;
		else	
		  Threshold = 205;

		
		ADC10CTL0 |= ENC + ADC10SC; // start sampling
 		while(ADC10CTL1 & ADC10BUSY);
		ADC_avg = (ADC10MEM + ADC_avg * 7)>>3;
	 	if((ADC_avg > Threshold+100)) tmp--;			
	 	if((ADC_avg < Threshold)) reg_counter++;
	 	if((ADC_avg > Threshold)) reg_counter--;	
		if(reg_counter >500)
		{
		  reg_counter = 0;
  		  if(tmp < MAX_PWM+1)	tmp++;
		}
		else
		if(reg_counter <-500)
		{
		  reg_counter = 0;
		  if(tmp > 0)	tmp--;
		}		
		TACCR1 = tmp;
		ADC10CTL0 &= ~ENC;
		
		if(!(flags & START_FLAG))
		{
		  wdt_counter++;
   		  if(wdt_counter >= START_DELAY)
		  {
		    wdt_counter = 0;
			flags |= START_FLAG;
		  }
		}
	}
Коэффициенты подбирались "по месту". Плавный старт + 2 режима.
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Mishany »

до тока 1А полно аналоговых стабилизаторов тока, на примере MBI6651
Аватара пользователя
113
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт мар 14, 2014 14:29:22
Откуда: Moscow

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение 113 »

Так у аналоговых КПД низкий.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение Alexeyslav »

По отношению литиевого аккумулятора в качестве источника питания и типичного белого светодиода, при 70% заряда батареи и ниже КПД линейного стабилизатора составляет 98% или около того, в то время как импульсные преобразователи сталкиваются с трудностями и подобный КПД для них достигается очень дорогой ценой - как стоимости так и сложностью схемотехники. Если взять типовые микросхемы и посредственные транзисторы получить КПД лучше 70% в таких условиях будет трудно, разве что делать понижающий на один диод и 2-3 последовательно соединенные батареи. Но в схеме 1 батарея - 1 диод проще, дешевле и надежней линейного стабилизатора тока нет.
Аватара пользователя
113
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт мар 14, 2014 14:29:22
Откуда: Moscow

Re: Мощный стабилизатор тока для диодов на Attiny85

Сообщение 113 »

Ну при конкретных условиях это справедливо. Мой стабилизатор должен был работать в диапазоне от 8 до 30В, там о линейном и речи быть не может.
Ответить

Вернуться в «Разные вопросы по МК»