pwm输出调试完成,上机给NMOS管给到LED .反了!!!
pwm输出调试完成,上机给NMOS管给到LED .反了!!!用单独的led输出测试好好的.
但是上了NMOS AO3400,结果反了.本来是12340档.现在变成 4321 没有0了
是MOS管问题还是???
单独LED 用的共阳.
NMOS 也是用的
上示波器看看IN1波形 都是小问题,学好基础再做应用.搞技术忌浮躁 Lkck8210 发表于 2024-7-2 15:51
上示波器看看IN1波形
没有示波器
我看手册上面有提到什么D版,什么翻转之类的 wnagming 发表于 2024-7-2 15:55
如果LED正极接电源,负极接NMOS,那么输出1LED灭,输出0LED亮
这个怎么处理哦?
我用8G1K的SOP8上手电驱动的,没办法用8H
就不能用16位的pwm
只能用8位,也够我用了 网老四 发表于 2024-7-2 16:10
都是小问题,学好基础再做应用.搞技术忌浮躁
没有人指点,学起来真真有点难
C语言,单片机.手册和视频加百度 wnagming 发表于 2024-7-2 15:55
如果LED正极接电源,负极接NMOS,那么输出1LED灭,输出0LED亮
我用开发板, 正极电源,负极接IO口并没有问题
换成mos管就不行了
正极接LED ,负极接NMOS 的漏极D ,,G级接IO口,S接地 vb2002 发表于 2024-7-2 16:15
没有人指点,学起来真真有点难
C语言,单片机.手册和视频加百度
你测试LED灯时候,有没有接NMOS?
加了NMOS电路后,相当于多加了个反相器,
如果是这个原因,只能说明你对基础硬件电路太不了解了. 网老四 发表于 2024-7-2 16:23
你测试LED灯时候,有没有接NMOS?
加了NMOS电路后,相当于多加了个反相器,
如果是这个原因,只能说明你对基础 ...
有点概念了
就是说我正常是 0亮1灭
加了nmos管了.就边 0灭, 1亮
NMOS类似于取反了 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