Форум РадиоКот https://radiokot.ru/forum/ |
|
СИФУ на amega328 https://radiokot.ru/forum/viewtopic.php?f=57&t=155421 |
Страница 1 из 1 |
Автор: | DenChik87 [ Чт июн 07, 2018 18:51:15 ] | |||||
Заголовок сообщения: | СИФУ на amega328 | |||||
Хай гайс)) Пытаюсь сделать СИФУ управления трехфазным мостом Ларионова. Для этого смоделировал схему в протеусе. В протеусе все работает. На PORTС с 0-5 биты формируются импульсы управления. И как видно из осциллограммы протеуса (я вывел на осцил 0й, 4й, 5й порт) успешно. А вот на практике с 0 по 3й порт формируются правильно, а вот в четвертом и пятом присутствует лишние импульс, ну это ладно-видимо угол сдвига съехал относительно детектора. Но вот почему амплитуда упала в два раза это вообще непонятно. Помогите плиииз разобраться.
|
Автор: | Ярослав555 [ Пт июн 08, 2018 13:38:25 ] | ||
Заголовок сообщения: | Re: СИФУ на amega328 | ||
пока думаю над схемой, расскажу о своем опыте постройки такой штуки. Я не давал как по книжке два импульса, я вывел из порта постоянный пульсирующий сигнал, завел его на драйвера ir2104, а оттуда через пару полевичков на импульсный трансик. И на каждый драйвер подавал сигнал SD. В итоге все работало - я не парился с двумя импульсами и просто по нужной фазе подавал сигнал SD. Работало. Добавлено after 3 minutes 50 seconds: Пока ничего не понятно. Покажите-ка программку.
|
Автор: | DenChik87 [ Сб июн 09, 2018 18:49:07 ] | |||
Заголовок сообщения: | Re: СИФУ на amega328 | |||
Я делаю трехфазный тиристорный выпрямитель Ларионова. Суть которого в том, чтобы подавать на соответствующую пару тиристоров импульсы управления, сдвигая которые можно регулировать выходное напряжение во всем диапазоне 0-540В. Может с прикрепленной схемой и исходником станет понятнее.
|
Автор: | Z_h_e [ Сб июн 09, 2018 19:34:34 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
DenChik87 писал(а): Но вот почему амплитуда упала в два раза это вообще непонятно. Отключите (отрежьте) порт от остальной схемы и гляньте амплитуду.
|
Автор: | korob [ Сб июн 09, 2018 19:40:51 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
DenChik87 писал(а): Но вот почему амплитуда упала в два раза это вообще непонятно А где схема управления тиристорами? ![]() |
Автор: | Ярослав555 [ Сб июн 09, 2018 20:55:57 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
ну если 2,5В на самом выводе микрухи, то думаю порт не здоров. я бы взял новый МК, запаял его без выходных транзисторов, или что у вас там - чтобы просто в воздухе висели выхода, залить прошивку и смотреть. |
Автор: | DenChik87 [ Вс июн 10, 2018 07:13:14 ] | ||
Заголовок сообщения: | Re: СИФУ на amega328 | ||
ну если 2,5В на самом выводе микрухи, то думаю порт не здоров. я бы взял новый МК, запаял его без выходных транзисторов, или что у вас там - чтобы просто в воздухе висели выхода, залить прошивку и смотреть. Отключите (отрежьте) порт от остальной схемы и гляньте амплитуду.. Порт здоров. ОтрезАл от остальной схемы. Делал и на другой atmega328 и даже на atmega8 код перевел. Результат такой же, все как на тех фотах осциллограммы выше. А может такое быть, что при маленькой длительности импульса какой-нибудь баг с портом происходит? А где схема управления тиристорами? ![]() Опторазвязка будет на ТО325-12.5, как-то так:
|
Автор: | Ярослав555 [ Вс июн 10, 2018 13:22:41 ] | ||
Заголовок сообщения: | Re: СИФУ на amega328 | ||
Закоментить кусок который пишет в порт С, в главном цикле сделать 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
|
Автор: | DenChik87 [ Вс июн 10, 2018 15:32:21 ] | ||
Заголовок сообщения: | Re: СИФУ на amega328 | ||
Сделал немного иначе в прерывании закомментировал строчку которая выводила в порт значения из массива. Вместо нее 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; } }
|
Автор: | Ярослав555 [ Вс июн 10, 2018 18:29:05 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
Но что это значит? Эх метрология... Какие чудные деньки были в универе ![]() |
Автор: | DenChik87 [ Пн июн 11, 2018 22:55:54 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
4 первых сигнала нормальные, потому что они длиннее по времени - где-то косяк в алгоритме и 4-5 короче остальных. Попробуйте сейчас время сигнала понемногу урезать до тех пор пока он не начнет проседать по уровню на экране осцила. Время сигнала менял до 10мкс, с ножки контроллера напряжение не проседают на "первых 4х портах", а проседает только на "последних двух". Еще делал наоборот, увеличил время до 1000мкс. Эффект такой же на "первых 4х портах" амплитуда 5в, а на "последних двух" 2.5. При том ширина импульсов на всех портах соответствует заданной. |
Автор: | Ярослав555 [ Вт июн 12, 2018 06:13:38 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
Если не трудно, сбросьте проект - я в протеусе поганяю. |
Автор: | DenChik87 [ Вт июн 12, 2018 07:57:39 ] | |||
Заголовок сообщения: | Re: СИФУ на amega328 | |||
Если не трудно, сбросьте проект - я в протеусе поганяю. Вот проект в протеусе, исходник в аврстудео. В протеусе все симулмруется исключительно
|
Автор: | Ярослав555 [ Вт июн 12, 2018 08:43:10 ] | |||
Заголовок сообщения: | Re: СИФУ на amega328 | |||
В протеусе все четко. "Лишний импульс" в протеусе у меня присутствует - осцил синхронизируется то по первому, то по второму фронту (я убрал синхронизацию по сети). Оттого и три рисует, а реально их два. У Вас в протеусе синхра однозначна - по сети, а реальный осцил сам ловит синхру. Остался вопрос об 2,5В. Что могу обещать, так это что в пятницу доберусь до своей "лаборатории" и попробую запустить на макетке 8ю мегу Добавлено after 3 minutes 31 second: А можно тестером прозвонить между собой 4-5 пины? Закоротки нет? Добавлено after 12 minutes 44 seconds: Ваша картина? Собственно если FF выводить на ВЕСЬ порт то будет работать ![]()
|
Автор: | DenChik87 [ Вт июн 12, 2018 16:47:48 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
Я не знаю откуда у вас взялся этот лишний импульс? Может вы частоту поменяли? Вы оказались абсолютно правы, последние два порта были закорочены. Не протравил ![]() ![]() Огромное кошачье мрррряяя!!! спасибо что сдвинули меня с мертвой точки. Ееее!!! |
Автор: | Ярослав555 [ Вт июн 12, 2018 18:10:25 ] |
Заголовок сообщения: | Re: СИФУ на amega328 |
Я не знаю откуда у вас взялся этот лишний импульс? Может вы частоту поменяли? Да нет, я увидел как протеус синхронизируется то по первому, то по второму импульсу - получается картинка как-бы трех импульсов. Вспомнил что Вы что-то говорили про лишние импульсы, и сделал предположение. Потом я на английском в гугл вбил 2,5В на порту атмеги и на аврфрикс нашел похожую тему, где один из пользователей предположил закоротку. Вот я и спросил. Потом смоделировал - оказалось похоже. И это передайте мои извинения Вашему С1-107 ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |