1. 100us一次中断是不是勤了点儿,这样即使能控制舵机,也会对程序的其他功能产生不利影响,舵机需要较高频率信号的话,可以考虑使用STC的11、12系列单片机,直接能输出PWM信号的,价格也不贵,顺丰的话2天就到;
2. 舵机所需的PWM占空比范围是多少,你尝试的范围比较窄,是不是占空比不合适,可以在程序中设定一个占空比缓慢自增、自减的程序测试一下,例如每秒x自增1之类的;
3. 输出驱动是怎么做的,有没有问题。
#include <reg52.h> //12M晶振sbit PWM=P1^0 //定义P1^0为输出端口
unsigned int pwm_h=2430,pwm //定义pwm信号中的高电平时间
范围 535< pwm_h <2430
bit fa
void Init_Timer0() //定时器初始化子程序
{
TMOD = 0x01
TH0 = 0x0FF
TL0 = 0x0F6
EA = 1
ET0 = 1
TR0 = 1 //定时器开关打开
}
void main() //主函数
{
Init_Timer0() //定时器初始化
PWM=0
while(1)
{
if(fa)
{
fa=0
pwm_h=20000-pwm_h
}
}
}
void Timer0() interrupt 1 using 1
{
TH0 =(-pwm_h)/256
// (65535-200) /256=0xff
TL0 =(-pwm_h)%256 //0.1ms一个记时器周期
236 % 256 = 236
fa=1
PWM=~PWM
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)