51单片机舵机代码控制,出问题了!请帮我看看

51单片机控制舵机,舵机不转-中国学网-中国IT综合门户网站
> 51单片机控制舵机,舵机不转
51单片机控制舵机,舵机不转
转载 编辑:李强
为了帮助网友解决“51单片机控制舵机,舵机不转”相关的问题,中国学网通过互联网对“51单片机控制舵机,舵机不转”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:51单片机控制舵机,舵机不转,具体解决方案如下:解决方案1:先电机供电可以从开发版上引出来,开发版上应该留好接口了,那么外部的电源和开发版的地线连在一起。如果非要外部供电,然后单片机IO口的电平才能驱动电机工作解决方案2:那请问我如何控制以下:按住按键,让电机一直转动,放开按键,电机不动。还有是否可以通过分割PWM高电平的方法调整电机每次转过的角度,比如我要15度转一次?解决方案3:①舵机是“摆幅”的,不是一直转动的,若LZ 所说的“一直转动”是指 固定角度,那只要固定输出PWM 信号 即可 实现。通过调整 PWM 的占空比,能 调整 舵机的摆动角度。②直流电机 跟 步进电机等 按 转速划分的电机,才会有“一直转动”一说,如果LZ 所说的“一直转动”是指这类电机,如直流电机。那通过 高/低电平控制 电机的输出引脚,即可实现“一直转动”。而采用 PWM 输出,可以控制 电机的 转动速度。③至于按键功能的实现,只期望 LZ 不要再学郭大侠的“while(Key==0)”了。LZ应该通过扫描按键,并记录按键状态。主函数通过查询 按键状态,再对电机进行控制,如发现状态为 按下,就输出;发现按键为 松开,就停止。④至于 LZ 打的比方“15度转一次”,表示没看明白。难道是想“一次转15°”,“下一次又转15(到30)°”?这功能只有 步进电机能有。但如果是舵机,只能理解为“每次舵机角度增加15°”了,那LZ 可以通过对计算 每15°要增加多少占空比(或要增加多少ms高电平)来实现角度的增加。可是舵机是有角度限制的,总共180°的转动区间(-90°~90°,或0°-180°),LZ 可要想好加到头咋整解决方案4:那请问我如何控制以下:按住按键,让电机一直转动,放开按键,电机不动。还有是否可以通过分割PWM高电平的方法调整电机每次转过的角度,比如我要15度转一次?解决方案5:是的……pwm 理论能这么控制,不过转15度还是有点难度通过对数据库的索引,我们还为您准备了:续的了 准确的说,舵机的控制信号,是以20ms为间隔的一系列脉宽可在1.5ms上下1ms范围内变动的脉冲信号,舵机角度实时最终脉宽变化=========================================== ok 进中断重新加载定时器初值···===========================================看到后baidu hi我,给你我qq,帮你调试。我之前做个这个,用键盘控制5路舵机,串口通信===========================================1,拿个示波器看你输出的PWM波形..看跟要求符合不符合.... 2,检查舵机供电,如果你舵机跟单片机一样用个7805供电..建议你并联3-8个7805..,或者舵机单独供开关电源输出电压...===========================================舵机是通过占空比,来控制它的旋转角度,控制信号从单片机输出之后,不能直接接舵机,因... 不流畅。多尝试一下吧,还有,这种例子也很多,我们那个时候调了一星期才调好,单片机的...===========================================我现在也在做舵机控制,这是控制一个舵机的程序,可以参考! 通过按键,改变单片机输出... CJNE A,#3AH,K10 ;判断是否到90° AJMP K2 ;到90°,不改变定时时间常数,转K2 ...===========================================如果脉宽精度高的话就开个定时器,在定时中断函数中,对输出管脚取反--通过改变定时器的两次周期就可改变脉宽。如果不严格就用软件延时实现。===========================================下面是最传统的51单片机程序,内部没有PWM功能,只能软件模拟 P2.0作为控制输出脚 ORG 0100H START: MOV TMOD, #2H ;延迟0.5ms MOV TH0, #6 MOV R0, #50...=========================================== 单一字节发送接收可以,只能说明软件、硬件,基本调通; 要想传送数据,还必须制定通信协议。 发送方,先向对方呼叫,待收到正确的回音后; 再向对方发送"数据的字节数"; ...===========================================获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转... 你需要控制的是高电平产生的时间,根据高电平的时间来控制舵机的角度的,希望能帮的...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助编51单片机C程序,遥控器按键控制舵机左右转,仅每上电转一下。示波器见控制波形正常,原因可能是什么?
编51单片机C程序,遥控器按键控制舵机左右转,仅每上电转一下。示波器见控制波形正常,原因可能是什么?
俺买了个小车底盘,编写了51单片机C程序,通过遥控器的两个按键控制小车前后运动(直流电机)、另两个按键控制小车左右运动(模拟舵机)。结果,控制前后运动正常,不能控制舵机左右转。 追查舵机不受控的原因:示波器检查舵机的控制波形应该是正常的(符合常见模拟舵机的控制波形的周期要求,控制波形的高电压约4.2v,高电压的时间能够随着遥控器按键而趋长或趋短变化),舵机本身也应该是正常的(舵机若接在别的扇形往返运动的程序中能够正常运动),但舵机仅仅在单片机上电时转一小下便停止不动了、任凭你再怎么按键也无声无息不再做运动,电池电压也应该没有问题。可能的原因都有可能有哪些?
谢谢大家! 俺的财富值仅有20,如数敬上。
量电压是不行的,如果达不到那么大的电流舵机还是转不动,建议将控制器跟舵机电机分开供电,这些东西都是比较耗电的,很容易在启动时把电源电压拉低,很不稳定。
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号查看: 532|回复: 1
控制舵机的程序,不知为什么不对。
#include &reg52.h&
unsigned int i,j;
void delay(unsigned char xms);
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;&&
//引脚定义:
sbit PWM1 = P2^0; //舵机的控制引脚(PWM输出)
//引脚定义:
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
sbit key1 = P3^7; //定义按键1
sbit key2 = P3^6; //定义按键2
sbit key3 = P3^5; //定义按键3
sbit key4 = P3^4; //定义按键4
sbit key5 = P3^3; //定义按键5
sbit key6 = P3^2; //定义按键6
//变量定义:
unsigned char fe=100; //转角变量,值控制在100-250
void delayMS(void)& &//误差 0us 延时1ms 此处可以修改高电平周期
//修改此处的延时可以更改舵机转的角度 ,45度具体是多少 你可以试试
& & unsigned char a,c;
& & for(;c&0;c--){
//延时子函数
void delay(unsigned int time)
while(time--);
//初始化函数
void init()
TMOD=0X01;& &//设置定时器0为模式一,即16位计算模式
& & TH0 = 0x0B1;
& & TL0 = 0x0E0;
EA=1;&&//开启总中断
ET0=1;&&//开启定时器0中断
TR0=1;&&//启动定时器0
//中断函数,定地器0
void timer() interrupt 1
& & //20ms中断
& & TH0 = 0x0B1;
& & TL0 = 0x0E0;
//0.1ms中断,200次中断为一个周期20MS,转角控制是0.5MS-2.5MS即5-25,180度分辨率20格为9度(CPU速度越快,分辨率可以做到更高)
& & PWM1=1;
& & delayMS();
& & PWM1=0;
//主函数,C语言的入口函数
void main(void)&&
init();& &&&//初始化中断控制寄存器
TMOD=0X20;& & //设置定时器1为模式2,做为波特率发生器
TL1=0xF3;& & //2400波特率的初值,板子使用12M晶振,初值=256-/12/2400
TH1=0xF3;& & //
TR1=1;& &&&//启动波特率发生
SCON=0x50;& & //设置串口方式2
P0=0xc0;& & //数码管显示0
SMG_g=0;& & //使用数码管个位来显示键值
& & if(RI){& & //查询是否有数据接收
& &ldat=SBUF;&&//数据暂存于变量中
& &RI=0;& &//重新清0等待接收
& &SBUF=&&//将接收到的数据发送出去
& &if(ldat==0x10)
& &{& && & //PWM出1.0ms,灯亮
& &LED1=0;
& &P0=0xf9;&&//数码管显示1
& &fe=100;& & //0.5MS,定0度位置
& &delay(50000);&&//延时
& &delay(50000);
& &else if(ldat==0x20)&&//继电器通电,锁开启,灯灭
& &LED2=0;
& &P0=0xa4;&&//数码管显示2
& &fe=150;& & //1.5MS,定90度位置
& &delay(50000);
& &delay(50000);
& &else if(ldat==0x30)
& &LED3=0;
& &P0=0xb0;&&//数码管显示3
& &fe=200;& & //2.0MS,定135度位置
& &delay(50000);
& &delay(50000);
& &else if(ldat==0x40)
& &LED4=0;
& &P0=0x99;&&//数码管显示4
& &fe=250;& & //2.0MS,定135度位置
& &delay(50000);
& &delay(50000);
& &while(!TI);&&//等待发送完成
应该是控制一定角度 ,但通电后无穷循环转动,不知哪里有错、、求教大家了
Powered by求助 51单片机驱动辉盛9g舵机 问题_51单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:19,777贴子:
求助 51单片机驱动辉盛9g舵机 问题收藏
舵机直接接在郭天祥的TX-1C实验班是,一直振动,不转下面是驱动程序#include&reg52.h&sbit pwm=P0^1;
//PWM信号输出sbit jia=P3^7;
//角度增加按键检测I/O口sbit jan=P3^6;//角度减少按键检测I/O口//角度标识sbit dula=P2^6;sbit wela=P2^7;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(unsigned char t)//延时{unsigned char x,y;for(x=t;x&0;x--)for(y=110;y&0;y--);}void time0_init()//定时器初始化{TMOD=0x01;IE=0x82;TH0=0TL0=0x33;TR0=1;EA=1;
ET0=1;} void time0_Int() interrupt 1//中断程序{TH0=0TL0=0x33;if(count&jd)//判断 0.5ms 次数是否小于角度标识pwm=1;//确实小于PWM输出高电平elsepwm=0;//大于则输出低电平count=(count+1);//0.5ms次数加一count=count%40;//次数始终保持为40 即保持周期为20ms}void keyscan()//键盘扫描程序{if(jia==0){delay(10);if(jia==0){jd++;//角度标识加1count=0;
//按键按下 则20ms 周期重新开始if(count==6)jd=5;//已经是180 则保持while(jia==0);
//松手检测 等待按键放开}}if(jan==0){delay(10);if(jan==0){jd--;//角度标识减1count=0;if(jd==0)jd=1;while(jan==0);}}}/*void display()//数码管显示函数{unsigned char bai,shi,switch(jd)//根据角度标识显示相应的数值{case 1:bai=0;shi=0;ge=0;case 2:bai=0;shi=4;ge=5;case 3:bai=0;shi=9;ge=0;case 4:bai=1;shi=3;ge=5;case 5:bai=1;shi=8;ge=0;}dula=0;P0=table[bai];dula=1;dula=0;wela=0;P0=0wela=1;wela=0;delay(5);P0=table[shi];dula=1;dula=0;P0=0wela=1;wela=0;delay(5);P0=table[ge];dula=1;dula=0;P0=0wela=1;wela=0;delay(5);}*/void main(){dula=0;wela=0;jd=1;count=0;
time0_init();while(1){keyscan();//display();}}
那是引脚口吧。。单片机电压输出不够的舵机吧
舵机5V可去驱动,需单独供电,开发板带不动。
自己调频率。。。程序问题,你这个板子是可以驱动舵机的
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或51单片机控制舵机问题!_百度知道
51单片机控制舵机问题!
买了个mg995 180度舵机,看了下它角度范围大于180度 ,大概200度。还有用周期为20ms的pwm去控制,但是分别输入1ms,1.5ms,2ms,2.5ms的占空比,舵机输出的角度根本不是45°、90°、135°等,还得我自己一个一个的调和校正,整的后来输出大概45°时,占空比根本不是1ms,我想问这样正常吗?还是我买了个次品。
我有更好的答案
用过MG995没发现过你说的问题,你用示波器看过PWM的频率和占空比了吗?你就确定不是你程序的问题
其他类似问题
为您推荐:
您可能关注的推广
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 单片机舵机汇编程序 的文章

 

随机推荐