воскресенье, 31 июля 2011 г.

Расчёт дифференциальных уравнений методом Эйлера в C++.

В статье "расчёт в маткаде переходных процессов в ёмкостном фильтре" рассматривался расчёт схемы изображенной на рисунке 1 в которой источник питания e(t) имитировал выходное напряжение однополупериодного однофазного выпрямителя. Расчёт проводился в программе MathCAD. Там же была составлена математическая модель схемы (рисунок 1) представляющая собой дифференциальное уравнение:


Решением этого уравнения (уравнения (1)) при заданных начальных условиях (начальном t и начальном Uc) является функция описывающая изменение напряжения конденсатора во времени.
Схема фильтра с источником и обозначениями для расчёта
Рисунок 2 - Схема фильтра с источником и обозначениями для расчёта

Ранее расчёт уравнения 1 был проведен в маткаде где уже присутствовала функция расчёта дифференциальных уравнений. Рассмотрим расчёт этого же уравнения реализованный на языке программирования C++. Исходный код программы приведен ниже:


#include <iostream>
#include <conio.h>
#include <math.h>
#include <fstream.h> 

using namespace std;

const double C=0.01;//ёмкость конденсатора C
const int Re=2;//внутреннее сопротивление источника Re
const int Rn=100;//сопротивление нагрузки Rn
//источник e(t)
double e(double t)
{
  double s;
  s=2*sin(1000*t);
  if (s>0)return s;
  else return 0;
}
//уравнение (1)
double sys(double t, double Uc)
{
  double dUc;
  dUc=(e(t)/(C*Re))-(Uc/(C*Re))-(Uc/(C*Rn));
  return dUc;    
}

int main ()
{
    double t[100];
    double Uc[100];
    double h=0.0005;//шаг интегрирования
   //начальные условия
    t[0]=0.0;
    Uc[0]=0.0;
    //открытие файлов для записи
    ofstream time("time.TXT");
    ofstream voltage("voltage.TXT");
    //Расчёт  методом Эйлера и вывод результатов
    for(int i=0;i<100;i++)
    {
       t[i]=t[0]+i*h;
       Uc[i+1]=Uc[i]+h*sys(t[i],Uc[i]);
       cout<<"t="<<t[i]<<"        Uc="<<Uc[i]<<endl;
       time<<t[i]<<endl;
       voltage<<Uc[i]<<endl;            
    }
    time.close();//закрытие
    voltage.close();//файлов
 
    _getch();
    return 0;
}

Параметры элементов схемы (1) заданны в виде констант: C, Re, Rn. Функция e принимает значение времени t и возвращает напряжение на входе однополупериодного однофазного выпрямителя. Функция sys принимает значения: времени t, напряжения конденсатора Uc и возвращает значение dUc/dt уравнения (1) при заданных Uc и t. В строчке:
 t[i]=t[0]+i*h; 
производится расчёт времени, где h - шаг интегрирования, в методе Эйлера выбирается достаточно малым для обеспечения требуемой точности. В строчке:
Uc[i+1]=Uc[i]+h*sys(t[i],Uc[i]);
рассчитывается значение напряжения конденсатора в следующий момент времени Uc[i+1] исходя из напряжения конденсатора в текущий момент времени Uc[i] и текущего момента времени t[i]. Рассчитанные значения, на каждой итерации, записываются в массивы, выводятся на экран и в файлы time.TXT и voltage.TXT.
  На рисунке 2, красной линией, показан график напряжения построенный в маткаде по значениям рассчитанным в программе и выведенным в файл. Чтобы создать в маткаде матрицу с выведенными в файл значениями нужно: 1) открыть файл (значения должны быть числовыми и располагаться каждый в своей строчке), 2) выделить значения, 3) скопировать (например нажав ctrl+c), 4) перейти в окно маткада и 5) вставить скопированные значения (например нажав ctrl+v) .
График напряжения конденсатора Uc (красный) и источника e(t) (синий)
Рисунок 2 - График напряжения конденсатора Uc (красный) и источника e(t) (синий).

Из графика видно что форма напряжения, рассчитанная методом Эйлера, мало чем отличается (если отличается вообще) от полученной при расчёте в программе MathCAD. Также для вывода графика можно воспользоваться программой исходный код которой приведен в статье "программа для вывода графика на языке C++".


