Skip to content

Commit

Permalink
Add initial support and doc for ad2s1210
Browse files Browse the repository at this point in the history
This adds initial support for AD2S1210 Resolver-to-Digital Converter.

Signed-off-by: Apelete Seketeli <[email protected]>
  • Loading branch information
apelete committed Sep 20, 2023
1 parent a6e79aa commit e3f00b7
Show file tree
Hide file tree
Showing 7 changed files with 148 additions and 2 deletions.
124 changes: 124 additions & 0 deletions +adi/+AD2S1210/Rx.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
classdef Rx < adi.common.Rx & matlabshared.libiio.base & adi.common.Attribute
% AD2S1210 Resolver-to-Digital Converter Class
% adi.AD2S1210.Rx Receives data from the AD2S1210 Resolver
% The adi.AD2S1210.Rx System object is a signal source that can receive
% data from the AD2S1210.
%
% rx = adi.AD2S1210.Rx;
% rx = adi.AD2S1210.Rx('uri','192.168.2.1');
%
% <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/ad2s1210.pdf">AD2S1210 Datasheet</a>

properties (Nontunable)
% SamplesPerFrame Samples Per Frame
% Number of samples per frame, specified as an even positive
% integer.
SamplesPerFrame = 4096
end

properties
% Angle
% Resolver angle in Degrees.
Angle = 0

% AngleScale Angular Scale
% Resolver angle scale.
AngleScale = 0

% Velocity Angular Velocity
% Resolver velocity in revolutions per second.
Velocity = 0

% VelocityScale Velocity Angular Scale
% Resolver velocityscale.
VelocityScale = 0

% ExcitationFrequency Excitation Frequency
% Resolver excitation frequency in Hertz.
ExcitationFrequency = 0
end

properties (Hidden)
% Number of frames or buffers of data to capture
FrameCount = 1
end

% Channel names
properties (Nontunable, Hidden, Constant)
channel_names = {'angl0', 'anglvel0'}
end

% isOutput
properties (Hidden, Nontunable, Access = protected)
isOutput = false
end

properties (Nontunable, Hidden)
Timeout = Inf
kernelBuffersCount = 2
dataTypeStr = 'int16'
phyDevName = 'ad2s1210'
devName = 'ad2s1210'
end

properties (Nontunable, Hidden, Constant)
Type = 'Rx'
end

properties (Hidden, Constant)
ComplexData = false
end

methods
%% Constructor
function obj = Rx(varargin)
obj = [email protected](varargin{:});
obj.enableExplicitPolling = false;
obj.EnabledChannels = [1 2];
obj.BufferTypeConversionEnable = true;
end

%% Flush the buffer
function flush(obj)
flushBuffers(obj);
end

%% Check Angle
function getAngle(obj)
if obj.ConnectedToDevice
obj.Angle = obj.getAttributeRAW('angl0', 'raw', obj.isOutput);
end
end

%% Check Angular Scale
function getAngleScale(obj)
if obj.ConnectedToDevice
obj.AngleScale = obj.getAttributeDouble('angl0', 'scale', obj.isOutput);
end
end

%% Check Velocity
function getVelocity(obj)
if obj.ConnectedToDevice
obj.Velocity = obj.getAttributeRAW('anglvel0','raw', obj.isOutput);
end
end

%% Check Velocity Scale
function getVelocityScale(obj)
if obj.ConnectedToDevice
obj.VelocityScale = obj.getAttributeDouble('anglvel0', 'scale', obj.isOutput);
end
end
end

%% API Functions
methods (Hidden, Access = protected)

function setupInit(obj)
% Read excitation frequency attribute from device once connected.

obj.ExcitationFrequency = obj.getDeviceAttributeLongLong('excitation_frequency');
end
end
end
1 change: 1 addition & 0 deletions +adi/Contents.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
% <a href="matlab:help adi.AD4030 ">AD4030-24</a> - ADC
% <a href="matlab:help adi.AD4630_16 ">AD4630-16</a> - ADC
% <a href="matlab:help adi.AD4630_24 ">AD4630-24</a> - ADC
% <a href="matlab:help adi.AD2S1210 ">AD2S1210</a> - Resolver-to-Digital Converter
2 changes: 1 addition & 1 deletion CI/doc/SysObjsProps.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
% * AD4030 <AD4030_Rx.html Rx>
% * AD463x <AD463x_Rx.html Rx>
% * AD7768 <AD7768_Rx.html Rx>

% * AD2S1210 <AD2S1210_Rx.html Rx>
2 changes: 1 addition & 1 deletion CI/doc/genhtml.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mfiledir = '..\..\+adi\';
docdir = '..\..\doc\';
parts = {'AD4630','AD4030','AD463x','AD7768'};
parts = {'AD4630','AD4030','AD463x','AD7768','AD2S1210'};
trx_files = {'Rx','Base','Tx'};
for ii = 1:numel(parts)
for jj = 1:numel(trx_files)
Expand Down
1 change: 1 addition & 0 deletions CI/gen_doc/docs/_pages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,4 @@ The following have device-specific implementations in MATLAB and Simulink. If a
| AD4030-24 | Zedboard | Yes | No | ADI (2021b) |
| AD4630-16 | Zedboard | Yes | No | ADI (2021b) |
| AD4630-24 | Zedboard | Yes | No | ADI (2021b) |
| AD2S1210 | Zedboard | Yes | No | ADI (2021b) |
1 change: 1 addition & 0 deletions CI/gen_doc/docs/gen_sysobj_doc.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
, {'AD4030', {'Rx'}}...
, {'AD4630_16', {'Rx'}}...
, {'AD4630_24', {'Rx'}}...
, {'AD2S1210', {'Rx'}}...
%{'QuadMxFE',{'Rx','Tx'}}...
};

Expand Down
19 changes: 19 additions & 0 deletions examples/ad2s1210_DataCapture.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
%% Script for capturing data from a connected AD2S1210 board

% Instantiate the system object
rx = adi.AD2S1210.Rx('uri','ip:analog.local');

% Connect to device and initialize data
rx();

% Retrieve resolver angle and angular velocity
rx.getAngle();
rx.getAngleScale();
rx.getVelocity();
rx.getVelocityScale();

% Print system object properties
rx

% Delete the system object
release(rx);

0 comments on commit e3f00b7

Please sign in to comment.