找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3390|回复: 3

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

[复制链接]
发表于 2018-11-5 20:08:17 | 显示全部楼层 |阅读模式
本帖最后由 冯喆喆 于 2018-11-5 20:11 编辑
* L1 }$ D0 d; w7 o" y* l
% y1 q6 F( ?0 J: G( P用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。  求有经验的大神指导下$ E  J$ }" n, ]% Y3 m
这是产生的4KHZ正常波形,占空比为50%3 i: Y6 @0 g8 L- x

1 x+ W: }# W- [; J7 [1 d 微信图片_20181105201023.jpg
$ }- f9 i! B- V$ N  d1 V5 j
8 U- b3 u* Z" D8 `% E  W0 o! \6 X这是1KHZ有问题的波形,占空比为60%
# [# N/ W6 H4 q0 _ 微信图片_20181105201034.jpg : t, _) t  r0 g

/ Y/ C% T- Q8 F! ?- s. D
回复

使用道具 举报

 楼主| 发表于 2018-11-5 20:14:34 | 显示全部楼层
主要的程序我也贴上来各位看一下
( a6 R+ j1 K$ v
' I/ i3 h  _; b1 E6 w& r% ?/********端口初始化函数********/2 {* Z# z' Y  p' G: O2 h. l$ Q9 {" v
void init()! h1 ~$ d8 U. L7 V  P' ~
{
6 H7 t$ Z) V. r  J        ANSELH=0x00;                     //设置B口为数字I/O口
3 e# s( m/ G7 |9 T( V$ |6 [3 A        OPTION_REG=0x00;
) K% K) L) o$ ]. w        WPUB=0xFF;         //设置B口弱上拉; d/ z  z4 Q* r
        INTCON=0x00;       //关总中断, b; P" ?5 B4 P% [
        PIE1=0;            //PIE1的中断禁止- ^# P+ C* t5 t/ q- T) G
        PIE2=0;            //PIE2的中断禁止
" Q0 S; @3 ^0 a, t) T9 I( c        TRISB0=1;$ Q  L3 F% ^. I! l
        TRISB1=1;          //将RB1设置为输入口,按按键
