导航:首页 > 操作系统 > 单片机控制伺服电机程序

单片机控制伺服电机程序

发布时间:2024-03-07 18:56:35

单片机如何控制电机转速

利用单片机的定时器TIMER_A(TA)中断产生脉冲信号,通过在响应的中断程序中实现步进电机步数和圈数的准确计数,通过PWM实现转速控制。

可以利用P10端口的中断关闭TA中断程序,并推入堆栈,停止电机;P11中断则开启TA中断,堆栈推入程序计器(PC),开启电机。

P31端口输出高电平由PMM8713的U/D端口控制电机的转向;P3.0~P37端口接8279的8个数据接口。

单片机扫描到矩阵键盘有键按下时,利用P2端口的中断设置TA,控制启停、调速和转向等,同时单片机反馈给8279控制LED管显示转速和转向。

(1)单片机控制伺服电机程序扩展阅读

1、单片机所接收到控制命令暂存在RXBUFFER中,与存储在片内Flash的中断程序的入口地址相比较,相同就进入中断,实现步进电机的控制。

2、当P1.0中为高电平时,其内部三极管导通,使电机转动。当P1.0为低电平时,内部三极管截止,电路断开,电机停止转动。所以在程序中可以利用P1.0口输出PWM波来控制电机的转速。

⑵ 怎么用单片机控制伺服放大器来控制伺服电机

伺服控制一般单片机给脉冲信号,伺服接受的控制信号一般简单控制如下:
S_ON:伺服ON,使能信号

Pulse+:正转 或Pulse:脉冲
Pulse-:反转 dir 方向

以上三个控制信号就可以控制伺服电机了。

⑶ 如何用单片机控制直流电机

通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。

(3)单片机控制伺服电机程序扩展阅读:

通过单片机产生PWM波控制直流电机程序

#include"reg52.h"


#defineucharunsignedchar


#defineuintunsignedint


ucharcodetable[10]={0x3f,0x06,0x5b,


0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管显示码(0-9)


sbitxiaoshudian=P0^7;


sbitwei1=P2^4;//数码管位选定义


sbitwei2=P2^5;


sbitwei3=P2^6;


sbitwei4=P2^7;


sbitbeep=P2^3;//蜂鸣器控制端


sbitmotor=P1^0;//电机控制


sbits1_jiasu=P1^4;//加速按键


sbits2_jiansu=P1^5;//减速按键


sbits3_jiting=P1^6;//停止/开始按键


uintpulse_count;//INT0接收到的脉冲数


uintnum=0;//num相当于占空比调节的精度


ucharspeed[3];//四位速度值存储


floatbianhuasu;//当前速度(理论计算值)


floatreallyspeed;//实际测得的速度


floatvv_min=0.0;vv_max=250.0;


floatvi_Ref=60.0;//给定值


floatvi_PreError,vi_PreDerror;


uintpwm=100;//相当于占空比标志变量


intsample_time=0;//采样标志


floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,积分,微分常数


voiddelay(uintz)


{


uintx,y;


for(x=z;x>0;x--)


for(y=20;y>0;y--);


}


voidtime_init()


{


ET1=1;//允许定时器T1中断


ET0=1;//允许定时器T0中断


TMOD=0x15;//定时器0计数,模式1;定时器1定时,模式1


TH1=(65536-100)/256;//定时器1值,负责PID中断,0.1ms定时


TL1=(65536-100)%6;


TR0=1;//开定时器


TR1=1;


IP=0X08;//定时器1为高优级


EA=1;//开总中断


}


voidkeyscan()


{


floatj;


if(s1_jiasu==0)//加速


{


delay(20);


if(s1_jiasu==0)


vi_Ref+=10;


j=vi_Ref;


}


while(s1_jiasu==0);


if(s2_jiansu==0)//减速


{


delay(20);


if(s2_jiansu==0)


vi_Ref-=10;


j=vi_Ref;


}


while(s2_jiansu==0);


if(s3_jiting==0)


{


delay(20);


motor=0;


P1=0X00;


P3=0X00;


P0=0x00;


}


while(s3_jiting==0);


}


floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)


{


registerfloaterror1,d_error,dd_error;


error1=vi_Ref-vi_SpeedBack;//偏差的计算


d_error=error1-vi_PreError;//误差的偏差


dd_error=d_error-vi_PreDerror;//误差变化率


vi_PreError=error1;//存储当前偏差


vi_PreDerror=d_error;


bianhuasu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);


return(bianhuasu);


}


voidv_Display()


