Автор: Данилов Олег Евгеньевич

Рубрика: Информатика

Опубликовано в Молодой учёный №4 (63) апрель 2014 г.

Дата публикации: 23.03.2014

Библиографическое описание:

Данилов О. Е. Программное обеспечение цифрового вольтметра на базе микросхемы TLC1549 // Молодой ученый. — 2014. — №4. — С. 97-103.

В статье представлена компьютерная программа для цифрового вольтметра на базе микросхемы TLC1549. Рассмотренный в статье виртуальный прибор может быть использован для проведения учебных измерений электрического напряжения на уроках физики.

Ключевые слова:аналого-цифровой преобразователь, цифровые измерения, цифровой вольтметр, виртуальный прибор, программирование, COM-порт, Lazarus.

В книге Патрика Гёлля [1, с. 17-22] приводится описание 10-разряднго аналого-цифрового преобразователя (АЦП), принципиальная схема которого с несущественными изменениями может выглядеть так, как это показано на рис. 1 [2; 6]. Предполагается, что АЦП подключается к COM-порту. Он фактически представляет собой цифровой вольтметр, способный измерять постоянные электрические напряжения в интервале от 0 до 5 В [2; 4]. Также в книге приводится описание программного обеспечения этого прибора на языке Паскаль, функционирование которого возможно лишь в операционной системе MS-DOS.

Для считывания данных с выхода этого АЦП, мы предлагаем простую компьютерную программу, написанную в среде программирования Lazarus и позволяющую использовать этот прибор, подключая его к современным компьютерам с операционными системами семейства Windows (Windows XP, Windows Vista, Windows 7) [7]. Если на компьютере отсутствует физический COM-порт, то этот АЦП также можно использовать с этим компьютером, подключая его через специальный адаптер USB-COM [2; 6]. Для этого на компьютере предварительно должен быть установлен драйвер виртуального COM-порта. Никаких изменений в предлагаемом программном обеспечении в этом случае производить не требуется. Программа представляет собой минимальный набор операторов, необходимых для проведения цифровых измерений напряжения [5], который может быть легко трансформирован опытным пользователем компьютерной техники в код, реализующий виртуальный цифровой осциллограф, с возможностью вывода визуальной информации в виде осциллограмм на экран в режиме реального времени [3].

Рис. 1. Принципиальная схема АЦП

Кратко опишем состав программы. В проект типа «Приложение», создаваемый с помощью Lazarus, должны быть включены следующие стандартные модули: Windows, Messages, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls. В тексте программы размещены описания констант Bit = 10 (разрядность АЦП) и Denominator = 1024 (разрешение АЦП или максимальное количество значений измеряемой величины) в блоке const, а также описания переменных hCom типа THandle, InitCOM типа PAnsiChar и Value типа Real (измеряемая величина) – в блоке public.

Приложение содержит элемент ComboBox1. В инспекторе событий ему сопоставлено событие OnChange, вызывающее процедуру TForm1.ComboBox1Change, текст которой приведен ниже:

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

  InitCom := PChar(ComboBox1.Text);

  OpenCOMPort;

end;

Кроме того, программа содержит процедуру TForm1.Beginning:

procedure TForm1.Beginning;

var i: Integer;

begin

  for i := 1 to 9 do

    begin

      hCOM := CreateFile(PChar('COM' + IntToStr(i)),  

      GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING,

      0, 0);

      if hCOM = INVALID_HANDLE_VALUE then Continue;

      ComboBox1.Items.Add('COM' + IntToStr(i));

      CloseHandle(hCOM);

    end;

end;

Также в программу добавлена процедура TForm1.OpenCOMPort:

procedure TForm1.OpenCOMPort;

