vb2002 发表于 2024-8-17 12:24:22

wnagming 发表于 2024-8-17 10:54
软件PWM和硬件PWM的区别:
软件PWM:IO口推挽要程序设置
                定时器中断需要自己写


...可能是,,我没设置IO口
   因为之前一直用的硬件pwm ..硬件pwm自动设置推挽的
我等会试试推挽看看

DebugLab 发表于 2024-8-17 12:24:26

vb2002 发表于 2024-8-17 12:23
打错字了..黑色的条纹.

定时器做的PWM有黑色的条纹
不能理解

vb2002 发表于 2024-8-17 12:24:47

网老四 发表于 2024-8-17 11:20
任何PWM转模拟信号都会有纹波,只是纹波大小跟后面滤波器特性和负载有关,
要看下实际电路和"嘿嘿的纹波"样子 ...

就是一条条的波纹
我贴到后面

DebugLab 发表于 2024-8-17 12:27:14

vb2002 发表于 2024-8-17 12:24
就是一条条的波纹
我贴到后面

是示波器显示的图像?

vb2002 发表于 2024-8-17 12:30:33

wnagming 发表于 2024-8-17 12:27
快上图!!!!!!!!!!!!!!!!!

#include <STC8H.H>
#include "intrins.h"
#include "stdio.h"

#define MAIN_Fosc 11059200UL
//#define IAP_OFFSET      0x2000                  //STC8G1K08

sbit LED=P1^1;

unsigned char Counter,Compare;
unsigned char KeyNum,Speed;
unsigned char dat;

void Timer2_Init(void);

unsigned char Key();

void Delay(unsigned int xms)        //@11.0592MHz
{
        unsigned char data i, j;
        while(xms)
        {
        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
        xms--;
}}


void main()

{
       
    P1M0 = 0x00; P1M1 = 0x00;

    P3M0 = 0x00; P3M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
        EA=1;
       
       
                Timer2_Init();

        while(1)
        {       
       KeyNum=Key();
                if(KeyNum==1)
                {
                Speed++;
                Speed%=4;
                        if(Speed==0){Compare=0;}
                        Delay(20);
                        if(Speed==1){Compare=15;}
                        Delay(20);
                        if(Speed==2){Compare=35;}
                        Delay(20);
                        if(Speed==3){Compare=66;}
                        Delay(20);
//                        if(Speed==4){Compare=20;}
//                        if(Speed==5){Compare=1;}
                }
               
               
        }
}



void Timer2_Init(void)                //10微秒@11.0592MHz
{
        AUXR |= 0x04;                        //定时器时钟1T模式
        T2L = 0x91;                                //设置定时初始值
        T2H = 0xFF;                                //设置定时初始值
        AUXR |= 0x10;                        //定时器2开始计时
        IE2 |= 0x04;                        //使能定时器2中断
}


unsigned char Key()
{
unsigned char KeyNumber=0;
       
        if(P32==0){Delay(20);while(P32==0);Delay(20);KeyNumber=1;}
       
        return KeyNumber;
}

void Timer2_Isr(void) interrupt 12
{

       
      Counter++;
        Counter%=150;
        if(Counter<Compare)
        {
        LED=0;
        }
        else
        {
        LED=1;
        }
}

vb2002 发表于 2024-8-17 12:30:59

wnagming 发表于 2024-8-17 12:27
快上图!!!!!!!!!!!!!!!!!

发了.在帖子前面
改了推挽也有.
又换回来了

vb2002 发表于 2024-8-17 12:31:41

本帖最后由 DebugLab 于 2024-8-18 18:34 编辑

DebugLab 发表于 2024-8-17 12:27
是示波器显示的图像?
手机拍的.
用15那个实例里面的16位定时器pwm没有

vb2002 发表于 2024-8-17 12:32:27

晓飛飛 发表于 2024-8-17 11:25
“嘿嘿的纹波”是偶发的还是一直有,大概的频率和峰峰值分别有多少,看看是从代码消除还是后级加滤波 ...

只要用定时器生成pwm就有
直接用pwm没有

DebugLab 发表于 2024-8-17 12:33:26

vb2002 发表于 2024-8-17 12:31
手机拍的.
用 stc15 那个实例里面的16位定时器pwm没有

哦LED呀,这是和相机帧率之间存在某种关系导致的

DebugLab 发表于 2024-8-17 12:33:59

DebugLab 发表于 2024-8-17 12:33
哦LED呀,这是和相机帧率之间存在某种关系导致的

而且相机是卷帘快门,不是全局快门
页: 1 [2] 3 4
查看完整版本: 我定时器生成的pwm有波纹怎么回事