零成本學習之單片機開發之(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獲取項目原理圖和源代碼,有什麼問題可以留言或者私信。


分享到:


相關文章: