微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC89C52RC控制MG995舵机循环转,总是一给电就只动一下

STC89C52RC控制MG995舵机循环转,总是一给电就只动一下

时间:10-02 整理:3721RD 点击:

我把循环向左,中间,向右转的程序烧写到STC89C52RC,但是一通电,电机只动了一个很小的角度,好像只要给电就会这样动一下,
根本没有按照程序转动啊,我的晶振是11MHZ,我换成20MHZ的也不行,舵机是MG995 13kg扭力的,是我的程序有问题?还是什么地方不对?
我还是个菜鸟,希望大家帮忙看看我的程序,谢谢!
提供我买的舵机和STC89C52开发板的链接作为参考:
MG995舵机:
http://item.taobao.com/item.htm?spm=0.0.0.34.ZoVBtW&id=16919324874
STC89C52RC开发板:
http://item.taobao.com/item.htm?spm=0.0.0.34.nrfdfR&id=10488508499
以下是我的全部程序:
;========一个伺服电机的连续动作===
        ORG        0000H
        JMP        START
        ORG        000BH
        JMP        TIMER0
;=================================
;                主程序
;=================================
START:
        MOV        R1,#15
        MOV        TMOD,#00000001B        ;设定计时模式1,如图6.5所示
        MOV        TH0,#0FFH        ;设定0.1ms中断1次
        MOV        TL0,#0A4H
        SETB    EA                ;中断使能(打开中断总开关)
        SETB    ET0                ;计时/计数器0的中断使能
        SETB    TR0                ;计时/计数器0开始工作
;=================================灰色部分START
LOOP:
        MOV        R1,#15            ;中间
        CALL    DELAY            ;停1s               
        MOV        R1,#21            ;顺时针到底
        CALL    DELAY
        MOV        R1,#15            ;中间
        CALL    DELAY
        MOV        R1,#9            ;逆时针到底
        CALL    DELAY
        JMP        LOOP            ;跳回LOOP
;=================================灰色部分END
;计时/计数器0中断子程序
;=================================
TIMER0:
        PUSH     ACC            ;将ACC寄存器的数据放置于堆栈区
        CLR        TF0            ;将TF0中断请求先清0
        MOV        TH0,#0FFH    ;手动载入TH0及TL0的值
        MOV        TL0,#0A4H    ;隔0.1ms中断
        INC        R0            ;中断一次就把R0加1
CYCLE:    CJNE    R0,#200,SERVO1        ;R0若不为200,则跳至SERVO1执行
        MOV        R0,#0
        SETB    P2.0
        JMP        GOBACK
SERVO1:    MOV        A,R0
        XRL        A,R1        ;判断R0是否等于R1
        JNZ        GOBACK         ;若R0不等于R1,则结束中断子程序
        CLR        P2.0        ;若R0等于R1,则将输出设为低电平
GOBACK:    POP        ACC            ;将ACC寄存器的数据从堆栈区取回
        RETI
;=================================
;延时子程序(延时1s)  
;=================================
DELAY:    MOV        R5,#15            ;重复15次
DL1:    MOV        R6,#250
DL2:    MOV        R7,#200
DL3:    DJNZ    R7,DL3
        DJNZ    R6,DL2
        DJNZ    R5,DL1
        RET
        END

没人会吗?

自己弄好了,我这个代码是书上的,书上是以AT89S51为例,后来我换成AT89S52就好了,能转了,但是之前用STC的89C52就不行,就有上面的问题,很奇怪,这俩应该没大区别啊,咋得到的结果差距那么大呢?谁知道是咋回事儿吗?

我也是相同的问题,舵机MG995、芯片STC89C52RC样板2天出货都和你一样,无论我怎么设置PWM,舵机就是不按我想要的角度转,还来回摆动,我纠结死了,小编,你就只是换了芯片就行了的吗?

我的连摆动都不摆动    就自动复位到九十度位置 就停了   愁人哪

跪求大仙  指点一二

MC_51 单片机的TF0应该是硬件自动清零的,,不需要软件清零,另外,从程序来看左右摆动是正确的,,你想怎么摆,就修改这个程序嘛

                             

我昨晚弄了一晚上也是这个问题 你现在知道没

我也在迷茫为什么不能用

http://bbs.elecfans.com/jishu_352687_1_1.html这是我发的帖子,之前我也是和你们一样,现在我可以控制了,希望对你们有帮助

发现舵机控制的确是个大问题

STC的单片机时钟分频不是12,与AT89C5x系列不一样的,这样就时序不对了

我也是这种情况,用示波器发现一插舵机波形就变了

小编,问题解决了吗?我现在也遇到这个问题了,大神求教啊!

是不是接口问题啊 有的接口接上是不好使的 好像街上波形就变了  但是应该有以一组信号端口是外接上拉电阻的 用那组接口试验

io口瞬间上电是高电平。有的单片机是高阻状态。

io口瞬间上电是高电平。有的单片机是高阻状态。

这个好,已经得到解决,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top