❶ 单片机pwm控制电机转速
单片机控制电机转速:
如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个H桥,并且两个I/O口输出高低电频控制。
比如用P1口的P1.0,P1.1,P1.2三个I/O口接按键,P3.4口接电频输出,编个定时程序及按键程序,如果是快(全速运行),那就P3.4口直接输出高电频“1”;中(50%),那就让P3.4口0—50ms输出高电频“1”,50ms—100ms输出低电频“0”,后面就一直以50ms进行一次取反;慢(就用10%吧),0—40ns输出高电频“1”,41ns—400ns输出低电频“0”,这样为一个周期,后面就一直循环吧。
如果按键P1.0按下,执行方式1,全速运行,否则以默认方式运行;按键P1.1按下,执行方式2,改变占空比,以50%的速度运行,否则,不作改变;按键P1.2按下,执行方式3,改变占空比,以10%的速度运行,否则,不作改变。
❷ 51单片机实现pwm对电机调速
可以用一个定时器实现,也可以用两个定时器实现
一个定时器实现办法,如定时器定时50US中断一次,中断100次是5ms,即PWM的周期
每次中断,变量a加1,并且a与另一变量b比较,如果a<b,让某一管脚输出高电平,如果a>=b,则让其输出低电平,a等于100时清0,这样占空比是b/100,改变b的值,就可以改变占空比 缺点定时器定时时间不能太短,例如10us中断程序根本执行不完,若占空比调节精度要求较高,如要求百分之一,则a需大于100,这样PWM波的周期就比较大,频率比较低
两个定时器,如一个定时器0定时100us,另外一个定时器1定时小于100us,如b us
定时器0中断时输出高电平,并打开定时器1,定时器1负责置低电平
这样,就可以产生周期100us,占空比是b/100的方波
频率可以比用一个定时器高一些
❸ 基于单片机的直流电机PWM调速控制(要单片机的代码)快啊
; PWM 控制 LED 灯渐亮渐灭程序 *
; 利用定时器控制产生占空比可变的 PWM 波 *
; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。 *
; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。 *
;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 *
;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)p3.7小喇叭报警 *
;----
PWM EQU 7FH ;PWM赋初始值
OUT EQU P0 ;8个LED灯的接口
INCKEY EQU P1.4 ;K1,PWM值增加键。
DECKEY EQU P1.5 ;K2,PWM值减小键。
BEEP EQU P3.7
;----
ORG 0000H
SJMP START
ORG 000BH
SJMP INTT0
ORG 001BH
SJMP INTT1
ORG 0030H
;----
;主程序
;定时器0工作在模式1,定时器1工作在模式2。
;----
START:
MOV SP,#30H
MOV TMOD,#21H
MOV TH1,PWM ;脉宽调节
MOV TL1,#00H
MOV TH0,#0FCH ;1ms延时常数
MOV TL0,#066H ;频率调节
SETB EA
SETB ET0
SETB ET1
SETB TR0
LOOP: MOV A,PWM ;
JB INCKEY,LOOP1 ;增加键是否按下?
CALL DELAY ;延时去抖动
JB INCKEY,LOOP1
CJNE A,#0FFH,PWMINC ;是否到最大值?
CALL BEEP_BL ;是,蜂鸣器报警。
SJMP LOOP
PWMINC:
INC PWM ;调节脉宽(脉宽减小)
SJMP LOOP
LOOP1: JB DECKEY,LOOP2 ;减小键是否按下?
CALL DELAY ;延时去抖动
JB DECKEY,LOOP2
CJNE A,#02H,PWMDEC ;是否到最小值?
CALL BEEP_BL ;是,蜂鸣器报警。
SJMP LOOP
PWMDEC:
DEC PWM ;调节脉宽(脉宽增加)
LOOP2: SJMP LOOP
;----
;T0中断服务子程序 (频率)
;控制定时器1中断
;----
INTT0:
CLR TR1
MOV TH0,#0FCH ;1ms延时常数
MOV TL0,#066H ;频率调节
MOV TH1,PWM
SETB TR1
MOV OUT,#00H ;启动输出
RETI
;----
;T1中断服务子程序 (脉宽)
;控制PWM脉冲宽度
;----
INTT1:
CLR TR1 ;脉宽调节结束
MOV OUT,#0FFH ;结束输出
RETI
;----
;10ms延时子程序
;----
DELAY:
MOV R6,#50
DELAY1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY1
RET
;----
;蜂鸣器响一声子程序
;---
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL BEEP
DJNZ R6,BL1
MOV R5,#25
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延时R5×10MS
MOV R6,#50
BL4: MOV R7,#100
BL5: DJNZ R7,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
;---
END
❹ 51单片机pwm直流电机怎么实现调速和正反转
如果要正反转控制,驱动电路做个全桥的,控制占空比。50%的话就停止了!
❺ 基于单片机的pwm小功率直流电机调速
直流调速器就是调节直流电动机速度的设备,上端和交流电源连接,下端和直流电动机连接,直流调速器将交流电转化成两路输出直流电源,一路输入给直流电机砺磁(定子),一路输入给直流电机电枢(转子),直流调速器通过控制电枢直流电压来调节直流电动机转速。同时直流电动机给调速器一个反馈电流,调速器根据反馈电流来判断直流电机的转速情况,必要时修正电枢电压输出,以此来再次调节电机的转速。
直流电机的调速方案一般有下列3种方式:
1、改变电枢电压;
2、改变激磁绕组电压;
3、改变电枢回路电阻。
使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。根据公式
U=aVCC
其中:U为电枢电压;a为脉冲的占空比(0<a<1);VCC直流电压源,这里为5V。
电动机的电枢电压受单片机输出脉冲控制,实现了利用脉冲宽度调制技术(PWM)进行直流电机的变速。
因为在H桥电路中,只有PWM1与PWM2电平互为相反时电机才能驱动,也就是PWM1与PWM2同为高电平或同为低电平时,都不能工作,所以上图中的实际脉冲宽度为B,
我们把PWM波的周期定为1ms,占空比分100级可调(每级级差为10%),这样定时器T0每0.01ms产生一次定时中断,每100次后进入下一个PWM波的周期。上图中,占空比是60%,即输出脉冲的为0.6ms,断开脉冲为0.4ms,这样电枢电压为5*60%=3V。
我们讨论的是可以正转反转的,如果只按一个方向转,我们就只要把PWM1置为高电平或低电平,只改变另一个PWM2电平的脉冲变化即可,,如下图(Q4导通,Q3闭合,电机只能顺时针调整转动速度)
C语言代码:
#include<AT89X52.h>
#define uchar unsigned char
#define uint unsigned int
sbit K5=P1^4;
sbit K6=P1^5;
sbit PWM1=P1^0;
sbit PWM2=P1^1;
sbit FMQ=P3^6;
uchar ZKB1,ZKB2;
void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++) //1ms基准延时程序
{
;
}
}
}
void delay500us(void)
{
int j;
for(j=0;j<57;j++)
{
;
}
}
void beep(void)
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
FMQ=!FMQ; //产生脉冲
}
FMQ=1; //关闭蜂鸣器
delaynms(300);
}
void main(void)
{
TR0=0; //关闭定时器0
TMOD=0x01; //定时器0,工作方式1
TH0=(65526-100)/256;
TL0=(65526-100)%256; //100us即0.01ms中断一次
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器T0
ZKB1=50; //占空比初值设定
ZKB2=50; //占空比初值设定
while(1)
{
if(!K5)
{
delaynms(15); //消抖
if(!K5) //确定按键按下
{
beep();
ZKB1++; //增加ZKB1
ZKB2=100-ZKB1; //相应的ZKB2就减少
}
}
if(!K6)
{
delaynms(15); //消抖
if(!K6) //确定按键按下
{
beep();
ZKB1--; //减少ZKB1
ZKB2=100-ZKB1; //相应的ZKB2增加
}
}
if(ZKB1>99)
ZKB1=1;
if(ZKB1<1)
ZKB1=99;
}
}
void time0(void) interrupt 1
{
static uchar N=0;
TH0=(65526-100)/256;
TL0=(65526-100)%256;
N++;
if(N>100)
N=0;
if(N<=ZKB1)
PWM1=0;
else
PWM1=1;
if(N<=ZKB2)
PWM2=0;
else
PWM2=1;
}
//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1,
//电机反方向旋转以最高速度
❻ 51单片机实现直流电机PWM调速,为什么要用定时器
直流电机的PWM调速,就是改变在一个周期里的通电时间,通电时间和断电时间就是一个周期,这都是用时间来决定的,所以必须要用定时器。
51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash
rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列。
❼ 51单片机实现直流电机PWM调速,为什么要用定时器
直流电机的PWM调速,就是改变在一个周期里的通电时间,和断电时间的比,即占空比,而通电时间+断电时间=一个周期,这都是用时间来决定的,当然要用定时器。