历史上的今天
返回首页

历史上的今天

今天是:2024年10月18日(星期五)

正在发生

2021年10月18日 | 51单片机霍尔测速与PWM调直流电机转速快慢

2021-10-18 来源:eefocus

1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器

· 2.采用霍尔传感器非接触式测电机转速

· 3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%。

· 4.电机的速度可以通过按键调整,也可以开始暂停,正转和反转。


注意:磁铁和霍尔元件最近距离在2mm左右,太近可能会在电机转动时碰到霍尔元件,太远霍尔元件可能会检测不到磁铁。


使用说明:

液晶屏第一行显示电机转速,第二行显示占空比,占空比数值越大,电机转速越快。


系统一共有6个按键,单片机附近的独立按键是系统的复位按键,按下单片机会复位。


下面一排是控制按键:

1键:加速键,可以短按,占空比加1,也可长按,占空比连续加;

2键:减速键,可以短按,占空比减1,也可长按,占空比连续减;

3键:正转切换键,按下后电机正转;

4键:反转切换键,按下后电机反转;

5键:开始暂停键,按一下开始,再按一下暂停。


1.本选题的理由及意义

现在电气传动的主要方向之一是电机调速系统采用微处理器实现数字化控制,近年来,随着科技的进步,直流电机得到了越来越广泛的应用,直流具有优良的调速特性,调速平滑,方便,调速范围广,过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速起动、制动和反转,需要满足生产过程自动化系统各种不同的特殊要求,从而对直流电机提出了较高的要求,改变电枢回路电阻调速、改变电压调速等技术已远远不能满足现代科技的要求,并且随着现代化生产规模的不断扩大,各个行业对直流电机的需求愈益增大,并对其性能提出了更高的要求。为此,研究并制造高性能、高可靠性的直流电机控制系统有着十分重要的现实意义。


本题正是以此为出发点, 利用单片机来实现对电机转速的监测和控制。


2.需要重点研究的关键问题及解决问题的思路

关键问题一:如何选择合适的单片机

如何选择合适的单片机是本课题待解决的第一个问题。综合各方面因素考虑,本课题将采用AT89S52,利用AT89S52芯片进行低成本直流电动机控制系统的设计,能够简化系统构成、降低系统成本、增强系统性能、满足更多应用场合的需要。系统实现对电机的正转、反转、急停、加速、减速的控制。


关键问题二:如何选择合适的电机驱动

如何选择合适的电机驱动是本课题待解决的第二个问题。综合各方面因素考虑,本课题将采用三极管驱动电机


关键问题三:采用何种方法来改变占空比

如何选改变占空比是本课题待解决的第三个问题。改变占空比的方法通常有定宽调频法,调频调宽法,定频调宽法,由于前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此采用定频调宽法来改变占空比。


关键问题四:软件编程及调试

软件编程及调试是本题待解决的第四个问题,也是最为重要关键的问题,关系着该系统能否实现其功能。


3.创新点及实践价值

PWM-脉冲宽度调制技术,通过对微处理器输出的一系列数字脉冲宽度进行调制,等效地获得模拟电路所需的波形,从而实现对模拟电路控制的一种有效技术。采用PWM技术可以避免传统调速系统模拟电路容易随时间飘移、产生一些不必要的热损耗、以及对噪声敏感等缺点,并且PWM调速系统低速特性好,动态抗干扰能力强的特点.由此来实现直流电机的启动、停止、加速、减速、正转、反转以及速度的动态显示,并且大幅度提高了转速显示的精确性。


4.完成本选题所需的工作条件(如资料、工具书、计算机设计绘图、实验、调研)及解决办法


工具:

(1)直流电机原理简述的相关资料

(2) PWM控制转速等的一些资料

(3) 模电、数电书籍

(4) 焊接工具一套


67-元件清单


9*15万用板

STC89C51单片机

40脚IC座

1602液晶

16p母座

16p排针

10k电阻*3

1k电阻*5

3v直流电机

3*1万用板

磁铁*2

塑料管

3144霍尔传感器

4148二极管*4

8050三极管*4

8550三极管*2

103排阻

104独石电容

10uf电解电容

30pf瓷片电容*2

12M晶振

按键*6

自锁开关

DC电源插口

导线若干

焊锡若干

USB电源线或电池盒


制作出来的实物:

在这里插入图片描述

单片机直流电机控制转速仿真原理图如下

在这里插入图片描述
在这里插入图片描述

电路原理图如下:

在这里插入图片描述

PCB图如下:

在这里插入图片描述

部分源代码:

#include

#define uchar unsigned char

