单片机pwm控制电机转速

利用89C51或89C52 控制直流电机运转,电机驱动芯片是L298N,还有3个按钮,本别对应电机加速、减速和反转。利用红外对管测速,并在液晶显示器上显示设定转速和实测转速,显示器用的是SO12864,我研究了10多天了,做出来在仿真的时候一点作用都没有,不知道是哪里出错了。希望网友有资料的可以邮件给我。帮帮忙啊。如果你会的话也可以帮忙做一下,谢了。高悬赏

  单片机控制电机转速:
  如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个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%的速度运行,否则,不作改变。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-07-06
  单片机控制电机转速:
  如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个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%的速度运行,否则,不作改变。本回答被网友采纳
第2个回答  推荐于2018-02-10
一. 带注释软件清单
;==========使用单元设定==========
//..................................使用单元设定
DIS0 EQU 30H
DIS1 EQU 31H
DIS2 EQU 32H
DIS3 EQU 33H
LED EQU 34H
TM1 EQU 35H;
TM2 EQU 36H;
INTV BIT 37H;中断标志
THX EQU 38H;定时脉宽高电平
CISHU EQU 39H
FIRST BIT 41H; 检测加减是否第一次按下
SET1 BIT 42H
SETZ0 EQU 43H;设定当前设定值SETZ0~SETZ3
SETZ1 EQU 44H
SETZ2 EQU 45H
SETZ3 EQU 46H
TM3 EQU 47H; 循环次数单元
JIA1 BIT 48H; 单步加标志
LIANJIA BIT 49H; 连加标志
JIAN1 BIT 50H; 单步减标志
LIANJIAN BIT 51H; 连减标志
SETDATA EQU 52H; 设定速度暂存单元
REALDATA EQU 53H; 实测速度暂存单元
YK1 EQU 54H; 上次输出数据暂存单元
KP EQU 56H;比例系数
KI EQU 57H;积分系数
EK EQU 58H;设定值和实测值的差值
EK1 EQU 59H;上次的EK值
OUTPUT EQU 60H;
EK2 EQU 61H;EK-EK1的值
ONPRESS BIT 62H;判定ENTER键是否弹起标志
TMS EQU 63H;闪烁时长
SHAN BIT 64H; 闪烁标志
;==========主程序==========
ORG 0000H
SJMP MAIN
ORG 0013H;外部中断1入口地址
AJMP INX1
ORG 001BH;定时器T1中断入口地址
AJMP ITX1
ORG 0070H
MAIN: MOV SP,#70H;设定堆栈指针入口地址
ACALL INIT;调用初始化程序
M1: JB SET1,FLASH;当前为设置状态则跳到闪烁显示模块
ACALL DISP; 否则为一般显示
SJMP NEXTT
FLASH: ACALL DISP1
NEXTT: ACALL DELAY;调用按键延时程序
ACALL M2;调用按键程序
DJNZ CISHU,M1;第隔100MS刷新一下实测值
MOV CISHU,#20
ACALL CONTROL;调用控制调速模块
SJMP M1
//==========初始化模块==========
INIT:MOV DPTR,#0FD00H ;设置PA、PB为输出口,PC为输入口
MOV A,#03H
MOVX @DPTR,A
MOV TMOD,#21H ;定时器/计数器T1为方式2,定时器/计数器T0为方式1
MOV TL0,#00H ; 定时器/计数器T0赋初值#00H
MOV TH0,#00H
MOV THX,#0BBH ;输出单元赋初值#0BBH,即脉冲高电平宽度
MOV TH1,THX
MOV TL1,THX
SETB TR1 ;启动定时器/计数器T1
SETB TR0 ; 启动定时器/计数器T0
SETB ET1 ;允许定时器/计数器T1溢出中断
SETB EX1 ;允许外部中断1中断
SETB IT1 ;选择边沿触发
SETB EA ;CPU开中断
SETB 07H;
SETB SHAN
CLR 11H;检测是否成功
MOV LED,#7FH本回答被网友采纳
第3个回答  2023-12-16

首先,确保您已经正确地连接了所有硬件,包括单片机、电机驱动芯片L298N、按钮、红外对管和液晶显示器SO12864。确保所有的电源都已正确连接,并且所有的引脚都已正确配置。

接下来,您需要检查您的代码。由于您没有提供代码,我无法直接评估您的代码是否正确。但是,我可以给您一些建议来帮助您检查代码:

    确保您已经正确配置了单片机的PWM输出。您需要设置单片机的定时器来产生PWM信号,并且确保PWM信号的占空比可以控制电机的转速。

    检查您的电机驱动芯片L298N的配置。确保您已经正确地连接了电机的正负极,并且已经正确地配置了L298N的引脚来控制电机的速度和方向。

    检查您的红外对管测速模块的配置。确保您已经正确地连接了红外对管的电源和信号线,并且已经正确地配置了红外对管的引脚来读取速度信号。

    检查您的液晶显示器SO12864的配置。确保您已经正确地连接了液晶显示器的电源和信号线,并且已经正确地配置了液晶显示器的引脚来读取显示数据。

    在仿真时,您可以使用仿真器来检查您的代码是否正常工作。如果您无法确定问题出在哪里,可以尝试将代码分成较小的部分,并逐一测试每个部分的功能。

