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

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

小改2档拨杆控制6档拍摄角度

[复制链接]
跳转到指定楼层
楼主
发表于 2015-9-27 11:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
由于乐迪T7F遥控器不具备旋钮控制,只有拨杆,拨杆只有2档,所以控制云台角度也只有2档,即只能水平超前和竖直向下拍摄。


设计了一个小装置可以将拨杆的两档信号转换成六档信号出来就可以实现云台的6档倾斜角度
电路非常简单,采用宏晶单片机STC15F102W,成本不超过2元钱








原先云台输入线是直接插在接收机上,现在将云台输入线插在这个小装置的输出端,小装置的信号输入端接在接收机上,
连接很简单


通过拨杆动作了来改变角度,只要拨杆状态发生变化(不管是由上到下还是由下到上),云台倾斜角度都会改变一次,角度每次改变18度
变化范围0--90度。

15--20是装置信号输出值,代表一定的脉冲宽度,符合航模遥控设备舵机信号标准。

演示视频:
?from=y1.7-1.2[/media]

源代码:
;******************************************************************************
;程序功能:将拨动开关2档信号脉冲转换成6档信号脉冲
;mcu STC15F102W;内部晶振11.0592M,1.38T
;******************************************************************************
;特殊功能寄存器定义
p1m1                equ        91h
p1m0                equ        92h
p0m1                equ        93h
p0m0                equ        94h
p2m1                equ        95h
p2m0                equ        96h
p3m1                equ        0b1h
p3m0                equ        0b2h
p1asf                equ        9dh                                ;p1.x口作为a/d的使能
auxr                equ        8eh
auxr1                equ        0a2h                                ;选择双指针
ie2                equ        0afh
adcontr                equ        0bch                                ;a/d控制
adres                equ        0bdh                                ;a/d结果
wdtrst                equ        0c1h
isp_data        equ        0c2h
isp_addh        equ        0c3h
isp_addl        equ        0c4h
isp_cmd                equ        0c5h
isp_trig        equ        0c6h
isp_contr        equ        0c7h
p5m1                equ        0c9h
p5m0                equ        0cah
t2h                equ        0d6h
t2l                equ        0d7h
;******************************************************************************
;引脚定义
pin                bit        p3.2                                ;标准IO
pout                bit        p3.3                                ;推挽输出
led                bit        p3.4
;******************************************************************************
;所用的寄存器
;00h--0bh        工作寄存器
;0ch--13h        堆栈
pswtime                equ        14h                                ;输出脉冲高电平时间范围15--20(1.5ms--2.0ms)
                                                        ;100us一个定时周期
pswbuf                equ        pswtime+1
pswcycle        equ        pswbuf+1                        ;输出脉冲周期一般取200(20ms)100us一个定时周期
;******************************************************************************
;位状态
keystatus        bit        00h                                ;拨动开关状态,0在上面,1在下面
upordown        bit        01h                                ;是上行程还是下行程,0上行程,1下行程
;******************************************************************************
;isp参数定义(常数)
enable_isp        equ        3eh                                ;<12MHz
enable_isp1        equ        7dh
enable_isp2        equ        52h
ispwaitcmd        equ        00h
isprdcmd        equ        01h
ispwrcmd        equ        02h
isperasecmd        equ        03h
;******************************************************************************
;命令(常数)
;******************************************************************************
                org        0000h
                ljmp        start
                org        0003h
                reti
                org        000bh
                ljmp        t0_int
                org        0013h
                reti
                org        001bh
                reti
;******************************************************************************
;11.0592M晶震,延时25ms
dt25ms:
                mov        r6,#200
dt0:
                mov        r7,#125
dt1:
                mov        wdtrst,#00110001b                ;清看门狗
                nop
                nop
                nop
                nop
                djnz        r7,dt1
                djnz        r6,dt0
                ret
                org        0043h
;******************************************************************************
start:
                clr        ea
                mov        sp,#0ch
                mov        wdtrst,#00110001b                ;启动看门狗,看门狗溢出时间为142.2ms
                lcall        ioinit
                lcall        sysinit
;主程序开始
                clr        led
                mov        r5,#8
main:
                lcall        dt25ms
                djnz        r5,main
                setb        led
                lcall        go                                ;启动pout输出
                mov        r5,#200                                ;等10秒,等2轴云台初始化完成
main1:
                lcall        dt25ms
                lcall        dt25ms
                djnz        r5,main1
                clr        led
                lcall        pcl                                ;先测量脉冲初始宽度
                mov        a,t2h
                cjne        a,#4bh,main2
                mov        a,t2l
                cjne        a,#0ach,main3
                clr        keystatus                        ;拨动开关在上面
                ljmp        main5
main2:
                jnc        main4
                clr        keystatus                        ;拨动开关在上面
                ljmp        main5
main3:
                jnc        main4
                clr        keystatus                        ;拨动开关在上面
                ljmp        main5
main4:
                setb        keystatus                        ;拨动开关在下面
