51单片机控制电机转速

以前简单的51的确无法由内部硬件产生PWM. 而且驱动电机需要驱动电路 一般单片机都是 5V/3.3V供电. 电机工作电流很大,单片机区区几十mA的驱动电流而已. 现在很多51内核的单片机已经内置PWM模块. 直流电机是通过电流大小来控制转速. 之所以说PWM可以控制直流电机其实也是因为PWM可以模拟电流罢了 PWM在高电平时让电机转.低电平是点击不转 ,当PWM频率高时,电机其实是一转一停. 不同的占空比(高电平长宽)就会让电机按照不同的转速工作了.

51单片机按键调速直流电机(51单片机控制直流电机调速程序)51单片机按键调速直流电机(51单片机控制直流电机调速程序)


51单片机按键调速直流电机(51单片机控制直流电机调速程序)


51单片机按键调速直流电机(51单片机控制直流电机调速程序)


51单片机按键调速直流电机(51单片机控制直流电机调速程序)


没有PWM模块也不要紧. 可以用一个定时器模拟PWM的. 在每次的时钟中断内改变下次的始终定时时间可以可以了. 不过震荡频率一定要选比较大的. 这样控制起来就游刃有余了

对于普通的电机只要调节通过它的电流就可以调节转速了;对于步进电机,可以通过程序的控制来控制它的转速。

PWM实际上就是脉宽调制波,通过调节它的占空比实际上就是在调节电压的有效值,从而实现调节电机两端的电压,由此即可改变电机的转速。

怎样用c51编写单片机控制直流电机?

我有一程序,用STC5410单片机,可20档调光并用液晶屏显示级数,当然也可以控制直流电机用发光二极管试验过可正常工作液晶屏显示程序完全可以去掉

STC单片机单/双键控制LED亮度PWM调光程序 原创WanNengGong 2010/09/20

参考程序: 杜洋工作室PWM功能程序模块

输出口为P3.7(PWM0)

/

#include

#define uchar unsigned char

#define uint unsigned int

uchar vx=10;//vx=10 在上电时为半亮度状态,可根据自己的用途及要求任意设定 vx=20为最亮

it rw=P1^4;

it rs=P1^3;

it lcden=P1^5;

it s2=P3^2;

it s3=P3^3;

it led=P3^7;//可以不要

#define db P2

void Delay1ms(uint i) //1ms延时程序

{uint j;

for(;i>0;i--)

{for(j=0;j<125;j++)

{;}

}}

void write_com(uchar com) //向LCD1602写命令

{db=com;

rs=0;

rw = 0;

lcden=0;

Delay1ms(10);

lcden=1;

Delay1ms(10);

lcden=0;

}void write_date(uchar date)//向LCD1602写数据

{db=date;

rs=1;

rw = 0;

lcden=0;

Delay1ms(10);

lcden=1;

Delay1ms(10);

lcden=0;

}void init2()//液晶屏初始化

{rw=0;

write_com(0x38);

Delay1ms(10);

write_com(0x0f);

Delay1ms(10);

write_com(0x06);

Delay1ms(10);

write_com(0x01);

Delay1ms(10);

}void display_brightness (uchar temp1) //显示程序 显示当前调光工作级数

{uchar A1,A2;

init2();

A1=temp1/10;

A2=temp1%10;

write_com(0x80);

Delay1ms(10);

write_date(0x30+A1);

write_com(0x81);

Delay1ms(10);

write_date(0x30+A2);

}//

void PWM_init (void){//PWM初始化函数

CMOD=0x02; //设置PCA定时器

CL=0x00;

CH=0x00;

CCAPM0=0x42; //PWM1设置PCA工作方式为PWM方式(0100 0010)

CCAP0L=0x00; //设置PWM1初始值与CCAP0H相同

CCAP0H=0x00; // PWM1初始时为0

CR=1; //启动PCA定时器

}//

void PWM1_set (uchar a){//PWM1占空比设置函数

CCAP0L=a; //设置值直接写入CCAP1L

CCAP0H=a; //设置值直接写入CCAP1H

}//

void DelayM(unsigned int a){//延时函数 1mS/次(用于1T单片机)

unsigned char n,i,j;

while(--a!=0){

for(n=1;n>0;n--)

for(j=222;j>0;j--)

for(i=12;i>0;i--);

} }

//

void main(void)

{s2= 1;

s3 = 1;

PWM_init ();

display_brightness (vx);

while(1)

{PWM1_set(vx12);//数字12是配合vx调试取得的,此时vx的赋值范围约为1-20对应最暗-最亮

if (s2 == 0 )//--------减调整---------//

{DelayM(20); //延时20毫秒消抖动

if(s2 == 0) //如果20MS后 s2还是0状态则确认下调键是按下的

{vx--;

if(vx<1) //如果设定vx=20,将语句改为if(vx<1){vx=10;}则为单按键循环控制,则可去除加调整控制部分

{vx=10;

}}

display_brightness (vx);

while(s2 == 0);//等待键松开

}if (s3== 0 )//--------加调整---------//

{DelayM(20);

if(s3 == 0)

{vx++;

if(vx>20)

{vx=10;

}}

display_brightness (vx);

while(s3 == 0);

}}

}

51单片机控制直流电机。(c语言控制)

有3种方案:

种,通过PWM脉宽调制输出方法控制转速,控制占空比的大小可以实现调速!

第二种,通过AD转换的方法控制直流电机的电压

第三种,用xtr115程控电流源来控制直流电机(类似第二种方法)

如果以上的驱动能力不够的话再加上一个电压跟随器!

程序方面就是一个寄存器的配置问题了,你查一下单片机的技术手册上面都有介绍的,祝你成功

1、51单片机对直流电机的转动,是通过高低电平来控制的

直流电机有两根线,分别简称为正和负

种情况,当正接电源负接地的时候,电机正转

第二种情况,当正接地负接电源的时候,电机反转

第三种情况,当正和负都接电源或者都接地的时候,电机停止

2、综上,51单片机通过IO口连接电机的正和负

然后给高低电平,就可以控制直流电机正转和反转了。

直流电机不方便做的那么准,如果用步进的话,就方便很多了·!

这个项目是比较有难度的,仅仅从控制转速的角度上来说,你如何实现?得用PID吧?仅仅PID就有难度了!

基于51单片机直流电机调速测速仿真原理

基于51单片机直流电机调速测速仿真原理是以STC90C52RC单片机为主控芯片,利用PWM的原理,通过按键对直流电机进行调速,实现正反转;采用霍尔传感器对直流电机的转动进行计数,并通过主控芯片将采集到的计数值转化为直流电机的当前速度值;利用LCD1602显示模块将计算得到的值进行实时显示。

怎么用51单片机控制直流减速电机缓慢启动,缓慢停止?

这个还是比较容易实现的,定义个曲线表就可以了,比如按梯形曲线或S型曲线,定义一个升速和降速表,点击的控制分三个阶段:

1、启动

2、运行

3、刹车

所以需要修改run()这个程序,按这三部曲来做。