Jste zde

LABJACK U3 – KROK ZA KROKEM V - Využití MATLABu

V předchozích dílech jsme používali při naší práci prostředí DAQFactory. To bylo v jistém smyslu svazující, protože existuje velké množství dalšího software, který můžeme pro práci s LabJackem využívat. Jedním z nich je i oblíbený MATLAB. Dnes si v jednoduchých příkladech ukážeme jak na to.

Úvodem

labjack.jpg

Pro práci s MATLABem vytvořil výrobce LabJacku sadu knihovních funci a příkladů, které demonstrují základní použití dvojice LabJack – MATLAB. Obojí lze samozřejmě stáhnout z webových stránek výrobce. Pro správnou funkci je nutné mít nainstalovaný MATLAB verze 7.0.0.19920 (R14) a novější. S některými omezeními je možné propojení realizovat i na verzi 6.5.

Stažený archiv funkcí a příkladů rozbalte do libovolného místa na pevném disku. Spusťte MATLAB a volbou FILE-Set Path… vyvolejte dialogové okno pro výběr adresářů. V tomto okně vyberte složku obsahující rozbalený archiv a vložte adresu kliknutí na tlačítko „Add with Subfolders“. Nastavení uložte a dialogové okno uzavřete. Tímto je přípravný proces zdárně ukončen.

Připravené příklady se dotýkají několika témat:

  • Využití prostého měření analogových vstupu
  • Digitální vstupy / výstupy
  • Jednoduchý kombinovaný Loger (4x analog, 2x digital)
  • Měření vlhkosti a teploty
  • Steamování
  • Využití Čítače /časovače v režimu PWM

Mimo dvou posledně zmíněných témat jsme si v průběhu seriálu snad už všechno ukázali. Přesto není na škodu si i tyto elementární úkony zopakovat. Obzvlášť v prostředí MATLABu.

Úkol první, změřme si analogovou veličinu

Jednoduchý příklad pro změření analogové veličiny nám přináší hned „U3_Simple_Analog.m“. Jedná se o klasický „M-FILE“. Po nastavení uvedeném v textu výše jej stačí pouze otevřít a spustit (funkční klávesa F5). Výstupem jsou dvě napětí. Nenechte se odradit v případě, že na Vás MATLAB místo výsledků měření vychrlí chybová hlášení. Skript spusťte znovu. Stává se to většinou při první komunikaci s LABJACKem. Příklad „U3_Simple_Analog.m“. vrací dvě napětí. Prvím je napětí analogového vstupu AIN2, druhým napětí analogového vstupu AIN3 vztažené k referenčnímu napětí VREF.

Výsledek může vypadat takto:

AIN2 =
    0.4559

AIN3_VREF =
   -0.0173
>>

Proměnné lze samozřejmě využívat k další práci.

Celý kód pak vypadá takto:

% -------------------------------------------------------------------------
% Simple Analog In
% This file calls the eGet function and returns the
% analog voltages AIN2 and AIN3-VREF from the U3. 
% -------------------------------------------------------------------------

clc % Clears the command window
clear global % Clears all global variables

ljud_LoadDriver; % Loads LabJack UD Function Library
ljud_Constants; % Loads LabJack UD constant file
[Error ljHandle] = ljud_OpenLabJack(LJ_dtU3,LJ_ctUSB,'1',1); % Returns ljHandle for open LabJack
Error_Message(Error) % Check for and display any Errros

%Start by using the pin_configuration_reset IOType so that all
%pin assignments are in the factory default condition.
[Error] = ljud_ePut(ljHandle, LJ_ioPIN_CONFIGURATION_RESET, 0, 0, 0);
Error_Message(Error)

%First some configuration commands.  These will be done with the ePut
%function which combines the add/go/get into a single call.

%Configure FIO2 and FIO3 as analog, all else as digital.  That means we
%will start from channel 0 and update all 16 flexible bits.  We will
%pass a value of b0000000000001100 or d12.
[Error] = ljud_ePut(ljHandle, LJ_ioPUT_ANALOG_ENABLE_PORT, 0, 12, 16);
Error_Message(Error)

