舵机不转

[复制链接]
43|8
 楼主 | 2018-11-9 10:40 | 显示全部楼层 |阅读模式
四天时间加老师完善搞出来的程序,晶振12M,周期20ms,占空比j自己设定。利用占空比产生pwm波控制电机转动,用示波器输出的波形是正确的,但是连接舵机是舵机不转
| 2018-11-9 10:43 | 显示全部楼层
写的程序呢
| 2018-11-9 10:47 | 显示全部楼层
sbit P10=P1^0;
unsigned char i,t,flag;
float j;//占空比
void delayms(unsigned int a)
{
        unsigned char b;//基准延时时间
  while(a--)
  {
                for(b=0;b<125;b++)
                {;}
}
}
main()
{
        TMOD=0x10;//定时器方式1
        TH1=0xFC;//高八位,定时器1ms
        TL1=0x18;//低八位
        EA=1;//开总中断
        ET1=1;//选择定时器1
        TR1=1;//启动定时器
        P10 =1;
        while(1)//利用占空比产生的pwm波驱动舵机旋转,不同占空比舵机旋转角度不同
        {
                j = 0.025;
                delayms(1000);
                j = 0.05;//定义占空比为0.1,无限死循环
                delayms(1000);
                /*j = 0.075;
                delayms(1000);
                j = 0.10;
                delayms(1000);
                j = 0.125;
                delayms(1000);*/
               
        }
}

void timer1(void) interrupt 3     //定时器1中断符号
{
          TH1=0xFC;//工作在定时器方式1下,每次计数后高低8位必须重新置数
          TL1=0x18;
                t++;
                i++;
                if(i==20*j)//正向导通时间,通过定时器*定时次数实现
                {
                        P10 = 0;//正向导通结束P10口改为下降沿
                }
                if(t == 20)//总周期,通过定时器*定时次数实现
                {
                        P1 = 1;//总周期结束P10口重新改为正脉冲
                        i = 0;//正向导通计数清零
                        t = 0;//总周期计数清零
                }

}
| 2018-11-9 10:51 | 显示全部楼层

中断, 判断条件if(i==20*j)  i是字符型,而j是浮点型,逻辑比较的可比性暂时打个问号。还有判断语句中P10 = 0;//接着的判断语句怎么就是P1 = 1;呢。
| 2018-11-9 10:55 | 显示全部楼层
主程序中,使用固定频率的PWM,最好开两个定时器,一个定时器控制频率,一个定时器控制占空比。不要在主循环中使用delay
 楼主 | 2018-11-9 11:00 | 显示全部楼层
哦,我改一下哈,多谢了
| 2018-11-9 11:03 | 显示全部楼层
最好不要在主程序中使用delay函数。。
| 2018-11-9 11:06 | 显示全部楼层
程序写的挺简单的呀,楼主问题解决了吗
 楼主 | 2018-11-9 11:11 | 显示全部楼层

结贴了,多谢大家讨论这么多哈,呵呵
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表