суббота, 30 июля 2011 г.

Принцип работы ИППН повышающего и понижающего типа.

  Принципиальная схема ИППН (импульсного преобразователя постоянного напряжения) повышающего и понижающего типа представлена на рисунке 1:
Принципиальная схема ИППН повышающего и понижающего типа

Рисунок 1 - Принципиальная схема ИППН повышающего и понижающего типа

   RH - нагрузка ИППН, G - источник постоянного напряжения. На месте ключа S может находиться любой управляемый коммутирующий элемент например транзистор. Данный ИППН может осуществлять повышение или понижение постоянного напряжения т.е. в зависимости от частоты и/или коэффициента заполнения (величина обратная скважности) управляющих импульсов на ключ S (или частоты и/или коэффициента заполнения замыкания ключа S) напряжение на нагрузке RH может быть больше или меньше напряжения источника G.
    Работает ИППН так: 1) Ключ S замыкается и в катушке L начинает постепенно увеличиваться ток (сила тока), катушка в этот момент накапливает энергию а диод в это время VD заперт. 2) Ключ S размыкается, диод VD открывается и ток из катушки начинает теч через конденсатор C и нагрузку RH, конденсатор C заряжается а катушка L разряжается. 3) Далее если ключ S замкнулся раньше чем разрядилась катушка L то: диод VD закрывается, катушка заряжается от источника, а конденсатор разряжается через нагрузку и все повторяется заново (с 1). Если ключ S не успел замкнуться прежде чем разрядилась катушка L то: диод VD закрывается, конденсатор C разряжается через нагрузку, катушка L не заряжается; когда замыкается ключ S катушка L начинает заряжаться и все повторяется заново (с 1).
   То будет ИППН повышать или понижать напряжение определяется энергией накопленной в катушке L к моменту размыкания ключа S (чем больше эта энергия тем больше напряжение на выходе и наоборот) и если ключ S не успевает замыкаться прежде чем разряжается катушка L то это определяется ещё и промежутком времени между закрытием диода VD и замыканием ключа S (чем дольше этот промежуток тем больше разряжается конденсатор C и следовательно меньше на нагрузке RH среднее значение напряжения). Напряжение на нагрузке может регулироваться изменением коэффициента заполнения импульсов управляющих замыканием и размыканием ключа S (транзистора или другого коммутирующего элемента). Коэффициент заполнения это величина обратная скважности. Скважность это отношение периода к длительности импульса. Чем больше коэффициент заполнения (меньше скважность) тем больше напряжение на нагрузке и наоборот. Из схемы на рисунке 1 видно направление падения напряжения на нагрузке UH. Если узел, к которому подсоединен минус источника, считать землей то напряжение на нагрузке будет отрицательным - это особенность данного типа ИППН.
   

среда, 27 июля 2011 г.

Расчёт магнитной индукции катушки.

Допустим имеется катушка индуктивности, известны: её длинна l, её число витков w и сила тока протекающего в витках катушки I. Пусть I=1А, w=3, l=0.01м.
Катушка индуктивности
Рисунок 1 - Катушка индуктивности

Направление магнитной индукции совпадает с направлением магнитного потока. Посмотреть как определить направление магнитного потока, правилом правой руки, можно в статье "обозначение индуктивно связанных катушек".
Чтобы рассчитать индукцию можно воспользоваться формулой (1):

Где
магнитные проницаемости, H - напряженность магнитного поля которую можно найти из формулы (2):


Из формулы (2) найдем напряженность:


Преобразуем формулу (1) с учётом формулы (3) и рассчитаем магнитную индукцию для приведенного примера:


Для расчета магнитной индукции можно воспользоваться программой:  

Программа расчёта магнитной индукции.



Длинна l= м
Число витков w=
Сила тока I=А
Магнитная проницаемость материала сердечника= Гн/м
(Магнитная проницаемость материала сердечника=1 если его нет как в примере)

Магнитная индукция B=Тл
Напряженность H=А/м
Если программа не работает скопируйте её HTML-код в блокнот и сохраните в формате html.

пятница, 22 июля 2011 г.

Удвоитель для преобразователя напряжения.

Удвоитель напряжения осуществляет выпрямление и увеличение, в два раза, переменного напряжения. На рисунке 1 представлен трансформаторный преобразователь напряжения дополненный удвоителем напряжения на элементах VD5, VD6, C1, C2 и конденсатором С3 на выходе.

