'
顶高手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中断中,以保证到位后能够及时停止。