Страница 2 из 2
Re: Двухканальный ШИМ без таймеров.
Добавлено: Пн сен 14, 2015 14:15:46
FireProoF
Хах) Спасибо конечно, но я уже сварганил свой алгоритм) Правда запутанный, но работает)
Рассчитываем ближайшее изменение значения на одном из двух каналов, переключаем нужный канал, повторяем)
Твой я пока не могу понять. i1 и i2 это что?
P.S. еще рас спасибо за отклик
Re: Двухканальный ШИМ без таймеров.
Добавлено: Пн сен 14, 2015 16:27:18
hybroid
Это тоже самое, что счётный регистр таймера. Тики туда пишутся.
Re: Двухканальный ШИМ без таймеров.
Добавлено: Пн сен 14, 2015 18:31:57
FireProoF
Спойлер
Код: Выделить всё
// delete.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int i1,i2;
int s1 = 5; // s-скважность от 0 до k
int s2 = 4;
const int k1=10, k2=5; // периоды каналов
int time = 0;
bool buffer1[10000];
bool buffer2[10000];
bool pwm1_state, pwm2_state;
void step();
void changePWM1();
void changePWM2();
void main()
{
i1=0;
i2=0;
buffer1[0] = 0;
buffer2[0] = 0;
for(int loops = 0; loops < 10000; loops++)
{
if(i1<k1)
{
i1++;
step();
}
else
{
i1=0;
//changePWM1();
step();
}
if(i1<s1)
{
pwm1_state = 0;
step();
}
else
{
pwm1_state = 1;
step();
}
// тоже самое для второго
if(i2<k2)
{
i2++;
step();
}
else
{
i2=0;
//changePWM2();
step();
}
if(i2<s2)
{
pwm2_state = 0;
step();
}
else
{
pwm2_state = 1;
step();
}
}
for(int i= 0;i<1000;i++)
{
if(i%44/*24*/==0) cout<<endl;
cout<<buffer1[i];
}
int a;
cin>>a;
}
void step()
{
buffer1[time] = pwm1_state;
buffer2[time] = pwm2_state;
time++;
}
void changePWM1()
{
(s1 >= k1)? s1=0 : s1++;;
}
void changePWM2()
{
(s2 >= k2)? s2=0 : s2++;
}
Переделал код для ПК, ШИМ пишется в буфер. Вот гляньте, 1ца в периода уплывает влево всегда. С чем это связано?
И хочу менять скважность. Я располагаю функции изменения значения скважности, но на выходе ерунда)
Re: Двухканальный ШИМ без таймеров.
Добавлено: Вт сен 15, 2015 07:37:30
alex_
Вот скажи для чего ты
step(); засунул во все дыры?

Re: Двухканальный ШИМ без таймеров.
Добавлено: Вт сен 15, 2015 14:09:33
FireProoF
Я сунул его туда для подсчета глобального времени, чб записывать в буффер значения. Мне код не для МК, а для ПК сначала нужен
Re: Двухканальный ШИМ без таймеров.
Добавлено: Вт сен 15, 2015 14:29:00
alex_
Мне код не для МК, а для ПК сначала нужен
Ты не поверишь что разницы то почти и нет, точнее вся разница заключается в выводе данных ПК->дисплюй МК->порт.
Я сунул его туда для подсчета глобального времени
Может быть, тебе виднее.
чб записывать в буффер значения.
В целом может быть но он записывает одно и тоже в результате не по разу, на мой взгляд это больше с толку сбивает.
Вот гляньте, 1ца в периода уплывает влево всегда.
Вот тут поподробнее, лучше небольшую картинку в качестве примера. Я твой код немного подшаманил вот что вышло:
Спойлер

Ай красота

Re: Двухканальный ШИМ без таймеров.
Добавлено: Пн сен 21, 2015 08:56:26
FireProoF
Наконец-то оформил код под ПК. Просто сказка) И скважность меняется, и ничего никуда не уплывает по показателям) Спасибо, alex_!
Я вот теперь переношу на МК и возник вопрос где ставить задержку, чтобы ШИМ стал реальным и был виден на осциллографе? Поставил пока в конце главного цикла. Проверить работу не могу.
Re: Двухканальный ШИМ без таймеров.
Добавлено: Пн сен 21, 2015 10:32:46
alex_
You welcome

Re: Двухканальный ШИМ без таймеров.
Добавлено: Пн сен 21, 2015 13:06:06
alex_
FireProoF писал(а):
Я вот теперь переношу на МК и возник вопрос где ставить задержку
Не принципиально главное чтобы было в теле while(1)
