Обсуждаем контроллеры компании Atmel.
Ответить

СИФУ на amega328

Чт июн 07, 2018 18:51:15

Хай гайс)) Пытаюсь сделать СИФУ управления трехфазным мостом Ларионова. Для этого смоделировал схему в протеусе. В протеусе все работает. На PORTС с 0-5 биты формируются импульсы управления. И как видно из осциллограммы протеуса (я вывел на осцил 0й, 4й, 5й порт) успешно. А вот на практике с 0 по 3й порт формируются правильно, а вот в четвертом и пятом присутствует лишние импульс, ну это ладно-видимо угол сдвига съехал относительно детектора. Но вот почему амплитуда упала в два раза это вообще непонятно. Помогите плиииз разобраться.
Вложения
протеус.png
(104.33 KiB) Скачиваний: 939
Сигнал на портах 0,1,2,3.jpg
(131.13 KiB) Скачиваний: 472
Cигнал на портах 4.5.jpg
(200.9 KiB) Скачиваний: 425
разводка платы.jpg
(70.84 KiB) Скачиваний: 477

Re: СИФУ на amega328

Пт июн 08, 2018 13:38:25

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

Добавлено after 3 minutes 50 seconds:
Пока ничего не понятно. Покажите-ка программку.
Вложения
Безымянный.png
(101.86 KiB) Скачиваний: 757

Re: СИФУ на amega328

Сб июн 09, 2018 18:49:07

Я делаю трехфазный тиристорный выпрямитель Ларионова. Суть которого в том, чтобы подавать на соответствующую пару тиристоров импульсы управления, сдвигая которые можно регулировать выходное напряжение во всем диапазоне 0-540В.
Может с прикрепленной схемой и исходником станет понятнее.
Вложения
СИФУ.png
(96.15 KiB) Скачиваний: 845
Исходник.png
(80.83 KiB) Скачиваний: 639

Re: СИФУ на amega328

Сб июн 09, 2018 19:34:34

DenChik87 писал(а): Но вот почему амплитуда упала в два раза это вообще непонятно.
Отключите (отрежьте) порт от остальной схемы и гляньте амплитуду.

Re: СИФУ на amega328

Сб июн 09, 2018 19:40:51

DenChik87 писал(а):Но вот почему амплитуда упала в два раза это вообще непонятно
А где схема управления тиристорами? :? Каким образом вы их открываете, опторазвязка или трансформаторы?

Re: СИФУ на amega328

Сб июн 09, 2018 20:55:57

ну если 2,5В на самом выводе микрухи, то думаю порт не здоров. я бы взял новый МК, запаял его без выходных транзисторов, или что у вас там - чтобы просто в воздухе висели выхода, залить прошивку и смотреть.

Re: СИФУ на amega328

Вс июн 10, 2018 07:13:14

ну если 2,5В на самом выводе микрухи, то думаю порт не здоров. я бы взял новый МК, запаял его без выходных транзисторов, или что у вас там - чтобы просто в воздухе висели выхода, залить прошивку и смотреть.

Отключите (отрежьте) порт от остальной схемы и гляньте амплитуду..

Порт здоров. ОтрезАл от остальной схемы. Делал и на другой atmega328 и даже на atmega8 код перевел. Результат такой же, все как на тех фотах осциллограммы выше. А может такое быть, что при маленькой длительности импульса какой-нибудь баг с портом происходит?
А где схема управления тиристорами? :? Каким образом вы их открываете, опторазвязка или трансформаторы?

Опторазвязка будет на ТО325-12.5, как-то так:
Вложения
опторазыязка.jpg
(185.01 KiB) Скачиваний: 643

Re: СИФУ на amega328

Вс июн 10, 2018 13:22:41

Закоментить кусок который пишет в порт С, в главном цикле сделать 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 KiB) Скачиваний: 790

Re: СИФУ на amega328

Вс июн 10, 2018 15:32:21

Сделал немного иначе в прерывании закомментировал строчку которая выводила в порт значения из массива. Вместо нее 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 KiB) Скачиваний: 761

Re: СИФУ на amega328

Вс июн 10, 2018 18:29:05

Но что это значит?

Эх метрология... Какие чудные деньки были в универе :))) . Осциллограф у Вас тормоз. А 4 первых сигнала нормальные, потому что они длиннее по времени - где-то косяк в алгоритме и 4-5 короче остальных. Попробуйте сейчас время сигнала понемногу урезать до тех пор пока он не начнет проседать по уровню на экране осцила.

Re: СИФУ на amega328

Пн июн 11, 2018 22:55:54

4 первых сигнала нормальные, потому что они длиннее по времени - где-то косяк в алгоритме и 4-5 короче остальных. Попробуйте сейчас время сигнала понемногу урезать до тех пор пока он не начнет проседать по уровню на экране осцила.

Время сигнала менял до 10мкс, с ножки контроллера напряжение не проседают на "первых 4х портах", а проседает только на "последних двух". Еще делал наоборот, увеличил время до 1000мкс. Эффект такой же на "первых 4х портах" амплитуда 5в, а на "последних двух" 2.5. При том ширина импульсов на всех портах соответствует заданной.

Re: СИФУ на amega328

Вт июн 12, 2018 06:13:38

Если не трудно, сбросьте проект - я в протеусе поганяю.

Re: СИФУ на amega328

Вт июн 12, 2018 07:57:39

Если не трудно, сбросьте проект - я в протеусе поганяю.

Вот проект в протеусе, исходник в аврстудео. В протеусе все симулмруется исключительно
Вложения
Proteus.rar
(61.46 KiB) Скачиваний: 221
AVR_Studio.rar
(185.83 KiB) Скачиваний: 191

Re: СИФУ на amega328

Вт июн 12, 2018 08:43:10

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

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

Добавлено after 12 minutes 44 seconds:
Ваша картина? Собственно если FF выводить на ВЕСЬ порт то будет работать :)))
Вложения
закоротка2.png
(102.11 KiB) Скачиваний: 568
закоротка1.png
(79.67 KiB) Скачиваний: 398

Re: СИФУ на amega328

Вт июн 12, 2018 16:47:48

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

Re: СИФУ на amega328

Вт июн 12, 2018 18:10:25

Я не знаю откуда у вас взялся этот лишний импульс? Может вы частоту поменяли?

Да нет, я увидел как протеус синхронизируется то по первому, то по второму импульсу - получается картинка как-бы трех импульсов. Вспомнил что Вы что-то говорили про лишние импульсы, и сделал предположение.
Потом я на английском в гугл вбил 2,5В на порту атмеги и на аврфрикс нашел похожую тему, где один из пользователей предположил закоротку. Вот я и спросил. Потом смоделировал - оказалось похоже.
И это передайте мои извинения Вашему С1-107 :)))
Ответить