机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
#
发表于 2018-11-5 20:08:17 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 冯喆喆 于 2018-11-5 20:11 编辑
3 z8 a0 T3 w; d: l3 ~
$ F! E! R. _9 e% [- I4 V& d用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。  求有经验的大神指导下
1 c: g6 U  ?! |/ h: I4 T4 j这是产生的4KHZ正常波形,占空比为50%6 e4 I/ F4 v/ Y) l) I* A
' `$ x: z* O' S% N0 K/ b* h$ J  ~

2 Z# H" c: K0 Q' Y/ R; D: Z
! P+ f6 l0 _9 R0 G这是1KHZ有问题的波形,占空比为60%
& W1 V  G" I% T& _& U9 e5 P2 N5 B 0 ]2 O6 U8 e6 I! _1 b% z- F6 N

9 ?3 T) K. a& j& u, [4 |: d# \$ W0 c
回复

使用道具 举报

3#
 楼主| 发表于 2018-11-6 14:45:37 | 只看该作者
远祥 发表于 2018-11-6 07:38  p# i2 o  G$ }1 Q# x% T
单片机常用问题吗?

. T, W' e, g3 u& ^1 [5 j4 X这个是用PIC单片机产生PWM波,应该比较常见吧
回复 支持 反对

使用道具 举报

2#
发表于 2018-11-6 07:38:09 | 只看该作者
单片机常用问题吗?
回复 支持 反对

使用道具 举报

1#
 楼主| 发表于 2018-11-5 20:14:34 | 只看该作者
主要的程序我也贴上来各位看一下
" k8 t) D( J0 [5 M+ x) @) b& w. S
7 ?$ t  Y3 R* }& T  r5 w) I/********端口初始化函数********/( ^9 r: p4 p2 Y) {. H; L5 C$ r
void init()1 a- v9 }3 {! b9 `
{7 v2 y' S  O# G5 i) S
        ANSELH=0x00;                     //设置B口为数字I/O口- P1 ]* v* B9 U' v
        OPTION_REG=0x00;
4 Z/ e& w& H- f$ c8 |$ a) g! n        WPUB=0xFF;         //设置B口弱上拉# q) b4 v5 r$ R7 ~* y, M  I( q5 t0 U/ ]
        INTCON=0x00;       //关总中断
. {: u( m7 }* K; t0 G        PIE1=0;            //PIE1的中断禁止* m! b% [2 G! w- P# w6 @) B5 G$ M
        PIE2=0;            //PIE2的中断禁止5 u) H# B/ N9 y/ t* i* Z5 @$ d
        TRISB0=1;: E4 e) N: d" i" |& w& K
        TRISB1=1;          //将RB1设置为输入口,按按键
7 ~+ I& W9 k( [& r- T        TRISB2=1;          //将RB2设置为输入口,按按键
/ _/ o) L* c% R, [/ _        TRISB3=1;
6 K- Z) V, q; [  D. E$ x. z$ u        TRISB4=1;
/ h8 H$ @  C( O6 T' w& C        RC1=0;
; w8 V/ I5 R" ?6 u/ O: }( {        TRISC1=0;          //脉宽调制输出引脚,设置为输出2 D8 a2 _8 P& O2 y
}
3 y5 H; k, N+ Y) C/********PWM初始化函数********/
2 F& h0 l# U" V6 _$ r+ nvoid PWM_Init()" t7 x! C) y% [
{! {4 f6 [9 b: L: r7 @1 `, w5 ^
        PR2=249;           //脉宽调制波形的周期为1000us       
/ r& t- }) n) D- Y  m% y; ^        CCP2CON=0x0C;      //CCP2模块工作在PWM模式,占空因数的低两位为00
/ F4 c. \+ W. p9 e& W; S/ h! a, q& e        T2CON=0x02;        //禁止TMR2,且前后分频值为16,同时开始输出PWM/ |; S* `) j. S
        CCPR2L=0xB8;       //脉宽调制波形的占空比初始值8 p8 \$ w1 h& M! X" w6 A) U
}5 F" x  n8 j! \: R) ^6 A* k# }! H5 N4 b
/********键盘扫描函数*******    */
! H7 {; d6 p. u: W3 C6 p9 f' }void keyscan()
3 `9 |% r4 d+ s5 J{
2 H& @' j( ^  W2 B        if(RB1==0)                  //如果是RB1键按下* U+ ?; E  I& H7 V0 a5 F
        {
/ t. N2 m+ g7 f                delay_ms(5);              //延时去抖9 w" V8 T2 N- g' `  o1 u
                if(RB1==0)              //确认是否有键按下7 r7 n* p* {0 o
                {
" P2 R3 A5 B! s* p& W- K4 \                        while(!RB1);        //等待按键释放  T" j  [7 R3 Y6 K  P* @% ^* o
                        CCP2CON=0x0C;, |) A+ j9 u6 d- F! D
                        CCPR2L=0xB8;                   //80%占空比
, h2 J$ t8 R! T" x* i; ^" ^) o                        TMR2ON=1;" K0 |. I6 s+ U" o' ]2 @) t
                }
