stm32单片机舵机控制如何控制舵机

查看: 1837|回复: 11
如何通过单片机用天地飞6A遥控器中断控制舵机
是这样的,我想用51单片机控制舵机,(在里面编写一个自主控制的PID 程序,或者模糊控制来控制舵机,外接了位置传感器之类的),然后在自主控制程序出问题的时候,切换到遥控器模式,手动控制舵机,因此需要一个遥控器上的一个通道,如收放起落架通道作为触发外部中断的通道,请问我的程序应该怎么设计?最弄不懂的就是关于天地飞接收机脉冲信号的读取问题,
如果进行了外部中断,单片机就会转入执行中断程序,单片机首先读取来自接收机上的脉冲信号,然后把读取到的脉冲信号发送给舵机,因此其中有个单片机实时的读取舵机脉冲信号和发送脉冲型号的问题,请问怎样设计程序,思路是什么
直接用5通道控制舵机,切换自动和手动
老大 发表于
直接用5通道控制舵机,切换自动和手动
我知道啊,外部中断低电瓶跳变,但是那个单片机如何读取舵机脉冲信号,并输出呢?这和串行数据传输不一样啊,传输的是脉冲信号啊
周期20毫秒,高电平时间1-2毫秒,特殊的可能会是0.5-2.5毫秒。
这我知道,请问如何用第五通道中断啊?比如说我第五通道的引脚接在into 0 端口上,如果我遥控器上的开关不动,那么他就一直保持相应的脉冲信号,当检测到负跳变时,就触发中断了,而我就算拨了开关,仅仅是脉冲时间变了而已,在我拨开关前就已经触发了中断,那还有何意义?
老大 发表于
周期20毫秒,高电平时间1-2毫秒,特殊的可能会是0.5-2.5毫秒。
这我知道,请问如何用第五通道中断啊?比如说我第五通道的引脚接在into 0 端口上,如果我遥控器上的开关不动,那么他就一直保持相应的脉冲信号,当检测到负跳变时,就触发中断了,而我就算拨了开关,仅仅是脉冲时间变了而已,在我拨开关前就已经触发了中断,那还有何意义?
本帖最后由 老大 于
17:16 编辑
捕捉上升沿和下降沿,根据相邻上升沿和下降沿确定信号的脉宽,根据脉宽确定单片机执行动作。
老大 发表于
捕捉脉宽,当脉宽变化时,单片机产生中断
MCU主要执行自动控制程序的,那我岂不是要每隔一定的时间捕捉一次脉宽,这也就属于查询方式,不是外部中断方式,这样也太浪费CPU了吧?
执行中断程序用不了多长时间
定时器2 是一个16 位定时/计数器。在捕获方式下,通过T2CON 控制位EXEN2 来选择两种方式。如果EXEN2=0,定时器2 是一个16 位定时器或计数器,计数溢出时,对T2CON 的溢出标志TF2 置位,同时激活中断。如果EXEN2=1,定时器2 完成相同的操作,而当T2EX 引脚外部输入信号发生1 至0 负跳变时,也出现TH2 和TL2 中的值分别被捕获到RCAP2H 和RCAP2L 中。另外,T2EX 引脚信号的跳变使得T2CON 中的EXF2 置位,与TF2 相仿,EXF2 也会激活中断。捕获方式如图4 所示。
老大 发表于
定时器2 是一个16 位定时/计数器。在捕获方式下,通过T2CON 控制位EXEN2 来选择两种方式。如果EXEN2=0,定时 ...
可否详细点,老大?&&什么 EXEN?
详细不了,我没用过T2
Powered by51单片机舵机控制程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机舵机控制程序
&&& 不记得多久没接触过程序这东东了,C++是完全忘了,因为第一个VC的hello world是编译不出来的,虽然后来确认了是设置路径的问题。也在怀疑自己是否曾经读过大学,因为虽然知道那玩意叫微积分,但已经不知道哪个叫微分,哪个是积分了。好吧,虽然有点夸张,但绝对是不过份的!^o^ 买了个单片机开发板确实是明智的,因为那玩意确实好玩,也依然兴趣不减,因为编程的心依然不死,觉得那东西是必须要学会并熟练的,否则太对不起我那夭折的第二学历了。虽然那就只差三科就过了。好吧,我得承认那是最难的也是最主要的三科:数据结构、数据库原理、信息系统开发与管理。出来也曾经想过要去考的,但后来东奔西跑的还是没去成。现在已是完全放弃了,也觉得没那个必要了,也不会觉得多了个本本又什么重要的了,你学会了才是重要的!所以现在观念也改变了:我学是因为我喜欢!所以这个项目也是会一直延续下去的,不管中间是否会停顿,但总会春风吹又生的!
&&&&& 男人之于机械就好比女人之于衣服!还记得小时候自己干的坏事吧,多好的玩具总被好奇地拆坏!好吧,虽然你已经长大了,但看到汽车还是会忍不住的喜欢,对吧,也总是会有想把它改造的冲动,对吧!看到飞机模型还是会想玩,对吧!所以想玩就玩呗,有兴趣是一件幸福的事情!更何况是个多么科幻和挑战的兴趣呢~所以,开始吧,确定你一生的目标和兴趣!
&&&&&& 好吧,这是一条漫长的路。路漫漫其修远兮,吾将上下而求索!俺在大学里最受用的是确立了一个信仰:活到老,学到老!所以路不怕漫长!蒹葭苍苍,白露为霜。所谓伊人,在水一方!溯洄从之,道阻且长。溯游从之,宛在水中央。我将像追求美女一样地坚韧与不拔~
&&&&&& 但海市蜃楼虽然美丽,却是建不起的,万丈高楼平地起,所以先来基础研究,哈哈~如果你有兴趣,那就一起吧,那个什么子的曰:与其独乐乐,不如与人乐乐,孰乐?这个世界需要Team,创业需要Team,研究需要Team,连大盗也需要Team,如果你不需要Team,YOU OUT了!
&&&&&& 单片机也买一段时间了,挺好玩的,很基础很踏实的东西,发现是大学时期最最应该拥有的玩意!但那时却并没拥有过,那个恨呀!那个泪流啊~如果冬天里落在黄河上,它也就不用再干枯了~!
&&&&&& 好了,口水多过长江水,太多了污染环境,不知长江里的白海豚是不是我害的,听说再也找不到了~
&&&&&& 先记录几个相关试验先~
&&&&&& 单片机一来就迫不及待地试验了,程序虽然不是自己写的,但C程序还是能看得懂的,C51也就多了些关键字,研究研究修改修改引脚就能用上了。但单片机与硬件是密切相关的,要驱动外围硬件要放大信号,要了解下上拉电阻的概念。舵机买的是辉盛的9克舵机,便宜货,干扰就会动,供电得单独供电,不能和单片机共用。另供电的和单片机还得共地线,否则也是不动的。
&&&&& 单片机AI练习之舵机控制程序:通电舵机到中位,P1.1角度减少,P1.2增加。原程序是一接通到180度位置的,舵机的中位不太准的,没到180度就被限位了,害得我第一天就弄坏了个舵机。源程序如下,备档
#include &reg52.h&
&&&&& //0.5ms次数标识
sbit pwm =P0^1 ;&&&&&&&&& //PWM信号输出
sbit jia =P1^2;&&&&&&&&&& //角度增加按键检测IO口
sbit jan =P1^1;&&&&&&&&&& //角度减少按键检测IO口
&&&&&&&& //角度标识
void delay(unsigned char i)//延时
& unsigned char j,k;
& for(j=i;j&0;j--)
&&& for(k=125;k&0;k--);
void Time0_Init()&&&&&&&&& //定时器初始化
TMOD = 0x01;&&&&&&&&&& //定时器0工作在方式1&&
IE&& = 0x82;
TL0& = 0x33;&&&& //11.0592MZ晶振,0.5ms
&&& TR0=1;&&&&&&&&&&&&&&&& //定时器开始
void Time0_Int() interrupt 1 //中断程序
TH0& = 0&&&&&&&&&&&& //重新赋值
TL0& = 0x33;
&&& if(count& jd)&&&&&&&&&&&&& //判断0.5ms次数是否小于角度标识
&&&&& pwm=1;&&&&&&&&&&&&&&&&& //确实小于,PWM输出高电平
&&&&& pwm=0;&&&&&&&&&&&&&&&&& //大于则输出低电平
&&& count=(count+1);&&&&&&&&& //0.5ms次数加1
&&& count=count%40;&&&& //次数始终保持为40 即保持周期为20ms
void keyscan()&&&&&&&&&&&&& //按键扫描
&& if(jia==0)&&&&&&&&&&&&&& //角度增加按键是否按下
&&& delay(10);&&&&&&&&&&&&& //按下延时,消抖
&&& if(jia==0)&&&&&&&&&&&&& //确实按下
&&&&& jd++;&&&&&&&&&&&&&&&& //角度标识加1
&&&&& count=0;&&&&&&&&&&&&& //按键按下 则20ms周期从新开始
&&&&& if(jd==6)
&&&&&&& jd=5;&&&&&&&&&&&&&& //已经是180度,则保持
&&&&& while(jia==0);&&&&&&& //等待按键放开
& if(jan==0)&&&&&&&&&&&&&&& //角度减小按键是否按下
&&& delay(10);
&&& if(jan==0)
&&&&& jd--;&&&&&&&&&&&&&&&& //角度标识减1
&&&&& count=0;
&&&&& if(jd==0)
&&&&&&& jd=1;&&&&&&&&&&&&&& //已经是0度,则保持
&&&&& while(jan==0);
void main()
Time0_Init();&&&&&&&&&&&&
& keyscan();&&&&&&&&&&&&&& //按键扫描
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved增值税发票
无理由退货
我浏览过的
您现在的位置:&
单片机控制舵机电路图
单片机控制舵机电路图
舵机的工作原理是:PWM信号由接收通道进入信号解调电路BA66881。的12脚进行解调,获得一个直流偏置电压。该直流偏置电压与电位器的电压比较,获得电压差由BA6688的3脚输出。该输出送人电机驱动集成电路BA6686,以驱动电机正反转。当电机转速一定时,通过级联减速齿轮带动电位器R。,旋转,直到电压差为O,电机停止转动。舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。   电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V,一般取5V。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20 ms(即频率为50 Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围 3来表示。
更多猛料!欢迎扫描下方二维码关注土猫网官方微信( tumaowang )
&#165&127元
节省25.4元
&#165&239元
节省47.8元
&#165&19元
&#165&449元
节省89.8元
&#165&299元
节省59.8元
&#165&45元
&#165&159元
节省31.8元
&#165&35.3元
节省15.7元
&#165&6.9元
&#165&19.9元
&#165&10.9元
&#165&219元还没有帐号? 赶紧
用户版块帖子
求助,C51控制舵机转固定角度
UID:1459458
在线时间64小时
M币705专家2
求助,C51控制舵机转固定角度近来想做一个遥控车玩一下,没想到在多级这一项出现问题了。我的想法是有三个键,左中右,左键按一下,舵机(春天SM-S4315R)左转45度,右键按一下,右转45度,中间键复位中间位置。在网上找到一个程序,讲按一下旋转45度。但是拷贝我的单片机(STC12C5A40S2)里,现象是舵机一直旋转,按键控制的不是角度,而是舵机旋转的速度。请大神们看一下这是怎么回事?下面我粘一下图片和代码/*****************************舵机控制代码********************************/#include&reg51.h& //0.5ms次数标识,可修改sbit pwm=P0^0;&&&&//PWM信号输出口sbit up=P3^2;&&&&//角度增加按键检测I/O口sbit down=P3^3;&&&&//角度减少按键检测I/O口 //角度标识/****************************延时子程序********************************/void delay(unsigned char z){&&&&unsigned char x,y;&&&&for(x=z;x&0;x--)&&&&&&&&for(y=125;y&0;y--);}/***************************定时器中断**********************************/void Time0_Init()&&&& //定时器初始化{&&&&TMOD=0x01;//定时器0工作在方式1&&&&IE=0x82;&&&&TH0=()/256;&&&&TL0=()%256;//11.0592MHz晶振,0.5ms&&&&TR0=1;&&&&&& //定时器开始}&&&& /******************************键盘扫描**************************/void keyscan(){&&&&if(up==0)&&&&&&{&&&&&&&&delay(10);//消抖&&&&&&&&if(up==0)&&&&&&&&{&&&&&&&&&&&&angle++;&&&&&&&&&&&&count=0;&&&&&&&&&&&&if(angle==6)&&&&&&&&&&&&&&&&angle=0;&&&&&&&&&&&&while(up==0);&&&&&&&&}&&&&}&&&&if(down==0)&&&&{&&&&&&&&delay(10);//消抖&&&&&&&&if(down==0)&&&&&&&&{&&&&&&&&&&&&angle--;&&&&&&&&&&&&count=0;&&&&&&&&&&&&if(angle==0)&&&&&&&&&&&&&&&&angle=0;&&&&&&&&&&&&while(down==0);&&&&&&&&}&&&&}}/****************************主函数*******************************/void main(){&&&&angle=0;&&&&count=0;&&&&Time0_Init();&&&&while(1)&&&&{&&&&keyscan();&&&&}}void Time0_Int() interrupt 1{&&&&TH0=()/256;&&&&TL0=()%256;&&&&if(count&angle)//判断0.5ms次数是否小于角度标识&&&&&&&&pwm=1;//确实小于,pwm输出高电平&&&&else&&&&&&&&pwm=0;&&&&&&&& //大于则输出低电平&&&&&&&&count=(count+1);&&//0.5ms次数加1&&&&&&&&count=count%40;&&&& //次数始终保持为40即保持周期为20ms}
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
UID:970496
在线时间1135小时
M币976专家2
啊,好高深莫测啊,不懂帮顶
UID:1069715
在线时间166小时
M币62专家0
你买错舵机了,你那个应该是360°的舵机吧,要用180°或者90°的舵机。
UID:605189
在线时间804小时
M币683专家4
好羡慕楼主能干自己喜欢的工作。
UID:1164225
在线时间7382小时
M币75638专家152
用步进电机的才能满足楼主要求
UID:1459458
在线时间64小时
M币705专家2
回 yamiyami 的帖子
:你买错舵机了,你那个应该是360°的舵机吧,要用180°或者90°的舵机。 ( 19:47) 昂,那个云台下面应该需要一个360度的吧?大神你又没有玩过舵机?
UID:1459458
在线时间64小时
M币705专家2
回 liyuqing0318 的帖子
:好羡慕楼主能干自己喜欢的工作。 ( 20:51) 不要羡慕了,本人穷屌丝学生党一枚,还请大神们多砸币呢
UID:1459458
在线时间64小时
M币705专家2
回 温力口 的帖子
:用步进电机的才能满足楼主要求 ( 22:59) 偶???愿闻详情
UID:694129
在线时间1094小时
M币1265专家4
这个是靠PWM来调速的,调整脉宽比来调整偏转角度
UID:1043373
在线时间341小时
M币688专家2
长见识了,我原来一直以为舵机和步进电机一样是靠发送的脉冲数来控制角度的!原来是靠调节占空比!
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
这图形象!
访问内容超出本站范围,不能确定是否安全
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:07-03 15:05, Total 0.186479(s) query 7,
Gzip enabled&}

我要回帖

更多关于 单片机控制差速器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信