{


uintsu;


su=(int)(reallyspeed*10);//乘以10之后强制转化成整型


speed[3]=su/1000;//百位


speed[2]=(su00)/100;//十位


speed[1]=(su0)/10;//个位


speed[0]=su;//小数点后一位


wei1=0;//第一位打开


P0=table[speed[3]];


delay(5);


wei1=1;//第一位关闭


wei2=0;


P0=table[speed[2]];


delay(5);


wei2=1;


wei3=0;


P0=table[speed[1]];


xiaoshudian=1;


delay(5);


wei3=1;


wei4=0;


P0=table[speed[0]];


delay(5);


wei4=1;


}


voidBEEP()


{


if((reallyspeed)>=vi_Ref+5||(reallyspeed


{


beep=~beep;


delay(4);


}


}


voidmain()


{


time_init();


motor=0;


while(1)


{


v_Display();


BEEP();


}


if(s3_jiting==0)//对按键3进行扫描,增强急停效果


{


delay(20);


motor=0;


P1=0X00;


P3=0X00;


P0=0x00;


}


while(s3_jiting==0);


}


voidtimer0()interrupt1


{


}


voidtimer1()interrupt3


{


TH1=(65536-100)/256;//1ms定时


TL1=(65536-100)%6;


sample_time++;


if(sample_time==5000)//采样时间0.1ms*5000=0.5s


{


TR0=0;//关闭定时器0


sample_time=0;


pulse_count=TH0*255+TL0;//保存当前脉冲数


keyscan();//扫描按键


reallyspeed=pulse_count/(4*0.6);//计算速度


pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);


if(pwm


if(pwm>100)pwm=100;


TH0=TL0=0;


TR0=1;//开启定时器0


}


num++;


if(num==pwm)//此处的num值,就是占空比


{


motor=0;


}


if(num==100)//100相当于占空比调节的精度


{


num=0;


motor=1;


}


}



⑷ 如何用单片机驱动马达

一、第一步是将电机连接到HC6800em3单板注意使用P1端的电缆排列单片机连接到电机控制芯片的输入端(4Pin端口),以确保P1.0-P1.3正常。

⑸ 跪求单片机控制伺服电机转速程(汇编语言)序及电路图

最小系统就可以控制伺服了,伺服电机的控制需要三个信号就OK,分别是SV_ON(使能),CW,CCW。比如:
CW EQU P1.0
CCW EQU P1.1
SVON EQU P1.2
KEY EQU P1.3
ORG 0000H
SJMP STA
ORG 0030H
STA:
CLR EA
SETB SVON
LOOP:
JB KEY,LOOP1
CPL CW
LCALL DELAY
SJMP LOOP
LOOP1:
CPL CCW
LCALL DELAY
SJMP LOOP
END

⑹ 51单片机控制8路伺服电机的程序。。下面这个程序是怎么实现的啊看来半天头有点晕了。。求注释。。

order1 有 1-16 16种状态 ,每进一次中断改变一次。
1-16分别对应 8个口高一次,低一次,
高低总时间计数器2700次 比如 d1 高 t1 1500 低时 2700-t1= 1200
出来波形就是
d1 高 (1500) 拉低(1200) d2高(1000) 拉低。。。d8 高(2000) 拉低(700) d1高(1500)这样循环下去。

⑺ 如何做一个单片机板控制伺服电机,以及伺服电机基本

#includde<reg51.h>
sbit sv_on=P1^0;
sbit cw=P1^1;
sbit ccw=P1^2;
void delay(int a)
{
unsigned char i;
while(a--)for(i=0;i<120;i++);
}
main()
{
unsigned char i;

while(1)

{
for(i=0;i<250;i++)

{
sv_on=1;

cw=~cw;

ccw=0;

delay(1);

}

for(i=0;i<250;i++)

{
sv_on=1;

cw=0;

ccw=~ccw;

delay(1);

}

}
}

阅读全文

与单片机控制伺服电机程序相关的资料

热点内容
phpexif信息 浏览:540
单片机三字节浮点数 浏览:754
命令与征服泰伯利亚战争下载 浏览:376
c窗口界面编程 浏览:21
hypermill编程能做模板吗 浏览:780
计算机网络最经典的算法 浏览:626
华为思科的配置命令 浏览:869
linux设置光盘启动 浏览:359
程序员俱乐部注册 浏览:17
洗洁精鸡蛋盘解压视频 浏览:291
企业内网加密app 浏览:49
腾讯云服务器怎么设置本地网络 浏览:623
日常程序员 浏览:513
哪个pe有bit加密功能 浏览:108
rust服务器是用什么ip 浏览:692
java随机字符串生成 浏览:551
数码宝贝编程人物 浏览:390
php多用户建站系统 浏览:624
加密防盗地上栓价位 浏览:671
比泽尔压缩机下载 浏览:421