4 {" \) r  v% d0 W+ m  C$ J2 F, c        }4 T. b: f; g' w% [! ?- z
        if(RB2==0)                  //如果是RB2键按下5 c3 _4 M- z' h9 C& ^6 t  B: ?9 d
        {0 y) G5 ]# N) \! U* k
                delay_ms(5);              //延时去抖8 ?2 X6 P0 I2 l- z" y- o1 K4 e
                if(RB2==0)              //确认是否有键按下$ S5 ^6 G$ m2 b+ D; R/ k
                {4 m" u, E, i% ]" q. G5 x9 Q  E
                        while(!RB2);        //等待按键释放
2 `% B- r0 h$ j                        CCP2CON=0x0C;
/ g) p; X5 U# X  e+ s                        CCPR2L=0x96;                   //60%占空比
2 S& B2 P' x7 b( ?. `6 C# j                        TMR2ON=1;
5 `/ h. N2 K% M( D3 u) @                }
) v- O$ [! u! e6 A3 R9 I5 g4 A& U; V3 N        }
' t6 i) Z8 A. s. T4 ]        if(RB0==0)                  //如果是RB0键按下
+ }8 ?7 n5 x* K/ m$ @4 W; [6 e4 o        {
" i( t& U* B# ^9 j; L* E! g                delay_ms(5);              //延时去抖
0 d! x# S! a4 H3 y9 [: D7 c                if(RB0==0)              //确认是否有键按下
+ z1 a) N8 n/ N% O9 |/ l                {
) ~' R, ?% n1 Z3 d# V. D                        while(!RB0);        //等待按键释放1 u$ S8 s, p  d# ]$ ?
                        CCP2CON=0x00;                   //关PWM9 z, o# B# ^6 ]
                        TMR2ON=0;                        //禁止TMR2
* r: g% I4 B5 r  j# D                        //delay_ms(5);0 u& W. \% P. }- f0 x6 k# Q
                        RC1=0;  e0 F$ l7 s/ k& \; a( g$ b* r6 I
                }) ]) j; U3 B- F* o5 K$ _) K
        }9 j7 Z* E. H/ D4 y1 l) t! [6 z
}( F5 v; `& t- y- F! n, [6 D
/********主函数********/
4 H( l9 R% R3 m& N# t! ?void main()0 X- |9 `' R, Z" v; y
{( v$ q. B1 b5 P
        init();                     //系统初始化
/ @4 I$ I: o. e# y! p) E; n, [        PWM_Init();                 //脉冲宽度初始化
& Z3 E1 o  K/ _- ?/ U        while(1)7 M  m2 \3 s+ `. M* _6 u" S
        {
) ]" j0 i$ I1 g* r% q1 v+ H8 x+ ~/ s                keyscan();              //调用按键扫描处理脉宽因数
2 I0 i2 j0 c+ S% j3 h7 x3 p        }
, v  G; }7 p& G& {5 ]3 Z- g  {# N}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-24 00:59 , Processed in 0.058007 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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