Мостовые преобразователи
- Войдите на сайт для отправки комментариев
Пт, 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
*/
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
}
не работает да и с монитора порта не упровляеться!
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
Алексей911,
Вот вам скетч -болванка:
А даёт он вот такую осциллограмму, в точности как на вашем рисунке:
dimax огромное спасибо а чем здесь задаеться чистота модуляции и хотелос бы как нибудь получить ваши контакты
Боже! За что же мне такое наказание читать эту грамматику (русскоговорящему гражданину Украины).
Как сделать чтоб внизу кода вводилась частота модуляции ?
никак ... нет тут никакой модуляции
"Модуля́ция (лат. modulatio — размеренность, ритмичность) — процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала (сообщения).
Передаваемая информация заложена в управляющем (модулирующем) сигнале, а роль переносчика информации выполняет высокочастотное колебание, называемое несущим(модулируемым). Модуляция, таким образом, представляет собой процесс «посадки» информационного колебания на заведомо известную несущую с целью получения нового, модулированного сигнала."