5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 1272|回复: 7
打印 上一主题 下一主题

发个舵机反向器的程序

[复制链接]
跳转到指定楼层
楼主
发表于 2006-10-8 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发个舵机反向器的程序
工地上很无聊,顺手编个舵机反向器的程序,简单容易理解;才开始使用PICBASIC的初学者可以参考一下;
流程:1测定输入脉冲宽度---2反向计算(减法)---3输入信号错误保护---4输出反向后信号--5返回1
'***************************************************
'MPU=12F202
'GPIO.3 PPM信号输入
'GPIO.1 PPM信号输出
'***************************************************
INPUT GPIO.3
OUTPUT GPIO.1
B1 VAR BYTE               '输入脉冲宽度变量
B2 VAR BYTE               '输出脉冲变量
B1=0
B2=0               
MAIN:
PULSIN GPIO.3,1,B1        '测量输入脉冲宽度
B2=300-B1                 '反相计算
IF B1<100 THEN B2=150     '输入信号小于1毫秒出错保护
IF B1>200 THEN B2=150     '输入信号大于2毫秒出错保护
PAUSE 12
GPIO.1=0
PULSOUT GPIO.1,B2
GOTO MAIN
有一个不容易理解的地方:PAUSE 12;按照书上的例子程序,这里都是PAUSE 18毫秒,这样做在这里就要出错!
这样理解:
1,PULSIN GPIO.3,1,B1        这条指令要占用2毫秒时间;
2,如果PAUSE 时间过长,等到PULSIN GPIO.3,1,B1 开始测量时正脉冲已经开始了甚至已经过了,导致测量结果出错;
3,PULSIN GPIO.3,1,B1  指令的“1”已经指定只对正向脉冲有效,PULSIN 指令只在正向脉冲开始时才开始计数,因此PAUSE时间短一点不会对测量的结果有影响;
PIC12F202只是用了内置的4兆时钟,PULSIN指令的分辨率是10微妙,如果本程序移植到其他使用了外部时钟的PIC上,千万要注意PULSIN指令得到的结果,没准要使用乘法除法来计算结果。


这个程序很容易移植到其他的PIC单片机上,比如12C508等,只要在PICBASIC PRO的程序编制应用程序上选择好MPU型号就可以了;
下面的HEX文件是针对PIC12F202的,拷贝到写字板另存为*.HEX,就可以烧写到12F202里去使用了;
烧写时注意,熔丝配置时,WDT狗关闭,MCLRE不要!
**************************
:100000002500670A3400310914022A0008066A0034
:1000100022094306630A22094306630A2209630A86
:1000200034003509080209014306630A5D09140218
:10003000A00104001B0A1C0AA8024306E903190ACE
:10004000A001630A1402AA01010C28006900000241
:1000500054018A0143070008A8024306E903270A5E
:100060000008170137000600630AFF0F5701370029
:100070000600630A6B002A00FF0CEA010307EB018C
:100080000307630A030C2900DF0C48093C0A6900D6
:100090002800E70CE8016902FC0C0307530AE80199
:1000A00003064F0AE8010400E9034F0A0806580A4C
:1000B00028075C0A00005C0A000868026902A802BE
:1000C0004306A9020008C404A40404000008640054
:1000D000FF0C33003700180C3600770517020600B6
:1000E0003704170206007C007D00010C2800060C76
:1000F0002400080C020908023C002C0C2F001C02F2
:100100008F003D000400640C9C000306890A960CD5
:100110003D000400C90C9C000307900A960C3D00AA
:100120000C0C3A09260406021D0228006900060C80
:080130002400020C1009750AFD
:021FFE00EB0FE7
:00000001FF

欢迎继续阅读楼主其他信息

沙发
发表于 2006-10-8 17:01 | 只看该作者
狐狸是高人啊!看到你发了不少的技术帖。
3
发表于 2006-10-8 19:05 | 只看该作者

回复楼主

PPM的一个周期是20毫秒 一个通道的周期是2毫秒 你读一个通道周期 (处理忽略不计)再输出一个通道周期就是两个通道周期 也就是20毫秒-2毫秒-2毫秒=16毫秒
你的PAUSE 12 必须小于16毫秒
4
发表于 2006-10-9 10:43 | 只看该作者
:em22: ,有成品吗
5
 楼主| 发表于 2006-10-9 13:32 | 只看该作者
pause 12原本就是指暂停12毫秒,呵呵,多谢师兄提示!
楼上兄弟,成品只有等到回成都以后再说了。
6
发表于 2006-10-9 17:14 | 只看该作者
只会点汇编语言。。。。。。
帮顶
7
发表于 2006-10-9 18:18 | 只看该作者
反接电位器就可以了
8
发表于 2006-10-9 19:16 | 只看该作者

我有成品的

:em19:  需要的和我联系 发短信给我
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /2 下一条

快速回复 返回顶部 返回列表