单片机pwm控制电机转速
2015-11-23 · 知道合伙人教育行家
如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个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%的速度运行,否则,不作改变。
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%的速度运行,否则,不作改变。
推荐于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
2023-12-16 · 百度认证:深圳市合利士智能装备有限公司官方账号
首先,确保您已经正确地连接了所有硬件,包括单片机、电机驱动芯片L298N、按钮、红外对管和液晶显示器SO12864。确保所有的电源都已正确连接,并且所有的引脚都已正确配置。
接下来,您需要检查您的代码。由于您没有提供代码,我无法直接评估您的代码是否正确。但是,我可以给您一些建议来帮助您检查代码:
确保您已经正确配置了单片机的PWM输出。您需要设置单片机的定时器来产生PWM信号,并且确保PWM信号的占空比可以控制电机的转速。
检查您的电机驱动芯片L298N的配置。确保您已经正确地连接了电机的正负极,并且已经正确地配置了L298N的引脚来控制电机的速度和方向。
检查您的红外对管测速模块的配置。确保您已经正确地连接了红外对管的电源和信号线,并且已经正确地配置了红外对管的引脚来读取速度信号。
检查您的液晶显示器SO12864的配置。确保您已经正确地连接了液晶显示器的电源和信号线,并且已经正确地配置了液晶显示器的引脚来读取显示数据。
在仿真时,您可以使用仿真器来检查您的代码是否正常工作。如果您无法确定问题出在哪里,可以尝试将代码分成较小的部分,并逐一测试每个部分的功能。
如果您仍然无法解决问题,您可以提供您的代码和硬件连接方式,我将尽力帮助您找出问题所在。
另外,如果您需要更多的资料或帮助,您可以参考一些单片机和电机控制的教程或资料,例如《8051单片机C语言教程》或《Arduino编程指南》等。这些教程或资料可以帮助您更好地理解单片机和电机控制的基本概念和技术。
- 官方电话
- 在线客服
-
官方服务
- 官方网站
- 电机设备
比如用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%的速度运行,否则,不作改变。