atmega16应用之舵机控制

atmega16应用之舵机控制

舵机工作的原理

(不会看版)控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止
(正经版)舵机的控制信号周期为20MS的脉宽调制(PWM)信号,其中脉冲宽度从0.5-2.5MS,相对应的舵盘位置为0-180度,呈线性变化。也就是说,给他提供一定的脉宽,它的输出轴就会保持一定对应角度上,无论外界转矩怎么改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应位置上如图7所求。舵机内部有一个基准电路,产生周期为20MS,宽度1.5MS的基准信号,有一个比出较器,将外加信号与基准信号相比较,判断出方向和大小,从而生产电机的转动信号。
(懒人版) 舵机控制是不在乎PWM的周期的,只要你在一个时钟周期里输出0.5ms~2.5ms的高电平,就能让舵机旋转-90到90度旋转角度,就这么简单
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20190106125408369.
在这里插入图片描述

代码

舵机控制代码非常简单,就是定时器0的CTC模式,其实你也可以用快速P波模式和相位修正模式,只要满足要求就行


void Serv(void)         //控制舵机
{
    DDRB |= (1 << 3);   //引脚PB3
    PORTB |= (1<< 3);	
    TCCR0 |= (1 << WGM01);  TCCR0 |= (1 << WGM00);//快P
    TCCR0 |= (1 << COM01); TCCR0 &= ~(1 << COM00);//比较匹配时清零,输出P波
    TCCR0 &= ~(1 << CS02);  TCCR0 |= (1 << CS01);   TCCR0 |= (1 << CS00);//内部时钟1MHZ,64分频
    
    //OCR0 =  40;        //16是最小值;          //24是舵机中值;

    OCR0=20;			//输出约1.5ms,旋转90度

    delay_ms(1000);
    OCR0 = 36;			//输出约2.5ms,旋转180度
    delay_ms(500);
    TCCR0 &= ~(1 << COM01); TCCR0 &= ~(1 << COM00);//将PB3设置为通用引脚,关舵机
    //Counter_Time0();
}

这就是舵机控制的过程,有没有觉得很简单

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值