导航:首页 > 操作系统 > 怎么用单片机控制电机

怎么用单片机控制电机

发布时间:2022-12-11 20:57:42

A. 如何用单片机驱动马达

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

B. 单片机怎么控制电机转动圈数

1、首先电机要是可调速的;
2、用两个按钮,分别接入单片机的两个输入脚,一个按钮作为增速计数用,一个作为减速计数用。每按一次增速按钮,单片机计数一次,并输出控制信号控制电机增加速度,减速按钮反之。
3、例如用单片机pwm控制电机转速:
带注释软件清单
;
==========使用单元设定==========
//.
.................................使用单元设定
DIS0
EQU
30H
DIS1
EQU
31H
DIS2
EQU
32H
DIS3
EQU
33H
LED
EQU
34H
TM1
EQU
35H;
TM2
EQU
36H;
INTV
BIT
37H;
中断标志
THX
EQU
38H;
定时脉宽高电平
CISHU
EQU
39H
FIRST
BIT
41H;
检测加减是否第一次按下
SET1
BIT
42H
SETZ0
EQU
43H;设定当前设定值SETZ0~SETZ3
SETZ1
EQU
44H
SETZ2
EQU
45H
SETZ3
EQU
46H
TM3
EQU
47H;
循环次数单元
JIA1
BIT
48H;
单步加标志
LIANJIA
BIT
49H;
连加标志
JIAN1
BIT
50H;
单步减标志
LIANJIAN
BIT
51H;
连减标志
SETDATA
EQU
52H;
设定速度暂存单元
REALDATA
EQU
53H;
实测速度暂存单元
YK1
EQU
54H;
上次输出数据暂存单元
KP
EQU
56H;比例系数
KI
EQU
57H;
积分系数
EK
EQU
58H;
设定值和实测值的差值
EK1
EQU
59H;
上次的EK值
OUTPUT
EQU
60H;
EK2
EQU
61H;
EK-EK1的值
ONPRESS
BIT
62H;
判定ENTER键是否弹起标志
TMS
EQU
63H;
闪烁时长
SHAN
BIT
64H;
闪烁标志
;
==========主程序==========
ORG
0000H
SJMP
MAIN
ORG
0013H;
外部中断1入口地址
AJMP
INX1
ORG
001BH;
定时器T1中断入口地址
AJMP
ITX1
ORG
0070H
MAIN:
MOV
SP,#70H;
设定堆栈指针入口地址
ACALL
INIT;
调用初始化程序
M1:
JB
SET1,FLASH;
当前为设置状态则跳到闪烁显示模块
ACALL
DISP;
否则为一般显示
SJMP
NEXTT
FLASH:
ACALL
DISP1
NEXTT:
ACALL
DELAY;
调用按键延时程序
ACALL
M2;调用按键程序
DJNZ
CISHU,M1;
第隔100MS刷新一下实测值
MOV
CISHU,#20
ACALL
CONTROL;
调用控制调速模块
SJMP
M1
//
==========初始化模块==========
INIT:MOV
DPTR,#0FD00H
;
设置PA、PB为输出口,PC为输入口
MOV
A,#03H
MOVX
@DPTR,A
MOV
TMOD,#21H
;
定时器/计数器T1为方式2,定时器/计数器T0为方式1
MOV
TL0,#00H
;
定时器/计数器T0赋初值#00H
MOV
TH0,#00H
MOV
THX,#0BBH
;
输出单元赋初值#0BBH,即脉冲高电平宽度
MOV
TH1,THX
MOV
TL1,THX
SETB
TR1
;
启动定时器/计数器T1
SETB
TR0
;
启动定时器/计数器T0
SETB
ET1
;
允许定时器/计数器T1溢出中断
SETB
EX1
;
允许外部中断1中断
SETB
IT1
;
选择边沿触发
SETB
EA
;
CPU开中断
SETB
07H;
SETB
SHAN
CLR
11H;
检测是否成功
MOV
LED,#7FH。

