机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2018-11-5 20:08:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 冯喆喆 于 2018-11-5 20:11 编辑
; Q8 W) _  j+ a' T6 S# z8 C* m
* S* D% L- Z: ?8 O7 o% p  ~用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。  求有经验的大神指导下
4 k8 C! _. l$ ]; A" ?这是产生的4KHZ正常波形,占空比为50%
9 _+ Y% a$ b4 q0 Y3 T4 _% v# h; F7 m0 G

, [8 d. g. |) T" O1 Z8 d8 F
1 d# ^3 b" U' W" s这是1KHZ有问题的波形,占空比为60%( D" `, w: f7 b2 b* D

) ~6 E: S! s9 M" A
- L9 q/ O/ `; Y3 B
回复

使用道具 举报

2#
 楼主| 发表于 2018-11-5 20:14:34 | 只看该作者
主要的程序我也贴上来各位看一下
& `3 T3 S0 @) t) l
* \+ F1 I- ^! c3 k# ~+ p/********端口初始化函数********/2 _& f% I: }1 Y/ A1 s
void init()
7 {* {: n& s. P9 i7 W' s{$ I  `8 A1 F; H" X! n
        ANSELH=0x00;                     //设置B口为数字I/O口  u# I* ^# _& ~% ?5 J
        OPTION_REG=0x00;
% _5 ~- b1 a- v2 k' ]' h        WPUB=0xFF;         //设置B口弱上拉
: y: v1 N; d; e+ p. ]% ]        INTCON=0x00;       //关总中断
5 w2 W4 {) a6 ^4 Z' m, m( N        PIE1=0;            //PIE1的中断禁止
7 W: n/ F; P- ?$ h8 }- L8 x        PIE2=0;            //PIE2的中断禁止7 I0 x' k- v& ]" @* h/ k9 e
        TRISB0=1;% L( m: P% T7 E) M
        TRISB1=1;          //将RB1设置为输入口,按按键
  K) f  @( c. T7 m        TRISB2=1;          //将RB2设置为输入口,按按键8 a6 `: E- d% d1 r# p# [
        TRISB3=1;
' x7 C) U1 J! N6 z" d1 V        TRISB4=1;9 x; s) z5 J) K5 }
        RC1=0;( O; X3 \$ t; K# ?; \& Q
        TRISC1=0;          //脉宽调制输出引脚,设置为输出
/ f: |5 M6 g5 r* Z+ ]. ?$ h}; j) P2 S- d% ^; f7 b+ X
/********PWM初始化函数********/* T5 d. P8 A8 W" P8 E4 E
void PWM_Init()
# b# ?3 B2 o# }{8 S* S/ u* `& j. k# {
        PR2=249;           //脉宽调制波形的周期为1000us        - \& j9 d2 i8 U2 e6 f" u1 x
        CCP2CON=0x0C;      //CCP2模块工作在PWM模式,占空因数的低两位为00" r9 t- f3 _6 ], ]- C# L- `
        T2CON=0x02;        //禁止TMR2,且前后分频值为16,同时开始输出PWM
7 m9 D" Z# C4 z9 k# |" m        CCPR2L=0xB8;       //脉宽调制波形的占空比初始值3 z7 E3 J" Z- y$ y2 J$ I& Z2 Z- o
}
5 e9 A; t6 D; q( i- Y( ]" x/ _/********键盘扫描函数*******    */" P  J$ Z+ m, E
void keyscan()+ {! D* T4 }0 t& i. V3 x; K8 R
{
% e& B& O* n: o1 C0 J4 G3 N        if(RB1==0)                  //如果是RB1键按下; }# n0 {" u2 p
        {. o3 o7 V/ M3 U' F# {% v' p8 Z" k8 q0 k. I
                delay_ms(5);              //延时去抖
$ @+ _& i! h# o                if(RB1==0)              //确认是否有键按下
' h8 l3 w( c1 L# S: s4 ]                {' p1 O1 e& H+ G  [# W
                        while(!RB1);        //等待按键释放
2 Q0 R3 i5 N6 {  A4 z                        CCP2CON=0x0C;
- {* W9 l7 T9 y# R# F8 C6 p7 Q2 A; F                        CCPR2L=0xB8;                   //80%占空比( G- G$ |. V' K% m9 q$ R
                        TMR2ON=1;
( K% o* U4 M9 r                }
- d( ^+ I7 y1 ?4 y        }. y" H3 M- B6 R/ ~6 K* ~4 u
        if(RB2==0)                  //如果是RB2键按下
1 k, W2 J* X. b: J# q) U- l        {
/ l. x0 [1 c& V3 n" E0 e) g                delay_ms(5);              //延时去抖3 w2 ?6 R7 M! n8 ?( ]
                if(RB2==0)              //确认是否有键按下
0 f7 i5 s% ^2 W4 `" g/ s                {
$ z8 f6 c" e3 C: U                        while(!RB2);        //等待按键释放8 Y( I. |0 H: s# _/ k0 Q
                        CCP2CON=0x0C;7 v8 N  q- Q! R+ [2 s9 h" [
                        CCPR2L=0x96;                   //60%占空比- _. f, I9 ^- A+ |/ h
                        TMR2ON=1;
4 t9 p$ E/ Z, `) f1 L                }  i. ]3 _) _4 S, W7 K/ e5 t
        }) U& X5 ~! G1 b* E5 l
        if(RB0==0)                  //如果是RB0键按下5 D. b7 T2 o: u: s/ T: \6 v
        {
: e2 q7 u4 A+ R% j4 [+ ]  u                delay_ms(5);              //延时去抖3 r" V! r2 B" j8 `9 @" O! Y1 l3 O
                if(RB0==0)              //确认是否有键按下4 n# u- u+ p6 b' O6 A2 t
                {7 i9 U# ?2 k$ c0 b3 t
                        while(!RB0);        //等待按键释放, p6 _1 x, t* [& J8 Y& p
                        CCP2CON=0x00;                   //关PWM) w: E: t/ k+ J. f8 }( |
                        TMR2ON=0;                        //禁止TMR2
- K8 L$ S) z6 |; p* Q6 f                        //delay_ms(5);; |! O& z9 D  F; u2 n& ~
                        RC1=0;3 Z8 D+ w/ \* t8 h& S
                }
& c% x2 k. t8 @2 M7 t9 r- f2 x        }& u# ?& z9 L) h
}
5 M" e; R- t  X+ |3 e" k! [/********主函数********/
( s. z+ S) k: u* x( `$ Cvoid main()
  j: L) Y) R! `3 p! v{, o% \: y- V5 Y2 l8 ^
        init();                     //系统初始化
1 x: h/ J+ k& t" R1 C7 q& g2 z; v        PWM_Init();                 //脉冲宽度初始化* z( ^: t. {& q% T# ]7 P" a
        while(1)- Z* P2 r! ^6 s" m% d
        {
$ m: g" h! S* ~/ @* a$ s! m0 |, k                keyscan();              //调用按键扫描处理脉宽因数
8 g4 `+ J  t& ]6 x" M; e        }
5 d- Q" A* L0 C* E  r* f* P}
回复 支持 反对

使用道具 举报

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

使用道具 举报

4#
 楼主| 发表于 2018-11-6 14:45:37 | 只看该作者
远祥 发表于 2018-11-6 07:38
8 S6 E/ G3 F/ e) v8 ]" j$ e单片机常用问题吗?

$ W! e8 c6 q/ e5 p5 s+ [这个是用PIC单片机产生PWM波,应该比较常见吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 08:51 , Processed in 0.058815 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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