今日在淘宝买了一个舵机,以便我小车的超声波探头能进行转动,判断左右障碍物的距离,进而判断往哪边行走用。购买的舵机图片如下,非常常见,网上搜索了一下信息,使用也很简单,在这简单说一下。
2.jpg (30.59 KB, 下载次数: 0)
下载附件
2014-4-25 09:46 上传
明白了原理,再根据原理发出PWM波形,就可以驱动了,挺简单的,我的小车超声波探头已经能转动了。:)
下边是我的测试程序:
- #include <reg52.h>
-
- int time_count =0;//时间标志
- sbit pwmout =P2^1;//pwm输出IO
- int pwm_count = 0;
- int pwmout_count = 0;
- int direction = 0;
-
- void ss() interrupt 1 //0.1ms定时器
- {
- TH0 = 0xff;
- TL0 = 0xa4;
- time_count ++;
- if (time_count == 200) //20毫秒,调整pwm_count
- {
- if (direction ==0)//方向(增加)
- {
- pwm_count ++;
- if (pwm_count >= 30 )//到达周期,调整增长方向,datasheet里说是20MS,但是我实际用30MS才能转到最大,奇怪,希望有知道的告知一声。
- {
- direction = 1;
- }
- }
-
- if (direction == 1)//方向(减小)
- {
- pwm_count --;
- if (pwm_count <= 5)
- { direction = 0; }
- }
- time_count = 0;
- pwmout_count = pwm_count;
- }
-
- if (pwmout_count > 5)
- {
- pwmout = 1;
- pwmout_count --;//0.1ms执行一次,一直到占空比结束
- }
- else
- {
- pwmout = 0; //占空比结束本周期内其他时间低电平
- }
- }
-
- void main()
-
- {
- pwmout = 0;
- pwm_count = 5; //起始0.5ms-2.5ms
- TMOD = 0x01;
- TH0 = 0xff;
- TL0 = 0xa4;
- ET0 = 1;//允许T0中断
- EA = 1; //开启总中断
- TR0 = 1;
- while(1);
- }
复制代码
小广告:更多访问
www.yanpengfei.cn进行查看:)
一周热门 更多>