51、51单片机视频教程 HJ-C52 直流电机原理
- 格式:pdf
- 大小:7.98 MB
- 文档页数:14
HJ-C52单片机开发板指导教程前言致用户:欢迎使用HJ系列开发板!恭喜您成为慧净电子产品的用户!我们非常高兴您选择了本款产品。
我们将为你提供最真诚最优质的服务,让您在以后的日子里尽情发挥你的创意!为了使您的产品功能得到充分发挥,我们建议在连接和操作之前,通读一遍说明书,请务必了解本产品各功能模块、跳线、开关和接口等的功能和设置方法后再使用,这样有便于您掌握系统的连接方法和使用要点,有助于您更好的使用本款开发板!我们对用户使用手册的编排力求全面且简单易懂,目的是您可以获取与您购买的开发板相关的软件安装、基本操作、软硬件使用方法等知识,但为了提高产品的性能,我们会对产品的硬件和软件做些改动和升级,这样可能会产生软硬件配置和本手册在某些细节上不符,请以最新软件和您购买的开发板实际配置为准。
本手册的更改或升级不另行通知客户!在编写手册时我们难免会有疏漏甚至错误之处,请您多加包涵并热烈欢迎指正,慧净电子将不为本手册可能产生的疏漏和错误负责!本开发板随机光盘中含有大量的例程和参考资料供您学习和参考,如果您学习过程中遇到问题或者,可以发邮件咨询,另外本公司有专业的技术论坛,论坛提供大量以往用户常见问题和学习经验供您分享,推荐您使用论坛发帖的方式咨询问题,可以和众多的用户一起学习交流。
您可以登录论坛网址:慧净电子论坛。
慧净电子科技有限公司技术网站:E-mail:hjmcu@第1章简介1.1性能特点本开发板使用免跳线加独立模块式结构,大部分模块都是免跳线,个部的模块完全独立的,不需杜邦外接,使新手入门更容易,需要用独立模块时,用杜邦线连接到对应的单片机端口,不使用时悬空即可。
这种方式大大提高了自由度,这些模块完全独立,可以自由配置端口,连接其他类型单片机的最小系统板就可以组成对应的开发板。
1.2板载实验硬件组成由于主板模块较多,所以使用之前必须读懂电路图,并能对应到开发板上,只有对硬件了解到一定层次后,才能去学习写程序。
51单片机怎么驱动直流电机c语言有3种方案:第一种,通过PWM脉宽调制输出方法控制转速,控制占空比的大小可以实现调速!第二种,通过AD转换的方法控制直流电机的电压第三种,用xtr115程控电流源来控制直流电机(类似第二种方法)如果以上的驱动能力不够的话再加上一个电压跟随器!一下以L298电机驱动电路为例。
L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。
内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 36 V;Vs 电压最大值也是 36 V。
L298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。
当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;;IN1与IN2相同时,电机快速停止。
当使能端为低电平时,电动机停止转动。
在对直流电动机电压的控制和驱动中,半导体功率器件(L298)在使用上可以分为两种方式:线性放大驱动方式和开关驱动方式在线性放大驱动方式。
半导体功率器件工作在线性区优点是控制原理简单,输出波动小,线性好,对邻近电路干扰小,缺点为功率器件工作在线性区,功率低和散热问题严重。
开关驱动方式是使半导体功率器件工作在开关状态,通过脉调制(PWM)来控制电动机的电压,从而实现电动机转速的控制。
#include#include#define uchar unsigned char#define uint unsigned intsbit MOTOR_A_1=P3^6;sbit MOTOR_A_2=P3^7;sbit k1=P1^0; //定义k1为p1.0口sbit k2=P1^1; //定义k2为p1.1口sbit k3=P1^2; //定义k3为p1.2口sbit k4=P1^3; //定义k4为p1.3口uchar T=0; //定时标记uchar W=0; //脉宽值 0~100uchar A=0; //方向标记 0,1uchar k=0; //按键标记uchar i=0; //计数变量uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar code table2[]={0xfe,0xfb,0xfd,0xf7}; void delayms(uint t);void disp(void){P2=table2[3];P0=table1[W]; //显示占空比个位delayms(1); //延时1msP2=0xff; //P0清1P2=table2[2];P0=table1[W/100]; //显示占空比百位delayms(1); //延时1msP2=0xff; //P0清1P2=table2[1];P0=table1[W/10]; //显示占空比十位delayms(1); //延时1msP2=0xff; //P0清1P2=table2[0];P0=table1[A]; //显示方向delayms(1); //延时1msP2=0xff; //P0清1}void init(void){//启动中断TMOD=0x01;EA=1;ET0=1;TR0=1;//设置定时时间TH0=0xff;TL0=0xf6;}void timer0() interrupt 1{//重置定时器时间TH0=0xff;TL0=0xf6;T++; //定时标记加1disp(); //数码管显示if(k==0){if(T》W)MOTOR_A_1 =0;elseMOTOR_A_1 =1;}else{if(T》W)MOTOR_A_2 =0;elseMOTOR_A_2 =1;}if(T==100)T=0;}void delayms(uint t){uchar j;while(t--){for(j=0;j《250;j++) //循环250次{_nop_(); //系统延时_nop_(); //系统延时_nop_(); //系统延时_nop_(); //系统延时}}}void key(void) //按键判断程序{if(k1==0) //按键1按下{while(k1==0); //按键1抬起if(W==100) //如果脉宽为100 W=0; //脉宽置0elseW+=1; //否则加1}else if(k2==0) //按键2按下{while(k2==0); //按键2抬起if(W==0) //如果脉宽为0W=100; //脉宽设置成100elseW-=1; //否则减1}else if(k3==0) //按键3按下{while(k3==0); //按键3抬起A=!A; //方向标记取反k=!k; //按键标记取反}else if(k4==0) //按键4按下{while(k4==0); //按键4抬起W=0; //脉宽清0}}void main(void){init(); /////////系统初始化while(1){if(k==0)MOTOR_A_2=0;elseMOTOR_A_1=0;key(); ////////查询按键}}。
基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件PWM.c******/#include <reg52.h>#include "Afx.h"#include "Config.c"#define CIRCLE 5 //脉冲周期//按键定义uchar key,key_tmp=0, _key_tmp=0;//显示定义uchar LedState=0xF0; //LED显示标志,0xF0不显示,Ox00显示uchar code LED_code_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位uchar dispbuf[4]={0,0,0,0}; //待显示数组uchar dispbitcnt=0; //选通、显示的位uchar mstcnt=0;uchar Centi_s=0,Sec=0,Min=0; //分、秒、1%秒//程序运行状态标志bit MotState=0; //电机启停标志bit DirState=0; //方向标志0前,1后uchar State1=-1;uchar State2=-1;uchar State3=0;uchar State4=-1;uchar LSpeed=0;uchar RSpeed=0;//其他uint RunTime=0;uint RTime_cnt=0;uint LWidth;uint RWidth; //脉宽uint Widcnt=1;uint Dispcnt;//函数声明void key_scan(void);void DisBuf(void);void K4(void);void K3(void);void K2(void);void K1(void);void disp( uchar H, uchar n );void main(void){P1|=0xF0;EA=1;ET0=1;ET1=1;TMOD=0x11;TH0=0xFC;TL0=0x66; //T0,1ms定时初值TH1=0xDB;TL1=0xFF; //T1,10ms定时初值TR0=1;Widcnt=1;while(1){key_scan();switch(key){case 0x80: K1(); break;case 0x40: K2(); break;case 0x20: K3(); break;case 0x10: K4(); break;default:break;}key=0;DisBuf();LWidth=LSpeed;RWidth=RSpeed;}}//按键扫描**模拟触发器防抖void key_scan(void){key_tmp=(~P3)&0xf0;if(key_tmp&&!_key_tmp) //有键按下{key=(~P3)&0xf0;}_key_tmp=key_tmp ;}//按键功能处理/逻辑控制void K4(void){if(State4==-1){State4=1;TR1=1;dispbuf[3]=1;LedState=0x00; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
南昌工程学院本科综合课程设计第一章直流电动机调速概述 (1)1.1直流电机调速原理 (1)1.2直流调速系统实现方式 (2)1.389C51单片机 (3)89C51单片机接口如图1-3所示: (3)第二章硬件电路设计 (4)2.1PWM波形的程序实现 (4)2.2直流电动机驱动 (4)2.3续流电路设计 (5)第三章软件设计 (6)3.1主程序设计 (6)3.2数码显数设计 (7)3.3功能程序设计 (7)3.4仿真图 (11)3.5仿真结果分析 (12)心得体会 (13)参考文献 (14)第一章直流电动机调速概述1.1直流电机调速原理直流电动机根据励磁方式不同,直流电动机分为自励和他励两种类型。
不同励磁方式的直流电动机机械特性曲线有所不同。
但是对于直流电动机的转速有以下公式:n=U/C cφ-TR内/C r C cφ其中:U—电压;R内—励磁绕组本身的电阻;φ—每极磁通(Wb);Cc—电势常数;Cr—转矩常量。
由上式可知,直流电机的速度控制既可采用电枢控制法,也可采用磁场控制法。
磁场控制法控制磁通,其控制功率虽然较小,但低速时受到磁极饱和的限制,高速时受到换向火花和换向器结构强度的限制,而且由于励磁线圈电感较大,动态响应较差。
所以在工业生产过程中常用的方法是电枢控制法。
第一章直流电动机调速概述图1-1 直流电机的工作原理图电枢控制是在励磁电压不变的情况下,把控制电压信号加到电机的电枢上,以控制电机的转速。
在工业生产中广泛使用其中脉宽调制(PWM)应用更为广泛。
脉宽调速利用一个固定的频率来控制电源的接通或断开,并通过改变一个周期内“接通”和“断开”时间的长短,即改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速,因此,PWM又被称为“开关驱动装置”。
图1-2电枢电压占空比和平均电压的关系图,占空比为D=1t/T,则电根据上图,如果电机始终接通电源时,电机转速最大为vmaxV=V*D,可见只要改变占空比D,就可以得机的平均速度为:D max到不同的电机速度,从而达到调速的目的。
南昌工程学院本科综合课程设计第一章直流电动机调速概述 (1)1.1直流电机调速原理 (1)1.2直流调速系统实现方式 (2)1.389C51单片机 (3)89C51单片机接口如图1-3所示: (3)第二章硬件电路设计 (4)2.1PWM波形的程序实现 (4)2.2直流电动机驱动 (4)2.3续流电路设计 (5)第三章软件设计 (6)3.1主程序设计 (6)3.2数码显数设计 (7)3.3功能程序设计 (7)3.4仿真图 (11)3.5仿真结果分析 (12)心得体会 (13)参考文献 (14)第一章直流电动机调速概述1.1直流电机调速原理直流电动机根据励磁方式不同,直流电动机分为自励和他励两种类型。
不同励磁方式的直流电动机机械特性曲线有所不同。
但是对于直流电动机的转速有以下公式:n=U/C cφ-TR内/C r C cφ其中:U—电压;R内—励磁绕组本身的电阻;φ—每极磁通(Wb);Cc—电势常数;Cr—转矩常量。
由上式可知,直流电机的速度控制既可采用电枢控制法,也可采用磁场控制法。
磁场控制法控制磁通,其控制功率虽然较小,但低速时受到磁极饱和的限制,高速时受到换向火花和换向器结构强度的限制,而且由于励磁线圈电感较大,动态响应较差。
所以在工业生产过程中常用的方法是电枢控制法。
第一章直流电动机调速概述图1-1 直流电机的工作原理图电枢控制是在励磁电压不变的情况下,把控制电压信号加到电机的电枢上,以控制电机的转速。
在工业生产中广泛使用其中脉宽调制(PWM)应用更为广泛。
脉宽调速利用一个固定的频率来控制电源的接通或断开,并通过改变一个周期内“接通”和“断开”时间的长短,即改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速,因此,PWM又被称为“开关驱动装置”。
图1-2电枢电压占空比和平均电压的关系图,占空比为D=1t/T,则电根据上图,如果电机始终接通电源时,电机转速最大为vmaxV=V*D,可见只要改变占空比D,就可以得机的平均速度为:D max到不同的电机速度,从而达到调速的目的。