《PIC16 系列单片机 C 程序
设计与 PROTEUS 仿真》
课程设计
题
目:电 机 速 度 控 制
学生姓名:
学
号:
专业班级:
指导教师:
二○一一年 6 月 7 日
目
录
1.课程设计···············································02
2.课程设计题目描述和要求·································02
3.课程设计具体内容
3.1 总体方案设计·········································02
3.2 硬件设计·············································02
3.3 软件设计············································ 06
4.结论
4.1 测试结果·············································09
4.2 问题及解决方法·······································09
4.2 感想及经验···········································10
5.参考文献 ··············································11
6.附录
1
1.课程设计目的
本课程设计在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调
试的实践,进一步掌握 PIC 单片机的应用方法,熟练 PIC 单片机的 C 程序的编
写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单
片机应用基础。在本课设中,具体表现在:
1) 熟练掌握 DS1307、LCD1602 和 PIC16F887 中捕捉、AD 与 PWM 控制功能的使
用;
2) 学会用 C 语言编写一个完整的实用程序,掌握程序的设计方法和思路,拓展
编程思维;
3) 通过分析需求、设计原理图、选用元器件、编程、接线、调试、撰写报告
等步骤,了解设计开发一个产品的过程,积累经验。
2.课程设计题目描述和要求
本课设我设计的题目是《电机速度控制》,通过在 PROTEUS 仿真及在实物板
上调试,运行正确。研究的内容及要求如下:
1)利用 LCD,显示电机期望转速与实际转速,PWM 占空比与转速差;
2)能够通过按键的输入调整增大或减小转速差,并通过按键挂档;
3)通过 AD 转换进行转速微调;
4)通过 LED 提示电机速度不稳;
3.课程设计具体内容
3.1 总体方案设计
本课程设计利用 PIC16F887 通过将电位器电压值进行 A/D 转换,从而对转速
给定值进行采样;同时根据脉宽调制原理利用单片机调整输出 PWM 的高电平时间
控制直流电机的转速;电机转速通过利用单片机的 CCP 捕捉模块捕捉光电遮蔽器
产生的脉冲信号,进行计算获得转速,同时将测得的转速与给定值进行比较,对
电机的转速进行快速调整,控制电机速度在一定误差范围内;按键模块则实现输
入给定速度误差范围,同时 LCD 能够实时显示电机的转速,实现良好的人机交互。
3.2 硬件电路设计原理与实现
整个系统硬件电路包括5个主要模块:LCD 显示模块、按键输入模块、微型
直流电机 PWM 控制模块、带光电遮蔽器的电机测速模块。
3.2.1
LCD 显示模块
2
图 3.2.1
课设板所用的 LCD 型号为 YB1602A,接线如图 3.2.1 所示。图中采用 4 位
数据线接线方式,是为了节省单片机的 IO 口。从图中可以知道,要使用该 LCD
时,短路插 P38、P22 的短路插(除 RD7 外)均要插上。如要使用背光控制,可
将 P22 的短路插 8 插短接,如不用背光,该短路插不接。表 1 为 LCD YB1602A 的
引脚功能说明。
引脚名
RS
R/W
E
DB7~DB0
功能
命令/数据选择:1:数据,0:命令
读/写选择:1:读,0:写
数据使能:下降沿送入有效
数据线,如用 4 位数据,使用高 4 位
表 1 LCD YB1602A 引脚功能表
上电后要延时 15ms 后,才能进行初始化,LCD 初始化过程详见[1]。
3.2.2 按键输入模块
采用课设板上 4×4 按键中的三个普通按键 S1、S5、S9 即可,三个按键对应
的功能见表 2,接线如图 3.2.2 所示,其中 P45 须短接到地,P20 的 1~3 短路
插短接,用到 RB0~RB2 共 3 个引脚,编程时利用 RB0/INT 中断与 RB 电平变化
中断进行按键处理。
3
图 3.2.2
功能
进入调整模式,或者退出调整模式
每按一次,则数值增 1
每按一次,则数值减 1
表 2 按键功能表
按键
S1(SET)
S5(INC)
S6(DEC)
3.3.3 微型直流电机 PWM 控制模块
图 3.3.3
本模块的接线图如图 3.3.3 所示,利用单片机输出的 PWM 波形控制 T3 的通
断,对 VCC 电压进行斩波,通过改变 PWM 占空比从而改变直流电机的电枢电压,
从而改变电机转速。为了防止 T3 断开时电机产生的过电流使板上器件烧毁,在
电机两端反并联了二极管 D4。
本设计采用 CCP2 模块即通过 RC1 输出 1kHz 的 PWM 波控制电机转速,P26 需
将 1 用短路插短接。
4
3.3.4 电机测速模块
图 3.3.4
电机测速模块如图 3.3.4 所示,其中 ST159-08 为一直射式光电传感器,即
光电遮断器。在电机转轴上装有遮挡片,当光电传感器发射的红外线被遮挡时,
输出电平发生变化,循环如此,形成脉冲。单片机通过检测光电遮断器输出脉冲
的周期或对脉冲计数来计算转动物体的速度。
本设计利用 PIC16F887 的 CPP 模块对输出脉冲每 4 个脉冲捕捉一次来计算电
机的转速。
除以上4个模块外,还有一个调整转速给定的电位器,本设计采用 AN0 对给
定电压进行 A/D 转换,采样转速给定值,其接线图如下所示:
使用时,需将 P11 的 1 用短路插短接。
5
R4(1)
R4
330
U1
1
2
6
5
4
OPTOCOUPLER-NPN
RC2
R3
100k
RC1
R1
1k
D1
1N4148
+
8
8
8
.
RB0
RB1
RB2
RB3
R9
1kR10
1kR11
1kR12
1k
LCD2
LM016L
S
S
V
D
D
V
E
E
V
S
R
W
R
E
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
D
1
2
3
4
4
D
R
5
5
D
R
6
6
D
R
7
8
9
0
1
1
0
1
D
R
2
1
1
D
R
3
2
1
D
R
4
3
1
D
R
RC1
RC2
A
B
C
D
RV2
10k
%
5
1
RA0
M
Q1
TIP122
RC1
RC2
RD0
RD1
RD2
RD3
RD4
RD5
RD6
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
RA0/AN0/ULPWU/C12IN0-
RA1/AN1/C12IN1-
RA2/AN2/VREF-/CVREF/C2IN+
RA3/AN3/VREF+/C1IN+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/P1A/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0
RD1
RD2
RD3
RD4
RD5/P1B
RD6/P1C
RD7/P1D
RE0/AN5
RE1/AN6
RE2/AN7
U2
RE3/MCLR/VPP
1
RA0
2
3
4
5
6
7
14
13
RB0
33
RB1
34
RB2
35
RB3
36
37
38
39
40
LED-YELLOW
RB0/AN12/INT
RB1/AN10/C12IN3-
RB2/AN8
RB3/AN9/PGM/C12IN2-
RB4/AN11
RB5/AN13/T1G
RB6/ICSPCLK
RB7/ICSPDAT
R13
1k
PIC16F887
NET=RC9
3.3 软件设计
3.3.1 主程序流程图
开 始
初 始 化
A / D 转 换
L C D 显 示
转 速 静 差
超 过 允 许 值 D N
Y
P W M 高 电 平 时
间 调 整
延 时
K E Y . F L A G = = 1 ?
Y
6 s 内 有 操 作 ?
Y
相 应 的
L C D 显 示
N
N
图 7 硬件原理图
3.3.2 各部分功能实现
3.3.2.1 按键功能程序流程图
本设计是通过利用 RB0/INT 中断
与 RB 电平变化中断来实现按键模块的
相应功能。为了达到上电后随时按下
N
SET 键便进入 DN 修改与挂档模式,通
过 INC 键和 DEC 键来分别实现转速差递
增和递减功能与电机速度挂档,同时又
得保证在未按下 SET 键之前,按其他键
不会产生反应,所以将 B 口电平变化中
断使能在 INT 中断子程序中开启,这样
就实现了上述情况。除此之外,按下
SET 键后 6 秒内若未进行操作,也应退
出 DN 修改模式,所以应增设一个 TMR0
计时器,按键中断子程序流程图如图
3.3.2.2。
3.3.2.2
PWM 输出程序设计
本设计采用 CCP2 模块从 RC1 引脚输出 1kHz(即周期为 1000 s )的 PWM 波,
预分频比用 1:4,晶振为 4MHz,则
6
1000 (
PR
2
249
PR
2 1) 4 0.25 4
假设高电平时间为 ,HT 则由 CCPR2L 及 CCP2CON 的 5、4 两位共 10 位的 X
值为 HT ,时间单位为 s 。
而占空比
D T
H
10
改变 PWM 的高电平时间,只需对 CCPR2L 和 CCP2CON 的 5、4 两位重新赋值即
可:
N
INTF=1
Y
KEY.SET+1;
KEY.FLAG置1;
RBIE置1;
定时器0开始计时;
INTF=0;
N
KEY.SET>1
Y
KEY.SET、
KEY.FLAG、
RBIE都清零
中断子程序
RBIF=1
KEY.FLAG=1
Y
RB3=0
N
Y
KEY.DEC=1;
计时清零
指向ND[T]
T++
RB2=0
N
Y
RB1=0
N
Y
KEY.DEC=1;
计时清零
KEY.INC=1;
计时清零
RBIF=0
返回
TOIF=1
N
Y
TOIF=0;
T0N++;
N
超时否
Y
KEY.FLAG=0;
KEY.SET=0;
T0IE=0;
CCPR2L=(X>>2) & 0x0FF;
CCP2CON=((X<<4)&0x30)|0x0C;
具体程序详见附录。
7