永发信息网

用C语言在设置单片机脉宽的时候应该怎样设置成多个挡位的PWM

答案:3  悬赏:60  手机版
解决时间 2021-02-12 15:38
  • 提问者网友:玫瑰园
  • 2021-02-11 16:57
如果问老手的话,回答侧是单片机内部有没有自带PWM都没有关系,用定时器延长高电平周期就可以,有点不知道怎么走,谁有C的编程实例给我看一下,这方面的高手指教一下
最佳答案
  • 五星知识达人网友:荒野風
  • 2021-02-11 17:50
你是想用来调速的吧?
十个档位分别对应电机的10个速度?
其实没有那么麻烦,你用来定时器做一个固定的定时时间。
在中断里面,设置PWM占空比,自也就是高低zd电平的比例。
void Timer0_ISR( void ) interrupt 1
{
    static uchar Count= 0;
    TH0 = xx;
    TL0 = xx;// 这个你自己定
    Count++; 
    switch( Status )
    {
        case 0: 
            if(Count<Duty0) IO = 1;
            else if(Cont>100) Count = 0;
            else IO = 0;
            break;
        // 其余的9档都一样。        
    }      


//Duty0是0档的占空比,依次类推 
//这样,你只需改变Status的值,就可以改变PWM的占空比了。
全部回答
  • 1楼网友:狂恋
  • 2021-02-11 19:35
周期要求是多少,要有分辨力是多少,1%么
  • 2楼网友:白昼之月
  • 2021-02-11 19:24
#include<reg51.h> #define uchar unsigned char uchar pwm=50,cnt=0; sbit pluse=p1^0; sbit keyu=p1^4; sbit keyd=p1^5; void t0isr() interrupt 1 { cnt++; if(cnt>100)cnt=0; if(cnt<pwm)pluse=1; else pluse=0; } main() { tmod=0x02; th0=256-246; //改变该值可以改变频率。 tl0=256-246; tr0=1; et0=1; ea=1; while(1) { if(keyu==0) { while(keyu==0); if(pwm<100)pwm++; } if(keyd==0) { while(keyd==0); if(pwm>0)pwm--; } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