随着科技的不断进步,曾经难以获取或价格昂贵的精密电源控制设备,如今已经能够大规模生产,并且价格比欧洲同类产品更为亲民。在这些控制系统中,精确控制电压范围是至关重要的一环。
在一些项目中,过去常常使用基于微控制器的电源RS232控制,但这种方法有时会因为环境因素导致的电机干扰等问题而出现错误。幸运的是,发现了一些比之前使用的更便宜的中国制造的电源。
一种非常流行的可控制电源是HYElect Hua YI Electronics生产的型号为HY3020M的电源。这种电源只提供了一个可安装的控制程序,而没有提供关于通信协议或控制程序源代码的额外信息。请求主要公司发送协议,但似乎他们对此保持沉默,因此无法发布任何信息!尽管如此,通过RS232嗅探方法幸运地提取了基础协议。
程序由两部分组成。选择“虚拟电源”时,它被视为虚拟电源,可以远程设置其电压和上限电流;选择“真实电源”时,它将改变为如何与实际电源单元接触的方式。
需要设置的通信属性包括:9600bps作为波特率,8位作为默认数据长度,无奇偶校验位,一个停止位,并且接线必须按照下图所示(计算机连接器的第2针必须连接到电源连接器的第3针,计算机连接器的第3针必须连接到电源连接器的第2针,计算机连接器的第5针必须连接到电源连接器的第5针,并且每侧的第7针和第8针必须相互连接)。
所使用的协议非常简单。需要发送的请求字符串是“8
”。
在VB.NET中,代码如下:
MSCom.Write("8")
回复将以这种形式:“VVVAAA
”。其中“VVV
”表示电源电压,需要除以十,“AAA
”表示电源电流,也需要除以十。
在VB.NET中,代码如下:
RP_Vol_In = Mid(STR_InSerial, 1, 3)
RP_Cur_In = Mid(STR_InSerial, 4, 3)
NumUpDown_RP_Get_Voltage.Value = Val(RP_Vol_In) / 10.0
NumUpDown_RP_Get_Current.Value = Val(RP_Cur_In) / 10.0
程序还允许更改电压设定点和电流上限。设置电压时,使用的代码如下:
Dim Volt_Temp As Integer = NumUpDown_RP_Set_Voltage.Value * 10
Dim Volt_Check As Integer = 2
While Volt_Temp > 0
Volt_Check = Volt_Check + (Volt_Temp Mod 10)
Volt_Temp = Volt_Temp \ 10
Wend
Volt_Check = Volt_Check Mod 10
RP_Vol_Out = "2" & (NumUpDown_RP_Set_Voltage.Value * 10).ToString("0000") & _
Volt_Check.ToString("0")
在最后一行中,字符串长度为6个字符。电压设置字符串的指示字符是“2”,必须设置在字符串的开头。接下来的四个字符是通过NumUpDown_RP_Set_Voltage.Value * 10).ToString("0000")
声明的期望值。最后一个字符是Volt_Check
,它是所有数字Volt_temp
除以十的总和的余数。
电流设置的过程类似,不同之处在于指示字符是“1”。下面提供的代码片段描述了创建将要发送以更改电流上限的字符串的过程。
Dim Curr_Temp As Integer = NumUpDown_RP_Set_Current.Value * 10
Dim Curr_Check As Integer = 1
While Curr_Temp > 0
Curr_Check = Curr_Check + (Curr_Temp Mod 10)
Curr_Temp = Curr_Temp \ 10
Wend
Curr_Check = Curr_Check Mod 10
RP_Cur_Out = "1" & (NumUpDown_RP_Set_Current.Value * 10).ToString("0000") _
& Curr_Check.ToString("0")
最有趣的一点是:“永远不要依赖公司发送给信息”!几乎可以说,花了超过一周的时间在网上搜索是否有任何有用的信息可能被留下,帮助像这样的人推进项目,但幸运的是,没有找到任何迫使停下来的信息。正如一句著名的中国谚语所说:“失望是失败的第一步”!