#define uint unsigned int

void displaym();

sbit en=P2^5; //1602 6管脚

sbit rs=P2^7; //1602端口 4管脚

sbit rw=P2^6;//lcd1602控制端口 5管脚

sbit num1=P1^0; //占空比加1

sbit num2=P1^1; //占空比减一

sbit num3=P1^2; //正传

sbit num4=P1^3; //反转

sbit num5=P1^4; //开始停止切换


sbit out=P3^4; //PWM输出用于正传

sbit out1=P3^7; //PWM输出用于反转


uint zhuansu,flag,z1,z2,m,flag_1,zheng,fan,kai;


void delay(uint z)//延时1ms函数

{

uint x,y;

for(x=0;xfor(y=0;y<110;y++);

}


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;

}

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’); //在第二行显示zhankongbi:

write_data(’:’);

displaym();

}

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; //正传标志置1

fan=0; // 反转标志置0


     }


}

if(num40)

{

delay(5);

if(num40)

{

zheng=0; //正传标志置0

fan=1; // 反转标志置1


     }


}

if(num50)

{

delay(5);

if(num50)

{

while(num5==0) ;

kai=1-kai;

}

}

}

void display()

{

write_com(0x82);

zhuansu=zhuansu*30; //将两秒内的计数乘以30得到转每分


if(zhuansu/10000!=0)

write_data(zhuansu/10000+0x30); //如果转速的万位不为0 正常显示否则显示空格

else

write_data(’ ');


if(zhuansu/1000==0)

write_data(’ ');

else

write_data(zhuansu%10000%1000+0x30); //如果转速小于1000 千位为空格 否则正常显示


if(zhuansu/100==0)

write_data(’ ');

else

write_data(zhuansu%10000%1000/100+0x30); //如果转速小于100 百位为空格 否则正常显示


if(zhuansu/10==0)


write_data(’ ');

else

write_data(zhuansu%10000%1000%100/10+0x30); //如果转速小于10 十位为空格 否则正常显示


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); //如果占空比百位不为0则显示百位否则显示空格

else

write_data(’ ');


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

write_data(’ ');

else

write_data(m/20%10+0x30); //如果占空比小于10 十位正常显示 否则显示空格


write_data(m/2%10+0x30); //显示个位

}

void main()

{

flag_1=0;

m=100; //占空比为100

zhuansu=0; //转速初值0

flag=0;

zheng=1; //初始化电机正转动

fan=0;


init();              //初始化


    while(1)

    {

    keyscan();                                //键盘扫描程序




      

    }


}

void int1()interrupt 2 //外部中断1脉冲技术记录电机的转速 电机转一圈zhuansu加一

{

zhuansu++;

}

void int2()interrupt 3 //定时器0显示转速

{

TH0=0xdc;

TL0=0x00;//定时10ms

flag++;


if(flag==200) //计时到达2s

{

    display();                                        //显示转速

    zhuansu=0;                                          //转速置0

    flag=0;


    }


}

void int3()interrupt 1 //产生PWM

{

TH1=0xff;

。。。。。。。。。。

推荐阅读

史海拾趣

ESTEK公司的发展小趣事

在电子行业竞争日益激烈的背景下,ESTEK公司也面临着诸多挑战和危机。然而,公司始终保持着清醒的头脑和坚定的信心。在面对市场波动、原材料价格上涨等挑战时,ESTEK公司迅速调整战略、优化生产流程、降低成本等措施,成功度过了危机。在危机中,ESTEK公司展现出了强大的韧性和生命力,为公司未来的发展奠定了坚实基础。

旌芯半导体(GN)公司的发展小趣事

随着国内市场的逐渐饱和,ESTEK公司开始将目光投向国际市场。公司制定了详细的国际化战略,通过参加国际展会、拓展海外销售渠道等方式,积极开拓国际市场。同时,ESTEK公司还积极引进国外先进的技术和管理经验,不断提升自身的竞争力和国际化水平。在国际市场上,ESTEK公司的产品逐渐获得了认可,公司的国际影响力也日益增强。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

在快速发展的过程中,Electronic-Bauteile Goerlitz GmbH公司非常重视企业文化和团队建设。公司倡导以人为本的管理理念,注重员工的培养和发展。公司定期组织各种培训和学习活动,提高员工的专业素质和工作能力;同时,公司还建立了完善的激励机制和福利待遇体系,确保员工能够全身心地投入到工作中。这些努力使得公司形成了一支高效、团结、富有创新精神的团队,为公司的发展提供了坚实的保障。

请注意,以上故事均为模拟构建,旨在展示一个电子公司可能的发展过程和相关故事。如有需要,您可以根据具体情况进行调整和补充。

EDAC公司的发展小趣事

精英电脑(ECS)自1987年成立以来,一直以其卓越的技术创新能力在电子行业中占据一席之地。公司早期专注于主板的研发和生产,凭借其稳定的性能和出色的兼容性,迅速赢得了市场的认可。随着科技的进步,ECS不断拓宽产品线,从主板扩展到台式机、笔记本电脑、平板电脑等多个领域。在技术创新方面,ECS始终坚持自主研发,不断推出具有行业领先水平的新产品,如采用最新制程技术的主板、搭载高性能处理器的笔记本电脑等。这些创新产品不仅提升了ECS的品牌形象,也为公司带来了可观的利润。

ELMEC Technology Of America Inc公司的发展小趣事

随着产品的不断完善,ELMEC开始考虑如何进一步拓展市场。然而,国际市场的竞争异常激烈,ELMEC的产品面临着来自各大跨国公司的挑战。为了打开市场,李明带领团队深入调研,了解客户需求,不断优化产品性能。同时,他们还积极参加各类国际展会,与潜在客户建立联系。经过几年的努力,ELMEC的产品逐渐获得了市场的认可,销售额也稳步增长。

GSN Electronics公司的发展小趣事

随着环保意识的不断提高,ELMEC开始关注企业的环保责任。他们采用环保材料替代传统材料,减少生产过程中的污染排放。同时,公司还积极开展绿色能源研发和应用,降低能耗和碳排放。这些措施不仅为公司赢得了良好的社会声誉,也为推动电子行业的可持续发展做出了积极贡献。

问答坊 | AI 解惑

pxa310开发板

Marvell? PXA310?开发板简要介绍 产品图片 Product Photo PXA310 简介 PXA310 处理器专门为手持设备、GPS 定位系统、无线手持和其他消费类电子设备而设计。基于第三代Intel XScale 技术的这一Marvell PXA3XX 应用处理器系列产品(内部称为Mon ...…

查看全部问答>

wince如何挂载FAT32文件系统?

请教各位大虾,wince如何挂载FAT32文件系统? 我用ARM平台,有一片512M的NANDFLASH,前30M用做OS,格式化成BINFS,后面的部分格式化成FAT32,可是挂载不上。大家知道怎么挂载吗?请指教一下。 谢谢 :) …

查看全部问答>

渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临!

渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 详情请参见 www.neworigin.net 同时欢迎大家与我们的609期学员交流!这期学员已与2月11日毕业 ...…

查看全部问答>

能提供CCS for c6000 v2.2补丁程序下载?

CCS for c6000 v2.2补丁程序下载 地址  能提供么…

查看全部问答>

我用一个数组输出一个三角波,为何输出的是这样的啊

我用一个数组输出一个三角波,为何输出的是这样的啊  不是三角波,而是一下一下的向上跳动?…

查看全部问答>

STM32虚拟串口驱动如何一次发送261个数据给上位机?

我设备的需求是:将网卡接收到的一帧数据(一帧包括261个数据,每个数据都是一个十六进制如0xc2),通过USB发送到上位机。      我将STM32的USB虚拟串口驱动(V3.1版)按照我的要求进行修改并实现了该功能,起初我USB虚拟串口 ...…

查看全部问答>

msp430 LaunchPad 的Arduino开发平台

http://energia.nu/ 使用很简单,从上面网站下载相应版本的软件,解压出来后,记得修改一下目录名,把后面一长串的数字字母去掉。 运行安装目录“energia.exe”, 打开软件后,把LAUCHPAD连接到USB接口,装好相应驱动,从\"Tools->Board\"菜单 ...…

查看全部问答>

基于RL78G14的双轮自平衡小车进度贴--体验心得

感觉特别不习惯瑞萨的编译器,比起keil iar 感觉差了不止一大截,可能习惯问题吧。 然后就是他那个芯片手册,引脚介绍的非常详细,功能、寄存器介绍方面我感觉还是有些不足的,看了半天不知道配置,可能是没有demo的原因,后来从这里http://am.ren ...…

查看全部问答>

ucos-ii的移植代码分析

移植的代码中,在时钟SysTick_Handler中OSIntExit()进行任务切换; 其中OSIntExit()的代码为: void  OSIntExit (void) { #if OS_CRITICAL_METHOD == 3                 ...…

查看全部问答>

四旋翼飞行器 MSP430编写的程序,电机驱动的电路图

请各位大神帮帮忙,急求!(不含飞控板的)…

查看全部问答>