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

相关推荐
I_Am_Zou1 小时前
STM32实战系列|智能摄像头巡检系统完整演示:第一讲
stm32·单片机·嵌入式硬件
发发就是发3 小时前
USB系统架构概述:从一次诡异的枚举失败说起
驱动开发·单片机·嵌入式硬件·算法·fpga开发
发发就是发3 小时前
TTY子系统与线路规程:那个让我深夜抓狂的串口“丢包”问题
linux·服务器·驱动开发·单片机·嵌入式硬件
RFCEO4 小时前
Rust编程基础课 第1课时:Rust简介与环境搭建 STM32 RUST嵌入式编程实战
stm32·嵌入式硬件·rust·probe-rs·rust工具链·rustup、cargo·stm32 rust适配
智者知已应修善业4 小时前
【数字稳压控制DAC/TLC5615驱动】2023-5-27
c++·经验分享·笔记·算法·51单片机
少年、潜行5 小时前
【代码开源】基于STM32的智能路灯控制系统设计
stm32·嵌入式硬件·开源·智能路灯
wotaifuzao6 小时前
深度解析:NFC、UWB与BLE技术的演进、核心技术与“无感交互“融合应用展望
嵌入式硬件·交互·ble·uwb·nfc·数字钥匙
玩转单片机与嵌入式12 小时前
一个成熟的嵌入式AI系统,是长什么样子的?
人工智能·单片机·嵌入式硬件·嵌入式ai
玩转单片机与嵌入式16 小时前
不会 Python、不会深度学习,也能在STM32上跑AI模型吗?
人工智能·单片机·嵌入式硬件·嵌入式ai
jghhh0117 小时前
基于STM32的桌面Mini时钟设计
stm32·单片机·嵌入式硬件