基于51单片机直流电机PWM调速液晶1602显示设计

一、系统方案

本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节,从而控制其输入信号波形等均作了详细的阐述。另外,本系统中使用了霍尔元件对直流电机的转速进行测量,经过处理后,将测量值送到液晶显示出来。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

void init()//初始化

{

en=0;

rw=0;

write_com(0x01); //lcd初始化

write_com(0x38); //5X7显示

write_com(0x0c); //关闭光标

TMOD=0x01; //定时器方式1

TH0=0xdc;

TL0=0x00; //定时器初值

EA=1; //开中断

ET0=1; //定时器0开中断

TR0=1;

EX1=1;

IT1=1; //定时器启动

TH1=0xfc;

TL1=0x66;//定时100us

ET1=1; //定时器1开中断

TR1=1;

write_com(0x80);

write_data('V');

write_data(':');

write_com(0x87); //第一行显示转数

write_data('r');

write_data('p');

write_data('m');

write_com(0xc0);

write_data('z');

write_data('h');

write_data('a');

write_data('n');

write_data('k');

write_data('o');

write_data('n');

write_data('g');

write_data('b');

write_data('i'); //第二行显示占空比:

write_data(':');

displaym();

}

2、液晶显示程序

void write_com(uchar com)//1602控制指令

{

rs=0;

P0=com;

delay(5);

en=0;

delay(10);

en=1;

}

void write_data(uchar date)//1602数据指令

{

rs=1;

P0=date;

delay(5);

en=0;

delay(5);

en=1;

}

3、按键检测程序

void keyscan() //键盘扫描函数

{

if(num10)
{
delay(5); //消除抖动
if(num10)

{

if(m<=199)

m++;

displaym(); //占空比加一

}

}

if(num20)
{
delay(5);
if(num20)

{

if(m>=1)

m--;

displaym(); //占空比技跻?

 }

}

if(num30)
{
delay(5);
if(num30)

{

zheng=1; //开始正转

fan=0; // 反转停止

 }

}

if(num40)
{
delay(5);
if(num40)

{

zheng=0; //正转停止

fan=1; // 反转开始

 }

}

if(num50)
{
delay(5);
if(num50)

{

while(num5==0) ;

kai=1-kai;

}

}

}

4、核心算法程序

void display()

{

write_com(0x82);

zhuansu=zhuansu*30; //每分钟转速

if(zhuansu/10000!=0)

write_data(zhuansu/10000+0x30);

else

write_data(' ');

if(zhuansu/10000)
write_data(' ');
else
write_data(zhuansu%10000/1000+0x30);
if(zhuansu/1000)

write_data(' ');

else

write_data(zhuansu%10000%1000/100+0x30);

if(zhuansu/10==0)

write_data(' ');

else

write_data(zhuansu%10000%1000%100/10+0x30);

write_data(zhuansu%10000%1000%100%10+0x30);

write_com(0xd0);

}

void displaym()

{

write_com(0xcb);

if(m/200%10!=0)

write_data(m/200%10+0x30);

else

write_data(' ');

if(m/200%100&&m/20%100)

write_data(' ');

else

write_data(m/20%10+0x30);

write_data(m/2%10+0x30);

}

四、proteus仿真设计

Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
思为无线NiceRF23 分钟前
新品:SA628F39大功率全双工音频传输模块
单片机·嵌入式硬件·音视频
正在绘制中4 小时前
Java重要面试名词整理(六):MongoDB
java·mongodb·面试
qianmoQ4 小时前
DataCap MongoDB Driver: 全面解析MongoDB在DataCap中的使用指南
java·数据库·mongodb·datacao
沐欣工作室_lvyiyi5 小时前
基于单片机的蓄电池内阻检测系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·智能家居
电子绿洲5 小时前
三极管恒流源电路
stm32·单片机·嵌入式硬件·硬件工程·信息与通信·智能硬件
新手嵌入式学习5 小时前
单片机理论基础
单片机·嵌入式硬件
柘木木5 小时前
STM32使用UART发送字符串与printf输出重定向
stm32·单片机·嵌入式硬件
皮皮黄-机电工程师5 小时前
第一节:电路连接【51单片机-L298N-步进电机教程】
51单片机·步进电机·l298n
国产化嵌入式平台解决方案6 小时前
【服务器主板】定制化:基于Intel至强平台的全新解决方案
嵌入式硬件·intel·服务器主板·至强处理器·定制化
不能只会打代码7 小时前
32单片机从入门到精通之硬件架构——内核与外设(一)
单片机·嵌入式硬件·硬件架构