1. 怎么用单片机控制伺服放大器来控制伺服电机
伺服控制一般单片机给脉冲信号,伺服接受的控制信号一般简单控制如下:
S_ON:伺服ON,使能信号
Pulse+:正转 或Pulse:脉冲
Pulse-:反转 dir 方向
以上三个控制信号就可以控制伺服电机了。
2. 如何用单片机控制直流电机
通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。
通过单片机产生PWM波控制直流电机程序
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管显示码(0-9)
sbitxiaoshudian=P0^7;
sbitwei1=P2^4;//数码管位选定义
sbitwei2=P2^5;
sbitwei3=P2^6;
sbitwei4=P2^7;
sbitbeep=P2^3;//蜂鸣器控制端
sbitmotor=P1^0;//电机控制
sbits1_jiasu=P1^4;//加速按键
sbits2_jiansu=P1^5;//减速按键
sbits3_jiting=P1^6;//停止/开始按键
uintpulse_count;//INT0接收到的脉冲数
uintnum=0;//num相当于占空比调节的精度
ucharspeed[3];//四位速度值存储
floatbianhuasu;//当前速度(理论计算值)
floatreallyspeed;//实际测得的速度
floatvv_min=0.0;vv_max=250.0;
floatvi_Ref=60.0;//给定值
floatvi_PreError,vi_PreDerror;
uintpwm=100;//相当于占空比标志变量
intsample_time=0;//采样标志
floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,积分,微分常数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
voidtime_init()
{
ET1=1;//允许定时器T1中断
ET0=1;//允许定时器T0中断
TMOD=0x15;//定时器0计数,模式1;定时器1定时,模式1
TH1=(65536-100)/256;//定时器1值,负责PID中断,0.1ms定时
TL1=(65536-100)%6;
TR0=1;//开定时器
TR1=1;
IP=0X08;//定时器1为高优级
EA=1;//开总中断
}
voidkeyscan()
{
floatj;
if(s1_jiasu==0)//加速
{
delay(20);
if(s1_jiasu==0)
vi_Ref+=10;
j=vi_Ref;
}
while(s1_jiasu==0);
if(s2_jiansu==0)//减速
{
delay(20);
if(s2_jiansu==0)
vi_Ref-=10;
j=vi_Ref;
}
while(s2_jiansu==0);
if(s3_jiting==0)
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)
{
registerfloaterror1,d_error,dd_error;
error1=vi_Ref-vi_SpeedBack;//偏差的计算
d_error=error1-vi_PreError;//误差的偏差
dd_error=d_error-vi_PreDerror;//误差变化率
vi_PreError=error1;//存储当前偏差
vi_PreDerror=d_error;
bianhuasu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);
return(bianhuasu);
}
voidv_Display()
{
uintsu;
su=(int)(reallyspeed*10);//乘以10之后强制转化成整型
speed[3]=su/1000;//百位
speed[2]=(su00)/100;//十位
speed[1]=(su0)/10;//个位
speed[0]=su;//小数点后一位
wei1=0;//第一位打开
P0=table[speed[3]];
delay(5);
wei1=1;//第一位关闭
wei2=0;
P0=table[speed[2]];
delay(5);
wei2=1;
wei3=0;
P0=table[speed[1]];
xiaoshudian=1;
delay(5);
wei3=1;
wei4=0;
P0=table[speed[0]];
delay(5);
wei4=1;
}
voidBEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
voidmain()
{
time_init();
motor=0;
while(1)
{
v_Display();
BEEP();
}
if(s3_jiting==0)//对按键3进行扫描,增强急停效果
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
voidtimer0()interrupt1
{
}
voidtimer1()interrupt3
{
TH1=(65536-100)/256;//1ms定时
TL1=(65536-100)%6;
sample_time++;
if(sample_time==5000)//采样时间0.1ms*5000=0.5s
{
TR0=0;//关闭定时器0
sample_time=0;
pulse_count=TH0*255+TL0;//保存当前脉冲数
keyscan();//扫描按键
reallyspeed=pulse_count/(4*0.6);//计算速度
pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);
if(pwm
if(pwm>100)pwm=100;
TH0=TL0=0;
TR0=1;//开启定时器0
}
num++;
if(num==pwm)//此处的num值,就是占空比
{
motor=0;
}
if(num==100)//100相当于占空比调节的精度
{
num=0;
motor=1;
}
}
3. 单片机和pwm和PLC的大致用途是什么
【1】单片机可以开发成单片机应用系统,应用极为广泛,许多工业控制设备都有它的踪影。单片机甚至可以实现低廉的PLC。与PLC不同的是,外围电路设计灵活且必要,编程采用汇编或C,价格相当便宜。
【2】PLC——Programmable
Logic
Controller。更实用的工业控制器,有足够的扩展板方便直连电气设备。编程采用梯形图等。价格相当相当贵。
【3】PWM——Pulse
Width
Molation。脉宽调制。与前两者风马牛,属于一种应用技术,而非设备。单片机可以产生此控制波形,PLC也可。用于占空比调制输出。如开关电源开关管控制。类似应用可见与电机调速、调光灯等。
4. 单片机语句P1= ~ pulse;怎么解释
'~'是个位运算符,意思是对变量取反,
那么你的那个意思就是 对pulse取反,然后将其值赋给P1管脚
5. 单片机输出的电平多少
单片机输出的高电平和低电平
在单片机的应用中,输出高低电平是我们经常需要处理的一项任务。通过控制输出电平的高低来驱动外部器件,实现各种功能。那么单片机输出的电平到底有多少呢?
高电平和低电平的定义
首先,我们需要明确高电平和低电平的定义。在单片机的输入输出口中,我们通常定义高电平的电压为5V左右,而低电平的电压则为0V左右。这两种电平的中间值则为临界点。当单片机输出高于临界点的电压时,我们通常称之为高电平;当单片机输出低于临界点的电压时,则对应为低电平。
高低电平的控制
单片机输出的高低电平需要通过程序控制,一般使用GPIO(General Purpose Input Output)口实现。在单片机的程序中,我们可以通过编写输出高低电平的代码来实现对GPIO口的控制。以Arino为例,以下是一段控制输出高低电平的示范代码:
void setup()
{
pinMode(13, OUTPUT); //定义13号口为输出口
}
void loop()
{
digitalWrite(13, HIGH); //输凳带出高电平
delay(1000); //延迟1秒
digitalWrite(13, LOW); //输出低电平
delay(1000); //延迟1秒
}
在这段代码中,我们首先定义了13号口为输出口,然后在loop循环中,先输出高电平,延迟一秒钟,再输出低电平,也延迟一秒钟,以此反复循环。
高低电平的应用
单片机输出的高低电平具有广泛的应用场枣悔芦景。比如,当单片机需要驱动LED灯时,我们需要输出高电平来点亮LED灯;当需要驱动电机转动时,在单片机输出低电平的同时,还需要结合PWM(Pulse Width Molation)控制电机的转速和方向。
此外,单片机的高低电平还可以用于模拟输入输出,比如模拟音频信号的输入输出,模拟各种传感器数据的输入输出等等。
总结
单片机输出的电平,无论是高电平还是低电平,都是我们常常需要处理的问题。通过程序对GPIO口的控制,我们可以实现单片机输出电平的控制,从而驱动各种各样的外部器件,实现各种各样的功能。知道了单片机输出电平的基本原理和应用,我们才能更好地理解单片机的工作前羡原理,也更能灵活地应用单片机技术。