初学单片机,指导MG995舵机中断程序编写,占空比怎么弄,想用两个按键控制舵机开合状态,求程序

初学单片机,指导MG995舵机中断程序编写,占空比怎么弄,想用两个按键控制舵机开合状态,求程序,第1张

占空比很简单,控制高电平持续时间和低电平持续时间就可以了。

while(1){

SetIOH

Delay(5us),

SetIOL

Delay(5us)

}

就是一个占空比50%,频率为100k的PWM方波了。

以上是伪代码,具体的需要看MG995的实现。

因为舵机中有电位器,输出15ms宽度的脉冲宽度是正90度,所以你可以写一个for循环,然后引进一个参数,不停地改变05ms到25ms之间的脉冲宽度就行了。(用延迟函数可以调整速度)希望能帮到你!

我现在也在做舵机控制,这是控制一个舵机的程序,可以参考!

通过按键,改变单片机输出脉冲宽度1ms~2ms,使舵机在-90°~+90°间转动

ORG 0000H

AJMP MAIN ;转主程序

ORG 000BH

AJMP INTT0 ;转定时中断子程序

MAIN: MOV SP,#80H

SETB EA ;开总中断

SETB ET0 ;允许T0中断

CLR P37 ;脉冲波形起始状态

MOV TMOD,#01H ;定时,方式0

MOV 30H,#2EH ;舵机0 位,15ms定时初始值,TL0值存30H

MOV 31H,#0FAH ;TH0值存31H

MOV 32H,#0B2H ;185ms定时初始值,TL0值存32H

MOV 33H,#0B7H ;TH0存33H

CLR F0 ;清标志位

SETB TR0 ;启动T0

K1: JB P14,K2 ;右转键未按下,转K2,判左转键

ACALL D10MS ;按下,延时,防抖

JNB P14,$ ;等待释放

ACALL D10MS

MOV A,30H

CJNE A,#3AH,K10 ;判断是否到90°

AJMP K2 ;到90°,不改变定时时间常数,转K2

K10: CLR C ;未到90°,清进位位,下条指令为带进位减,必须先清进位

SUBB A,#20 ;减小时间常数,即加大高电平脉冲宽度,每次002ms递增,舵机转动36°

JNC K11

DEC 31H ;借位

K11: MOV 30H,A

CLR C

MOV A,32H

ADD A,#20 ;加大时间常数,即减小低电平脉冲宽度

JNC K12

INC 33H

K12: MOV 32H,A

K2: JB P15,K3

ACALL D10MS

JNB P15,$

ACALL D10MS

MOV A,30H

CJNE A,#22H,K20

AJMP K3

K20: CLR C

ADD A,#20

JNC K21

INC 31H

K21: MOV 30H,A

CLR C

MOV A,32H

SUBB A,#20

JNC K22

DEC 33H

K22: MOV 32H,A

CLR C

K3: JB P16,K1 ;判断电机回0 键是否按下

ACALL D10MS

JNB P16,$

ACALL D10MS

MOV 30H,#2EH ;舵机0 位,脉宽15ms

MOV 31H,#0FAH

MOV 32H,#0B2H

MOV 33H,#0B7H

AJMP K1

INTT0: CPL F0 ;中断服务程序

CPL P37 ;输出高、低电平脉冲

JB F0,HIGH1

LOW0: MOV TL0,32H ;低电平脉冲定时常数

MOV TH0,33H

RETI

HIGH1: MOV TL0,30H ;高电平脉冲定时常数

MOV TH0,31H

RETI

D10MS: MOV R2,#20

MOV R1,#250

DJNZ R1,$

DJNZ R2,$-4

RET

END

以上就是关于初学单片机,指导MG995舵机中断程序编写,占空比怎么弄,想用两个按键控制舵机开合状态,求程序全部的内容,包括:初学单片机,指导MG995舵机中断程序编写,占空比怎么弄,想用两个按键控制舵机开合状态,求程序、求问单片机控制舵机连续来回转动而不停下来的C程序怎么写、跪求51单片机控制舵机程序(切记,单片机,不要弄个C来忽悠啊)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10144292.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存