从今天开始给大家逐步讲解单片机编程,有兴趣的小伙伴们,可以关注本课程,完全免费。
本人从事从2004年大学毕业开始从事开发工作,先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发,目前从事物联网开发。我本人并非学计算机的,除了学校上课之外,基本上这些开发都是自学的。边学习边工作,基本上以学以致用为目的,用到什么学习什么。
深深体会到自学的艰辛,尤其是最初入门的时候,那道砍迈过去后面再学习基本上就简单多了,所谓触类旁通,举一反三。但是前面打基础的时候是非常费力的,看到很多评论说C语言指针太难了,后来就放弃了。其实那是没有找到好的学习方法,没有人指导。只要有人带一带指点一下,问题很快就能解决。
相比于国外的开源学习氛围,我认为我们做的还远远不够,我们的编程大师还非常少,像ucLinux、ucOSII、FreeRtos等等非常有名的嵌入式操作系统,商业的更不用说了,太多了。我们在软件方面一直都是落后的状态,当然近几年我们自己也有不少好的作品。比如,Huawei LiteOS、Alios Things、djyos、RT-Thread、SylixOS等。一直想为学习单片机的同学做点什么,今年相对来说会轻松一些,利用闲暇时间,给大家分享一些案例、学习方法和心得。本课系列课程主要针对初学者、单片机学习爱好者、学习中遇到困难者,有什么不清楚的地方可以留言讨论。
首先,打开原理图
- 原理图由三个部分构成
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获取项目原理图和源代码,有什么问题可以留言或者私信。
閱讀更多 嵌入式屆 的文章