% Call eGet function to get AIN2 single-ended voltage.
[Error AIN2] = ljud_eGet(ljHandle,LJ_ioGET_AIN,2,0,0);
Error_Message(Error)

% Call eGet function to get AIN3-VREF differential voltage.
[Error AIN3_VREF] = ljud_eGet(ljHandle,LJ_ioGET_AIN_DIFF,3,0,30);
Error_Message(Error)

AIN2 % Display AIN2 value
AIN3_VREF % Display AIN3_VREF value

Úkol druhý, digitální vstup / výstup

V tomto příkladě je nejprve uživatel dotázán na logický stav, do kterého má být nastaven výstup FIO0. Po jeho nastavení je přečtena druhá digitální linka a to FIO1 (nezapomeňme, že v klidu je zde log. 1 – pull-up). Příklad „U3_Simple_Digital.m“

Možný výstup:

Enter 1 for High and 0 for Low FIO0 Output FIO0 = 0
FIO0 =
     0

FIO1 =
     1
>>

Řešení v podobě M-FILE je opět velmi jednoduché

% -----------------------------------------------------------
% Digital Bit In/Out Example
% This file sets a single digital output channel  based on user
% input and reads a single digital input channel. Jumper a wire 
% from FIO0 to FIO1 and the program will return the value you set
% FIO0 to as FIO1.
% -----------------------------------------------------------

clc %clear the MATLAB command window
clear global %Clears MATLAB global variables

ljud_LoadDriver; % Loads LabJack UD Function Library
ljud_Constants; % Loads LabJack UD constant file
[Error ljHandle] = ljud_OpenLabJack(LJ_dtU3,LJ_ctUSB,'1',1); % Returns ljHandle for open LabJack
Error_Message(Error) % Check for and display any Errros


%Start by using the pin_configuration_reset IOType so that all
%pin assignments are in the factory default condition.
Error = ljud_ePut (ljHandle, LJ_ioPIN_CONFIGURATION_RESET, 0, 0, 0);
Error_Message(Error)

% Prompt user for FIO0 output value
FIO0 = input('Enter 1 for High and 0 for Low FIO0 Output FIO0 = ')
Error = ljud_ePut(ljHandle,LJ_ioPUT_DIGITAL_BIT,0,FIO0,0);
Error_Message(Error)

% Gets FIO1's State
[Error FIO1] = ljud_eGet(ljHandle,LJ_ioGET_DIGITAL_BIT,1,0,0);
Error_Message(Error)

% Display FIO1
FIO1

Příklad třetí, generujeme PWM

Zajímavým příkladem je využití časovače / čítače. Jsou zde předvedeny dva režimy. Osmibitová PWM a vyžití čítače k čítání externích událostí. Příklad předpokládá propojení výstupu PWM FIO0 se vstupem čítače FIO1. Osmibitová PWM je nastavena na frekvenci 7812 (u staršího HW na poloviční). Obě periferie jsou připojeny po dobu jedné sekundy a tak čítač načítá přibližně stejnou frekvenci:

Counter1 =
        7865
>>

Chyba je dána skutečností, že zastavení periferií neproběhne zcela přesně po uplynutí jedné sekundy. O režimech a využití čítačů/časovačů si řekněme něco v příštím díle. Následuje řešení, tak jak ho vytvořil výrovce LJ.

% ------------------------------------------------------
% Timer Counter Example: PWM Output and Counter Input
% This example has been written to create a 3.9 kHz PWM output
% over FIO0 with a 50% duty cycle. It also enables Counter0 over FIO1.
% Jumper a wire from FIO0 to FIO1 and run the program from
% the command window. Counter should return roughly 7812 counts
% for a U3 version 1.21.  Counter should return roughly 3906 counts
% for a U3 version 1.20.
% ------------------------------------------------------

clc %clear the MATLAB command window
clear global % Clears MATLAB global variables

ljud_LoadDriver; % Loads LabJack UD Function Library
ljud_Constants; % Loads LabJack UD constant file
[Error ljHandle] = ljud_OpenLabJack(LJ_dtU3,LJ_ctUSB,'1',1); % Returns ljHandle for open LabJack
Error_Message(Error)

