① 如何利用51系列单片机控制电机
小功率电机,玩具车上的,可用单片机接三极管来驱动。
② 如何利用单片机和传感器信号控制步进电机的转停
请详细阐述这几个脚的作用,你的电机需要什么样子的驱动波形?
sbit clock=P1^0; //CLOCK 产生时钟信号
sbit enable=P1^1; //ENABLE 使能
sbit half=P1^2; //HALF 半步/全步控制
sbit cw=P1^3; //CW 转向控制
----------------------------------
你两个程序在主程序里都缺乏死循环,程序都会跑飞的
------------------------------------------
#include "reg52.h"
sbit clock=P1^0; //CLOCK 产生时钟信号
bit flag; //设置一个标志位,用来表示允许或者禁止电机转动
//1表示允许,0表示禁止
/**********中断函数**********/
void INT(void) interrupt 0
{
flag=!flag;
}
/*************主函数*************/
void main()
{
unsigned int i;
IT0=1; //设置外中断0为下降沿触发
EX0=1; //允许外中断0
EA=1;//允许总中断
for(;;)
{if(flag==1)
{for(i=60000;i>0;i--)clock=!clock;}
}
}
KEIL C51环境编译仿真通过
--------------------------
你的步进电机用的什么芯片驱动的?驱动时序要搞清楚。
③ 由光电传感器感应的单片机控制电动机系统
楼主你这里的光电开关又叫光电对管(一个红外发射管和一个基极内接的感光三极管)因为这是循迹小车我选用rpr220,我以上传电路图
我补充一句光电耦合器原理也类似光电对管只不过把发光管和感光管镶嵌在内部,而且值得注意的是光电耦合器规格只有多少电压的,我没有听说有多少电流的,要用光耦还不如用三极管更直接。其实不推荐使用光耦做驱动,我的电路就是使用l298n驱动12v电机
顺便说一下,电路图里有一个电机接一个电容主要是针对电机调速,而我的电机灵敏度不好,加一个电容起缓冲作用,而l298芯片的电路典型法中没有。
我最近做了个循迹小车结题报告如下。。。
其实是否用光电隔离取决于你驱动的电机的电流大小如果电流不到1安不用光电耦合也行。。。光耦驱动好像不行,不太稳定
测速用码盘的话最好做的越密越好,否则实际运行中轮子会晃动等等很多原因使结果误差很大,因为一般光电开关都会有聚光器,很小的晃动都能感觉到
循迹小车
制作人:李静
摘要:通过制作小车可以加深对单片机控制的熟练程度,同时初步学习项目开发的过程。
小车按照给定的路线行走,有定时,显示运行时间,计时,粗测行走距离等功能。
一、设计任务:
1、设计要求
(1)自动寻迹小车开始处于设置模式下,通过按键设置运行时间,完成设置时间后,按下开始键小车启动,同时显示当前运行的时间。
(2)小车按指定路线运行,自动区分直线轨道和弯路轨道,在指定弯路处拐弯,实现灵活前进、转弯等功能。
(3)小车行走在预设的时间后,自动停止,数码管显示行走的时间,3秒后显示行走距离。
(4)中途可以按右键强制停止,提前结束,显示行走时间,距离。
2、小车循迹的原理
这里的循迹是指小车在白色地板上循黑线行走,通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。红外探测器探测距离有限,一般最大不应超过3cm。
二、方案论证:
根据设计要求,本系统主要由控制器模块、电源模块、寻迹传感器模块、直流电机及其驱动模块、电压比较模块等模块构成。
为较好的实现各模块的功能,我们分别设计了几种方案并分别进行了论证。
3.1车体设计
方案1:购买玩具电动车。购买的玩具电动车具有组装完整的车架车轮、电机及其驱动电路。但是一般的说来,玩具电动车具有如下缺点:首先,这种玩具电动车由于装配紧凑,使得各种所需传感器的安装十分不方便。其次,这种电动车一般都是前轮转向后轮驱动,不能适应该题目的方格地图,不能方便迅速的实现原地保持坐标转90度甚至180度的弯角。再次,玩具电动车的电机多为玩具直流电机,力矩小,空载转速快,负载性能差,不易调速。而且这种电动车一般都价格不菲。因此我们放弃了此方案。
方案2:自己制作电动车。经过反复考虑论证,我们制定了左右两轮分别驱动,前万向轮转向的方案。即左右轮分别用两个转速和力矩基本相同的直流电机进行驱动,车体首部装一个万向轮。由此可以轻松的实现小车坐标不变的90度转弯。
在安装时我们保证两个驱动电机同轴。当小车前进时,左右两驱动轮与前万向轮形成了三点结构。这种结构使得小车在前进时比较平稳,可以避免出现后轮过低而使左右两驱动轮驱动力不够的情况。为了防止小车重心的偏移,前万向轮起支撑作用。
对于车架材料的选择,我们经过比较选择了铝合金。用有铝合金做的车架比塑料车架更加牢固,比铁制小车更轻便,美观。
3.2控制器模块
方案1:采用stc宏晶公司的stc89c52单片机作为主控制器。stc89c5是一个低功耗,高可靠性,超低价,无法解密,高性能的8位单片机,片内含32k空间的可反复擦写100,000次的Flash只读存储器,32个IO口,且stc系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。
从方便使用的角度考虑,我们选择了此方案。
3.3电源模块
方案1:采用12V蓄电池为直流电机供电,将12V电压降压、稳压后给单片机系统和其他芯片供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。虽然蓄电池的体积过于庞大,在小型电动车上使用极为不方便,但由于我们的车体设计时留出了足够的空间,并且蓄电池的价格比较低。因此我们选择了此方案。
综上考虑,我们选择了此方案。
3.4稳压模块
方案1:用一个7805直接降压,用大散热片。虽然结构,原理简单,但电流过大,使电路不稳定,容易烧坏稳压块我们放弃了此方案。
方案2:直接用两7805把电压直接稳压到5V,理论上由于降压过大容易烧稳压块,用两个7805并联。但两个稳压块出现馈赠问题,后用修改电路解决此问题,我们最后选择了此方案
3.5寻迹传感器模块
方案1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。
但是这种方案受光照影响很大,不能够稳定的工作。因此我们考虑其他更加稳定的方案。
方案2:用RPR220型光电对管。RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。
RPR220采用DIP4封装,其具有如下特点:
塑料透镜可以提高灵敏度。
内置可见光过滤器能减小离散光的影响。
体积小,结构紧凑。
当发光二极管发出的光反射回来时,经过lm339电压比较芯片,通过对门限电压进行比较,输出高低电平,通过调整门限电压可以调整传感器单元的灵敏度。此光电对管调理电路简单,工作性能稳定。
因此我们选择了方案2。
3.6电机模块
本系统为智能电动车,对于电动车来说,其驱动轮的驱动电机的选择就显得十分重要。由于本实验要实现对路径的准确定位和精确测量,我们综合考虑了一下两种方案。
方案1:采用直流减速电机。直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。
因我们用软件对电机调速,实际值要比这小一些
注意:在实际计算时用的是理论值。
能够较好的满足系统的要求,因此我们选择了此方案。
3.7电机驱动模块
方案1:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
方案2:对于直流电机用分立元件构成驱动电路。由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。但是这种电路工作性能不够稳定。
因此我们选用了方案1。
三、分析与计算:
1、传感器模块的设计
因此我们考虑用比较器的方案。
在图中,可调电阻RV1可以调节比较器的门限电压,而且经试验验证给此电路供电的电池的压降较小。因此我们选择此电路作为我们的传感器检测与调理电路。
2、寻迹光电对管的安装
考虑到设计要求,本次设计仅用4对光电传感器就能完成设计要求,采用直线型排列,中间2对传感器用来校正小车的寻迹路线,保证小车运行的直线性。两侧的传感器用来检测小车过线,可以实现小车的转弯。
4、电机驱动电路的设计
我们采用电机驱动芯片L298N作为电机驱动,驱动电路的设计如图7所示:
L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。这里的二极管作用是释放电机线圈的自感电能
电容c3起缓冲作用,经过试验在调速时下方的电机接收的是一个高脉冲的电流,由于直流电机灵敏性不是很好,我们也考虑用周期长的脉冲,但由于扫描数码管就会慢,数码管就会出现颤动。综合考虑,我们选择接电容起缓冲作用。
4、测量距离设计
我们采用用一个光电对管感应轮子黑白条来算出轮子转动的角度间接测出行走的距离。
在实际中会出现轮子打滑现象,黑白纸带表面不光滑,不平整,轮子轴不牢固,内外摇晃,由于rpr220有聚光器即使非常小的变化都会有反应。通过实际测试传感器发出的信号要比理论大的多,在电池电量过低时,这种现象会更加不准,无规律可循(有时候大,有时候小)。即使在电量足的情况下也有很大误差,超过一定距离,结果已经没有意义,所以我们限定最大估测距离在6米左右,因此此设计为粗测距离。
四、总电路图及元器件清单
经过反复论证,我们最终确定了如下方案:
(1)车体用铝合金车架手工制作。
(2)采用stc89c52单片机作为主控制器。
(3)用12V蓄电池为直流电机供电,将12V电压经两个7805(带大散热片)并联降压、稳压后为单片机系统和其他芯片供电。
(4)用RPR220型光电对管进行寻迹。
(5)L298N作为直流电机的驱动芯片。
五、软件实现
3.1主程序流程图
我们所设计的软件的主程序流程图如图所示:
六、测试:
七、创新点
本作品改进了lm339电压比较器接控制门限电压的电阻的方式,没有采用接4个变阻器,用的是统一接一个变阻器,这样方便调整灵敏度。在光电对管传感器电路上也有改变,直接把发射极和集电极接在5V电源上,这样可以使电流更大,试验证明当接通时电流不足以烧坏三极管。
直流并联了电容,电容c3起缓冲作用,经过试验在调速时下方的电机接收的是一个高脉冲的电流,由于直流电机灵敏性不是很好,我们也考虑用周期长的脉冲,但由于扫描数码管也会慢,数码管就会出现颤动,我们同时考虑用时钟中断扫描刷新数码管,但那样使中断频繁发生(大约50ms)而且数码管刷新一次用时也会很长(大约24ms),造成中断过长,那样会大大加大整个循环周期,基本看不到数码管显示连续的数。综合考虑,我们选择接电容起缓冲作用。
八、心得体会
P0要想用做io口时必须加上拉电阻,即使用上拉电阻驱动能力也不怎么好。本作品用共阴数码管,驱动电路设计比较复杂,数字不够亮,最好用共阳数码管,加上三极管驱动可能效果会好一些。
由于单片机高频的对数码管进行扫描,在程序设计的时候就要求主程序的周期不能过长,这对于我们小车执行寻迹,调速,定时,计时,测距,转弯等功能的程序要求是非常高的,经过我综合考虑后决定主函数只有刷新数码管和探测黑线的功能剩下的所有功能都用中断处理,同时要求产生的中断时间不能过长。这些就造就了我的程序到目前为止已经有350行的长度。
我们最初设计精确测量距离,但误差不可避免,由于硬件的局限性,尊重事实,我们降低了标准。以后可以在此改进,扩展。
在整个测试阶段我们充分考虑程序功能的连续性和兼容性,由于89c52单片机速度的局限,同时程序需要实时对数码管高速的刷新频率我们不能设计车太高的速度。经过反复测试综合考虑我们采用目前的方案
九、结束语
我们的寻迹小车在完成设计要求的前提下,充分考虑到了外观、成本等问题,在性能和价格之间作了比较好的平衡。由于设计要求并不复杂,我们没有在电路中增加冗余的功能。
由于作者水平的有限,部分观点存在错误,希望指正,指教,对此表示感谢。
特别感谢:
张洪军老师和实验室老师的指导,及接伟权,张新涛,黄绍军等学长的建议和指教,还有陈振宇,吴旷和全组成员,没有你们就没有我们今天。
2010年5月
李静
程序片段
/*******************************************
数码管刷新函数
********************************************/
voiddisplay(ucharqw,ucharbw,ucharsw,uchargw)//显示函数
{
P2=0xe0;
P1=table[qw];
delay(6);
P2=0xd0;
P1=table[bw];
delay(6);
P2=0xb0;
P1=table[sw];
delay(6);
P2=0x70;
P1=table[gw];
delay(6);
P2=0x0f;//
}
/*******************************************
任务初始化函数
********************************************/
voidinit0()任务1初始化函数
{
EA=1;
EX0=1;
EX1=1;
IT1=IT0=1;
P0=0x00;
flag=1;
jishu=0;//
}
voidinit()//任务2初始化函数
{
EA=1;
TH0=(65536-50000)/256;//初始化加1计数器
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
TH1=(65536-50000)/256;//初始化加1计数器
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
TMOD=0x11;
dsh=(qw*10+bw)*60;//
jishu=1;//
}
voidjiesu()
{
if(flag2==0)
{
flag1=1;
flag2=1;
cnt1=0;
}
ET0=0;
P0=0;
display(qw,bw,sw,gw);
}
④ 单片机怎么控制电机转动圈数
步进电机按照每步的角度进行控制即可,非步进电机高速运行情况下控制较难,可降低运行频率,降低转速,结合脉冲转速传感器或编码器,计算圈速并采用变频器V/F快速制动。
⑤ 怎样用单片机控制直流电机所转动的角度
怎样用单片机控制直流电机所转动的角度?
----AVR169单片机是新一代RISC结构微控制器,具有高性能、低功耗、非易失性和CMOS技术等特点,AVR169还具有32个寄存器和丰富的指令集,带有四路8/9/10位PWM功能的16位定时器,8道的10位ADC,16KB可编程Flash,1KBSRAM,可以擦写10000次,接近1MIPS/MHZ的运行速度。
AS5040是Austria microsystems公司推出的世界上最小的10位多输出旋转磁性编码器, 是将现场传感霍尔(Hall)元件、A/D转换、数字信号处理和输出接口集成到单个芯片的系统级芯片(SoC),利用其包含的小磁体,可通过磁体的360度旋转探测1024个绝对位置,即每360度提供10位分辨率的1024 个绝对位置,同时提供了积分A/B、单通道和U-V-W交换等三种不同的增量输出模式,既可根据用户的特定要求设置,也可设置为脉宽调制(PWM)输出信号。PWM 数字输出所需外部元件最少,使用方便简单。本装置采用AS5040旋转编码器PWM_LSB端输出PWM脉冲,计算出电风扇摇头偏离初始位置的角度。控制电风扇摇头速度以及使其角度在一定范围内摇动,其工作原理为:把AS5040传感器装在电风扇摇头的转轴上,就能感应出电扇转过的角度与初始位置的夹角,计算出当前风扇摇头的速度,在下一个采样周期到来时,AS5040旋转编码器测得的速度信号及电机位置反馈信号通过AS5040接口反馈到AVR单片机169...
旋转编码器AS5040接口电路设计
AS5040旋转编码器把圆周分成1024份,当转离初始位置后,PWM_LSB端输出PWM脉冲。在0位置处,对应高电平宽度为1us,位置每加1,PWM高电平脉宽相应增加1us。通过对电机PWM的控制可以控制电机的转动,而AS5040旋转编码器随电机转轴转动,可以根据LSB端口输出脉冲计数得出电风扇摇头的速度变化,通过检测PWM_LSB输出脉冲可以得出此时刻转动的位置。AS5040引脚B_Dir_V可以直接检测出电机的正转和反转(输出1为顺时针,0为逆时针转动)。
3966 驱动接口电路设计
AVR 单片机169 输出的脉宽调制( PWM) 信号需经过功率放大才能驱动电机,调速控制系统采用的是3966 驱动芯片, 双极性工作方式是指在一个PWM 周期内电机电枢两端的电压呈正负变化,系统采用的双极性PWM控制,采用PI控制算法进行速度调节。驱动接口电路如图3 所示。单片机PWM引脚PF7直接接电机的ENABLE端,它控制着电机的转速的大小。
直流电机,大体上可分为四类:
第一类为有几相绕组的步进电机。这些步进电机,外加适当的序列脉冲,可使主轴转动一个精密的角度(通常在1.8°--7.5°之间)。只要施加合适的脉冲序列,电机可以按照人们的预定的速度或方向进行连续的转动。
步进电机用微处理器或专用步进电机驱动集成电路,很容易实现控制。例如常用的SAAl027或SAAl024专用步进电机控制电路。
步进电机广泛用于需要角度转动精确计量的地方。例如:机器人手臂的运动,高级字轮的字符选择,计算机驱动器的磁头控制,打印机的字头控制等,都要用到步进电机。
第二类为永磁式换流器直流电机,它的设计很简单,但使用极为广泛。当外加额定直流电压时,转速几乎相等。这类电机用于录音机、录相机、唱机或激光唱机等固定转速的机器或设备中。也用于变速范围很宽的驱动装置,例如:小型电钻、模型火车、电子玩具等。在这些应用中,它借助于电子控制电路的作用,使电机功能大大加强。
第三类是所谓的伺服电机,伺服电机是自动装置中的执行元件,它的最大特点是可控。在有控制信号时,伺服电机就转动,且转速大小正比于控制电压的大小,除去控制信号电压后,伺服电机就立即停止转动。伺服电机应用甚广,几乎所有的自动控制系统中都需要用到。例如测速电机,它的输出正比于电机的速度;或者齿轮盒驱动电位器机构,它的输出正比于电位器移动的位置.当这类电机与适当的功率控制反馈环配合时,它的速度可以与外部振荡器频率精确锁定,或与外部位移控制旋钮进行锁定。
最后一类为两相低电压交流电机。这类电机通常是直流电源供给一个低频振荡器,然后再用低频低压的交流去驱动电机。这类电机偶尔也用在转盘驱动机构中。
----友情链接
⑥ 单片机控制直流电动机
看你要求的是什么样的控制:是开环控制还是闭环控制?是控制其转速?还是扭矩?还是其他参数?
如果是开环控制,最简单,可以用PWM(即脉宽调制)来改变送给电动机的平均电压,达到调节的目的。如附图示意。
如果是闭环控制,则需要加传感器。例如要闭环控制转速,则需要加装一个转速传感器,将传感器信号送给单片机。单片机通过一定的软件算法测出转速,将实测转速和要求的转速比较,采用某种控制算法(例如PID控制)来确定输出的PWM占空比应该如何改变。
⑦ 单片机控制电机的正反转 程序及电路图
这个很简单,我教你怎么玩,下面是思路和方式
思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用p0.0到p0.2来代替;输出2个或以上(这看你接什么显示器,如果是pc的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用p1.0、p1.1;
ps:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用npn传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include
//选用晶振11.0592mhz
unsigned
char
k=0;
//k表示正反转次数
sbit
x0=p3^2;
//调节按钮
sbit
x1=p1^1;
//上限位接近开关信号
sbit
x2=p1^2;
//下限位接近开关信号
sbit
y1=p0^0;
//电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit
y2=p0^1;
//电机下降
void
delay50ms(unsigned
int
i)
{
unsigned
int
j;
for
(i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
it0=1;
//下降沿触发
ex0=1;
//开p3.2外部中断
ea=1;
//总中断开
while(1)
while(k)
{
y1=0;
//正转
while(x1==1);
//等待正转接近开关反应
y1=1;
//正转停
delay50ms(1);
//停止时间50ms
y2=0;
//反转
while(x2==1);
//等待反转接近开关反应
y2=1;
//反转停
k--;
//圈数减一
}
}
void
counter0(void)
interrupt
0
{
k++;
//外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
⑧ 如何用传感器输入的信号与标准信号对比,单片机控制对应两个继电器控制电机的正反转,求程序
电机的形式很多,但其工作原理都基于电磁感应定律和电磁力定律。因此,其构造的一般原则是:用适当的导磁和导电材料构成互相进行电磁感应的磁路和电路,以产生电磁功率,达到能量转换的目的。 根据电动机按起动与运行方式不同,可分为电容起动式单相异步电动机、电容运转式单相异步电动机、电容起动运转式单相异步电动机和分相式单相异步电动机,三相电动机。
根据电动机按转子的结构不同,可分为笼型感应电动机,你在用的就是这一种(旧标准称为鼠笼型异步电动机)和绕线转子感应电动机(旧标准称为绕线型异步电动机)。鼠笼就是一个闭合的线圈。
(1)当三相异步电机接入三相交流电源(各相差120度电角度)时,三相定子绕组流过三相对称电流产生的三相磁动势(定子旋转磁动势)并产生旋转磁场,该磁场以同步转速沿定子和转子内圆空间作顺时针方向旋转。
(2)该旋转磁场与转子导体有相对切割运动,根据电磁感应原理,转子导体(转子绕组是闭合通路)产生感应电动势并产生感应电流(感应电动势的方向用右手定则判定)。
(3)根据电磁力定律,在感应电动势的作用下,转子导体中将产生与感应电动势方向基本一致的感生电流。载流的转子导体在定子产生的磁场磁场中受到电磁力作用(力的方向用左手定则判定),电磁力对电机转子轴形成电磁转矩,驱动电机转子沿着旋转磁场方向旋转,当电动机轴上带机械负载时,便向外输出机械能。由于没有短路环部分的磁通比有短路环部分的磁通领先,电机转动方向与旋转磁场方向相同。
如果我的回答对你有帮助请帮我采纳!
⑨ 如何利用单片机控制电机旋转到指定角度
用舵机比较方便,输入一定脉宽的脉冲即能旋转一定的角度
⑩ 请问一下,怎样才能把压力传感器受到的压力信号传送到单片机,然后去控制步进电机的转动呢请详细的说一
压力传感器有模拟输出和数字输出的,如果是数字输出的话可以直接接到单片机上,模拟输出的需要转化为数字信号,然后再接到单片机上,然后再把程序写进单片机,再用单片机输出信号给步进电机控制器控制步进电机!