+ p: G/ t+ h0 X- [        TRISB2=1;          //将RB2设置为输入口,按按键
; I1 Q6 P3 l& f6 e2 {8 D4 e5 o        TRISB3=1;
/ t6 s! I+ Y5 I* Q        TRISB4=1;
& C6 [1 z& L/ b2 Y% R        RC1=0;+ W9 ]1 _; q" E3 ], ^
        TRISC1=0;          //脉宽调制输出引脚,设置为输出
' t0 F" h; X2 P& i4 J2 i8 m}
( {  \5 }. I8 n+ U2 U5 [0 w/********PWM初始化函数********/
/ F, ~. y$ S( u8 Cvoid PWM_Init()
% N" X$ {# E5 K/ C. N4 h; o{
1 O8 t& x3 o9 f) B% V        PR2=249;           //脉宽调制波形的周期为1000us       
$ `3 ^; l  M# W7 J) x        CCP2CON=0x0C;      //CCP2模块工作在PWM模式,占空因数的低两位为00' D- N' Y' n/ s( M6 c* V/ t7 U
        T2CON=0x02;        //禁止TMR2,且前后分频值为16,同时开始输出PWM  q. ]$ q, V: ~& n; w6 a
        CCPR2L=0xB8;       //脉宽调制波形的占空比初始值; `6 z) p( L$ E! y. Z) y
}  [& j0 E4 i, ?9 Q( A
/********键盘扫描函数*******    */
1 X' M7 F2 S3 O  C$ Fvoid keyscan()  L, l  c- B( q( q
{
6 k: `% w3 k; X* v        if(RB1==0)                  //如果是RB1键按下
/ e7 Z" W6 F; t0 H        {- ]* Q6 ~% V6 R* G0 C7 X
                delay_ms(5);              //延时去抖
0 v* U! r  r$ K6 Z0 M                if(RB1==0)              //确认是否有键按下5 j" [% }- f1 k1 x/ i
                {5 }+ [& O3 [* K+ X/ C; ?
                        while(!RB1);        //等待按键释放6 C1 R0 v2 o# j8 y0 \! A6 a7 Q- O% n
                        CCP2CON=0x0C;; N6 p+ W! t" q: B# N) L: O
                        CCPR2L=0xB8;                   //80%占空比/ V' r0 L8 u. c9 y# ^* v
                        TMR2ON=1;- l  c/ j5 y2 A
                }3 N8 K# d; [  @1 |3 o: J; R4 I
        }
5 d" |& ^2 T' E7 k) c" D        if(RB2==0)                  //如果是RB2键按下
0 Y" D6 A- a$ b" E) \$ Z+ P        {
3 [1 k  [, w+ R+ r* m                delay_ms(5);              //延时去抖
/ \3 ]9 J# g  E# f1 _0 t6 d                if(RB2==0)              //确认是否有键按下
  i' G" F% [# h' j1 j6 e; ^9 |: {                {
9 d* Y" o0 O( L; ~: W; ]/ [                        while(!RB2);        //等待按键释放9 o, \7 i" [* U
                        CCP2CON=0x0C;
, S0 T0 `; J& U$ J5 g6 ~                        CCPR2L=0x96;                   //60%占空比0 [2 c2 Y2 F) S# v$ r8 J
                        TMR2ON=1;
4 S9 v& Q6 E$ ~: S+ D                }
+ z: Q& N3 ^* D4 {/ r        }
/ P% m* Q/ i; g- R2 d$ |6 a- o7 w9 k        if(RB0==0)                  //如果是RB0键按下- Q; ^8 v( X3 }, |; P* j
        {
7 m! x4 Z1 C5 U" U                delay_ms(5);              //延时去抖
8 n/ U9 |# R' [/ X0 [                if(RB0==0)              //确认是否有键按下" q$ M; \0 s, X) C' P& o
                {
, R6 x; d" p4 j" e                        while(!RB0);        //等待按键释放
3 C) q& `: B1 P5 @( L                        CCP2CON=0x00;                   //关PWM6 t3 \/ I4 o% K: N  {& ^
                        TMR2ON=0;                        //禁止TMR2
  d3 T8 c! K3 `3 q3 @) @) s                        //delay_ms(5);
4 X% l6 L- u5 a9 J                        RC1=0;
0 X  v& M% r/ ?                }
3 g; m% o+ {/ a" L( N/ Z        }
9 i& E, \: b- [1 m}
( N; K8 c) c- h1 a) m6 l3 R' ^; {: e: E/********主函数********/
9 k+ ], i( m9 ^8 E' `9 B- ~$ ]( ~+ Qvoid main()
$ F% E0 e" k6 d0 t# t$ ?7 ^{
& v7 C0 X4 {+ Z5 T1 Q- O        init();                     //系统初始化$ k3 D9 L) D. n% k
        PWM_Init();                 //脉冲宽度初始化
' V1 s9 l8 Y5 _! U( L# c        while(1)# ~3 ^9 q2 J* a  }
        {% M) t# J6 [4 e9 L- q' N$ @
                keyscan();              //调用按键扫描处理脉宽因数3 l( |, I- C, H4 i4 C+ C
        }
3 I' j# F/ q0 v/ p  c}
发表于 2018-11-6 07:38:09 | 显示全部楼层
单片机常用问题吗?
 楼主| 发表于 2018-11-6 14:45:37 | 显示全部楼层
远祥 发表于 2018-11-6 07:38
7 U3 ^/ K5 n" g, X( M( O$ v单片机常用问题吗?
9 n# y$ B0 p* I$ J6 j$ o) b/ c
这个是用PIC单片机产生PWM波,应该比较常见吧
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-9-18 14:05 , Processed in 0.066413 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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