如果您仍然无法解决问题,您可以提供您的代码和硬件连接方式,我将尽力帮助您找出问题所在。

另外,如果您需要更多的资料或帮助,您可以参考一些单片机和电机控制的教程或资料,例如《8051单片机C语言教程》或《Arduino编程指南》等。这些教程或资料可以帮助您更好地理解单片机和电机控制的基本概念和技术。

详情
    官方电话在线客服官方服务
      官方网站电机设备
第4个回答  2016-02-25
  如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个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波控制直流电机进行调速是一定需要电机驱动吗?如果没...
是的,通过PWM波控制直流电机进行调速时,不一定需要专门的电机驱动。在一些简单的应用中,可以直接使用微控制器(如51单片机)来生成PWM信号,并通过适当的接口电路驱动直流电机。然而,这种方法可能存在一些限制,例如电流大小和驱动能力。如果没有电机驱动,单纯向电机使能引脚输入PWM波,也可以控制电机的速...

单片机控制pwm直流电机,用l298n驱动,l298n是怎样改变电机转速的。
l298n并没有改变电机的转速,它只是起到放大电压的作用(单单的单片机电压过小无法驱动电机,所以需要l298n将电压稳到12v,否则电机不会转,或是转的慢),只要依照相应的端口接上就可以使用了。

单片机pwm控制电机转速
单片机控制电机转速:如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个H桥,并且两个I\/O口输出高低电频控制。比如用P1口的P1.0,P1.1,P1.2三个I\/O口接按键,P3.4口接电频输出,编个定时程序及按键程序,如果是快(全速运行),那就P3.4口直接输出高电频“1”;中...

stm32控制pwm直流电机,实现电机速度调节的方法
在完成PWM控制程序后,需要将控制信号输出到电机上。在此之前,需要对电机进行速度调节。电机的速度调节是通过改变PWM的占空比来实现的。具体而言,占空比越大,电机转速越快,占空比越小,电机转速越慢。5. 调试与测试 在完成程序编写之后,需要进行调试与测试。可以通过示波器或者万用表等工具对电机进行测...

请问在控制电机速度时,怎样通过单片机用PWM方法控制速度呢?
可以用定时器中断的方法获得PWM信号,如定时器定时100US,先让某管脚输出高电平,用一变量A作计数器,中断一次变量加一,中断10次A清0,另设一变量B,数值取1-10,中断程序中比较A和B的值,如果A和 B相等,则将该引脚输出低电平,直到计数器A清0时再输出高电平,就输出了一定占空比的方波 改变B的...

基于单片机的直流电机PWM调速控制(要单片机的代码)快啊
; PWM 控制 LED 灯渐亮渐灭程序 ; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 ;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)...

如何通过PWM波实现控制电机转速
通俗的说,5V直流电机在5V的情况下肯定速度最快,在0V的情况下肯定不转了 这样电源0~5V就对应了不同的速度 问题是怎么才能实现0~5V的变化呢?于是就用PWM波控制mos管来给直流电机供电。PWM就是一个矩形波,通过控制高电平和低电平的时间来控制MOS管导通的时间。MOS管在高电平的时候导通,就相当于...

单片机如何控制电机转速
利用单片机的定时器TIMER_A(TA)中断产生脉冲信号,通过在响应的中断程序中实现步进电机步数和圈数的准确计数,通过PWM实现转速控制。可以利用P10端口的中断关闭TA中断程序,并推入堆栈,停止电机;P11中断则开启TA中断,堆栈推入程序计器(PC),开启电机。P31端口输出高电平由PMM8713的U/D端口控制电机的转向...

怎么用单片机控制马达
1、通过设置PWM波的占空比来控制直流电机的转速,占空比越大,转速越快,越小转速越低.2、当然单片机的I\/O口是不能直接驱动电机的,所以你还需要用一个马达驱动芯片.像LG9110、CMO825等.马达驱动IC可以将单片机I\/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来.3、你要是不清除PWM是怎么回事...

单片机中直流电机控制速度解释一下这个原理图,
out 电压成正比,改变模拟输入,就可改变脉冲宽度。这就是PWM信号。pwm的脉冲信号经过p521光电耦合器隔离后,驱动场效应管,再驱动电机。电机接受的是脉冲电压,由于电机的电感等有滤波作用,电机的有效电压是脉冲电压的平均值,改变脉冲宽度就改变了电机的电压平均值,从而调整电机的转速。

相似回答