購買設(shè)計請充值后下載,,資源目錄下的文件所見即所得,都可以點開預(yù)覽,,資料完整,充值下載可得到資源目錄里的所有文件。。?!咀ⅰ浚篸wg后綴為CAD圖紙,doc,docx為WORD文檔,原稿無水印,可編輯。。。具體請見文件預(yù)覽,有不明白之處,可咨詢QQ:12401814
#include
#include
#define uchar unsigned char
#define uint unsigned int
//ads7825 P2為輸出數(shù)據(jù)
sbit CS=P1^0;
sbit RC=P1^1;
sbit BUSY=P1^2;
sbit BYTE=P1^3;
//電機(jī)
PWM=P1^4; //PWM輸出
En_m=P1^5; //電機(jī)的另一端
//定時器/PWM 先高電平再低電平
uchar T_Count=0; //當(dāng)前計數(shù)值
uchar T_Number=0; //電平轉(zhuǎn)換點
uchar T_Sum=100; //電平最長時間
//正轉(zhuǎn)反轉(zhuǎn)按鍵
sbit ZF=P1^6; //低電平反轉(zhuǎn),高電平正轉(zhuǎn)
//扭矩臨界值
uint NJ=0x8000;
void PWM_time() interrupt 1
{
TH0=0xff; //約129us定時
TL0=0x80;
T_Count++;
if(T_Count==T_Sum) //達(dá)到一個周期
T_Count=0;
else if(T_Count<=T_Number) //當(dāng)計數(shù)小于電平轉(zhuǎn)換點,設(shè)置高電平
PWM=1;
else //計數(shù)大于電平轉(zhuǎn)換點,設(shè)置低電平
PWM=0;
}
Init_time()
{
TMOD=0x80; //定時器0 工作方式0
TH0=0xff; //約258us定時
TL0=0x80;
IE=0x82; //允許T0中斷
TR0=1;
}
Init_ads7825()
{
CS=0; //啟動ads7825
}
uint Read_ads7825()
{
uint num=0;
RC=1; //一個超過25us的低脈沖
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
RC=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
while(!BUSY); //忙等待
RC=1; //脈沖完畢
BYTE=1;
num=P2; //采集高8位
num<<=8;
BYTE=0
num=num|P2; //采集低8位
return num;
}
Contorl_M(uchar i,uchar j,) //控制電機(jī) 占空比 正反轉(zhuǎn)
{
En_m=j; //電機(jī)一端設(shè)置為低電平正轉(zhuǎn) 高電平反轉(zhuǎn)
T_Number=i; //PWM占空比i% 或者1-i%
T_Count=0; //PWM計數(shù)歸0
}
main()
{
Init_time();
Init_ads7825();
while(1)
{
while(ZF==1) //正轉(zhuǎn) 擰螺絲
{
Contorl_M(60,0); //占空比60
if(Read_ads7825()>NJ) //當(dāng)?shù)竭_(dá)扭矩力,關(guān)閉電機(jī)
Contol_M(0;0);
}
while(ZF==0) //反轉(zhuǎn) 松螺絲
Control_M(30,1); //占空比70
}
}