C. 如何用单片机控制直流电机

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

(3)怎么用单片机控制电机扩展阅读:

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

#include "reg52.h"


#define uchar unsigned char


#define uint unsigned int


uchar code table[10]={0x3f,0x06,0x5b,


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


sbit xiaoshudian=P0^7;


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


sbit wei2=P2^5;


sbit wei3=P2^6;


sbit wei4=P2^7;


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


sbit motor = P1^0; //电机控制


sbit s1_jiasu = P1^4; //加速按键


sbit s2_jiansu= P1^5; //减速按键


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


uint pulse_count; //INT0接收到的脉冲数


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


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


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


float reallyspeed; //实际测得的速度


float vv_min=0.0;vv_max=250.0;


float vi_Ref=60.0; //给定值


float vi_PreError,vi_PreDerror;


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


int sample_time=0; //采样标志


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


void delay (uint z)


{


uint x,y;


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


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


}


void time_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; //开总中断


}


void keyscan()


{


float j;


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);


}


float v_PIDCalc(float vi_Ref,float vi_SpeedBack)


{


register float error1,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);


}


void v_Display()


{


uint su;


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;


}


void BEEP()


{


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


{


beep=~beep;


delay(4);


}


}


void main()


{


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);


}


void timer0() interrupt 1


{


}


void timer1() interrupt 3


{


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;


}


}



D. 如何使用单片机精确控制步进电机

如何用单片机控制步进电机
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
一、步进电机常识
常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。这种步进电机的应用最为广泛。
二、永磁式步进电机的控制
下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单片机控制步进电机。图1是35BY型永磁步进电机的外形图,图2是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、C、BC、C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、B、轮流接地。列出了该电机的一些典型参数:表135BY48S03型步机电机参数型号步距角相数电压电流电阻最大静转距定位转距转动惯量35BY48S03 7.5 4 12 0.26 47 180 65 2.5 有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过P1.4~P1.7来控制各线圈的接通与切断。开机时,P1.4~P1.7均为高电平,依次将P1.4~P1.7切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。

E. 单片机是怎样控制电机的

单片机只输出信号,经过隔离电路,再经过功率开关电路驱动电机。

控制普通的三项异步电机可以单片机输出信号经三极管后驱动一个小功率继电器,由继电器来驱动交流接触器,进而控制电机,也可以单片机信号经三极管放大后直接驱动功率继电器。 方法有很多很多。至于驱动伺服,单片机端口的信号经过光耦隔离后可以直接驱动,伺服驱动器本身需要的驱动信号都是弱电信号。

单片机注意事项

一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。

不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。

F. 如何使用单片机控制步进电机

根据电机相数买个驱动器。然后用单片机产生脉冲来控制电机的转动以及正反转。单片机产生脉冲的方法和单片机控制流水灯是一样的。希望我的回答能给你点思路。

G. 单片机如何控制电机转速

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

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

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

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

(7)怎么用单片机控制电机扩展阅读

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

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

H. 怎样用单片机控制直流电动机

1,简单的开关控制,用单片机引脚输出高低电平,控制MOS管驱动电路。
2,正反转控制,需要两个单片机引脚,一个控制正反转,一个控制启动与否。
3,需要控制速度,(1)电压控制,(2)PWM(脉宽)控制。
4,需要控制转角,首先能够控制速度,然后增加一个编码器,单片机中加入PID控制,用以精确控制。
以上大概就是直流电机能够控制的东西。

I. 怎么用单片机控制无刷电机驱动器

单片机驱动无刷电机,首先需要知道无刷电机的工作原理,按线序和相位导通,从而实现转动和正反转。

解决了驱动程序的问题,还需要解决硬件问题。

单片机io口不能直接驱动无刷电机,需要使用MOS管组成的h桥,或者专用芯片。

阅读全文

与怎么用单片机控制电机相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:142
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:732
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:301
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:141
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:890
app转账是什么 浏览:163