论坛风格切换切换到宽版
  • 102阅读
  • 5回复

(Arzhuo)CW莫斯电码发射之为FT-991A,IC-9700,FT-891打造远程电台电键操作 [复制链接]

上一主题 下一主题
离线bd8alx
 
发帖
47
只看楼主 倒序阅读 0楼 发表于: 前天 17:55
       大部份电台控制软件在使用远程电台发送CW时都是敲键盘或发CAT指令,有一朋友说有点失去灵魂,要问CW的灵魂是什么,那就是使用手键,近来天气比较燥,周末在家吹空调感觉也有点过头,索性改装一下硬件,再写个脚本,随即就可以使用电键远程奏乐.........
       说明一下,软件是基本TCP客户/服务模式,要求客户端和服务端两端都得有电脑,远程电脑连接电台,客户端电脑连接手键,测试的电台有FT991A,FT-891,IC-9700,这三部电台USB连接电脑后都是双串口,一个用于CAT指令,另一个用于RTS/DTR扩展,我们要远程操作的就是这个扩展串口.

   先从硬件下手,从家里翻了两个闲置的芯片是CH340的USB转RS485的串口模块,撬开外壳来分析一下CH340的芯片.







这两个芯片,一个是CH340G,一个是CH340C.
CH340G: 特征是当我们短接信号线时,给出相应的状态值,但当断开时,状态值会保持,这不是我们想要的结果
CH340C:特征是当我们短接信号线时,给出相应的状态值,但当断开时,状态值立即复原,这正是我们想要的结果.
好了,就拿芯片CH340C来开干





在网上下载了一个CH340芯片封装的文档研究研究



找个串口软件(ATK_XCOM)来试试串口状态值是否能读取
这个ATK_XCOM正点原子的软件至少能检测串口的三个状态,CTS,DSR,DCD
比如CH340C芯片短路1和9脚,串口CTS:1 断开CTS:0
                             短路1和10脚,串口DSR:1 断开DSR:0
                             短路1和12脚,串口DCD:1 断开DCD:0


就相当于一个开关,手键用一个开关就行了,自动键用两路开关,搞定,好了,找个3脚的3.5插头焊上












成品展示









    硬件打造完成!!!!!!!!,接下来就开始用Python写个脚本来运行.



[ 此帖被bd8alx在2025-07-10 09:54重新编辑 ]
离线bd8alx
发帖
47
只看该作者 1楼 发表于: 前天 23:06
      写代码是枯燥的,这里省略1000字,直接提供源代码及编译出来的exe文件
      脚本是的测试环境是: windows2012和Win7,Python 3.5和Python 3.13
        编译后的exe下载: tcpCW.rar
        Python源代码下载: tcpCW_Python源代码
        正点原子串口工具: ATK_XCOM串口调试助手v3.0.zip
        远程音频传输出(网上下的一个基于TCP的VOIP): VoIP_TCP_Audio_Streamer_and_Player.zip  
                         当然VOIP音频软件我最近使用的: SonoBus 感觉还不错,这个可以到官网下载,相当OK.

程序进入到后测试阶段,被客户端侧音问题困扰,这里特别感谢好友BD8ARF,在侧音问题醍醐灌顶,一语贯通.

Readme:
   程序运行时,当电台发射模式为CW时,客户端电键压下为CW发射,当电台为其他模式时,客户端压下电键为电台的PTT功能
  此程序设计是为远程使用电台时用手键拍发CW,后面也添加了支持自动键发射.
  远程电台需要连接一台电脑,启动服务端程序并打开TCP端口,服务端程序:tcpCWserver.exe


  客户端电脑程序(tcpCWclient_key.exe):需要使用一个USB转串口硬件,USB转串口硬件能处理一个或多个如CTS,DTR,RTS,DCD,DSR等的信号状态,电键侧音可以电脑播放,也可以购一个带键控输出的CW练习器来听.
  客户端电脑程序(tcpCWclient_keyboad.exe):需要使用一个USB-HID的自定义键盘线,USB-HID的自定义键盘线映射为键盘按键或直接使用键盘按键,电键侧音可以电脑播放,也可以购一个带键控输出的CW练习器来听.
  
  此程序只在FT-991A,IC-9700下测试过,其他电台没有测试过


配置文件说明如下
[server]                #电台端服务器设置
Port = 5556             #TCP监听端口
Comno = COM24           #电台拍发串口(FT-991A,IC-9700 USB连接都是双串口, 一个用于CAT另一个是拍发串口)
BaudRate = 115200       #电台拍发串口波特率


[client]                #电键客户端设置
ServerAddr = 127.0.0.1  #远程电台的服务器地址
ServerPort = 5556       #远程电台的服务器TCP监听端口
ComLocal = COM9         #USB串口硬件端口
BaudRate =115200        #USB串口硬件端口波特率
LoopTime = 0.01         #轮巡USB串口硬件状态时间,单位是秒,默认0.01秒
Keyer =1                # 1:手键模式  2:自动键模式 3:使用PC键盘的手键模式 4:使用PC键盘的自动键模式 5:使用PC键盘对应字母按键发射模式
Key = cts               #手键模式下读取USB串口状态信号
Dot = cd                #自动键模式下读取USB串口状态信号作为点
Dash = dsr              #自动键模式下读取USB串口状态信号作为划
DotTime = 0.05          #自动键模式下点的时长,单位是秒,默认0.05秒
KeyboardKey = .         #使用PC键盘的手键模式按键设定
KeyboardDot = .         #使用PC键盘的自动键模式,点按键设定
KeyboardDash = /        #使用PC键盘的自动键模式,划按键设定
Volume = 0.5             #CW客户端侧音音量,浮点值(0.0-1.0),默认0.5
Frequency = 350.0       #CW客户端侧音正弦波频率 (Hz)


      /************** DE BD8AIS 73 **********************/

[ 此帖被bd8alx在2025-07-08 23:34重新编辑 ]
离线bd8alx
发帖
47
只看该作者 2楼 发表于: 前天 23:20
接着奏乐接着干
为了让程序更加完美一点,适应又多一点,再次感谢BD8ARF提供的USB-HID线缆一根
用USB-HID线映射DOT和DASH为PC键盘上的按键,另一端用3.5接手键或自动键也是相当完美和简单易用.






离线bd8alx
发帖
47
只看该作者 3楼 发表于: 前天 23:45
    最后补充一下,DIY的USB串口模块,一样可以工作于RCForb的PC客户端,如下设置一下,就可以远程手键配合RCForb进行CW和PTT触发.
RCForb,PC客户端软件:


提示一下,关于双串口电台用于拍发的这个第二串口也是可以分享的(split),只是第二串口的特性一般都是捕获串口状态值来操作电台,所以在串口分享时要关闭串口状态值(RST/DTR),不然可能电台一直处于发射状态,另外使用网上一些串口转TCP工具后一般都不会转发这个串口状态,所以第二串口经TCP后就不能正常工作了,所以我才写了这个脚本程序来完成串口状态的转发,........


拍发串口分享,使用VSPE工具(Virtual Serial Ports Emulato):



  --全文完
  ----  DE BD8AIS  GL 73


[ 此帖被bd8alx在2025-07-10 10:23重新编辑 ]
离线bh8dda
只看该作者 4楼 发表于: 昨天 11:24
来给AIS点赞
离线bd8alx
发帖
47
只看该作者 5楼 发表于: 昨天 12:41
回 bh8dda 的帖子
bh8dda:来给AIS点赞[表情] (2025-07-09 11:24) 

人生何处不相逢呢,好久没见大佬,甚是想念