零成本学习之单片机开发之(5)直流电机控制

从今天开始给大家逐步讲解单片机编程,有兴趣的小伙伴们,可以关注本课程,完全免费。

零成本学习之单片机开发之(5)直流电机控制

本人从事从2004年大学毕业开始从事开发工作,先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发,目前从事物联网开发。我本人并非学计算机的,除了学校上课之外,基本上这些开发都是自学的。边学习边工作,基本上以学以致用为目的,用到什么学习什么。

深深体会到自学的艰辛,尤其是最初入门的时候,那道砍迈过去后面再学习基本上就简单多了,所谓触类旁通,举一反三。但是前面打基础的时候是非常费力的,看到很多评论说C语言指针太难了,后来就放弃了。其实那是没有找到好的学习方法,没有人指导。只要有人带一带指点一下,问题很快就能解决。

相比于国外的开源学习氛围,我认为我们做的还远远不够,我们的编程大师还非常少,像ucLinux、ucOSII、FreeRtos等等非常有名的嵌入式操作系统,商业的更不用说了,太多了。我们在软件方面一直都是落后的状态,当然近几年我们自己也有不少好的作品。比如,Huawei LiteOS、Alios Things、djyos、RT-Thread、SylixOS等。一直想为学习单片机的同学做点什么,今年相对来说会轻松一些,利用闲暇时间,给大家分享一些案例、学习方法和心得。本课系列课程主要针对初学者、单片机学习爱好者、学习中遇到困难者,有什么不清楚的地方可以留言讨论。

首先,打开原理图

零成本学习之单片机开发之(5)直流电机控制

  • 原理图由三个部分构成

1.单片机最小系统和复位电路

2.按键电路

3.无刷电机驱动电路

  • 原理图讲解

1.最小系统就不详细说了,包括供电电源/时钟/复位

2.按键检测电路 通过GPIO检测电平,当按键按下时按键检测是低电平,释放按键是低电平

3.电机驱动电路 其中DIR代表电机转动方向,PWM控制电机转速

其次,直流电机控制代码实现

代码非常简单精炼,直接上代码加注释

//头文件

#include "ioAT89C51.h"

#include "intrinsics.h"

// Define P3 pins

#define Inc (P3_bit.P3_4) //转速增加按键

#define Dec (P3_bit.P3_5)//转速减小按键

#define Dir (P3_bit.P3_6) //转动方向控制

#define PWM (P3_bit.P3_7)//PWM调速驱动信号

// Define new types

typedef unsigned char uchar;

typedef unsigned int uint;

void delay(uint);

void main(void)//主函数

{

int speed;//转速

// Select initial direction and speed.

Dir = 1;//转动方向

//转速初始化

if (Dir)

speed = 400;

else

speed = 100;

// 主循环

while(1)

{

if(!Inc)//如果加速按键按下

// 则加速,注意这里控制是反相的

//所以看起来比较别扭

speed = speed > 0 ? speed - 1 : 0;

if(!Dec)//如果减速按键按下

// 则调整减速

speed = speed < 500 ? speed + 1 : 500;

// 驱动PWM输出控制

//这里用的是纯软件实现的PWM控制

PWM=1;

delay(speed);

PWM=0;

delay(500-speed);

}

}

//延时函数

void delay(uint j)

{ for(; j>0; j--)

{ __no_operation();

}

}

第三,看运行效果视频

其中,左面是示波器用来观察PWM控制信号,方向控制信号和直流电机正极驱动信号

视频加载中...

最后,如果你想亲自体验一下,请私信20004获取项目原理图和源代码,有什么问题可以留言或者私信。


分享到:


相關文章: