欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机控制小舵机

发布时间:2023/12/20 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 51单片机控制小舵机 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

以前从没有想过写博客,但是最近发现以前的代码老是找不到,而且找到了也不一定想得起当时的逻辑,很麻烦,所以打算写写提醒一下自己。
最近老板让做一个扫描二维码装钥匙的小盒子,就给个小舵机和3D打印机,传动结构啥的基本搞定了,就差程序了,所以打算先测试一下舵机
说明一下舵机给20ms为周期高电平占0.5到2.5ms的的PWM波就能动,接下来上代码

#include <reg52.h> #include <math.h> typedef unsigned char uchar; typedef unsigned int uint; sbit PWM_OUT=P2^7; //PWM输出口 uint PWM_Value; //定义pwm值 uint flag; //中断标志 void Delay(unsigned int s); //延时函数声明

用不到延时函数所以就没写

void Init_Timer0() // 定时器初始化 {TMOD=0x01;//定时器0 工作模式一,16位计数TH0=(65535-10)/256;//应该是每次10usTL0=(65535-10)%256;EA = 1;ET0 = 1;TR0 = 1;PT0=1; }

这里我刚开始的时候写完程序舵机总是不动,折腾了半个小时没发现哪里有错,所以就翻出了逻辑分析仪测了一下引脚的信号,发现有点问题,计算了一下一次定时中断有0.4432ms所以把后面主函数的代码也稍微改了改。因为就用小舵机开关门,精度要求不高所以就不管这些了。我记得以前好像没遇到过这样的问题,希望有人指点一下。

void timer0(void) interrupt1 //实测一次中断0.04432ms { TH0=(65535-10)/256; TL0=(65535-10)%256; if (flag>PWM_Value){PWM_OUT=0;}else{PWM_OUT=1;}if (flag>451){flag=0;}flag++; }

主函数简单点

void main() {PWM_Value = 25; //pwm值为11-56,42时门框打开,25时门框闭合Init_Timer0();while(1);}

程序比较简单,打算留着,过些日子闲下来没事干再做个4足。

总结

以上是生活随笔为你收集整理的51单片机控制小舵机的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。