超簡單“手把手教你寫PWM程式”(基於STC89C52)
阿新 • • 發佈:2020-12-11
文章目錄
前言
學習微控制器總要接觸一些控制,比如電機調速,舵機驅動,步進電機驅動。這是必不可少需要用到一種控制機制———PWM(脈衝寬度調製)
提示:以下是本篇文章正文內容,下面案例可供參考
一、學習前需要掌握哪些內容?
1.掌握微控制器定時器的使用方法
2.掌握c語言基礎
二、開始
1.基操來一下
程式碼如下(示例):
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8; //宣告變數
sbit PWM = P1^0; //定義PWM輸出口
2.重頭戲
以下程式碼就是具體實現方案
程式碼如下(示例):
u16 A = 0; //定義變數
u16 Speed;
void Time0Init() //初始化定時器
{
TMOD|=0x01; //配置定時器1
TH0 = (65536-1000)/256; //配置1ms定時
TL0 = (65536-1000)%256;
TR0 = 1;
ET0 = 1; //開啟定時器中斷
EA = 1; //開啟總中斷
}
//中斷裡面就是PWM具體實現的程式碼
void time()interrupt 1
{
TH0 = (65536-1000)/256; //配置1ms定時
TL0 = (65536-1000)%256;
A++; //A開始計數,每1毫秒加一
if(A > 1000) //A計數到1000就清零,也就是說每經過1s就是一個
{ //PWM週期,所以頻率是1Hz
A = 0;
}
//該Speed出場了,speed作為比較器跟A比較,通過調Speed來調節佔空比
if(Speed < A)
{
PWM = 1; //當Speed小於A時,PWM引腳輸出高電平
}
else
{
PWM = 0; //否則就輸出0
}
if(Speed>999)
{
Speed =999;
}
}
所以我們只要調節Speed 的值就可以調節佔空比了
Speed的值應該比A小
總結
main函式裡面也比較簡單
void main()
{
Time0Init();
while(1);
}
原理方面就介紹到這了
下篇寫個藍芽調速車的程式碼