Мостовые преобразователи

Алексей911
Offline
Зарегистрирован: 04.11.2016

помогите пожалуйста с вот этим вашим скетчем мне очень нужен на еще какой нибудь ноге выход этой же частоты но в противофазе инверсный для мостовой схемы преобразователя

void setup() {
Serial.begin(9600);
pinMode (9,OUTPUT); // выход генератора
TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера
TCCR1B=0;//
}
void loop() {
static uint32_t enc=1; //переменная счёта энкодера
uint32_t ocr; uint32_t divider; float freq; 
if (Serial.available() > 0){
    enc = Serial.parseInt(); 
  //расчёт прескалера и OCR по нужной частоте
   divider=1; ocr = (F_CPU / enc /2 /divider);
   if (ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider;
       if (ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider;
           if (ocr >65536)  {divider=256; ocr = F_CPU / enc /2 /divider;
               if (ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider;
                   if (ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1; 
  //запись в регистр прескалера            
   switch (divider) {
     case 1: TCCR1B=1|(1<<WGM12); break;
      case 8: TCCR1B=2|(1<<WGM12); break;
       case 64: TCCR1B=3|(1<<WGM12); break;
        case 256: TCCR1B=4|(1<<WGM12); break;
         case 1024: TCCR1B=5|(1<<WGM12); break;  }
         
       freq= (float) F_CPU/2 / (OCR1A+1) /divider;
      if (freq <10000) { Serial.print(freq,1);Serial.println(" Hz "); }
      if (freq >10000) { Serial.print(freq/1000,3);Serial.println(" kHz");}
      } //end if serial..
} //end void loop
ВН
Offline
Зарегистрирован: 25.02.2016

в противофазе ... значит.... ээээ ..... это нужно для синхронного выпрямителя или вы просто забыли о дедтаймах?

Алексей911
Offline
Зарегистрирован: 04.11.2016

Для попадания на резанансную частоту

Алексей911
Offline
Зарегистрирован: 04.11.2016

Нет не забыл они будут но это тоже надо решить один импульс нужен короче другова нужно учитывать коэфициэнт заполнения

Алексей911
Offline
Зарегистрирован: 04.11.2016

Блок-схема рассматриваемого здесь мостового инвертора изображена на рис.1.
 

Алексей911
Offline
Зарегистрирован: 04.11.2016

Мне нужен генератор управляющих импульсов с цифровым вводом

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А код и первого поста откуда-то скачан? Понимания, что он делает нет? Никакого?

Joiner
Offline
Зарегистрирован: 04.09.2014

Алексей911 пишет:

помогите пожалуйста...........

Сам давным-давно задавал аналогичный вопрос. Даже соорудил на макетке и осцилографом проверял.

Почитайте по ссылке, может чем-то поможет. 

http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=12#comment-143575

Алексей911
Offline
Зарегистрирован: 04.11.2016
Алексей911
Offline
Зарегистрирован: 04.11.2016

непомогло (

 

Алексей911
Offline
Зарегистрирован: 04.11.2016

Я его сделал! Как и хотел...генератор прямоугольных импульсов на 2 выхода, как и хотел примерно 23 килогерца. Максимальная частота 117 килогерц. В скетче можно подстроить для своих нужд. Выкладываю скетч, может кто подскажет, что можно подправить

01 /* Генератор прямоугольных импульсов на два выхода. Максимальная частота 117 килогерц.
02 *если поиграться с delay_ями (они в микросекундах), то можно настроить под свои нужды
03 * Я для себя частоту примерно 23 килогерца сделал :)
04 */
05  
06  
07  
08 // 1.2 MHz (default) built in resonator
09 #define F_CPU 1200000UL//Если закомментить - все равно работает
10  
11 #include <avr/io.h>//Если закомментить - все равно работает
12 #include <util/delay.h>//delay.h - этот файл содержит функции для создания пауз в программе.
13  
14  
15 #define out1 _BV(PB0)
16 #define out2 _BV(PB1)
17  
18 int main()
19 {
20         DDRB |= out1; // OUTPUT
21         DDRB |= out2; // OUTPUT
22  
23         while (1)
24         {
25                 PORTB |= out1; // HIGH
26                _delay_us(15);//Длительность импульса на выходе1 при 15 - 23.38 килогерц
27                               //при 300 - 1586 герц
28                 PORTB &= ~out1; // LOW
29                _delay_us(1);//Ни чего нет на выходах
30  
31                 PORTB |= out2; // HIGH
32                _delay_us(15);//Длительность импульса на выходе2
33  
34                 PORTB &= ~out2; // LOW
35                 _delay_us(1);//Ни чего нет на выходах
36                
37                                                
38         }
39 }

не работает да и с монитора порта не упровляеться!

Алексей911
Offline
Зарегистрирован: 04.11.2016
01 void setup() {
02 Serial.begin(9600);
03 pinMode (9,OUTPUT); // выход генератора
04 TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера
05 TCCR1B=0;//
06 }
07 void loop() {
08 static uint32_t enc=1; //переменная счёта энкодера
09 uint32_t ocr; uint32_t divider; float freq;
10 if (Serial.available() > 0){
11     enc = Serial.parseInt();
12   //расчёт прескалера и OCR по нужной частоте
13    divider=1; ocr = (F_CPU / enc /2 /divider);
14    if (ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider;
15        if (ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider;
16            if (ocr >65536)  {divider=256; ocr = F_CPU / enc /2 /divider;
17                if (ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider;
18                    if (ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1;
19   //запись в регистр прескалера           
20    switch (divider) {
21      case 1: TCCR1B=1|(1<<WGM12); break;
22       case 8: TCCR1B=2|(1<<WGM12); break;
23        case 64: TCCR1B=3|(1<<WGM12); break;
24         case 256: TCCR1B=4|(1<<WGM12); break;
25          case 1024: TCCR1B=5|(1<<WGM12); break;  }
26          
27        freq= (float) F_CPU/2 / (OCR1A+1) /divider;
28       if (freq <10000) { Serial.print(freq,1);Serial.println(" Hz "); }
29       if (freq >10000) { Serial.print(freq/1000,3);Serial.println(" kHz");}
30       //end if serial..
31 //end void loop

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Алексей911,

Вот вам скетч -болванка:

void setup() {
pinMode (9,OUTPUT); 
pinMode (10,OUTPUT); 
TCCR1A=(1<<COM1A1)|(1<<COM1B0)|(1<<COM1B1);
TCCR1B=(1<<WGM13)|(1<<CS10);
ICR1=1999;
OCR1A=799;
OCR1B=999;
}
void loop() {}

А даёт он вот такую осциллограмму, в точности как на вашем рисунке:

 

Алексей911
Offline
Зарегистрирован: 04.11.2016

dimax огромное спасибо а чем здесь задаеться чистота модуляции и хотелос бы как нибудь получить ваши контакты

 

gena
Offline
Зарегистрирован: 04.11.2012

 Боже! За что же мне такое наказание читать эту грамматику (русскоговорящему гражданину Украины).

Алексей911
Offline
Зарегистрирован: 04.11.2016
void setup() {
pinMode (9,OUTPUT); // выход генератора 1
pinMode (10,OUTPUT); // выход генератора 2
TCCR1A=(1<<COM1A1)|(1<<COM1B0)|(1<<COM1B1);//подключить выход таймера
TCCR1B=(1<<WGM13)|(1<<CS10);//регистр прескалера
ICR1=1999;//?
OCR1A=799;//?
OCR1B=999;//?
}
void loop() {}
Алексей911
Offline
Зарегистрирован: 04.11.2016

Как сделать  чтоб внизу кода вводилась частота модуляции ?

ВН
Offline
Зарегистрирован: 25.02.2016

Алексей911 пишет:
Как сделать  чтоб внизу кода вводилась частота модуляции ?

никак ... нет тут никакой модуляции

"Модуля́ция (лат. modulatio — размеренность, ритмичность) — процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала (сообщения).

Передаваемая информация заложена в управляющем (модулирующем) сигнале, а роль переносчика информации выполняет высокочастотное колебание, называемое несущим(модулируемым). Модуляция, таким образом, представляет собой процесс «посадки» информационного колебания на заведомо известную несущую с целью получения нового, модулированного сигнала."