找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 36717|回复: 22
打印 上一主题 下一主题
收起左侧

单片机直流电机PWM(调速)控制系统仿真+程序设计

  [复制链接]
跳转到指定楼层
楼主

目录

1 引言
2 系统论述
2.1 设计背景
2.2 设计思路
2.3 系统框架设计
3 PWM脉宽调制定理
3.1 PWM调速原理
3.2 PWM调速方法
3.3 PWM实现方法
4 系统硬件设计
4.1 系统基本组成
4.1.1 硬件模块组成
4.1.1 单片机整个控制模块
4.2 AT89S52单片机简介
4.2.1 AT89S52主要性能
4.2.2 AT89S52主要功能例举
4.2.3 AT89S52各引脚功能介绍
4.2.4 AT89S52的内部资源
4.3 L298电机驱动模块
4.3.1 L298电机驱动简介
4.3.2 L298内部原理图
4.3.3 L298引脚符号及功能
4.3.4 L298逻辑功能
4.4 LED数码管显示
4.4.1 LED简介
4.4.2 LED七段数码管的结构
4.4.3 常见数字和字符的字段码
4.4.4 LED数码管与单片机的连接
4.4.5 简单的程序流程
4.4.6 本系统中单片机与LED的连接
4.5 独立式键盘控制模块
4.5.1 键盘的功能及分类
4.5.2 独立式键盘
4.5.3 独立式键盘与单片机的连接
5 系统软件设计
结论
致谢
参考文献
附录
附录1
附录2


1 引言

早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。随着计算机控制技术的发展,微处理器已经广泛使用于直流传动系统,实现了全数字化控制。由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。所以,全数字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。所以,直流传动控制采用微处理器实现全数字化,使直流调速系统进入一个崭新的阶段。

微处理器诞生于上个世纪七十年代,随着集成电路大规模及超大规模集成电路制造工艺的迅速发展,微处理器的性价比越来越高。此外,由于电力电子技术的发展,制作工艺的提升,使得大功率电子器件的性能迅速提高。为微处理器普遍用于控制电机提供了可能,利用微处理器控制电机完成各种新颖的、高性能的控制策略,使电机的各种潜在能力得到充分的发挥,使电机的性能更符合工业生产使用要求,还促进了电机生产商研发出各种如步进电机、无刷直流电机、开关磁阻电动机等便于控制且实用的新型电机,使电机的发展出现了新的变化。

对于简单的微处理器控制电机,只需利用用微处理器控制继电器、电子开关元器件,使电路开通或关断就可实现对电机的控制。现在带微处理器的可编程控制器,已经在各种的机床设备和各种的生产流水线中普遍得到应用,通过对可编程控制器进行编程就可以实现对电机的规律化控制。对于复杂的微处理器控制电机,则要利用微处理器控制电机的电压、电流、转矩、转速、转角等,使电机按给定的指令准确工作。通过微处理器控制,可使电机的性能有很大的提高。目前相比直流电机和交流电机他们各有所长,如直流电机调速性能好,但带有机械换向器,有机械磨损及换向火花等问题;交流电机,不论是异步电机还是同步电机,结构都比直流电机简单,工作也比直流电机可靠,但在频率恒定的电网上运行时,它们的速度不能方便而经济地调节[2]。高性能的微处理器如DSP (DIGITAL SIGNAL PROCESSOR即数字信号处理器)的出现,为采用新的控制理论和控制策略提供了良好的物质基础,使电机传动的自动化程度大为提高。在先进的数控机床等数控位置伺服系统,已经采用了如DSP等的高速微处理器,其执行速度可达数百万兆以上每秒,且具有适合的矩阵运算。

2系统论述
2.1设计背景

近年来,随着科技的进步,电力电子技术得到了迅速的发展,直流电机得到了越来越广泛的应用。直流它具有优良的调速特性,调速平滑、方便,调速范围广;过载能力大,能承受频繁的冲击负载,可实现频繁的无级快速起动、制动和反转;需要能满足生产过程自动化系统各种不同的特殊运行要求,从而对直流电机的调速提出了较高的要求,改变电枢回路电阻调速,改变电枢电压调速等技术已远远不能满足要求,这时通过PWM方式控制直流电机调速的方法应运而生。


2.2 设计思路

直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够很方便的实现电机的智能控制。

主体电路:即直流电机PWM控制模块。这部分电路主要由AT89S52单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,能够很方便的实现电机的智能控制。其间是通过AT89S52单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:

设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速以及电机的正转、反转和急停控制。

设计控制部分:主要由AT89S52单片机的外部中断扩展电路组成。直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。

