СИФУ на amega328

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Хай гайс)) Пытаюсь сделать СИФУ управления трехфазным мостом Ларионова. Для этого смоделировал схему в протеусе. В протеусе все работает. На PORTС с 0-5 биты формируются импульсы управления. И как видно из осциллограммы протеуса (я вывел на осцил 0й, 4й, 5й порт) успешно. А вот на практике с 0 по 3й порт формируются правильно, а вот в четвертом и пятом присутствует лишние импульс, ну это ладно-видимо угол сдвига съехал относительно детектора. Но вот почему амплитуда упала в два раза это вообще непонятно. Помогите плиииз разобраться.
Вложения
протеус.png
(104.33 КБ) 995 скачиваний
Сигнал на портах 0,1,2,3.jpg
(131.13 КБ) 503 скачивания
Cигнал на портах 4.5.jpg
(200.9 КБ) 453 скачивания
разводка платы.jpg
(70.84 КБ) 509 скачиваний
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

пока думаю над схемой, расскажу о своем опыте постройки такой штуки. Я не давал как по книжке два импульса, я вывел из порта постоянный пульсирующий сигнал, завел его на драйвера ir2104, а оттуда через пару полевичков на импульсный трансик. И на каждый драйвер подавал сигнал SD. В итоге все работало - я не парился с двумя импульсами и просто по нужной фазе подавал сигнал SD. Работало.

Добавлено after 3 minutes 50 seconds:
Пока ничего не понятно. Покажите-ка программку.
Вложения
Безымянный.png
(101.86 КБ) 796 скачиваний
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Я делаю трехфазный тиристорный выпрямитель Ларионова. Суть которого в том, чтобы подавать на соответствующую пару тиристоров импульсы управления, сдвигая которые можно регулировать выходное напряжение во всем диапазоне 0-540В.
Может с прикрепленной схемой и исходником станет понятнее.
Вложения
СИФУ.png
(96.15 КБ) 905 скачиваний
Исходник.png
(80.83 КБ) 693 скачивания
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

DenChik87 писал(а): Но вот почему амплитуда упала в два раза это вообще непонятно.
Отключите (отрежьте) порт от остальной схемы и гляньте амплитуду.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Сообщение korob »

DenChik87 писал(а):Но вот почему амплитуда упала в два раза это вообще непонятно
А где схема управления тиристорами? :? Каким образом вы их открываете, опторазвязка или трансформаторы?
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

ну если 2,5В на самом выводе микрухи, то думаю порт не здоров. я бы взял новый МК, запаял его без выходных транзисторов, или что у вас там - чтобы просто в воздухе висели выхода, залить прошивку и смотреть.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3396541#p3396541"]ну если 2,5В на самом выводе микрухи, то думаю порт не здоров. я бы взял новый МК, запаял его без выходных транзисторов, или что у вас там - чтобы просто в воздухе висели выхода, залить прошивку и смотреть.[/uquote]
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3396541#p3396541"]Отключите (отрежьте) порт от остальной схемы и гляньте амплитуду..[/uquote]
Порт здоров. ОтрезАл от остальной схемы. Делал и на другой atmega328 и даже на atmega8 код перевел. Результат такой же, все как на тех фотах осциллограммы выше. А может такое быть, что при маленькой длительности импульса какой-нибудь баг с портом происходит?
[uquote="korob",url="/forum/viewtopic.php?p=3396541#p3396541"]А где схема управления тиристорами? :? Каким образом вы их открываете, опторазвязка или трансформаторы?[/uquote]
Опторазвязка будет на ТО325-12.5, как-то так:
Вложения
опторазыязка.jpg
(185.01 КБ) 681 скачивание
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

Закоментить кусок который пишет в порт С, в главном цикле сделать PORTC=0xFF, задержка около 100мС, PORTC=0, задержка около 100мС и так по кругу. Чтобы только этот код писал в порт. Об картинке отчитаться.
Кстати, вот мой СИФУ и программа.
Спойлер

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

#include <ioavr.h>
#include <inavr.h>
#include <math.h>

