占空比很简单,控制高电平持续时间和低电平持续时间就可以了。
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来忽悠啊)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)