從今天開始給大家逐步講解單片機編程,有興趣的小夥伴們,可以關注本課程,完全免費。
本人從事從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獲取項目原理圖和源代碼,有什麼問題可以留言或者私信。
閱讀更多 嵌入式屆 的文章