舵机的角度控制.docx

上传人:b****6 文档编号:8498370 上传时间:2023-01-31 格式:DOCX 页数:11 大小:99.29KB
下载 相关 举报
舵机的角度控制.docx_第1页
第1页 / 共11页
舵机的角度控制.docx_第2页
第2页 / 共11页
舵机的角度控制.docx_第3页
第3页 / 共11页
舵机的角度控制.docx_第4页
第4页 / 共11页
舵机的角度控制.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

舵机的角度控制.docx

《舵机的角度控制.docx》由会员分享,可在线阅读,更多相关《舵机的角度控制.docx(11页珍藏版)》请在冰豆网上搜索。

舵机的角度控制.docx

舵机的角度控制

计算机控制实验报告

题目:

舵机的角度控制

院(系):

电子工程与自动化学院

专业:

智能科学与技术

学生姓名:

学号:

指导教师:

赵学军

2016年7月02日

一、实验题目

舵机的角度控制

2、实验内容

在PROTEUS软件下用MOTOR-PWMSERVO作为控制对象,单片机发送PWM信号给舵机实现转角控制,4*4键盘给定,参数LCD显示;

三、实验要求

1、根据给定题目设计Proteus仿真原理图;

2、根据给定题目设计有关的C语言源程序,并编译成可执行文件;

3、在Proteus仿真界面下运行程序实现给定的功能

4、实验设计

(1)实验思路

1.14*4矩阵键盘概述

1.2舵机的基本概述

舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

其工作原理是:

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。

它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。

最后,电压差的正负输出到电机驱动芯片决定电机的正反转。

当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置;

5、具体设计思路

 例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。

用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动。

5、心得体会

本次实验中,通过实际动手自己设计并实现在PROTEUS软件下用MOTOR-PWMSERVO作为控制对象,单片机发送PWM信号给舵机实现转角控制,4*4键盘给定,参数LCD显示,不仅加深了我对计算机控制课程理论知识的理解,同时也进一步认识到了计算机的广泛应用。

在本次实验设计过程中,从一开始的毫无头绪到慢慢思索并最终实现,过程是艰辛的,谢谢老师和同学帮助额解决了一些不明白的问题。

在以后的学习和生活中,我定会更加努力提高自己!

附录一实验仿真图

图1仿真电路图

附录二实验程序清单

#include

sbitPWM0=P1^0;

#defineSCAN_IOP0

sbitLCD_E=P1^7;//使能

sbitLCD_RS=P1^5;//选择发送命令

sbitLCD_RW=P1^6;//选择接收数据

sbitADD=P3^6;

sbitSUB=P3^7;

#defineLCD_DATAPINSP2

#defineucharunsignedchar

#defineuintunsignedint

#include

#include

uintt_up0=1500;//舵机PWM高电平时间1000~2000表示1ms到2ms

uintt_change=63036;//换路周期2.5ms8路

uintt0_h;

uintt0_l;

intA,A1,A2,A3,C1,C2,key;

intB1,B2;

voiddelayms(uintms)

{

unsignedchara,b,c;

while(ms--)

{

for(c=1;c>0;c--)

for(b=142;b>0;b--)

for(a=2;a>0;a--);

}

}

voidtimer_init()

{

EA=1;?

/总中断打开

ET0=1;//定时器中断打开

PT0=1;

TMOD=0x11;

TH0=(65536-t_up0)/256;//给定初值,这里使定时器从0开始计数一直到65536溢出

TL0=(65536-t_up0)%256;

}

uchart0_flag=0;

uintnum_max=65535;//直接用65535-t_up不用变量-t_up时,误差较大,原因暂时不明【注:

65536不能存到uint类型变量中】

 

ucharerror0=45;

ucharerror1=45;

 

voidtimer0()interrupt1

{

if(t0_flag==0)

{

PWM0=1;

TH0=(num_max-t_up0+error0)/256;//+?

是为了抵消执行语句花的时间

TL0=(num_max-t_up0+error0)%256;

t0_flag=1;

}

elseif(t0_flag==1)

{

PWM0=0;

TH0=(t_change+t_up0+error1)/256;

TL0=(t_change+t_up0+error1)%256;

t0_flag=0;

}

}

voidLCDdisplay(intA)

{

A1=A/1000;//个位

A2=A/100%10;//小数点后第一位

A3=A/10%10;//小数点后第二位

if(A>=1500)

B1=((A-1500)*36)/200;

else

B1=((1500-A)*36)/200;

C1=B1/10;

C2=B1%10;

//B2=B1*10%10;

LcdWriteCom(0x80);//第一行地址

LcdWriteData('T');

LcdWriteData('=');

LcdWriteData('0'+2);

LcdWriteData('0');

LcdWriteData('m');

LcdWriteData('s');

LcdWriteData('');

LcdWriteData('a');

LcdWriteData('n');

LcdWriteData('g');

LcdWriteData('=');

if(A<1500)

LcdWriteData('-');

else

LcdWriteData('+');

LcdWriteData('0'+C1);

LcdWriteData('0'+C2);

//LcdWriteData('.');

//LcdWriteData('0'+B2);

LcdWriteCom(0xc0);

LcdWriteData('t');

LcdWriteData('=');

LcdWriteData('0'+A1);

LcdWriteData('.');

LcdWriteData('0'+A2);

LcdWriteData('0'+A3);

LcdWriteData('m');

LcdWriteData('s');

}

voidmain()

{inty,f,g;

uintt_while;

timer_init();

TR0=1;

LcdInit();

key=0;

y=0;

while

(1)

{

scankey(&key);

if(key==11)

{y=1;}//为正

if(key==12)

y=0;//为fu

if(key==10)

{

f=1;

g=f;

}

if(key==0)

{

t_up0=1500;

}

if(key==1)

{

if(y==0)

{

t_up0=1440;}//-10du

else

{

t_up0=1559;

}//10du

}

if(key==2)

{

if(y==0)

{t_up0=1385;}//-20du

else

{t_up0=1615;}

}

if(key==3)

{

if(y==0)

{t_up0=1333;}//-30du

else

{t_up0=1667;}

}

if(key==4)

{if(y==0)

{t_up0=1274;}//-40du

else

{t_up0=1725;}

}

if(key==5)

{

if(y==0)

{t_up0=1222;}//-50du

else

{t_up0=1778;}

}

if(key==6)

{

if(y==0)

{t_up0=1163;}//-60du

else

{t_up0=1838;

}

}

if(key==7)

{

if(y==0)

{t_up0=1111;}//-70du

else

{t_up0=1889;}

}

if(key==8)

{

if(y==0)

{t_up0=1055;}//-80du

else

{t_up0=1948;}

}

if(key==9)

{

if(y==0)

{t_up0=1000;}//-90du

else

{t_up0=2000;}

}

if(g)

{

if(ADD==0)

{

delayms

(2);

if(ADD==0)

{

if(t_up0<=1950)

{

t_up0=t_up0+10;//

}

t_while=50000;

while(t_while--)

{

if(ADD==1)

break;

}

}

}

if(SUB==0)

{

delayms

(2);

if(SUB==0)

{

if(t_up0>=1050)

{

t_up0=t_up0-10;//

}

t_while=50000;

while(t_while--)

{

if(SUB==1)

break;

}

}

}

}

LCDdisplay(t_up0);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1