
使用51单片机控制舵机转动(按键),示波器检测
发布日期:2021-05-04 18:31:11
浏览次数:23
分类:技术文章
本文共 1807 字,大约阅读时间需要 6 分钟。
对于一般的舵机来说,所对应的PWM波的周期为20ms。
其空占比与转动角度的关系。普通舵机的舵量是0~180°0.5ms/20 ms = 0 度1.0ms/20ms = 45 度1.5ms/20ms = 90 度2.0ms/20ms = 135 度2.5ms/20ms = 180 度
本文代码中使用的晶振是12Mhz。我是使用定时器方式2,自动填装初值才能够使周期控制在50hz,刚开始使用的是方式1,使用示波器检测是52hz。不知道是为什么,不过还好问题解决了,本代码很稳。
-------------------------------------------------------------------------------------------*/#include#define uint unsigned intsbit key1 = P3^2; //减 sbit key2 = P3^3; //加sbit pwm1 = P2^0; uint target = 15;uint percent = 0;void Timer0Initial(); //定时器0装初值void initial_Timer(); //定时器初始化void delay(unsigned int x); //延时void keyscan(); //键盘扫描void keyscan() { delay(30); //缓冲舵机速度 if(key1 == 0) //减 { delay(10); //消抖 if(key1 == 0) { if(target >= 5) target -= 1; while (key1 ==0); } }// while (key1 != 1); if(key2 == 0) //加 { delay(10); if(key2 == 0) { if(target < 25) target += 1; while (key2 ==0); } } // while (key2 != 1);}void initial() //键盘、定时器初始化{ key1 = 1; key2 = 1; initial_Timer();}void Timer0Initial() //定时器0装初值{// TH0 = (65536-65)/256; //该初值使每0.1ms产生一次中断.理论上,12Mhz晶振12分频之后,应该是100次计数时间是100us// TL0 = (65536-65)%256; //通过示波器实测 TH0 = 0x9C; //选用65次计数产生一次中断 TL0 = 0x9C; }void initial_Timer() //定时器初始化{ EA = 1; //开总中断--学校总闸 ET0 = 1; //开定时器0中断--光电楼总闸 TMOD = 0x02; //设置定时器0为工作方式 Timer0Initial(); //装初值 TR0 = 1; //启动定时器0--N707B总闸}void delay(unsigned int x) //延时{ uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--);}void main(){ initial(); //键盘、定时器初始化 while(1) //不断扫描键盘 { keyscan(); }}void Timer0() interrupt 1 //中断服务程序{ percent+=1; if(percent<=target) //target初值是15,接电时居中 pwm1=1; else pwm1=0; if(percent==200) percent=0; }
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月15日 21时04分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
多位水仙花数-python(出现运行超时?不妨用减法计算)
2019-03-03
地下迷宫探索(后两个测试点无法通过?这里有你想要的答案)
2019-03-03
小白看完都会了!阿里云大师深入拆解Java虚拟机,看完这一篇你就懂了
2019-03-03
VBA之正则表达式(19)-- 相对引用转绝对引用
2019-03-03
巧用VBA统一数字单位
2019-03-03
Transpose实现数组行列转置的限制
2019-03-03
golang中interface的一些语法缺陷的改进
2019-03-03
vue-router路由 学习笔记
2019-03-03
【数据库】第七章课后题
2019-03-03
第四章 串、数组和广义表 —— BF算法和KMP算法
2019-03-03
[选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
2019-03-03
DLA:一种深度网络特征融合方法
2019-03-03
leetcode114(二叉树展开为链表)
2019-03-03
java —— static 关键字
2019-03-03
在 Python 调试过程中设置不中断的断点 | Linux 中国
2019-03-03
使用开源可视化工具来理解你的 Python 代码 | Linux 中国
2019-03-03
硬核观察 | 有人在比特币骗局中损失了 10 个比特币
2019-03-03
使用 top 命令了解 Fedora 的内存使用情况 | Linux 中国
2019-03-03
8皇后问题 递归 函数调用是重点
2019-03-03
1541 +1 *2 ²
2019-03-03