The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Electronics::SigGen::FY3200 - control a FeelTech FY32xx signal generator

SYNOPSIS

   use Electronics::SigGen::FY3200;

   my $fy3200 = Electronics::SigGen::FY3200->new( dev => "/dev/ttyUSB0" );

   my $ch1 = $fy3200->channel(1);

   $ch1->set_wave( 'sine' )->get;
   $ch1->set_frequency( 1E3 )->get; # in Hz
   $ch->set_amplitude( 2 )->get;    # in Volts peak

DESCRIPTION

This module allows control of a FeelTech FY32xx series signal generator, such as the FY3224S, when connected over USB.

Interface Design

The interface is currently an ad-hoc collection of whatever seems to work here, but my hope is to find a more generic shareable interface that multiple different modules can use, to provide standard interfaces to various kinds of electronics test equipment.

The intention is that it should eventually be possible to write a script for performing automated electronics testing or experimentation, and easily swap out modules to suit the equipment available. Similar concepts apply in fields like DBI, or Device::Chip, so there should be plenty of ideas to borrow.

METHODS

identify

   $str = $fy3200->identify->get

channel

   $ch = $fy3200->channel( $n )

Returns a Channel object representing the main (if $n is 1) or secondary (if $n is 2) channel.

CHANNEL METHODS

set_wave

   $ch->set_wave( $type )->get

Sets the basic wave shape - one of sine, square, triangle, etc... or one of the direct numbers from 0 to 16 recognised by the device.

set_frequency

   $ch->set_frequency( $hz )->get

Sets the frequency in Hz.

set_amplitude

   $ch->set_amplitude( $vpk )->get

Sets the amplitude in Volts peak.

set_offset

   $ch->set_offset( $v )->get

Sets the offset in Volts.

set_duty

   $ch->set_duty( $duty )->get

Sets the duty cycle as a fraction from 0 to 1.

set_phase

   $ch->set_phase( $phase )->get

Sets the phase offset as a fraction from 0 to 1.

Note that due to hardware limitations this only takes effect on the secondary channel; the primary channel will ignore it.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>