main5:
                lcall        pcl                                ;测量脉冲初始宽度
                mov        a,t2h
                cjne        a,#4bh,main6
                mov        a,t2l
                cjne        a,#0ach,main7
                ljmp        main9
main6:
                jnc        main8
                ljmp        main9
main7:
                jnc        main8
                ljmp        main9
main8:
                jb        keystatus,main5                        ;上次也是1状态没变
                setb        keystatus                        ;拨动开关在下面
                cpl        led
                lcall        change                                ;改变脉冲宽度
                ljmp        main5
main9:
                jnb        keystatus,main5                        ;上次也是0状态没变
                clr        keystatus                        ;拨动开关在上面
                cpl        led
                lcall        change                                ;改变脉冲宽度
                ljmp        main5
;******************************************************************************
ioinit:
                mov        p0,#0ffh
                mov        p1,#0ffh
                mov        p2,#0ffh
                mov        p3,#0f7h                        ;pout低电平
                mov        p3m1,#00000000b
                mov        p3m0,#00001000b
                ret
;******************************************************************************
sysinit:
                mov        tmod,#11h                        ;t0,t1都为16位定时器方式
                mov        auxr,#04h                        ;先禁止t2工作,t2不需要12分频
                mov        th0,#0ffh                        ;100us定时作为输出脉冲时基
                mov        tl0,#0a4h
                clr        psw.4                                ;第一组工作寄存器
                clr        psw.3
                clr        c
                clr        ex1
                clr        tf0
                clr        tf1
                clr        tr1
                mov        pswtime,#15                        ;输出脉冲先在起始位置
                clr        upordown                        ;先上行程
                ret
;******************************************************************************
go:
                mov        pswbuf,pswtime                        ;输出脉冲宽度赋值
                mov        pswcycle,#200                        ;输出脉冲周期20ms
                setb        et0
                setb        ea
                setb        pout
                setb        tr0
                ret
;******************************************************************************
;测量输入脉冲宽度
pcl:
                mov        wdtrst,#00110001b                ;清看门狗
                jb        pin,pcl                                ;如果是高电平需要等到变低
pcl1:
                mov        wdtrst,#00110001b                ;清看门狗
                jnb        pin,pcl1                        ;等待上升沿
                mov        t2h,#00h                        ;最大5.92ms
                mov        t2l,#00h
                orl        auxr,#10h                        ;启动T2
pcl2:
                mov        wdtrst,#00110001b                ;清看门狗
                jb        pin,pcl2                        ;等待脉冲结束
                anl        auxr,#0efh                        ;停止T2
                ret
;******************************************************************************
change:
                jb        upordown,change1
                inc        pswtime                                ;是上行程就增大脉冲宽度
                mov        a,pswtime
                cjne        a,#20,change2
                setb        upordown                        ;变为下行程
                ljmp        change2
change1:
                dec        pswtime                                ;是下行程就减小脉冲宽度
                mov        a,pswtime
                cjne        a,#15,change2
                clr        upordown                        ;变为上行程
change2:
                ret
;******************************************************************************
t0_int:
                djnz        pswbuf,t0_int1
                clr        pout
t0_int1:
                djnz        pswcycle,t0_int2
                mov        pswcycle,#200                        ;输出脉冲周期20ms
                mov        pswbuf,pswtime
                setb        pout
t0_int2:
                clr        tf0
                mov        th0,#0ffh                        ;100us定时作为输出脉冲时基
                mov        tl0,#0a4h
                reti
;******************************************************************************
                end


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

沙发
发表于 2015-9-27 11:38 | 只看该作者
就喜欢有技术的人    C语言学了好久 编程还是一塌糊涂
3
发表于 2015-9-27 12:05 | 只看该作者
4
发表于 2015-9-27 12:12 | 只看该作者
王刚 发表于 2015-9-27 11:38
就喜欢有技术的人    C语言学了好久 编程还是一塌糊涂

这是汇编程序。

5
发表于 2015-9-27 13:15 | 只看该作者

6
发表于 2015-9-27 14:15 | 只看该作者
牛!
7
发表于 2015-9-27 14:35 | 只看该作者
顶 技术人 楼主做个6段开关的小板卖
8
发表于 2015-9-27 15:57 | 只看该作者
LZ用汇编的啊,太屌了
9
 楼主| 发表于 2015-9-27 17:43 | 只看该作者
本帖最后由 xxdcq 于 2015-9-27 17:48 编辑

不仅云台可以这样做,对于没有多波段拨杆开关的遥控器也可以实现多段拨杆功能,以实现更多的辅助功能!
另外乐迪T7F遥控器也不具备失控返航功能,一关控油门就熄火,飞机就自由落体,下一步准备外加电路来实现
失控返航功能,在关遥控器后接收机油门通道会输出一个比最低油门值还低一些的信号,利用这一点完全可以用
外电路辅助实现失控返航。


10
发表于 2015-9-27 23:27 | 只看该作者
11
发表于 2015-9-28 11:40 | 只看该作者
学习了,很不错
来自安卓客户端来自安卓客户端
12
发表于 2015-9-30 13:54 | 只看该作者
牛人,赞一个
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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