论坛风格切换切换到宽版
  • 11073阅读
  • 52回复

RC5A-3设备升级改造 [复制链接]

上一主题 下一主题
离线VR2KW
发帖
3110
只看该作者 20楼 发表于: 2010-01-30
还欠一个速度控制,看rc5x-3的说明书,估计是用光耦隔离;提供给adc的角度电压,可能会再经过4558放大。
看看这个rci-se的说明书(文件太大,传不上来)
http://www.hb9z.ch/media/rcise-referenz_handbuch.pdf
http://www.hb9z.ch/media/rcise-schnellinstallationsanleitung.pdf

附件是另外一个类似的产品关于rc5x-3的连接图,这个套件过几天到手。
附件: eng_Installationguide ERC CREATE RC5-3.pdf (0 K) 下载次数:3446
离线ba6iv
发帖
1293
只看该作者 21楼 发表于: 2010-01-30
谢谢vr2kw的资料!
我这是闷着头自己鼓捣的,还有些欠缺。
离线BH4TDV
发帖
1189
只看该作者 22楼 发表于: 2010-01-30
顶高手ba6iv
悄悄说下,q1\q2+1n4148x2。
以下纯技术交流,我向老大坦白一下我的思路
受机械装配和实际模拟表头校准影响,每台旋转器输出的上下限(0度和满量程360或450度)角度电压并不完全相同,参考值是下限0.5-上限4.5v,对应0-360度,gs-232需要记忆实际的上下限角度电压值,通过换算,取得角度值。

涉及一个系数的计算问题。
比如实测下限0.7v(0度),上限4.7v(360度),单片机读取下限的10位ad值(10进制),0.7v(0度)=143,由公式0.7*1024/5=143.36推出,即143,单片机上限的10位ad值,4.7v(360度)=963,由公式4.7*1024/5=962.56推出,即963,


上下限每台机器都不一样,因此系数也各不相同。
处理器计算系数并记忆,系数=360/(上限-下限)=360/(963-143)=0.4390

角度计算过程:读取ad值,减去下限值,乘以系数。


系数的取得,可以通过上面除法计算,也可以通过乘法获得,乘法计算使程序变得简单有效,并排除了小数误差。


我使用乘法的方法,核心算法啊,老大我都招了
预设初始系数=0.3515(最小值了360/1024=0.3515),(上限-下限)*系数,如结果<360,系数+0.0001,循环计算,直到结果等于或大于360,即取得实际所需系数,非常快,一眨眼就算好了。

232实际使用时,有校准过程。旋转器手动调0度,输入命令0记忆0位即ad下限,手动调360度,输入命令f记忆满量程即ad上限,自动计算取得系数并记忆。
离线VR2KW
发帖
3110
只看该作者 23楼 发表于: 2010-01-30
'
顶高手ba6iv [表情]
悄悄说下,q1\q2+1n4148x2。
'


不要悄悄了,把3p的图共享一下吧
离线BH4TDV
发帖
1189
只看该作者 24楼 发表于: 2010-01-30
'
不要悄悄了,把3p的图共享一下吧 [表情]
'

3p的图共享一下,没明白,6iv老大不是上传图了啊,2kw老大要啥东西啊
离线VR2KW
发帖
3110
只看该作者 25楼 发表于: 2010-01-31
'
3p的图共享一下,没明白,6iv老大不是上传图了啊,2kw老大要啥东西啊 [表情]
'