%Start by using the pin_configuration_reset IOType so that all
%pin assignments are in the factory default condition.
Error = ljud_ePut (ljHandle, LJ_ioPIN_CONFIGURATION_RESET, 0, 0, 0);
Error_Message(Error) % Checks for errors and displays them if they occur

%Set the pin offset for the timers and counters on the U3
Error = ljud_AddRequest(ljHandle,LJ_ioPUT_CONFIG,LJ_chTIMER_COUNTER_PIN_OFFSET,0,0,0);
Error_Message(Error)

% Configure the U3's timer clock to 48 MHz 
Error = ljud_AddRequest(ljHandle,LJ_ioPUT_CONFIG,LJ_chTIMER_CLOCK_CONFIG,LJ_tc48MHZ_DIV,0,0);
Error_Message(Error)
%Call this command for a U3 Hardware version 1.20
%Error = ljud_AddRequest(ljHandle,LJ_ioPUT_CONFIG,LJ_chTIMER_CLOCK_CONFIG,LJ_tc24MHZ_DIV,0,0);


% Configure the U3's timer clock to be divided by 24
% Resulting timer clock is 1 MHz.
% Frequency =  2 MHz / (256 * 24) = 7.812 kHz
Error = ljud_AddRequest(ljHandle,LJ_ioPUT_CONFIG,LJ_chTIMER_CLOCK_DIVISOR,24,0,0); 
Error_Message(Error)

Error = ljud_AddRequest(ljHandle,LJ_ioPUT_CONFIG,LJ_chNUMBER_TIMERS_ENABLED,1,0,0); % Enable 1 timer.
Error_Message(Error)

Error = ljud_AddRequest(ljHandle,LJ_ioPUT_TIMER_MODE,0,LJ_tmPWM8,0,0); % Timer0 set to 8-bit PWM.
Error_Message(Error)

Error = ljud_AddRequest(ljHandle,LJ_ioPUT_TIMER_VALUE,0,10000,0,0); % Timer0 Duty Cycle = 50%.
Error_Message(Error)

Error = ljud_AddRequest(ljHandle,LJ_ioPUT_COUNTER_ENABLE,1,1,0,0); % Enable Counter1.
Error_Message(Error)

Error = ljud_GoOne(ljHandle);
Error_Message(Error)

% Get all results just to check for errors
Error = ljud_GetFirstResult(ljHandle,0,0,0,0,0);
Error_Message(Error)

% Run while loop until Error 1006 is returned to ensure that the device has
% fully configured its channels before continuing.
while (Error ~= 1006) % 1006 Equates to LJE_NO_MORE_DATA_AVAILABLE
    Error = ljud_GetNextResult(ljHandle,0,0,0,0,0);
    if ((Error ~= 0) && (Error ~= 1006))
        Error_Message (Error)
        break
    end
end 

pause (1) % Pause for 1 second


[Error Counter1] = ljud_eGet(ljHandle,LJ_ioGET_COUNTER,1,0,0); % Get Counter1 Reading
Counter1

%Disable Timer      
Error = ljud_AddRequest(ljHandle,LJ_ioPUT_CONFIG,LJ_chNUMBER_TIMERS_ENABLED,0,0,0);
Error_Message(Error)

%Disable Counter
Error = ljud_AddRequest(ljHandle,LJ_ioPUT_COUNTER_ENABLE,0,0,0,0);
Error_Message(Error)

Error = ljud_GoOne(ljHandle);
Error_Message(Error)

Všechny uvedené příklady a mnohem více je možné stáhnout na webu výrobce. Od pondělí 20.10. máte také možnost využít českého zrcadla: http://www.labjack.cz.

Odkazy a Download

Hodnocení článku: 

Komentáře

V danem okamziku bych jako osobu nejpovolanejsi videl autora clanku. Pokud se vam sam neozve, tak mi poslete maila a zkontaktuji Vas primo. Za HW Vam mohu nejaky model zapujcit na zkousku.