❶ 怎么用单片机控制直流电机调速
用PWM或DAC都可以,工业现场这两种都有用到,根据你的具体情况进行选择,PWM的要仔细选择频率,并且做好滤波和抗干扰;用DAC的话成本相对来说会稍高,但干扰较小.
如果是做试验,用玩具小马达的话,直接用三极管以PWM来控制就可以了.
❷ 51单片机控制直流电机。(c语言控制)
有3种方案:
第一种,通过PWM脉宽调制输出方法控制转速,控制占空比的大小可以实现调速!
第二种,通过AD转换的方法控制直流电机的电压
第三种,用xtr115程控电流源来控制直流电机(类似第二种方法)
如果以上的驱动能力不够的话再加上一个电压跟随器!
程序方面就是一个寄存器的配置问题了,你查一下单片机的技术手册上面都有介绍的,祝你成功
❸ 单片机驱动直流电动机
你用的是12V电源,也就应该使用这个电路了。
问题是单片机输出高电平,提供的电流有限,虽经过8050放大,也难以达到使电机转动的需求。
可以再加一级放大,用8550即可,见图。
原来的1K电阻可以适当的减小,680~470欧姆左右即可。
此时,单片机输出低电平时,电机转动。
--------------------------
加那两个电阻,是进行电流限制,以免烧坏三极管和单片机引脚。
3.3K电阻,是控制8550的基极电流,在1mA左右就基本够用;
减小到1K也可,这时,电流将近5mA了,还可以的。
1K电阻,是控制8050的基极电流的,减小到470欧姆,基极电流就能达到8~10mA,电流再增大,8050有危险。
❹ 如何用单片机控制直流电机
通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。
通过单片机产生PWM波控制直流电机程序
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管显示码(0-9)
sbit xiaoshudian=P0^7;
sbit wei1=P2^4; //数码管位选定义
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
sbit beep=P2^3; //蜂鸣器控制端
sbit motor = P1^0; //电机控制
sbit s1_jiasu = P1^4; //加速按键
sbit s2_jiansu= P1^5; //减速按键
sbit s3_jiting=P1^6; //停止/开始按键
uint pulse_count; //INT0接收到的脉冲数
uint num=0; //num相当于占空比调节的精度
uchar speed[3]; //四位速度值存储
float bianhuasu; //当前速度(理论计算值)
float reallyspeed; //实际测得的速度
float vv_min=0.0;vv_max=250.0;
float vi_Ref=60.0; //给定值
float vi_PreError,vi_PreDerror;
uint pwm=100; //相当于占空比标志变量
int sample_time=0; //采样标志
float v_kp=1.2,v_ki=0.6,v_kd=0.2; //比例,积分,微分常数
void delay (uint z)
{
uint x,y;
for(x=z;x>0;x--)
for (y=20;y>0;y--);
}
void time_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; //开总中断
}
void keyscan()
{
float j;
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);
}
float v_PIDCalc(float vi_Ref,float vi_SpeedBack)
{
register float error1,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);
}
void v_Display()
{
uint su;
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;
}
void BEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
void main()
{
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);
}
void timer0() interrupt 1
{
}
void timer1() interrupt 3
{
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;
}
}
❺ 单片机pwm控制直流电机
直流电机驱动最简单的是用三极管8050和8550搭H桥,然后用PWM控制,单片机检测拨码开关,然后输出不同的PWM就可以了,H桥原理图:
❻ 单片机控制直流电机设计
摘要
i
abstract
ii
1
概述
1
1.1
课题研究背景及意义
1
1.2
直流电机控制现状及发展趋势
2
1.3
课题任务与研究内容
3
2
直流电机控制方案的确定
5
2.1
直流电动机调速方法的选择
5
2.2
调压调速方法的选择
7
2.3
pwm调速控制原理
10
2.4
驱动方式的选择
11
2.5
伺服系统控制方案的选择
13
3
控制系统matlab/simulink建模仿真
16
3.1
matlab动态仿真工具simulink简介
16
3.2
仿真参数计算
16
3.3
模型建立与仿真结果分析
18
4
系统硬件电路设计
27
4.1
系统硬件结构概述
27
4.2
主电路设计
27
4.3
tms320lf2407控制器
30
4.4
检测电路设计
32
4.5
ipm驱动控制电路设计
34
4.6
故障综合电路设计
35
4.7
dsp-pc机通信电路设计
36
5
系统软件设计
37
5.1
dsp软件开发工具ccs简介
37
5.2
软件设计概述
38
5.3
主程序
40
5.4
pwm波形输出程序
41
5.5
电枢电流检测程序
42
5.6
转速检测程序
42
5.7
dsp-pc通信程序
43
5.8
调节器程序
44
5.9
中断处理程序
46
总结
47
参考文献
48
附录
50
致
谢
51
❼ 单片机如何控制直流电机的速度
基于模糊PID的直流力矩电机转速控制。
在分析模糊控制和PID控制结合方式的基础上,设计一个二维模糊PID控制算法,该算法根据误差信号是否达到阈值来决定何时在模糊控制与PID控制之间切换.采用编码器、80196KC单片机、16位D/A转换器和直流力矩电并结合上述控制算法构成直流力矩电机的模糊PID稳速控制系统.通过对标准PID和模糊PID实测数据分析比较说明,模糊PID控制可以达到无超调输出,其调节时间小于标准PID控制的调节时间,稳态误差小于万分之四.
❽ 51单片机可以直接控制直流电机吗 在IO口上接个直流电机
不可以,电机工作电流很大,远远超过单片机的允许范围,直接控制,很容易烧坏单片机或者使系统无法正常工作,其他的问题还有一大把。
❾ 单片机通过继电器控制直流电机程序
记得加三极管驱动继电器