unsigned int timer_phase_A0,timer_phase_B0,timer_phase_C0;
unsigned int timer_phase_A1,timer_phase_B1,timer_phase_C1;
char PORTD_buffer, PINA_buffer;
unsigned int phase_A,phase_B,phase_C;
char flag_A0=0,flag_B0=0,flag_C0=0;
unsigned int angle_alpha;
#pragma vector=TIMER1_COMPA_vect
__interrupt void TIMER1_comp(void){
  TCNT1=0;
  
  if((PINB&1)==1){
    phase_B=65535;}
  else{phase_B=0;}
  if((PINB&2)==2){
    phase_A=65535;}
  else{phase_A=0;}
  if((PINB&4)==4){
    phase_C=65535;}
  else{phase_C=0;}
  timer_phase_A0&=phase_A;
  timer_phase_A1&=(~phase_A);
  timer_phase_B0&=phase_B;
  timer_phase_B1&=(~phase_B);
  timer_phase_C0&=phase_C;
  timer_phase_C1&=(~phase_C);
  if((timer_phase_A0<1000)&&(timer_phase_B0<1000)&&(timer_phase_C0<1000)){
  timer_phase_A0++;
  timer_phase_B0++;
  timer_phase_C0++;
  timer_phase_A1++;
  timer_phase_B1++;
  timer_phase_C1++;}
}

void main(void)
{
TCCR1A=0;
TCCR1B|=(1<<CS11);//x8
OCR1A=100;
TIMSK|=(1<<OCIE1A);
TCCR2|=(1<<WGM21);
TCCR2|=(1<<COM20);
TCCR2|=(1<<CS20);
OCR2=40;
ADMUX|=(1<<REFS0);
ADCSRA|=(1<<ADEN);
ADCSRA|=(1<<ADPS0);
ADCSRA|=(1<<ADPS1);
ADCSRA|=(1<<ADPS2);
ADCSRA|=(1<<ADSC);
SREG|=128;
DDRD=0xff;
DDRC=0xff;
unsigned int blinker=0;
while(1){
  //if((PINA&8)==8){
  PORTD_buffer=0;
if((timer_phase_A0<1000)&&(timer_phase_B0<1000)&&(timer_phase_C0<1000)){  
  if(timer_phase_A0>angle_alpha){
   PORTD_buffer|=2&phase_A;}
  if(timer_phase_A1>angle_alpha){
   PORTD_buffer|=4&(~phase_A);}
  if(timer_phase_B0>angle_alpha){
   PORTD_buffer|=8&phase_B;}
  if(timer_phase_B1>angle_alpha){
   PORTD_buffer|=16&(~phase_B);}
  if(timer_phase_C0>angle_alpha){
   PORTD_buffer|=32&phase_C;}
  if(timer_phase_C1>angle_alpha){
   PORTD_buffer|=64&(~phase_C);}
  PORTC&=~(8+4);
  blinker=0;
  }
  PORTD=PORTD_buffer;
  if((ADCSRA&16)==16){
  angle_alpha=(ADC/10);
  if(angle_alpha>100){angle_alpha=100;}
  angle_alpha=100-angle_alpha;
  ADCSRA&=~16;
  ADCSRA|=(1<<ADSC);
  }
  PINA_buffer=PINA;
  if(blinker<20000){
  PORTC|=2*(PINA_buffer&4);
  PORTC|=4&~(PINA_buffer&4);}
  else{PORTC&=~(8+4);}
  if(blinker>40000){
    blinker=0;}
  blinker++;
  if((PINA_buffer&4)==4){
    ADMUX|=(1<<MUX0);}
  else{ADMUX&=~(1<<MUX0);}
  //}
  //else{
    //PORTD=0;
    //PORTC=0;}
  }//while(1)
}//main
Вложения
Безымянный.png
(197.71 КБ) 823 скачивания
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Сделал немного иначе в прерывании закомментировал строчку которая выводила в порт значения из массива. Вместо нее PortC=0xff. Таким образом через каждые 3,3 мс в PortC превращается в высокий уровень на 100 мкс. И ооо чудо ни какой просадки до 2.5в не стало. На всех ножках одна картина. Но что это значит? Памяти не хватает запомнить массив,или что? Я так понял вы уже догадались?
Спойлер

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

