Мостовые преобразователи
- Войдите на сайт для отправки комментариев
Пт, 04/11/2016 - 20:09
помогите пожалуйста с вот этим вашим скетчем мне очень нужен на еще какой нибудь ноге выход этой же частоты но в противофазе инверсный для мостовой схемы преобразователя
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
в противофазе ... значит.... ээээ ..... это нужно для синхронного выпрямителя или вы просто забыли о дедтаймах?
Для попадания на резанансную частоту
Нет не забыл они будут но это тоже надо решить один импульс нужен короче другова нужно учитывать коэфициэнт заполнения
Блок-схема рассматриваемого здесь мостового инвертора изображена на рис.1.
Мне нужен генератор управляющих импульсов с цифровым вводом
А код и первого поста откуда-то скачан? Понимания, что он делает нет? Никакого?
помогите пожалуйста...........
Почитайте по ссылке, может чем-то поможет.
http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=12#comment-143575
http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-a...
непомогло (
Я его сделал! Как и хотел...генератор прямоугольных импульсов на 2 выхода, как и хотел примерно 23 килогерца. Максимальная частота 117 килогерц. В скетче можно подстроить для своих нужд. Выкладываю скетч, может кто подскажет, что можно подправить
расечатать?
01/* Генератор прямоугольных импульсов на два выхода. Максимальная частота 117 килогерц.02*если поиграться с delay_ями (они в микросекундах), то можно настроить под свои нужды03* Я для себя частоту примерно 23 килогерца сделал :)04*/05060708// 1.2 MHz (default) built in resonator09#define F_CPU 1200000UL//Если закомментить - все равно работает1011#include <avr/io.h>//Если закомментить - все равно работает12#include <util/delay.h>//delay.h - этот файл содержит функции для создания пауз в программе.131415#define out1 _BV(PB0)16#define out2 _BV(PB1)1718intmain()19{20DDRB |= out1;// OUTPUT21DDRB |= out2;// OUTPUT2223while(1)24{25PORTB |= out1;// HIGH26_delay_us(15);//Длительность импульса на выходе1 при 15 - 23.38 килогерц27//при 300 - 1586 герц28PORTB &= ~out1;// LOW29_delay_us(1);//Ни чего нет на выходах3031PORTB |= out2;// HIGH32_delay_us(15);//Длительность импульса на выходе23334PORTB &= ~out2;// LOW35_delay_us(1);//Ни чего нет на выходах363738}39}не работает да и с монитора порта не упровляеться!
01voidsetup() {02Serial.begin(9600);03pinMode (9,OUTPUT);// выход генератора04TCCR1A=1<<COM1A0;//подключить выход OC1A первого таймера05TCCR1B=0;//06}07voidloop() {08staticuint32_t enc=1;//переменная счёта энкодера09uint32_t ocr; uint32_t divider;floatfreq;10if(Serial.available() > 0){11enc =Serial.parseInt();12//расчёт прескалера и OCR по нужной частоте13divider=1; ocr = (F_CPU / enc /2 /divider);14if(ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider;15if(ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider;16if(ocr >65536) {divider=256; ocr = F_CPU / enc /2 /divider;17if(ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider;18if(ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1;19//запись в регистр прескалера20switch(divider) {21case1: TCCR1B=1|(1<<WGM12);break;22case8: TCCR1B=2|(1<<WGM12);break;23case64: TCCR1B=3|(1<<WGM12);break;24case256: TCCR1B=4|(1<<WGM12);break;25case1024: TCCR1B=5|(1<<WGM12);break; }2627freq= (float) F_CPU/2 / (OCR1A+1) /divider;28if(freq <10000) {Serial.print(freq,1);Serial.println(" Hz "); }29if(freq >10000) {Serial.print(freq/1000,3);Serial.println(" kHz");}30}//end if serial..31}//end void loopАлексей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() {}А даёт он вот такую осциллограмму, в точности как на вашем рисунке:
dimax огромное спасибо а чем здесь задаеться чистота модуляции и хотелос бы как нибудь получить ваши контакты
Боже! За что же мне такое наказание читать эту грамматику (русскоговорящему гражданину Украины).
Как сделать чтоб внизу кода вводилась частота модуляции ?
никак ... нет тут никакой модуляции
"Модуля́ция (лат. modulatio — размеренность, ритмичность) — процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала (сообщения).
Передаваемая информация заложена в управляющем (модулирующем) сигнале, а роль переносчика информации выполняет высокочастотное колебание, называемое несущим(модулируемым). Модуляция, таким образом, представляет собой процесс «посадки» информационного колебания на заведомо известную несущую с целью получения нового, модулированного сигнала."