begin

  if hCOM <> INVALID_HANDLE_VALUE then CloseHandle(hCOM);

  hCOM := INVALID_HANDLE_VALUE;

  hCOM := CreateFile(InitCOM, GENERIC_READ or

  GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);

  if ComboBox1.Text = '' then

    Application.MessageBox(PChar('Порт не

    подключен!'), 'Информация', MB_ICONWARNING)

  else

    Application.MessageBox(PChar('Порт ' + ComboBox1.Text +   

    ' подключен.'), 'Информация', MB_ICONINFORMATION);

  EscapeCommFunction(hCOM, SETBREAK);

end;

Ниже приводится текст процедуры TForm1.FormCreate, которой в инспекторе событий сопоставлено событие OnCreate.

procedure TForm1.FormCreate(Sender: TObject);

begin

  Beginning;

  ComboBox1.ItemIndex := 0;

  InitCom := PChar(ComboBox1.Text);

  OpenCOMPort;

end;

Процедуре TForm1.FormClose, текст которой идет ниже, сопоставлено событие OnClose.

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

  CloseHandle(hCom);

end;

Форма Form1 приложения содержит метку Label1, в которой будут выводиться значения измеряемой величины – электрического напряжения. Также на ней размещен элемент Timer1, свойство Interval которого равно 100. Программа содержит процедуру TForm1.Timer1Timer, которой сопоставлено событие OnTimer объекта Timer1 (текст размещен ниже).

procedure TForm1.Timer1Timer(Sender: TObject);

var ValueStr : string;

begin

  Value := 5 * ADC / Denominator;

  ValueStr := Format(' %1.2f В ', [Value]);

  Label1.Caption := ValueStr;

end;

Наиболее важной подпрограммой является функция, осуществляющая считывание сигнала на выходе АЦП. Это функция ADC типа Word. Вид этой функции приведен ниже:

function TForm1.ADC: Word;

var i : Byte;

    CommStatus: DWord;

begin

  EscapeCommFunction(hCom, CLRDTR);

  Result := 0;

  for i := Bit - 1 downto 0 do

    begin

      EscapeCommFunction(hCom, SETRTS);

      GetCommModemStatus(hCom, CommStatus);

      if (CommStatus and MS_CTS_ON) <> 0 then Result :=

      Result + (1 shl i);

      EscapeCommFunction(hCom, CLRRTS);

    end;

end;

Проверка работоспособности программы заключается в следующем. После компиляции запускают программу на выполнение. Если при наборе текста программы не допущено ошибок, то получится следующий результат. Программа найдет все существующие (физические и виртуальные) на компьютере COM-порты и активирует самый первый из них (с наименьшим номером). На экране появится окно с сообщением о том, что соответствующий порт подключен, а затем главное окно программы с элементом ComboBox1, с помощью которого можно будет переключать существующие на данном компьютере порты. В этом же окне выводится значение напряжения на входе АЦП. Меняя напряжение на входе с помощью обычной батарейки и потенциометра, можно убедиться в том, что значения напряжения на входе АЦП изменяются, и их можно наблюдать на экране (рис. 2).

Рис. 2. Главное окно приложения

Если использовать при написании программы среду программирования Lazarus версии 1.0, то в результате получится текст компьютерной программы следующего содержания.

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

  Windows, Messages, Classes, SysUtils, FileUtil, Forms,

  Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)

    ComboBox1: TComboBox;

    Label1: TLabel;

    Timer1: TTimer;

    procedure ComboBox1Change(Sender: TObject);

    procedure FormClose(Sender: TObject; var CloseAction:

    TCloseAction);

    procedure FormCreate(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

  private

    { private declarations }

    procedure Beginning;

    procedure OpenCOMPort;

  public

    { public declarations }

    hCom : THandle;

    InitCOM : PAnsiChar;

    Value : Real;

    function ADC: Word;

  end;

var

  Form1: TForm1;

implementation

{$R *.lfm}

const

  Bit = 10;

  Denominator = 1024;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);

begin

  Begining;

  ComboBox1.ItemIndex := 0;

  InitCom := PChar(ComboBox1.Text);

  OpenCOMPort;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

var ValueStr : string;

begin

  Value := 5 * ADC / Denominator;

  ValueStr := Format(' %1.2f В ', [Value]);

  Label1.Caption := ValueStr;

end;

function TForm1.ADC: Word;

var i : Byte;

    CommStatus: DWord;

begin

  EscapeCommFunction(hCom, CLRDTR);

  Result := 0;

  for i := Bit - 1 downto 0 do

    begin

      EscapeCommFunction(hCom, SETRTS);

      GetCommModemStatus(hCom, CommStatus);

      if (CommStatus and MS_CTS_ON) <> 0 then Result :=

      Result + (1 shl i);

      EscapeCommFunction(hCom, CLRRTS);

    end;

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

  InitCom := PChar(ComboBox1.Text);

  OpenCOMPort;

end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction:

TCloseAction);