Трансформаторный преобразователь напряжения с удвоителем.
Рисунок 1 - Трансформаторный преобразователь напряжения с удвоителем.

При каждом полупериоде переменного напряжения, на обмотке w2, заряжается либо конденсатор C1 либо конденсатор C2. Конденсатор C3 заряжается суммой напряжений на конденсаторах C1 и C2. Положительное напряжение будет на выводе конденсатора C3 подсоединенном к катоду диода VD5, отрицательное на выводе подсоединенном к аноду диода VD6. Схема на рисунке 1 представляет собой преобразователь постоянного напряжения так как преобразует постоянное напряжение питания в повышенное постоянное напряжения на выходе к которому может быть подключена нагрузка.     

Постоянное напряжение на выходе составило примерно 80В:

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

пятница, 15 июля 2011 г.

Трансформаторный преобразователь напряжения

Транзисторный мост рассматриваемый, в предыдущих статьях, как схема для коммутации электродвигателя может использоваться как инвертор напряжения (преобразователь постоянного напряжения в переменное) если диагональные транзисторы включать поочерёдно с требуемой частотой. Используя трансформатор можно повысить или понизить это напряжение до требуемого уровня. Преобразованное напряжение можно выпрямить выпрямителем и получить преобразователь постоянного напряжения. Схема управления электродвигателем микроконтроллером дополнена транзисторами VT2, VT5, VT4, VT7 включенными как обратные диоды, в диагональ моста включена первичная обмотка повышающего напряжение трансформатора Т1. Схема представлена на рисунке 1.

Схема преобразователя
Рисунок 1 - Схема преобразователя

Первичная обмотка w1 содержит около 21 витков алюминиевым проводом, вторичная w2 около 400 витков тонким медным проводом, сердечник использован от трансформатора строчной развёртки ТВС-110П3.

Напряжение на первичной обмотке составляло примерно 1.5 В.
Из за повышенной частоты видно что светодиоды светятся непрерывно, в принципе в этих светодиодах нет необходимости.

Напряжение на вторичной обмотке около 31В.

Действующее напряжение трансформатор повышает примерно в 20 раз.
Программа для управления электродвигателем микроконтроллером дополнена кодом для преобразователя напряжения. При нажатии на кнопку SB1 подключенную к четвёртому биту порта C срабатывает старый код который можно убрать. В коде для работы преобразователя напряжения, в отличии от кода для управления двигателем, используется функция _delay_us для  создания задержки в микросекундах.

Ниже приведен исходный код программы на языке C++ для микроконтроллера:

   #include <avr/io.h>
   #include <avr/delay.h>
   #define F_CPU 8000000UL  // 8 MHz

   int main(void)              // начало основой программы
   {
DDRD = 0xff;            /* все выводы порта D сконфигурировать как выходы */
DDRC = 0x00;      //выводы порта С сконфигурировать как входы
 
PORTC = 0xff; // установить "1" на всех выводах порта C,                       
                                        //включаем подтягивающие резисторы
 
while (1)          // Бесконечный цикл
{  
if (!(PINC & (1<<PINC4)))
{
DDRD |= 1<<1;
DDRD |= 1<<2;
_delay_ms(250);   // Ждем 250*8 мсек.
DDRD &= ~(1<<1);
DDRD &= ~(1<<2);
 
_delay_ms(250);   // Ждем 250*8 мсек.
DDRD |= 1<<0;
DDRD |= 1<<3;
_delay_ms(250);   // Ждем 250*8 мсек.
DDRD &= ~(1<<0);
DDRD &= ~(1<<3);
_delay_ms(500);   // Ждем 500*8 мсек.
}
else
{
DDRD &= ~(1<<0);
DDRD &= ~(1<<3);
DDRD |= 1<<1;
DDRD |= 1<<2;
_delay_us(5);   // Ждем 5*8 мксек.
DDRD &= ~(1<<1);
DDRD &= ~(1<<2);
DDRD |= 1<<0;
DDRD |= 1<<3;
_delay_us(5);   // Ждем 5*8 мксек.
}
}
   }      // закрывающая скобка основной программы

Исходный код компилировался в среде WinAVR, hex файл прошивался в микроконтроллер с помощью программы ponyprog2000.