导航:首页 > 操作系统 > 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调速程序相关的资料

热点内容
涉密场所周边安全防护距离算法 浏览:670
安卓fpse模拟器怎么设置加速 浏览:944
建行app怎么生成电子签章 浏览:508
获取当前时间javadate 浏览:71
带密码的wifi如何加密 浏览:235
服务器怎么变成阵列 浏览:716
web前端黑客技术pdf 浏览:69
育儿百科全书pdf 浏览:598
任务栏启动命令 浏览:912
编译优化等级区别 浏览:755
unix网关命令 浏览:875
想自己做网站要学编程吗 浏览:597
租个服务器开个私服需要什么 浏览:272
图片换成pdf格式 浏览:663
javamidi编程 浏览:833
android60demo 浏览:69
头条算法怎么复习 浏览:514
灯光控制通道可以编程设置吗 浏览:783
webpack命令行 浏览:807
卸载云服务器操作系统 浏览:31