我还以为你有rc5x-3p原装的电路图呢
yeasu的旋转器是0-360度 或 0-450度,但create的出口版旋转器是180-180度的
离线ba6iv
发帖
1293
只看该作者 26楼 发表于: 2010-01-31
'
顶高手ba6iv [表情]
悄悄说下,q1\q2+1n4148x2。
以下纯技术交流,我向老大坦白一下我的思路 [表情] :
受机械装配和实际模拟表头校准影响,每台旋转器输出的上下限(0度和满量程360或450度)角度电压并不完全相同,参考值是下限0.5-上限4.5v,对应0-360度,gs-232需要记忆实际的上下限角度电压值,通过换算,取得角度值。
涉及一个系数的计算问题。
比如实测下限0.7v(0度),上限4.7v(360度),单片机读取下限的10位ad值(10进制),0.7v(0度)=143,由公式0.7*1024/5=143.36推出,即143,单片机上限的10位ad值,4.7v(360度)=963,由公式4.7*1024/5=962.56推出,即963,
上下限每台机器都不一样,因此系数也各不相同。
处理器计算系数并记忆,系数=360/(上限-下限)=360/(963-143)=0.4390
角度计算过程:读取ad值,减去下限值,乘以系数。
系数的取得,可以通过上面除法计算,也可以通过乘法获得,乘法计算使程序变得简单有效,并排除了小数误差。
我使用乘法的方法,核心算法啊,老大我都招了 [表情]
预设初始系数=0.3515(最小值了360/1024=0.3515),(上限-下限)*系数,如结果<360,系数+0.0001,循环计算,直到结果等于或大于360,即取得实际所需系数,非常快,一眨眼就算好了。
232实际使用时,有校准过程。旋转器手动调0度,输入命令0记忆0位即ad下限,手动调360度,输入命令f记忆满量程即ad上限,自动计算取得系数并记忆。
'

我的思路也是大致如此,每台旋转器需要自校准。测出0度时的电压ad值(我称为归零误差),再测出360度时的电压ad值,用360度的ad电压值减去归零误差再除以360就得到每度的ad值,校准完毕后将这个值存入eerom保存(数据需要处理成整形数值),系统开机初始化时将这个值取出赋予一个全局变量供系统使用。根据实验,用这个值计算出的角度数在0-360度范围内基本准确,误差最大不超过3度。还是有实用价值的。
关于增加4148对保护mcu的io口是有好处的,不过基极串联的10k电阻1ma的电流已经能产生10v的压降,在一定程度上也能起到保护io口的作用。
继电器线圈的泄压二极管因为布线方便起见,可以直接焊在电路板背面。
现在主要是软件的问题,rc5a-3是180-180,角度转换已解决,现在有一个角度越界后的情况需要处理,还没有想到好的处理方法。还有一个0度和360度的问题,不过这个相对好办,用算法处理一下即可。因为通过实验发现向rc5a-3发出停止指令后,旋转器还会转动一点(可能跟主板上继电器并的电容有关?),导致角度超过预设值一点点,所以程序设定当前角度相差1度即停止,如果相等才停止的话就会转过一点点,也是权宜之计。
其实还有很多没有想到的问题,可能在以后的使用过程中才能发现,也只能发现一个处理一个啦。
附我的部分编程笔记,都是摸索出来的。
------------------readme file---------------------

gs232a 命令简介

1、c[回车]   0x43 0x0d   返回方位角命令
  返回的数据格式为"+0nnn[回车]"
  其中nnn为3位角度值的ascii码。

2、mnnn[回车] 0x4d n n n 0x0d   设置方位角命令
  用于向ga232a发送设置目标方位角的数值
  其中nnn为3为角度值的ascii码

3、s[回车]   0x53 0x0d   停止转动命令
  用于向ga232a发送停止转动的命令。


gs232a编程主要参数列表

各方位的ad采样电压(单位:v)

方位     电压     ad转换值
s1?     0.14     56
w :     0.67     268
n :     1.21     484
e :     1.78     712
s2:     2.33     932

基准电压:2.56v
ad分辨率:10位(1024)
电压分辨率:0.0025v
电压/度:0.00608v/度
ad值/度:2.432/度
ad归零误差:56


方位判定思路

  将0-360°分为两个区域,0-180 180-360,根据当前角度和预置角度所在位置的不同
可分为4种状态。

1、当前角度和预置角度同在0-180°区域
  比较当前角度和预置角度的大小决定正转(cw)还是反转(ccw)
  当前角度>预置角度-------ccw
  当前角度<预置角度-------cw
  此状态不用判断当前角度是否越位。

2、当前角度在180-360°区域,预置角度在0-180°区域
  ----------cw
  此状态需要判断当前角度是否越位。

3、当前角度和预置角度同在180-360°区域
  比较当前角度和预置角度的大小决定正转(cw)还是反转(ccw)
  当前角度>预置角度-------ccw
  当前角度<预置角度-------cw
  此状态不用判断当前角度是否越位。

4、当前角度0-180°区域,预置角度在180-360区域
  ----------ccw
  此状态需要判断当前角度是否越位。

