一、直流电机工作原理
1、直流电机正反转
——通过高低电平反转实现
2、电机调速通过PWM波实现
——PWM通过51单片机定时器输出,实现占空比调整。
二、功能程序
端口定义
#include sbit PWM1=P2^0; //电机输入1 sbit PWM2=P2^1; //电机输入2 sbit tiaosu=P2^2; //调速按键 sbit stop=P2^3; //停止按键 sbit left=P2^4; //逆时针按键 sbit right=P2^5; //顺时针按键 变量定义 typedef unsigned int uint; typedef unsigned char uchar; uint t0=25000,t1=25000;//初始占空比为1/2 t0低电平,t1高电平 uint a=25000;//设置定时器装载初值 uchar flag=1; //选择不同的装载初值 uchar dflag; //左右转标志位 uchar sudu; //速度 ms延时函数 void delay(uchar z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 定时器和中断函数 void time_init() { TMOD=0X01; //定时器0 方式1 TH0=(65535-a)/256; TL0=(65535-a)%256; //装载初值 ET0=1; //开启定时器中断使能 EA=1; //开启总中断 TR0=0; } void timer0()interrupt 1 using 0 { if(flag) { flag=0; PWM1=PWM2=1; a=t0; TH0=(65535-a)/256; TL0=(65535-a)%256; //重新装载初值 } else { flag=1; if(dflag==0) { PWM1=0;PWM2=1;; } else { PWM1=1;PWM2=0; } a=t1; TH0=(65535-a)/256; TL0=(65535-a)%256; //重新装载初值 } } 按键扫描函数 void keyscan() { if(stop==0) { TR0=0; PWM1=PWM2=1;//关闭定时器,便可停转电机 } if(left==0) { TR0=1; dflag=1; } if(right==0) { TR0=1; dflag=0; } if(tiaosu==0) { delay(5); //消抖 if(tiaosu==0) { while(tiaosu==0) sudu++; if(sudu==1) { t0=20000; t1=30000; //占空比3/5 } if(sudu==2) { t0=15000; t1=35000; //占空比7/10 } if(sudu==3) { t0=10000; t1=40000; //占空比4/5 } if(sudu==4) { t0=5000; t1=45000; //占空比9/10 } if(sudu==5) { sudu=0; } } } } 主函数 void main() { time_init();//定时器初始化 while(1) { keyscan(); //按键扫描 } }
上一篇:51实验1:通过位定义控制任意灯的亮灭
下一篇:51驱动两相四线步进电机
推荐阅读最新更新时间:2024-11-13 10:17
推荐帖子
- 除了光耦与三极管,还有哪些可控开关元件?
- 最近设计一个电路用到了一个单片机控制的开关,原先使用的是9014三极管,后面因为开关频率不够换成了高速光耦。想问问各位,除了三极管与光耦可以当作此类的开关使用,还有什么别的元器件可以吗?(话说回来,这种功能的东西应该叫“继电器”吧)除了光耦与三极管,还有哪些可控开关元件?晶体管、场效应管、可控硅、继电器等。光耦中的开关元件要么是晶体管,要么是可控硅,所以不能把光耦列入其中。类似的,固态继电器也同样。 学习了,我在用的时候这两种都是比较常见成型的产品,所以就归在一起了,确实两者的不
- 作死教练 模拟电子
- 嵌入式C编程与Atmel AVR
- 嵌入式C编程与AtmelAVR嵌入式C编程与AtmelAVR看看啊已经有了,感谢支持免费资料类应该免费,鼓励大家多学习感谢您,已经有了不错回复楼主weilanqing的帖子无私的奉献楼主好人!感谢分享看看哈,,,,辛苦了,,,辛苦楼主了。。。好人啊棒Thanksforsharing谢谢!很给力!:carnation:这个可以有好人啊
- weilanqing Microchip MCU
- wince6 gpio读数据的驱动问题
- 小弟做毕设遇到个棘手问题,望各位好心人帮助小弟用的arm开发板是友坚恒天的S3C6410,将GPIO的GPK的15-8位和GPL的7-0位从高到低组合成16位数据,但在编写驱动时报错,可能是XXX_read函数有问题,代码如下:驱动部分代码:DWORDGIO_Init(LPCTSTRPContext,LPCVOIDlpvBuscontext{BOOLbResult=TRUE;PGIO_PUBLIC_CONTEXTpPublicGIO=NULL;PHYSICAL
- cearmce WindowsCE
- WinCE5.0选中文为默认语言后HPC的图片资源编不进来
- WinCE5.0选中文为默认语言后HPC的图片资源编不进来现象就是开机后,桌面上只有“我的电脑”,“回收站”,“我的文档”等文字,没有相应的图标。DefaultLanguage选“中文”,并且增加了MultilingualUserInterface(MUI)编译出来的image就是不含HPC下的图片文件。如果再单独buildandsysgen一下shell然后MakeRun-TimeImage, 那么image里有HPC的图片了,但是系统的默认语言变成了英文应用程序里的中
- wisper WindowsCE
- F149内部AD的电压问题
- 我今天用一个探测火源的模块去接F149的内部AD,我用3.3V给火焰传感器模块供电,输出脚悬空的时候我测输出脚是0到3V之间在变化(就是当没有火源或者火源超过探测范围的时候是3V),但我接上F149的AD的输入脚之后本来的3V输出就立即衰减为1.7V了。然后我又换了5V电源给传感器供电,结果接上F149之后的峰值只有1.9V,这是为什么呢?就算上F149的内阻分压也不至于衰减的这么厉害吧?大家遇到过这种问题么?怎么解决啊?小弟在此先谢过各位大神~~~F149内部AD的电压问题用的是哪个
- 蛊惑小夜 微控制器 MCU
- 【测评STM32L452Nucleo-64】有源无源蜂鸣器的使用
- 本篇测评给大家测试一下蜂鸣器的使用,在进行蜂鸣器的测试时我也是犯了一些很基本的错误致使卡了很久之后才发现问题进行解决首先蜂鸣器分为两种,分别是有源蜂鸣器和无源蜂鸣器如下图;有源蜂鸣器无源蜂鸣器蜂鸣器模块一般由一个上拉电阻一个负责放大的三极管和蜂鸣器组成,这里使用的蜂鸣器模块供电为5V,要确保通过蜂鸣器的电流足够大否则也不能驱动蜂鸣器。有源蜂鸣器和无源蜂鸣器的主要区别是在蜂鸣器中是否有振荡电路,蜂鸣器的发声是依靠频率不断变化从而使发声的震动片不断震动从而产
- 一只香榴莲 stm32/stm8
设计资源 培训 开发板 精华推荐
- 用于 Intel 90MHz 和 100MHz Pentium 处理器的 LT1587CM 3A 低压差稳压器的典型应用
- LTC3406ES5-1.5 微型 3.3V/600mA 降压稳压器的典型应用电路
- 红外遥控器 IR Remote Control
- ST1S03 1.5A、1.5 MHz可调、降压开关稳压器的典型应用电路
- 黄淮学院立创杯电子设计大赛-#1001862A#-#姚家宁#
- 基于ST1S10、具有抑制功能的3A、同步900kHz降压DC-DC转换器
- 用于可调电流源的 LT1764AEQ-1.8 LDO 稳压器的典型应用
- 用于便携式消费电子产品的 3W、1 通道、D 类音频功率放大器
- 使用 Analog Devices 的 LTC2908IDDB-A1 的参考设计
- 936烙铁温控板