|
STC12C5A60S2單片機(jī)控制直流電機(jī),可以進(jìn)行正轉(zhuǎn)、反轉(zhuǎn)和相應(yīng)的加減速,親測(cè)有效。
程序源碼如下:
#include "STC12C5A60S2.h"
#define uint unsigned int
#define uchar unsigned char
sbit forward_up=P3^5; //正轉(zhuǎn)加速
sbit forward_down=P3^4; //正轉(zhuǎn)減速
sbit reversal_up=P3^3;//反轉(zhuǎn)加速
sbit reversal_down=P3^2;//反轉(zhuǎn)減速
sbit In1=P0^0;
sbit In2=P0^1;
sbit In3=P0^2;
sbit In4=P0^3;
void DelayMs(uchar ms);
void init_PWM(); //PWM 初始化
void PWM0_change(uchar type,uchar change);//PWM調(diào)整函數(shù)
void PWM0_set(uchar empty);//直接賦PWM的值
void turnback();//反轉(zhuǎn)
void run();//正轉(zhuǎn)
void stop();//停止
//stc10f系列 單周期指令的ms級(jí)延時(shí)
void DelayMs(uchar ms) //這個(gè)延時(shí)可能不對(duì),非關(guān)鍵部分,可自己修改
{
uint i; while(ms--)
{
for(i = 0; i < 850; i++);
}
}
void init_PWM()
{
CCON=0X00;
CH=0;
CL=0;
//時(shí)鐘分頻也就是輸出的頻率。 0X00:以系統(tǒng)時(shí)鐘/12 為時(shí)鐘源,0X02:系統(tǒng)時(shí)鐘/2,0x08:系統(tǒng)時(shí)鐘
CMOD=0X02;
//起始占空比,0XC0:占空比為25%,0X80:占空比為50%,0X40:占空比為75%
PWM0_set(0XC0); // (與CL比較,當(dāng)CL<CCAP0L時(shí)輸出低電平,反之高電平)
PCA_PWM1=0x00;
PCA_PWM0=0x00; //控制占空比的第九位為0
//0X42:8位PWM P1.3輸出, P1.4輸出,無(wú)中斷;0X53:8位PWM輸出,下降沿產(chǎn)生中斷;
//0X63:上升沿產(chǎn)生中斷;0X73:跳變沿產(chǎn)生中斷
CCAPM0=0X42;
CCAPM1=0X42;
CR=1; //計(jì)時(shí)器開(kāi)始工作
}
void PWM0_set(uchar empty) //直接設(shè)置占空比
{
CCAP0L=empty;
CCAP0H=empty;
CCAP1L=empty;
CCAP1H=empty;
}
//占空比調(diào)節(jié)函數(shù)
void PWM0_change(uchar type,uchar change) //type=0減占空比,1增加占空比
//change: 0X0C 約5%,0X05約2%
{
if(type==0)
{
if(CCAP0L<0XE6) //<90%
{
CCAP0L+=change;
CCAP0H+=change;
CCAP1L+=change;
CCAP1H+=change;
}
}
else
{
if(CCAP0L>0X19) //>10%
{
CCAP0L-=change;
CCAP0H-=change;
CCAP1L-=change;
CCAP1H-=change;
}
}
}
void main()
{
init_PWM(); //初始化,PWM輸出
while(1)
{
if(forward_up==0) //按鍵加PWM占空比
{
DelayMs(500); //按鍵消抖
while(forward_up==0); //按鍵釋放才跳出執(zhí)行下一步
PWM0_change(1,0X0c); //change: 0X0C 約5%,0X05約2%
run();
}
if(forward_down==0)//按鍵減PWM占空比
{
DelayMs(500);
while(forward_down==0);
PWM0_change(0,0X0c); //change: 0X0C 約5%,0X05約2%
run();
}
if(reversal_up==0) //按鍵加PWM占空比
{
DelayMs(500); //按鍵消抖
while(reversal_up==0); //按鍵釋放才跳出執(zhí)行下一步
PWM0_change(1,0X0c); //change: 0X0C 約5%,0X05約2%
turnback();
}
if(reversal_down==0)//按鍵減PWM占空比
{
DelayMs(500);
while(reversal_down==0);
PWM0_change(0,0X0c); //change: 0X0C 約5%,0X05約2%
turnback();
}
}
}
void turnback()
{
In1=0;In2=1;In3=0;In4=1;
}
void run()
{
In1=1;In2=0;In3=1;In4=0;
}
void stop()
{
In1=1;In2=1;In3=1;In4=1;
}
全部程序51hei下載地址:
PWM直流電機(jī)調(diào)速.rar
(28.62 KB, 下載次數(shù): 63)
2020-11-24 09:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|