直流电机多键控制可以实现正转反转,不同速度的转由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“直流电机的正反转控制”。
单片机课程设计报告
直流电机控制
一、电源电路:
电源用5V电池供电,转换电路由四个二极管组成,这个设计是为了防止电源正负极接反造成电路烧坏。
二、最小系统:
三、直流电机驱动原理图:
利用PWM功率驱动电路来驱动直流电机,只要ZDJ_A的电压比ZDJ_B的电压高,电机正转。如果ZDJ_BD的电压比ZDJ_A的电压高,电机反转。
四、系统整体原理图:
五、问题及解决方法:
问题:在运行程序的时候出现错误不能生成HEX文件?
解决方法:检查程序发现少了一个“}”,加上就可以生成HEX文件了。
问题:运行程序的时候电机不转动?
解决方法:单片机的管脚的连线和程序中的不同,改变连线就可以转动了。
六、程序流程图:
七、实验心得体会:
通过软件的设计及运行,实验达到了预期的效果,实现了直流电机正转、反转、加速和减速。这次设计让我对直流电机有了进一步的了解、在设计电路的过程中,培养了我的设计思维,增强了自己的实际操作能力,也让我认识到理论与实践有一定的差距,在以后的学习过程中,我会更加注重理论与实践结合起来,让自己不断的进步。最后,对张老师表示衷心的感谢,老师,您辛苦了。
八、实验程序:
#include #include #include #define uint unsigned int #define uchar unsigned char sbit k0 = P2^0;sbit k1 = P2^1;sbit k2 = P2^2;sbit k3 = P2^3;sbit k4 = P2^4;sbit k5 = P2^5;sbit k6 = P2^6;sbit k7 = P2^7;sbit C1 = P1^0;sbit C2 = P1^1;delay(uint ims);//延时函数 void main(){ while(1){ if(k6 == 1){
//一种最快的占空比
if(k7 ==1)
{ delay(20);
C1 = 1;
delay(30);
C1 = 0;delay(1)
C2 = 0;
}
else
{
delay(20);
C2 = 1;
delay(30);
C2 = 0;
delay(1);
C1 = 0;
}
}
if(k5 == 1){
//一种第二快的占空比
if(k7 ==1)
{ delay(20);
C1 = 1;
delay(20);
C1 = 0;
delay(1);
C2 = 0;
}
else
{
delay(20);
C2 = 1;
delay(20);
C2 = 0;
delay(1);
C1 = 0;
} }
if(k4 == 1){
//一种第三快的占空比
if(k7 ==1)
{ delay(20);
C1 = 1;
delay(10);
C1 = 0;
delay(1);
C2 = 0;
}
else
{
delay(20);
C2 = 1;
delay(10);C2 = 0;
delay(1);
C1 = 0;
} }
if(k3 == 1){
//一种第四快的占空比
if(k7 ==1)
{ delay(20);
C1 = 1;
delay(6);
C1 = 0;
delay(12);
C2 = 0;
}
else
{
delay(20);
C2 = 1;
delay(6);
C2 = 0;
delay(12);
C1 = 0;
} }
if(k2 == 1){
//一种第五快的占空比
if(k7 ==1)
} { delay(20);C1 = 1;delay(6);C1 = 0;delay(18);C2 = 0;} else { delay(20);C2 = 1;delay(6);C2 = 0;
delay(18);C1 = 0;} if(k1 == 1){ //一种第6快的占空比
if(k7 ==1){ delay(20);
C1 = 1;
delay(6);
C1 = 0;
delay(24);
C2 = 0;} else { delay(20);
C2 = 1;
delay(6);
C2 = 0;
delay(24);
C1 = 0;} } if(k0 == 1){ //一种最慢的占空比
if(k7 ==1){ delay(20);
C1 = 1;
delay(6);
C1 = 0;
delay(30);
C2 = 0;
}
else
{
delay(20);
C2 = 1;
delay(6);
C2 = 0;
delay(30);
C1 = 0;
} } if((k6==0&&k5==0&&k4==0&&k3==0&&k2==0&&k1==0&&k0==0)==1){
//电机停转
C1 = 0;
C2 = 0;} } }
delay(uint ims){ int i;for(i = 0;i