ISR (TIMER1_COMPA_vect){
	OCR1AH=0x34;
	OCR1AL=0x08;
	static char i=0;
	PORTC=0xff; //это напимал
	//PORTC=mode[j][i]; - это закоментировал
	_delay_us(100);
	PORTC=0;
	i++;
	if (i==6){
		i=0;
		TCCR1B=0;
	}
}
Вложения
теперь так.jpg
(166.67 КБ) 803 скачивания
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="DenChik87",url="/forum/viewtopic.php?p=3396900#p3396900"]Но что это значит?[/uquote]
Эх метрология... Какие чудные деньки были в универе :))) . Осциллограф у Вас тормоз. А 4 первых сигнала нормальные, потому что они длиннее по времени - где-то косяк в алгоритме и 4-5 короче остальных. Попробуйте сейчас время сигнала понемногу урезать до тех пор пока он не начнет проседать по уровню на экране осцила.
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3396972#p3396972"]4 первых сигнала нормальные, потому что они длиннее по времени - где-то косяк в алгоритме и 4-5 короче остальных. Попробуйте сейчас время сигнала понемногу урезать до тех пор пока он не начнет проседать по уровню на экране осцила.[/uquote]
Время сигнала менял до 10мкс, с ножки контроллера напряжение не проседают на "первых 4х портах", а проседает только на "последних двух". Еще делал наоборот, увеличил время до 1000мкс. Эффект такой же на "первых 4х портах" амплитуда 5в, а на "последних двух" 2.5. При том ширина импульсов на всех портах соответствует заданной.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

Если не трудно, сбросьте проект - я в протеусе поганяю.
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3397853#p3397853"]Если не трудно, сбросьте проект - я в протеусе поганяю.[/uquote]
Вот проект в протеусе, исходник в аврстудео. В протеусе все симулмруется исключительно
Вложения
Proteus.rar
(61.46 КБ) 245 скачиваний
AVR_Studio.rar
(185.83 КБ) 213 скачиваний
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

В протеусе все четко. "Лишний импульс" в протеусе у меня присутствует - осцил синхронизируется то по первому, то по второму фронту (я убрал синхронизацию по сети). Оттого и три рисует, а реально их два. У Вас в протеусе синхра однозначна - по сети, а реальный осцил сам ловит синхру. Остался вопрос об 2,5В. Что могу обещать, так это что в пятницу доберусь до своей "лаборатории" и попробую запустить на макетке 8ю мегу

Добавлено after 3 minutes 31 second:
А можно тестером прозвонить между собой 4-5 пины? Закоротки нет?

Добавлено after 12 minutes 44 seconds:
Ваша картина? Собственно если FF выводить на ВЕСЬ порт то будет работать :)))
Вложения
закоротка2.png
(102.11 КБ) 599 скачиваний
закоротка1.png
(79.67 КБ) 426 скачиваний
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Вс мар 09, 2014 09:13:00

Сообщение DenChik87 »

Я не знаю откуда у вас взялся этот лишний импульс? Может вы частоту поменяли?
Вы оказались абсолютно правы, последние два порта были закорочены. Не протравил :facepalm: Глазу было незаметно. Огромный респектос, что выдержали натиск моих вопросов :))) Как только убрал коротыш все заработало и во всех режимах. На всех портах картина по два импульса. Лишнего нигде нет. Еше конечно придется переделать детектор нуля. Ведь при таком детекторе непонятно где прямая, а где обратная полуволна. Для этого удобнее использовать ОУ, например 358n. Чтобы при прямой синусоиде был к примеру высокий меандр, а при обратной низкий. Собственно программа под него и писалась изначально.
Огромное кошачье мрррряяя!!! спасибо что сдвинули меня с мертвой точки. Ееее!!!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="DenChik87",url="/forum/viewtopic.php?p=3398289#p3398289"]Я не знаю откуда у вас взялся этот лишний импульс? Может вы частоту поменяли?[/uquote]
Да нет, я увидел как протеус синхронизируется то по первому, то по второму импульсу - получается картинка как-бы трех импульсов. Вспомнил что Вы что-то говорили про лишние импульсы, и сделал предположение.
Потом я на английском в гугл вбил 2,5В на порту атмеги и на аврфрикс нашел похожую тему, где один из пользователей предположил закоротку. Вот я и спросил. Потом смоделировал - оказалось похоже.
И это передайте мои извинения Вашему С1-107 :)))
Ответить

Вернуться в «AVR»