導航:首頁 > 操作系統 > 51單片機pwm調速程序

51單片機pwm調速程序

發布時間:2023-07-17 09:37:33

❶ 用51單片機用PWM調速C語言程序怎麼寫·····

含糊其辭,不明不白。
其實,出題人也不想,要答案。

❷ 如何用51單片機給電機調速

就是利用單片機的PWM就可以了(脈沖調制)
PWM信號到馬達驅動晶元即可,小電機就一個三極體都可以。

❸ 51單片機怎麼產生pwm程序

正則表達式替換 import java.util.regex.Matcher; import java.util.regex.Pattern; public class $ { public static void main(String... _) { String sa = "<ABCDEFGHIJK>SDFER<EGD>FG"; Pattern p = Pattern.compile("<([A-Z]|[a-z]){0,}>"); Matcher match = p.matcher(sa); while (match.find()) { String str = match.group(); sa = sa.replaceFirst(str, str.toLowerCase()); } System.out.println(sa); } }

❹ 51單片機產生頻率為1KHZ,占空比可調的PWM匯編程序,初學者,求完整程序

#include<reg51.h>

sbitP_OUT=P3^7;
sbitUP=P1^0;
sbitDN=P1^1;

unsignedcharp=5,n;

voidT0_INT()interrupt1
{
n++;
if(n>9)n=0;//0~9
if(n<=p)P_OUT=1;
elseP_OUT=0;
}
main()
{
TMOD=0x02;
TH0=156;
TR0=1;
IE=0x82;

while(1){
if(P<9&&!UP){while(!UP);p++;}
if(p>0&&!DN){while(!DN);p--;}
}
}

編譯一下,匯編程序,就出來了。

❺ 51單片機直流電機調速

第一:你這個不是電機調速的,用外部中斷是測速的呀。
下面是我寫的.PID部分的代碼就不給了,想加的話,自己找可以了
#include <AT89X52.H>
#include "common.h"

#define _WHEEL_C_

#define Left_moto_pwm P1_5
#define Right_moto_pwm P1_4

#define Left_moto_go {IN1=0,IN2=1;}
#define Left_moto_back {IN1=1,IN2=0;}

#define Right_moto_go {IN3=1,IN4=0;}
#define Right_moto_back {IN3=0,IN4=1;}

sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;

unsigned char pwm_val_left=0;
unsigned char push_val_left=0;

unsigned char pwm_val_right=0;
unsigned char push_val_right=0;

float L_Count=0,R_Count=0;
unsigned int TimerNum=0,SYS_TimeNum=0;
float Save_L_Distance=0,Save_R_Distance=0,Left_Speed=0,Right_Speed=0;
unsigned char Left_point=0,Right_point=0;

unsigned char sys_1ms=0,sys_1s=0,TurnFlag=0;

//初始化PWM調速函數
void Init_Wheel()
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x0A4;
EA = 1;
ET0 = 1;
TR0 = 1;
}

void Init_WheelSpeedInter()
{
IT0=1; //INT0下降沿中斷
EX0=1; //允許INT1中斷
IT1=1; //INT1下降沿中斷
EX1=1; //允許INT1中斷
EA=1;

}

//得到上一次0.5秒的行駛距離
float GetLeftWheelMileage()
{
return Save_L_Distance;
}

//得到上一次0.25秒的行駛距離
float GetRightWheelMileage()
{
return Save_R_Distance;
}

void Inter_Left(void) interrupt 0
{
L_Count++;
}

void Inter_Right(void) interrupt 2
{
R_Count++;
}

//小車向前函數
void Wheel_Run(char left_val,char right_val)
{
push_val_left=left_val;
push_val_right=right_val;
Left_moto_go ;
Right_moto_go ;
}

//小車後退函數
void Wheel_Back(char left_val,char right_val)
{
push_val_left=left_val;
push_val_right=right_val;
Left_moto_back;
Right_moto_back;
}

//小車停止函數
void Wheel_Stop(void)
{
Wheel_Run(0,0);
}

//左輪PWM調速函數
void pwm_out_left_moto(void)
{
if(pwm_val_left>200)
{
pwm_val_left=0;
}else
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;
}
else
{
Left_moto_pwm=0;
}

}
}

//右輪調速函數
void pwm_out_right_moto(void)
{
if(pwm_val_right>200)
{
pwm_val_right=0;
}else
{
if(pwm_val_right<=push_val_right)
{
Right_moto_pwm=1;
}

else
Right_moto_pwm=0;

}
}

//PWM調速中斷(TIMER0--工作方式1)
void Wheel_Interrupt(void) interrupt 1
{
TH0 = 0x0FF;
TL0 = 0x0A4;
TimerNum++;
if(TimerNum>=2500)
{
//左右輪速度cm/s
Left_Speed=4*L_Count;
Right_Speed=4*R_Count;

//左右輪0.25秒行駛距離
Save_L_Distance+=L_Count;
Save_R_Distance+=R_Count;

//數據發送到串口圖示
DataScope_Get_Channel_Data(L_Count, 1 ); //將數據 1.0 寫入通道 1
DataScope_Get_Channel_Data(R_Count, 2 ); //將數據 2.0 寫入通道 2
Send_Count = DataScope_Data_Generate(2); //生成10個通道的 格式化幀數據,返回幀數據長度
for( DateNum = 0 ; DateNum < Send_Count; DateNum++) //循環發送,直到發送完畢
{
SendByte(DataScope_OutPut_Buffer[DateNum]);
}

TimerNum=0;
L_Count=0;
R_Count=0;

}
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}

閱讀全文

與51單片機pwm調速程序相關的資料

熱點內容
墨鏡慧眼怎麼下載廠商的app 瀏覽:59
iphone加密專線 瀏覽:491
aes產生加密文件 瀏覽:411
編程實現藍牙通信 瀏覽:766
怎麼恢復掉簽的app 瀏覽:847
伺服器部署ip地址 瀏覽:321
涉密場所周邊安全防護距離演算法 瀏覽:672
安卓fpse模擬器怎麼設置加速 瀏覽:946
建行app怎麼生成電子簽章 瀏覽:508
獲取當前時間javadate 瀏覽:73
帶密碼的wifi如何加密 瀏覽:237
伺服器怎麼變成陣列 瀏覽:718
web前端黑客技術pdf 瀏覽:71
育兒百科全書pdf 瀏覽:600
任務欄啟動命令 瀏覽:912
編譯優化等級區別 瀏覽:757
unix網關命令 瀏覽:877
想自己做網站要學編程嗎 瀏覽:597
租個伺服器開個私服需要什麼 瀏覽:273
圖片換成pdf格式 瀏覽:665