机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3003 | 回复: 3
打印 上一主题 下一主题

用PIC单片机产生方波遇到这种波形

[复制链接]
跳转到指定楼层
1#
发表于 2018-11-5 20:08:17 | 只看该作者 | 只看大图 回帖奖励 | 倒序浏览 | 阅读模式
本帖最后由 冯喆喆 于 2018-11-5 20:11 编辑
J/ b9 Z. q& t* Y; B, C
: q; l, ~- I1 \- C' n+ c用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。 求有经验的大神指导下; y7 N! d6 d2 k, x8 V! Q; J
这是产生的4KHZ正常波形,占空比为50%) {- J5 o9 `9 y3 W6 ^1 B; w

* n { F9 f5 d: w3 O4 Q8 U & m0 [; S1 U1 I- n$ f9 x

! J1 z& G3 y6 s这是1KHZ有问题的波形,占空比为60%
3 Q& C; {* ~* k$ x( K. S * V* `7 p$ y/ V& U9 P V
, T4 l0 I% c7 p4 {2 y2 N
2#
楼主 | 发表于 2018-11-5 20:14:34 | 只看该作者
主要的程序我也贴上来各位看一下) Y `1 E3 y. H3 Z) w: U4 O
) K! F p( i$ h, B
/********端口初始化函数********/" t- d, G3 f& s: X6 N F) A
void init()
1 O- o6 Y4 L$ I; x{0 R# j' _$ T. `# T3 L. i! ^, I
ANSELH=0x00; //设置B口为数字I/O口1 q5 N; [: G7 _) J$ `
OPTION_REG=0x00;
+ |+ D4 M7 X. WWPUB=0xFF; //设置B口弱上拉" J; p7 ^8 d& M4 A" m
INTCON=0x00; //关总中断: Q4 b7 G0 p' y& v6 V
PIE1=0; //PIE1的中断禁止
. K* ~) i& S! G# R b* q5 \PIE2=0; //PIE2的中断禁止
8 U3 i+ I e' J9 f2 @9 p3 e8 N i- ?( HTRISB0=1;9 p. I$ [$ U6 J
TRISB1=1; //将RB1设置为输入口,按按键
2 g+ x x" s6 _3 T* u% ?TRISB2=1; //将RB2设置为输入口,按按键
7 U; H5 ?0 z: B$ {9 T9 xTRISB3=1;
; c: T6 m, ?7 n5 R# wTRISB4=1;, q1 Q+ z4 z0 `6 a
RC1=0;
2 Q; p( f/ g, U4 ZTRISC1=0; //脉宽调制输出引脚,设置为输出5 W% w2 `. F y8 A0 e
}
+ p0 V2 v3 {8 O# z( X/********PWM初始化函数********/
5 C* g1 @. ~2 M( I% g/ }& I& g$ Pvoid PWM_Init()
) z' o0 w& s+ |; f{3 P3 `' G2 l, @2 A+ d9 `6 \+ Y
PR2=249; //脉宽调制波形的周期为1000us! Q1 v+ {4 p- x# w" u0 \5 ~
CCP2CON=0x0C; //CCP2模块工作在PWM模式,占空因数的低两位为00
2 i& ]# a+ |0 E9 J- A5 xT2CON=0x02; //禁止TMR2,且前后分频值为16,同时开始输出PWM, L" F* n; U# _. m7 _ a7 U
CCPR2L=0xB8; //脉宽调制波形的占空比初始值
3 ~( ?( Q" U' p; M}" d1 ?* V" x* K( ]6 k9 H
/********键盘扫描函数******* */; v, y3 G# G2 s p* a: |( C
void keyscan()* [- g q. o3 T9 g2 S+ {, D5 Z
{
1 ?7 j5 U" n/ L4 O6 e, ?if(RB1==0) //如果是RB1键按下
6 o5 a* E& x. m" \ d% g6 f" G- Y{$ z( f9 @( u8 Q) ^9 D
delay_ms(5); //延时去抖
5 _. Y' e; u: d% K6 Nif(RB1==0) //确认是否有键按下
9 h7 ]* }+ Q; t. }$ i' c8 v) I2 v' x{
4 b: o- \2 H$ w" ~& U0 F. X5 |: _- Vwhile(!RB1); //等待按键释放
$ \& F. ^% O7 B3 f+ Q @9 sCCP2CON=0x0C;% K% ?, D. l7 P4 t2 k. |+ C8 I) r
CCPR2L=0xB8; //80%占空比
3 _- e8 ?( U' LTMR2ON=1;
9 W1 k) _3 z" S4 {( x; ` L}
* a$ J# R6 R- p2 U}1 ]! I+ D% {' I3 c8 [
if(RB2==0) //如果是RB2键按下2 E6 C) S, F* q; E) e
{
" u9 q5 D1 j# m. r0 ~delay_ms(5); //延时去抖
& W, u5 [% m( Z1 f3 v: F: kif(RB2==0) //确认是否有键按下8 E, n8 `2 j7 q+ V6 b1 Z
{
6 ~8 Z! R5 L) z. e) m1 \' i# Kwhile(!RB2); //等待按键释放- s; V" k. w/ S6 t |+ s3 Z
CCP2CON=0x0C;" h1 K* `4 i/ g1 C
CCPR2L=0x96; //60%占空比
( f; Y4 h9 b/ Z: yTMR2ON=1;
) k4 G. |- \- v& r1 j}
7 L9 R% ~3 W/ m* e }% g}6 y) F2 M6 X) L$ ]
if(RB0==0) //如果是RB0键按下# e j. v" e# C8 Y. Q
{
! o! t7 ~2 c3 s! t+ vdelay_ms(5); //延时去抖
2 c( e6 D" r# G3 sif(RB0==0) //确认是否有键按下
1 ~5 ~# M" _, c4 T: G) w# A{0 T% E! F8 S4 S9 y
while(!RB0); //等待按键释放/ `9 W+ u# h; @/ L# ^: m
CCP2CON=0x00; //关PWM
/ g7 @6 s$ {* x6 X' E6 b/ w1 yTMR2ON=0; //禁止TMR2
) W) ?& w8 C" `) m- c+ Z//delay_ms(5);
6 }: X' [7 c5 ?" f6 x: b. jRC1=0;/ n9 f; z+ I! L8 Z/ P! U
}
) m0 F2 _" h! h" W}+ P- a) U% E. x! z6 \8 u
}/ m% S9 A( G( O% x5 v
/********主函数********/
& i" x9 u( r r1 ^6 }7 r9 C1 cvoid main()
& P' o2 P3 Z, F{
# l2 E( b) u t5 s6 h9 R6 C+ n' i9 Xinit(); //系统初始化
: t8 k4 d9 e6 g2 l! Z# GPWM_Init(); //脉冲宽度初始化2 q4 g1 n# n: K
while(1)
' r$ P' l, `4 N) i5 e( @" @{$ Q9 x. @0 B: _6 \- Q( `; X3 @' _
keyscan(); //调用按键扫描处理脉宽因数
9 a2 j( q3 H. V0 X}
/ c) A" T& ?2 D% n}
3#
发表于 2018-11-6 07:38:09 | 只看该作者
单片机常用问题吗?
4#
楼主 | 发表于 2018-11-6 14:45:37 | 只看该作者
远祥 发表于 2018-11-6 07:38
0 T- U: h: Z$ U1 I9 i5 x单片机常用问题吗?

% O4 d5 n7 I/ Z% o1 Z3 e. J8 Z% D这个是用PIC单片机产生PWM波,应该比较常见吧
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2025-1-26 06:19, Processed in 0.058103 second(s), 17 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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