using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace USB2XXX { class USB2PWM { //定义函数返回错误代码 public const Int32 PWM_SUCCESS = (0); //函数执行成功 public const Int32 PWM_ERR_NOT_SUPPORT = (-1); //适配器不支持该函数 public const Int32 PWM_ERR_USB_WRITE_FAIL = (-2); //USB写数据失败 public const Int32 PWM_ERR_USB_READ_FAIL = (-3); //USB读数据失败 public const Int32 PWM_ERR_CMD_FAIL = (-4); //命令执行失败 //定义初始化PWM的数据类型 public struct PWM_CONFIG { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public UInt16[] Prescaler; //预分频器 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public UInt16[] Precision; //占空比调节精度 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public UInt16[] Pulse; //占空比,实际占空比=(Pulse/Precision)*100% [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public UInt16[] Phase; //波形相位,取值0到Precision-1 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public Byte[] Polarity; //波形极性 public Byte ChannelMask; //通道号 } //定义PWM测量数据 public struct PWM_CAP_DATA { public UInt16 LowValue;//低电平时间,单位为us public UInt16 HighValue;//高电平时间,单位为us } //UTA0101 UTA0201 UTA0301 UTA0302引脚定义参考引脚定义说明文档,主频为200M //UTA0403 UTA0402 UTA0401 LIN1对应的PWM通道为0x40,LIN2对应的PWM通道为0x80,主频84M //UTA0503 LIN1对应的PWM通道为0x02,LIN2对应的PWM通道为0x04,主频220M //UTA0504 LIN1->0x01 LIN2->0x02 LIN3->0x04 LIN4->0x08 DO0->0x10 DO1->0x20,主频240M //函数定义 [DllImport("USB2XXX.dll")] public static extern Int32 PWM_Init(Int32 DevHandle, ref PWM_CONFIG pConfig); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_Start(Int32 DevHandle,Byte ChannelMask,Int32 RunTimeUs); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_SetPulse(Int32 DevHandle,Byte ChannelMask,UInt16[] pPulse); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_SetPhase(Int32 DevHandle,Byte ChannelMask,UInt16[] pPhase); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_SetFrequency(Int32 DevHandle,Byte ChannelMask,UInt16[] pPrescaler,UInt16[] pPrecision); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_Stop(Int32 DevHandle,Byte ChannelMask); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_CAP_Init(Int32 DevHandle, Byte Channel,Byte TimePrecUs); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_CAP_GetData(Int32 DevHandle, Byte Channel,ref PWM_CAP_DATA pPWMData); [DllImport("USB2XXX.dll")] public static extern Int32 PWM_CAP_Stop(Int32 DevHandle, Byte Channel); } }