旋转是否到位的比较应放到系统2ms中断中,以保证到位后能够及时停止。
离线VR2KW
发帖
3110
只看该作者 27楼 发表于: 2010-01-31
角度偏差超过5度才处理,低于5度不处理或中止处理
离线ba6iv
发帖
1293
只看该作者 28楼 发表于: 2010-01-31
现在程序是相差超过2度才处理,还没有发现旋转器抖动的情况,再不出现抖动的情况下,尽量提高控制精度。这个数值可以作为系统可调参数放到setup里由用户自行设定。
离线lgl280637
发帖
197
只看该作者 29楼 发表于: 2010-01-31
楼主你好:我的旋转器是yaesu g-1000sdx,能否与你制作电脑连接控制器配合,在hamradio电脑软件上控制旋转器?
离线ba6iv
发帖
1293
只看该作者 30楼 发表于: 2010-02-01
'
楼主你好:我的旋转器是yaesu g-1000sdx,能否与你制作电脑连接控制器配合,在hamradio电脑软件上控制旋转器?
'
理论上任何控制器经过适当的改装都可以连接电脑。
实际上电脑控制旋转器只是获取一个旋转器的角度电压,根据这个角度电压通过计算判断再传递给控制器一个正转或者反转的信号而已,属于一个比较简单的自控系统。
离线VR2KW
发帖
3110
只看该作者 31楼 发表于: 2010-02-01
'
理论上任何控制器经过适当的改装都可以连接电脑。
实际上电脑控制旋转器只是获取一个旋转器的角度电压,根据这个角度电压通过计算判断再传递给控制器一个正转或者反转的信号而已,属于一个比较简单的自控系统。
'

你那个旋转器的角度电压范围?
我那台还在箱子里没有测试
离线ba6iv
发帖
1293
只看该作者 32楼 发表于: 2010-02-01
'
你那个旋转器的角度电压范围?
我那台还在箱子里没有测试 [表情]
'

我的改成5v后电压范围是:
各方位的ad采样电压(单位:v)

方位     电压     ad转换值
180 :     0.14     56
270 :     0.67     268
0   :     1.21     484
90   :     1.78     712
180 :     2.33     932

原机12v电压没有测量数据保存,原来12v没有稳压,电机转动与不转动时电压有1v多的波动,因为机外和机内的角度比较电位器都是用的这个电压,所以稳定不稳定也没什关系。
离线ba6iv
发帖
1293
只看该作者 33楼 发表于: 2010-02-02
程序又进行了一些完善,增加了部分功能,根据开源精神,现将程序源码提供给大家,供大家实验,其中还有许多不完善的地方,也请大家帮忙改正。
/********************************************************
              程序修改记录
---------------------------------------------------------
2010.1.25
  构建了系统框架,规划了系统资源的使用,用到串口接收中
断、串口查询发送、定时器0、定时器1、ad通道7 10bit精度采
样等系统资源。
  定义了系统需要的全局变量以及预定义符号;使用了1602等
底层函数模块;定义了基本系统数据处理函数。
当前系统可完成的功能:
1、正确读取转向器的角度电压值并换算成实际角度数值;
2、正确接收pc发送的串口指令并作出回应;
3、转向器角度与pc屏幕、lcd1602同步显示。

2010.1.30
  将串口命令解析放到了2ms中断里以保证对串口发送的命令
作出及时的反应。同时取消了void uart_data_process (void)
串口命令处理函数。增加了一个全局变量tx_az天线方位发送使
能标志。

2010.1.31
  增加eerom模块,用于关键系统参数的掉电保存,下次系统
启动时直接提取即可。
保存变量     数据类型       eeprom地址
az_0       unsigned int   0x0001
az_180     unsigned int   0x0003
az_360     unsigned int   0x0005
az_step     unsigned int   0x0007
az_dev     unsigned char   0x0009

在系统初始化时读出eeprom的内容并赋值全局变量。

2010.2.2
1、修改了串口初始化函数,通过使用宏定义使其兼容性得到增强
2、修改了系统参数设置部分,增加了az_dev方位精度控制全局变
量,并可在系统设置中手动调整并保存到eeprom中,增加了系统
宽容度。
3、重新设定了人机界面,定义了四个系统按键(多功能),分别是:
      按键名称   第二功能   io接口
      menu     next       pa3
      add     cww       pa2
      dec     cw       pa1
      func     翻页键     pa0
4、增加了手动停止功能,可以再转向器转动时手动停止。
5、增加了三个可由用户自由定义的方向预置位,在系统显示第二
屏调取三个预置位,在系统显示第三屏保存三个预置位。三个预
置位的保存地址为:
预置位     数据类型     eeprom地址
1#     unsigned int     0x000a
2#     unsigned int     0x000c
3#     unsigned int     0x000e
********************************************************/