设计显示部分: LED数码显示部分,实现对PWM脉宽调制占空比的实时显示。


2.3 系统框架设计

直流电机PWM调速方案

方案说明:直流电机PWM调速系统以AT89S52单片机为控制核心,由命令输入模块、LED显示模块及电机驱动模块组成。采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转和急停控制;同时单片机不停的将PWM脉宽调制占空比送到LED数码管完成实时显示。


3PWM脉宽调制原理
3.1PWM调速原理

载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负速、温度控制、压力控制等等[7]。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。

如图1所示:

图1  PWM信号的占空比

设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax * D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。

由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。严格来说,平均速度Vd与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似的看成是线性关系。

3. 2  PWM调速方法

基于单片机类由软件来实现PWM:在PWM调速系统中占空比D是一个重要参数在电源电压不变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。改变占空比D的值有三种方法:

A、定宽调频法:保持不变,只改变t,这样使周期(或频率)也随之改变[。

B、调宽调频法:保持t不变,只改变,这样使周期(或频率)也随之改变[。

C、定频调宽法:保持周期T(或频率)不变,同时改变和t。

前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整,此种方式可简化硬件电路,操作性强等优点。

3.3 PWM实现方式

方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。

方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。故采用方案一。


     4系统硬件设计
4.1系统基本组成
4.1.1 硬件模块组成

(1)单片机控制模块

(2)L298电机驱动模块

(3)LED显示模块

(4)独立键盘控制模块3.3系统硬件各模块电路
4.1.2 单片机整个控制模块
单片机整个控制模块

    这里利用定时计数器让单片机P2口的P2.6、P2.7引脚输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电机。驱动芯片的输入电压是两引脚的电压差,在调速时一根引脚线为低电平,另一个引脚产生调速方波,这样两个引脚的电压差就可通过控制其中一个引脚来控制。当需要改变电机转动方向时,两个引脚的输出相反。

    定时计数器若干时间(1us)中断一次,就使P2.6或P2.7产生一个高电平或低电平。直流电机的速度分成100个等级,因此一个周期就有100个脉冲,周期为一百个脉冲的时间,速度等级对应一个周期的高电平脉冲的个数。占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。一个周期加在电机两端的电压为脉冲高电压乘以占空比。占空比越大,加在电机两端的电压越大,电机转动越快。电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。当我们改变占空比时,就可以得到不同的电机平均速度,从而达到调速的目的。精确的讲,平均速度与占空比并不是严格的线性关系,在一般的应用中,可以将其近似看成线性关系。

4.2  AT89S52的简介
4.2.1 AT89S52主要性能

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51   产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写周期;全静态操作:0Hz~33Hz;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;八个中断源;全双工UART串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;看门狗定时器;双数据指针;掉电标识符。


4.2.2 AT89S52主要功能列举

1、拥有灵巧的8位CPU和在系统可编程Flash

2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)

3、内部程序存储器(ROM)为 8KB

4、内部数据存储器(RAM)为 256字节

5、32 个可编程I/O 口线

6、8 个中断向量源

7、三个 16 位定时器/计数器

8、三级加密程序存储器

9、全双工UART串行通道

4.2.3 AT89S52各引脚功能介绍

            

4. 3 L298电机驱动模块
4. 3.1 L298电机驱动简介
   L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 36 V;Vs 电压最大值也是 36 V。L298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。
4. 3.2 L298内部的原理图



4. 3.3 L298 引脚符号及功能
引 脚
功 能
SENSA、SENSB
分别为两个H桥的电流反馈脚,不用时可以直接接地
ENA 、ENB
使能端,输入PWM信号
IN1、IN2、IN3、IN4
输入端,TTL逻辑电平信号
OUT1、OUT2、OUT3、OUT4
输出端,与对应输入端同逻辑
VCC
逻辑控制电源,4.5~7V
VSS
电机驱动电源,最小值需比输入的低电平电压高
GND
4. 3.4 L298的逻辑功能
IN1
IN2
ENA
电机状态
X
X
0
停止
1
0
1
顺时针
0
1
1
逆时针
0
0
0
停止
1
1
0
停止
当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;;IN1与IN2相 同时,电机快速停止。当使能端为低电平时,电动机停止转动。
在对直流电动机电压的控制和驱动中,半导体功率器件(L298)在使用上可以分为两种方式:线性放大驱动方式和开关驱动方式在线性放大驱动方式。
半导体功率器件工作在线性区优点是控制原理简单,输出波动小,线性好,对邻近电路干扰小,缺点为功率器件工作在线性区,功率低和散热问题严重。开关驱动方式是使半导体功率器件工作在开关状态,通过脉调制(PWM)来控制电动机的电压,从而实现电动机转速的控制。
4. 4 LED数码管显示
4. 4.1 LED简介
LED(Light Emitting Diode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。
  当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。除半导体激光器外,当电流激励时能发射光学辐射的半导体二极管。严格地讲,术语LED应该仅应用于发射可见光的二极管;发射近红外辐射的二极管叫红外发光二极管(IRED,Infrared Emitting Diode);发射峰值波长在可见光短波限附近,由部份紫外辐射的二极管称为紫外发光二极管;但是习惯上把上述三种半导体二极管统称为发光二极管。
4. 4.2 LED七段数码管的结构

          共阴极                    共阳极                   管脚图
其中:图(a)为共阴极结构,8断发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,要使哪根发光二极管,则对应的阳极端接高电平。图(b)为共阳极结构,8端发光二极管的阳极端连接在一起,阴极端分开控制,使用时公共端接电源。要使哪根发光二极管,则对应的阴极端接地。其中7段发光二极管构成7笔的字形“8”,1根发光二极管构成小数点。图“c”为引脚图,从a-g引脚输入不同的8位二进制编码,可显示不同的数字或字符。通常把控制发光二极管的7(或8)位二极管编制称为字段码。不同数字或字符其字段码不一样,对于同一个数字或字符,共阴极连接和共阳极连接的字段码也不一样,共阴极和共阳极的字段码互为反码。
4. 4.3常见数字和字符的字段码
显示字符
共阴极字段码
共阳极字段码
显示字符
共阴极字段码
共阳极字段码
0
3FH
C0H
C
39H
C6H
1
06H
F9H
D
5EH
A1H
2
5BH
A4H
E
79H
86H
3
4FH
B0H
F
71H
8EH
4
66H
99H
P
73H
8CH
5
6DH
92H
U
3EH
C1H
6
7DH
82H
T
31H
CEH
7
07H
F8H
Y
6EH
91H
8
7FH
80H
L
38H
C7H
9
6FH
90H
8.
FFH
00H
A
77H
88H
“灭”
00
FFH
B
7CH
83H
……
……
……
4. 4.4 LED数码管和单片机的连接
电路的接法决定了必须采用逐位扫描显示方式。即从段选口送出某位LED的字型码,然后选通该位LED, 并保持一段延时时间。然后选通下一位,直到所有位扫 描完。
4. 4.5简单的程序流程
                     
4. 4.6本系统中单片机与LED的连接

4.5独立式键盘控制模块
4.5.1键盘的功能及分类
键盘是一种最常用的输入设备,它是一组按键的集合,从功能上可分为数字键和功能键两种,作用是输入数据与命令,查询和控制系统的工作状态,实现简单的人机对话。
键盘的分类
(a)键盘按照接口原理可分为编码键盘与非编码键盘两类。这两类键盘的主要区别是识别键符及给出相应键码的方法。
    编码键盘主要是用硬件来实现对键的识别;
    非编码键盘主要是由软件来实现键盘的定义与识别。
(b)键盘按照其结构可分为独立式键盘与矩阵式键盘两类。
    独立式键盘主要用于按键较少的场合,矩阵式键盘主要用于按键较多的场合,也称行列式键盘
4.5.2独立式键盘
独立式键盘的按键相互独立,每个按键接一根I/O口线,一根I/O口线上的按键工作状态不会影响其它I/O口线的工作状态。因此,通过检测I/O口线的电平状态,即可判断键盘上哪个键被按下

4.5.3独立式键盘与单片机的链接



5系统软件设计
    直接应用AT89S52的软件方法实现PWM信号输出,这比硬件实现PWM信号成本低。限制少。实现便捷。其流程图如下所示。

5.1流程图
5.1.1主程序流程图

图5.1系统主单片机总程序框图


结论
通过本次毕业设计,使我学到了许多书本上无法学到的知识,也使我深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:直流电机PWM调速、AT89S52单片机、L289引脚图及其引脚功能等,LED数码管显示,为本次毕业设计提供了一定的资料。
在做毕业设计的初期阶段,难度很大,没有头绪。通过求助于陈老师、理清了思路。同时,在图书馆里、网上查阅资料,攻克了毕业设计中的道道难题。通过本次科技创新实践,我学到了许多东西,知道光靠书本上的东西是不够的,需额外去查资料。无论是在硬件还是软件设计上,我都遇到了不少的问题,在克服困难的过程中,我学到了许多,特别是在课堂上学不到的东西如(PWM)。也锻炼了我的protel画图能力,以前学的时候元器件都是给定的只要到库里面找出名字就可以,只要连线就可以,而这次是根据自己的设计需要去画,感觉不同。本次设计我能独立完成,算是有了很大的收获。总的感受有以下几方面:
1、通过本次毕业设计,我不但对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等有了一定的认识。
2、进一步加强了我的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案。特别是深刻体会到了软件和硬件结合的重要性,以及两者的联系和配合作用。
3、让我了解到单片机技术对当今人们生活的重要性。同时这次做毕业设计的经历也使我受益匪浅,让我知道做任何事情都应脚踏实地,刻苦努力地去做,只有这样,才能做好。

附录2:原理图

单片机源程序如下:
  1. *********************************************************************
  2.                                                                                                   直流电机PWM调速
  3. 功能描述:使用单片机T0定时器产生(xxxHz)脉宽调制信号,输到L298N的EN_A
  4.                               实现双直流电机的速度调控。
  5. 修订日期:2011-5-7
  6. *********************************************************************/
  7. #include<reg52.h>   
  8. #include<intrins.h>                       
  9. #define uchar unsigned char            
  10. #define uint unsigned int
  11.                            
  12. /**********************************************************************
  13.                                                                                                   L298n接口定义
  14. **********************************************************************/
  15. sbit MOTOR_A_2=P3^6;
  16. sbit MOTOR_A_1=P3^7;
  17. sbit EN_MOTOR_A =P3^4;                                                                                                                                                                                                                                 
  18. sbit k1=P1^5;                            //定义k1为p1.5口
  19. sbit k2=P3^1;   //定义k2为p3.1口
  20. sbit k3=P3^2;   //定义k3为p3.2口
  21. sbit k4=P3^3;   //定义k4为p3.3口
  22. uchar T=0;                 //定时标记
  23. uchar W=0;                 //脉宽值              0~100
  24. uchar A=0;                 //方向标记 0,1
  25. uchar k=0;                 //按键标记
  26. uchar i=0;                  //计数变量


  27. uchar code table1[]={
  28. 0x3f,0x06,0x5b,0x4f,
  29. 0x66,0x6d,0x7d,0x07,
  30. 0x7f,0x6f,0x77,0x7c,
  31. 0x39,0x5e,0x79,0x71};

  32. uchar code table2[]={0xef,0xbf,0xdf,0x7f};
  33.                            
  34. void delayms(uint t);                                                                                                               
  35. /**********************************************************************
  36.                                                                                     数码管显示
  37. **********************************************************************/
  38. void disp(void)
  39. {
  40.               P0=table2[3];                                                                     
  41.               P2=table1[W%10];                                          //显示占空比个位
  42.               delayms(1);                                                                       //延时1ms
  43.               P0=0xff;                                                                                                  //P0清1

  44.               P0=table2[2];
  45.               P2=table1[W/100];                             //显示占空比百位
  46.               delayms(1);                                                                       //延时1ms
  47.               P0=0xff;                                                                                                  //P0清1

  48.               P0=table2[1];
  49.               P2=table1[W/10%10];  //显示占空比十位
  50.               delayms(1);                                                         //延时1ms
  51.               P0=0xff;                                                                         //P0清1

  52.               P0=table2[0];
  53.               P2=table1[A];                                            //显示方向
  54.               delayms(1);                                                         //延时1ms
  55.               P0=0xff;                                                                                    //P0清1
  56. }

  57. /**********************************************************************
  58.                                                                                                   定时器变量定义
  59. **********************************************************************/


  60. void init(void)
  61. {
  62.               //启动中断
  63.               TMOD=0x01;            
  64.               EA=1;                                                                                   
  65.               ET0=1;
  66.               TR0=1;
  67.               //设置定时时间
  68.               TH0=0xfd;
  69.               TL0=0x17;
  70. }

  71. void timer0() interrupt 1
  72. {                                                            
  73.               //重置定时器时间
  74.               TL0=0x17;
  75.               TH0=0xff;
  76.               T++;                                          //定时标记加1
  77.               disp();                            //数码管显示
  78.               if(T>W)
  79.                             EN_MOTOR_A =1;
  80.               else
  81.                             EN_MOTOR_A =0;
  82.               if(T==100)
  83.                             T=0;

  84. }                                         
  85. /**********************************************************************
  86.                                                                                                   延时1ms
  87. **********************************************************************/
  88. void delayms(uint t)
  89. {
  90.               uchar j;
  91.               while(t--)
  92.               {
  93.                             for(j=0;j<250;j++)                                          //循环250次
  94.                             {
  95.                                           _nop_();             //系统延时         
  96.        _nop_();                                                                                                  //系统延时
  97.        _nop_();                                                                                                  //系统延时
  98.        _nop_();                                                                                                  //系统延时
  99.                             }
  100.               }
  101. }
  102. /**********************************************************************
  103.                                                                                                   独立按键检测
  104. **********************************************************************/
  105. void key(void)           //按键判断程序
  106. {
  107.               if(k1==0)                                                                                                  //按键1按下
  108.               {
  109.                             while(k1==0);                                                        //按键1抬起
  110.                             if(W==100)                                                                      //如果脉宽为100
  111.                                           W=0;                                                                                                  //脉宽置0
  112.                             else
  113.                                           W+=1;                                                                                                  //否则加1
  114.               }
  115.               else if(k2==0)                                                        //按键2按下
  116.               {                                                      
  117.                             while(k2==0);                                                        //按键2抬起
  118.                             if(W==0)                                                                                    //如果脉宽为0
  119.                                           W=100;                                                                                    //脉宽设置成100
  120.                             else
  121.                                           W-=1;                                                                                                  //否则减1
  122.               }
  123.               else if(k3==0)                                                        //按键3按下
  124.               {                                            
  125.                             while(k3==0);                                                        //按键3抬起
  126.                             A=!A;                                                                                                                //方向标记取反
  127.                             k=0;                                                                                                                //按键标记清0
  128. ……………………

  129. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
单片机直流电机PWM控制系统.rar (498.4 KB, 下载次数: 692)


评分

参与人数 1黑币 +30 收起 理由
SD_FL + 30

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:518690 发表于 2019-4-25 01:08 | 只看该作者
感谢,分享。
回复

使用道具 举报

板凳
ID:570914 发表于 2019-6-24 15:52 | 只看该作者
感谢分享,支持
回复

使用道具 举报

地板
ID:615628 发表于 2019-9-24 13:43 | 只看该作者
xx谢谢分享
回复

使用道具 举报

5#
ID:343168 发表于 2019-11-28 15:26 | 只看该作者
很好,学习了。非常棒。
回复

使用道具 举报

6#
ID:258743 发表于 2019-11-28 19:30 | 只看该作者
感谢分享,支持
回复

使用道具 举报

7#
ID:651848 发表于 2019-11-28 20:02 来自手机 | 只看该作者
非常详细。感谢
回复

使用道具 举报

8#
ID:649298 发表于 2019-12-5 14:28 | 只看该作者
感谢分享
回复

使用道具 举报

9#
ID:664533 发表于 2019-12-15 20:02 | 只看该作者
谢谢分享!!!!
回复

使用道具 举报

10#
ID:664533 发表于 2019-12-15 20:05 | 只看该作者
谢谢分享!!
回复

使用道具 举报

11#
ID:668494 发表于 2019-12-23 20:00 | 只看该作者
非常感谢
回复

使用道具 举报

12#
ID:668494 发表于 2019-12-24 10:10 | 只看该作者
有很大的帮助 谢谢
回复

使用道具 举报

13#
ID:298008 发表于 2020-2-17 18:38 | 只看该作者
谢谢楼主分享!!!
回复

使用道具 举报

14#
ID:692272 发表于 2020-3-1 14:26 | 只看该作者
很喜欢这个!!
回复

使用道具 举报

15#
ID:713488 发表于 2020-3-22 18:41 | 只看该作者
楼主,我想问一下,为什么仿真时按独立按键时,数码管没有转速显示呢?
回复

使用道具 举报

16#
ID:713488 发表于 2020-3-22 18:44 | 只看该作者
楼主您好 我有个问题想请教您
将hex文件导入之后 按独立按键速度加1 在不连硬件的情况下 数码管会有速度显示吗
回复

使用道具 举报

17#
ID:582896 发表于 2020-4-29 14:51 | 只看该作者

感谢,分享。
回复

使用道具 举报

18#
ID:582896 发表于 2020-4-29 14:53 | 只看该作者
楼主,我想问一下,为什么仿真时按独立按键时,数码管没有转速显示呢?
回复

使用道具 举报

19#
ID:582896 发表于 2020-4-29 14:54 | 只看该作者

很喜欢这个!!
回复

使用道具 举报

20#
ID:742227 发表于 2020-5-1 18:33 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
ID:754137 发表于 2020-5-17 17:15 来自手机 | 只看该作者
感谢大佬,分享
回复

使用道具 举报

22#
ID:769676 发表于 2020-6-4 18:52 | 只看该作者
楼主的过程十分详细,非常有帮助。谢谢!
回复

使用道具 举报

23#
ID:771025 发表于 2020-6-6 11:58 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表