導航:首頁 > 操作系統 > 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調速程序相關的資料

熱點內容
phpget轉義 瀏覽:322
我的世界寶可夢伺服器叫什麼名字 瀏覽:748
新聞編譯難嗎 瀏覽:582
ia架構伺服器是什麼意思 瀏覽:220
linux查看區域網 瀏覽:77
金蝶啟動命令 瀏覽:480
安卓如何執行shell命令 瀏覽:947
linux路由控制 瀏覽:434
碧藍航線壓縮包解壓密碼 瀏覽:439
抗性提升命令方塊指令 瀏覽:769
程序員那麼可愛第30集免費看 瀏覽:637
如何下載老友麻將app 瀏覽:445
java路徑參數 瀏覽:592
php命名空間使用 瀏覽:298
app的競爭力如何寫 瀏覽:587
linux刪除swp 瀏覽:590
pdfxchange40 瀏覽:77
車牌號碼是哪個app 瀏覽:50
文件夾如何添加圓點 瀏覽:731
如何建立主索引命令 瀏覽:602