vb2002 发表于 2024-7-2 15:38:49

pwm输出调试完成,上机给NMOS管给到LED .反了!!!

pwm输出调试完成,上机给NMOS管给到LED .反了!!!

用单独的led输出测试好好的.
但是上了NMOS AO3400,结果反了.本来是12340档.现在变成 4321 没有0了
是MOS管问题还是???
单独LED 用的共阳.
NMOS 也是用的

Lkck8210 发表于 2024-7-2 15:51:24

上示波器看看IN1波形

网老四 发表于 2024-7-2 16:10:41

都是小问题,学好基础再做应用.搞技术忌浮躁

vb2002 发表于 2024-7-2 16:12:47

Lkck8210 发表于 2024-7-2 15:51
上示波器看看IN1波形

没有示波器
我看手册上面有提到什么D版,什么翻转之类的

vb2002 发表于 2024-7-2 16:14:14

wnagming 发表于 2024-7-2 15:55
如果LED正极接电源,负极接NMOS,那么输出1LED灭,输出0LED亮

这个怎么处理哦?
我用8G1K的SOP8上手电驱动的,没办法用8H
就不能用16位的pwm
只能用8位,也够我用了

vb2002 发表于 2024-7-2 16:15:06

网老四 发表于 2024-7-2 16:10
都是小问题,学好基础再做应用.搞技术忌浮躁

没有人指点,学起来真真有点难
C语言,单片机.手册和视频加百度

vb2002 发表于 2024-7-2 16:18:05

wnagming 发表于 2024-7-2 15:55
如果LED正极接电源,负极接NMOS,那么输出1LED灭,输出0LED亮

我用开发板, 正极电源,负极接IO口并没有问题
换成mos管就不行了
正极接LED ,负极接NMOS 的漏极D ,,G级接IO口,S接地

网老四 发表于 2024-7-2 16:23:06

vb2002 发表于 2024-7-2 16:15
没有人指点,学起来真真有点难
C语言,单片机.手册和视频加百度

你测试LED灯时候,有没有接NMOS?
加了NMOS电路后,相当于多加了个反相器,
如果是这个原因,只能说明你对基础硬件电路太不了解了.

vb2002 发表于 2024-7-2 16:39:50

网老四 发表于 2024-7-2 16:23
你测试LED灯时候,有没有接NMOS?
加了NMOS电路后,相当于多加了个反相器,
如果是这个原因,只能说明你对基础 ...

有点概念了
就是说我正常是 0亮1灭
加了nmos管了.就边 0灭, 1亮
NMOS类似于取反了

vb2002 发表于 2024-7-2 16:44:53

wnagming 发表于 2024-7-2 16:22
IO输出的是高低电平,NMOS栅极输入高电平,CS两端电阻接近0,NMOS栅极输入低电平,CS两端电阻接近无穷大, ...

#include <STC8G.H>
#include "intrins.h"

#define MAIN_Fosc 11059200UL

typedef unsigned char u8;
typedef unsigned int u16;

unsigned char PWM_SAVE;
sbit KEY1 = P3^2;
bit key_flag;
unsigned char PWM_MODE;
unsigned char time_out;

unsigned char ld=0;
unsigned char gear = 0;
unsigned char noShiftTime = 0; // 自上次换挡以来的时间

void pwm_init(void);
void delayms(u16 ms);       

void pwm_init(void)
{
       
    CCON = 0x00;
    CMOD = 0x08;
    CL = 0x00;
    CH = 0x00;

    CCAPM1 = 0x42;
    PCA_PWM1 = 0x00;
    CCAP1L = ld;                  
    CCAP1H = ld;

        CR=1;       
//        while(1);
}

void Timer0_ISR() interrupt 1
        {

if (noShiftTime < 3000 )   noShiftTime++;

}


void timer0_init() {
   
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TH0 = (65536 - 50000) / 256;   
    TL0 = (65536 - 50000) % 256;
    ET0 = 1; // 开启Timer0中断
    EA = 1;// 开启全局中断
    TR0 = 1; // 启动Timer0
}

void delayms(u16 ms)
{
        u16 i;
        do{
                i = MAIN_Fosc /10000;
                while(--i);
        }while(--ms);
}

void main()
{
        P3M0 = 0x00; P3M1 = 0x00;
    timer0_init();
       
while(1)
{          

    pwm_init();
              


      if (KEY1 == 0) {
            delayms(10);
            if (KEY1 == 0) {
                      if (noShiftTime >= 3000 ) {
                  ld = 0; // 关闭LED
                        }
                       
                gear = (gear + 1) % 5; // 切换档位,循环回到0
                while (!KEY1); // 等待按钮释放
               noShiftTime = 0;        
            }
      }
       
                 // 检查是否长时间未换挡
      if (noShiftTime >= 3000) { // 如果3秒(或3000毫秒)未换挡
            gear = 0; // 可以选择将档位重置为0或其他默认档位
            ld = 0; // 关闭LED
            noShiftTime = 0; // 重置计时器
      }
          
          
         
      switch (gear) {
            case 0:

                        ld=0;
                break;
            case 1:

                ld=2;
                break;
            case 2:

                ld=15;
                break;
            case 3:
   
                ld=30;
                break;
                        case 4:
   
                ld=255;
                break;
      }
delayms(10);
    }
}






页: [1] 2
查看完整版本: pwm输出调试完成,上机给NMOS管给到LED .反了!!!