最小系统P0口上拉电阻是1k排阻,接电机驱动(IN1,IN2,EN1这几根)时高电平输出3.2左右,能够驱动。换P2口,高电平只有1.2V左右,驱动没反应,电机不转,把驱动器的线一拔掉,高电平就接近5V了。是不是驱动能力不足,应该在P2口再接上拉电阻吗?开发板P0口上拉电阻20k可以驱动,自己做的板子P0口上拉电阻10k又不可以,怎么回事? 同样的板子同样的口试了L298N电机驱动,高电平都可以接近5V。
张工,您好!使用三极管,场效应管等开关元件实现电机PWM(脉冲宽度调制)调速时,对于电路的性能指标。除了除了电流电流、电压,还应当考虑哪些因素。谢谢~
上次提问一次了,关于电机驱动,现在用的型号是L298N。用它链接单片机和角度感应器,来控制风力大和板子倾斜的角度,不知道还有没有其他方法????
张老师你好,我想问下BLDC电机,方波启动,我在启动的时候有时候会有个声音,感觉像是没启动起来,示波器测试自举电容,发现有时候会有一个4V的压降,这个会导致它关闭高压的预驱动。这个问题是怎么回事啊,会不会是启动太快的原因啊?
需要什么东西请告诉下谢谢 要求按一下开关电级运行大指定地点停止过几分钟后就自己回来 在按开关又重复这个动作 好像要2个接触器 一个时间开关 不知道有没有 能让电机自己反转的时间开关
三个按键一个旋钮连接51单片机,驱动为L298N,控制直流电机转速小,大,停止,随着旋钮转速变大变小,程序很难吗
stc15有3路pwm,但3路pwm共用一个计数器CH,CL。我想用3路pwm分别控制3个电机。但是3个电机是不是状态都一样啊。调其中一个电机其他两个也会变化。有什么办法能让这三路pwm分别控制三路电机
stc15有3路pwm,但3路pwm共用一个计数器CH,CL。我想用3路pwm分别控制3个电机。但是3个电机是不是状态都一样啊。调其中一个电机其他两个也会变化。有什么办法能让这三路pwm分别控制三路电机
#include <reg52.h>#define KeyPort P3#define DataPort P0 sbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存sbit DCOUT = P1^1;//定义电机信号输出端口unsigned char PWM_ON; //定义速度等级#define CYCLE 10 //周期unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void DelayUs2x(unsigned char t);//us级延时函数声明 void DelayMs(unsigned char t); //ms级延时void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数unsigned char KeyScan(void);//键盘扫描void Init_Timer0(void);//定时器初始化void main (void){ unsigned char num; PWM_ON=0; Init_Timer0(); //初始化定时器0,主要用于数码管动态扫描 TempData[0]=0x5E; //'d' TempData[1]=0x39; //'C' while (1) //主循环 { num=KeyScan(); //循环调用按键扫描 if(num==1)//第一个按键,速度等级增加 { if(PWM_ON<CYCLE) PWM_ON++; } else if(num==2)//第二个按键,速度等级减小 { if(PWM_ON>0) PWM_ON--; } TempData[5]=dofly_DuanMa[PWM_ON/10]; //显示速度等级 TempData[6]=dofly_DuanMa[PWM_ON%10]; }}/*------------------uS延时函数-----------------------*/void DelayUs2x(unsigned char t){ while(--t);}/*---------------------mS延时函数------------------------*/void DelayMs(unsigned char t){while(t--){ //大致延时1mS DelayUs2x(245); DelayUs2x(245);}}/*----------------------显示函数-----------------------------*/void Display(unsigned char FirstBit,unsigned char Num){ static unsigned char i=0; DataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0; DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; i++; if(i==Num) i=0;}/*------------------------------------------------ 定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 //TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*---------------------定时器中断子程序----------------------------*/void Timer0_isr(void) interrupt 1 {static unsigned char count;TH0=(65536-1000)/256; //重新赋值 2msTL0=(65536-1000)%256;Display(0,8); // 调用数码管扫描if (count==PWM_ON) { DCOUT = 0; //如果定时等于on的时间, //说明作用时间结束,输出低电平 } count++;if(count == CYCLE) //反之低电平时间结束后返回高电平 { count=0; if(PWM_ON!=0) //如果开启时间是0 保持原来状态 DCOUT = 1; }}/*----------------------------------按键扫描函数,返回扫描键值------------------------------*/unsigned char KeyScan(void){unsigned char keyvalue;if(KeyPort!=0xff) { DelayMs(10); if(KeyPort!=0xff) { keyvalue=KeyPort; while(KeyPort!=0xff); switch(keyvalue) { case 0xfe:return 1;break; case 0xfd:return 2;break; //case 0xfb:return 3;break; // case 0xf7:return 4;break; //case 0xef:return 5;break; // case 0xdf:return 6;break; // case 0xbf:return 7;break; // case 0x7f:return 8;break; default:return 0;break; } } } return 0;}这个代码没问题 就是不知道怎么变速的 急啊?????
脉冲步进电机驱动器如何在不太占用系统资源的情况下精确控制步进电机。一般是有一个脉冲,步进电机走一步,现在该如何在不太占用系统资源的情况下精确控制输出脉冲数。