基于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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
编程老船长23 分钟前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
芯橦3 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
少女忧4 小时前
51单片机学习第六课---B站UP主江协科技
科技·学习·51单片机
夜间去看海7 小时前
基于单片机的智能浇花系统
单片机·嵌入式硬件·智能浇花
VirtuousLiu7 小时前
LM74912-Q1用作电源开关
单片机·嵌入式硬件·ti·电源设计·lm74912·电源开关
打地基的小白7 小时前
软件I2C-基于江科大源码进行的原理解析和改造升级
stm32·单片机·嵌入式硬件·通信模式·i2c
Echo_cy_8 小时前
STM32 DMA+AD多通道
stm32·单片机·嵌入式硬件
朴人8 小时前
【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】
stm32·单片机·嵌入式硬件·foc
追梦少年时8 小时前
STM32中断——外部中断
stm32·单片机·嵌入式硬件
bai_lan_ya8 小时前
stm32定时器中断和外部中断
stm32·单片机·嵌入式硬件