单片机的硬件连接请看程序头文件描述,如有疑问,欢迎交流。
源代码如下:
附件: Rotator.rar (0 K) 下载次数:44
离线BD3RJ
发帖
18844
只看该作者 34楼 发表于: 2010-02-02
'
楼主你好:我的旋转器是yaesu g-1000sdx,能否与你制作电脑连接控制器配合,在hamradio电脑软件上控制旋转器?
'
直接用山寨gs232不用改。
离线VR2KW
发帖
3110
只看该作者 35楼 发表于: 2010-02-09
'
我的改成5v后电压范围是:
各方位的ad采样电压(单位:v)
方位     电压     ad转换值
180 :     0.14     56
270 :     0.67     268
0   :     1.21     484
90   :     1.78     712
180 :     2.33     932
原机12v电压没有测量数据保存,原来12v没有稳压,电机转动与不转动时电压有1v多的波动,因为机外和机内的角度比较电位器都是用的这个电压,所以稳定不稳定也没什关系。
'

突然想起,你提供给旋转器的电压是经过78l05稳压,但与角度电压比较的12v却没有稳压,是不是还有其他的改动?
离线VR2KW
发帖
3110
只看该作者 36楼 发表于: 2010-02-09
这一段是对于p版的工作描述
the rotator only works with the remote-connector j1, if the switch s1 on the backside of the
rotor-controller is in the lower position and if the switch on the front-panel is set to p.set.
这个可能就是升级p版的改动部分
a是u1(4558)的1脚,在p.set时输出正或负电压控制旋转方向
a-b和c-d是两颗 0欧姆电阻,拆掉。
7-8-9接选择开关(s1),9是p.set,8是remote

j1是背后的6位插座,p版才有
1 角度电压输出
2 ccw
4 12v输出
5 cw
6 速度控制
gnd接外壳
离线ba6iv
发帖
1293
只看该作者 37楼 发表于: 2010-02-10
我改制的没那么复杂,在图示位置安装一个78l05,看焊盘封装原来就是设计78l05的,再在78l05输入输出加两个滤波用的电解电容,我在输入加的100uf,输出10uf,78l05的12v输入端的铜箔用美工刀断开,串入一个大约500欧姆的电阻做降压用,要不感觉78l05发热有些大,这个电阻还可以略小一点,避免转向器带负载后一旦转动12v压降过大,造成78l05输入电压不够。
看电路图78l05的输出电压是分别到室内、室外的角度电位器的,所以两个电位器用的电压是一样的。从室外电位器中心从头引出ad电压到一个阻值较大的电位器(我用的是200k)对角度电压进行分压,同时也可以作为角度微调,因为我的单片机的ad基准是2.56v的,所以我将200k电位器调节到差不多中点的位置,以便将最高接近5v的角度电压分压到不超过2.5v,然后送单片机进行ad转换,为了保证精度,ad转换使用了10bit的精度,效果还不错。
经过程序比较控制器作出正转或反转的控制,高电平有效(不晓得3p是什么电平有效?),控制器内部的升级组件保证了即使两个输入端都是高电平时的开关自锁(程序中也有互锁的代码,但为了安全从硬件部分在控制一下,以免程序跑飞后出错),保护电机的安全。同时升级组件设计为手自一体,自控优先,自控转动时手动失效,自动停止时手控有效。以避免手控、自控的转动方向不一致损坏电机。
借用你的图,我没拍到如此清晰的线路板图。
离线BA5AJ
发帖
234
只看该作者 38楼 发表于: 2010-02-10
好贴,记号,我也要做一个
离线BA7QT
发帖
6943
只看该作者 39楼 发表于: 2010-02-10
厉害,6iv,老朋友,好久不见了!