begin

  CloseHandle(hCom);

end;

procedure TForm1.Beginning;

var i: Integer;

begin

  for i := 1 to 9 do

    begin

      hCOM := CreateFile(PChar('COM' + IntToStr(i)),

      GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING,  

      0, 0);

      if hCOM = INVALID_HANDLE_VALUE then Continue;

      ComboBox1.Items.Add('COM' + IntToStr(i));

      CloseHandle(hCOM);

    end;

end;

procedure TForm1.OpenCOMPort;

begin

  if hCOM <> INVALID_HANDLE_VALUE then CloseHandle(hCOM);

  hCOM := INVALID_HANDLE_VALUE;

  hCOM := CreateFile(InitCOM, GENERIC_READ or GENERIC_WRITE,

  0, nil, OPEN_EXISTING, 0, 0);

  if ComboBox1.Text = '' then

    Application.MessageBox(PChar('Порт не подключен!'),

    'Информация', MB_ICONWARNING)

  else

    Application.MessageBox(PChar('Порт ' + ComboBox1.Text +

    ' подключен.'), 'Информация', MB_ICONINFORMATION);

  EscapeCommFunction(hCOM, SETBREAK);

end;

end.

Литература:

1.                  Гёлль П. Как превратить персональный компьютер в измерительный комплекс: Пер. с фр. – М.: ДМК Пресс, 2005. – 144 с.

2.                  Данилов О. Е. Аналого-цифровой преобразователь как базовый элемент учебного компьютерного измерительного комплекса с аналоговыми датчиками физических величин / О. Е. Данилов // Молодой ученый. – 2013. – № 4. – С. 114-119.

3.                  Данилов О. Е. Виртуальный прибор "Цифровой вольтметр" / О. Е. Данилов // Свидетельство о государственной регистрации программы для ЭВМ № 2011617600. – Заявка № 2011613163; зарегистр. в Реестре программ для ЭВМ 29.09.2011.

4.                  Данилов О. Е. Компьютерный вольтметр на базе микросхемы TLC1549 / О. Е. Данилов // Учебный физический эксперимент: Актуальные проблемы. Современные решения: Программа и материалы шестнадцатой Всероссийской научно-практической конференции. – Глазов: ГГПИ, 2011. – С. 49.

5.                  Данилов О. Е. Применение компьютерных технологий в учебном физическом эксперименте / О. Е. Данилов // Молодой ученый. – 2013. – № 1. – С. 330-333.

6.                  Данилов О. Е. Создание компьютерного измерительного комплекса с аналоговыми датчиками для школьного кабинета физики / О. Е. Данилов // Дистанционное и виртуальное обучение. – 2013. - № 3. – С. 93-102.

7.                  Данилов О. Е. Цифровой вольтметр для учебных измерений / О. Е. Данилов // Потенциал. – 2013. – № 12. – С. 37-44.

Основные термины (генерируются автоматически): входе АЦП, цифровой вольтметр, базе микросхемы tlc1549, Принципиальная схема АЦП, электрического напряжения, Цифровой вольтметр, виртуальный прибор, выходе АЦП, разрешение АЦП, разрядность АЦП, измерений электрического напряжения, учебных измерений, статье виртуальный прибор, цифровых измерений напряжения, программирования lazarus, постоянные электрические напряжения, Компьютерный вольтметр, главное окно программы, 10-разряднго аналого-цифрового преобразователя, виртуальный цифровой осциллограф.

Обсуждение

Социальные комментарии Cackle
Задать вопрос