打印

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

[复制链接]
908|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxdcq|  楼主 | 2016-4-17 12:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xxdcq 于 2016-4-17 12:34 编辑

由于乐迪T7F遥控器不具备旋钮控制,只有拨杆,拨杆只有2档,所以控制云台角度也只有2档,即只能水平朝前和竖直向下拍摄。

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








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

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


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


源代码:
;******************************************************************************
;程序功能:将拨动开关2档信号脉冲转换成6档信号脉冲
;mcu STC15F102W;内部晶振11.0592M,1.38T
;******************************************************************************
;特殊功能寄存器定义
p3m1                equ        0b1h
p3m0                equ        0b2h
auxr                equ        8eh
auxr1                equ        0a2h                                ;选择双指针
ie2                equ        0afh
wdtrst                equ        0c1h
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下行程
;******************************************************************************
                org        0000h
                ljmp        start
                org        0003h
                reti
                org        000bh
                ljmp        t0_int
                org        0013h
                reti
                org        001bh
                reti
;******************************************************************************
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
;******************************************************************************
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






























相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:专业红外遥控解决方案smartcontrol.taobao.com

37

主题

1268

帖子

23

粉丝