历史上的今天
今天是:2024年12月24日(星期二)
2019年12月24日 | 单片机直流电机调速并显示的仿真与程序源码
2019-12-24 来源:51hei
直流电机调速系统有如下功能按钮:
正转P2^3输出PWMP2^4为1
反转P2^4输出PWMP2^3为1
PWM占空比+1
开始/暂停
直流电机调速仿真原理图如下
电路原理图如下:
67-元件清单
1) 9*15万用板
2) STC89C51单片机
3) 40脚IC座
4) 1602液晶
5) 16p母座
6) 16p排针
7) 10k电阻*3
8) 1k电阻*5
9) 3v直流电机
10) 3*1万用板
11) 磁铁*2
12) 塑料管
13) 3144霍尔传感器
14) 4148二极管*4
15) 8050三极管*4
16) 8550三极管*2
17) 103排阻
18) 104独石电容
19) 10uf电解电容
20) 30pf瓷片电容*2
21) 12M晶振
22) 按键*6
23) 自锁开关
24) DC电源插口
25) 导线若干
26) 焊锡若干
27) USB电源线或电池盒
单片机源程序如下:
#include #define uchar unsigned char #define uint unsigned int void displaym(); sbit en=P2^5; //1602 6管脚 sbit rs=P2^7; //1602端口 4管脚 sbit rw=P2^6;//lcd1602控制端口 5管脚 sbit num1=P1^0; //占空比加1 sbit num2=P1^1; //占空比减一 sbit num3=P1^2; //正传 sbit num4=P1^3; //反转 sbit num5=P1^4; //开始停止切换 sbit out=P3^4; //PWM输出用于正传 sbit out1=P3^7; //PWM输出用于反转 uint zhuansu,flag,z1,z2,m,flag_1,zheng,fan,kai; void delay(uint z)//延时1ms函数 { uint x,y; for(x=0;x } void write_com(uchar com)//向1602写一字节(控制指令) { rs=0; P0=com; delay(5); en=0; delay(10); en=1; } void write_data(uchar date)//向1602写一字节(数据) { rs=1; P0=date; delay(5); en=0; delay(5); en=1; } void init()//初始化函数 { en=0; rw=0; write_com(0x01); //lcd初始化 write_com(0x38); //5X7显示 write_com(0x0c); //关闭光标 TMOD=0x01; //定时器方式1 TH0=0xdc; TL0=0x00; //定时器装入初值 EA=1; //开总中断 ET0=1; //定时器0开中断 TR0=1; EX1=1; IT1=1; //定时器启动 TH1=0xfc; TL1=0x66;//定时100us ET1=1; //定时器1开中断 TR1=1; write_com(0x80); write_data('V'); write_data(':'); write_com(0x87); //第一行显示转速 write_data('r'); write_data('p'); write_data('m'); write_com(0xc0); write_data('z'); write_data('h'); write_data('a'); write_data('n'); write_data('k'); write_data('o'); write_data('n'); write_data('g'); write_data('b'); write_data('i'); //在第二行显示zhankongbi: write_data(':'); displaym(); } void keyscan() //键盘扫描函数 { if(num1==0) { delay(5); //消除抖动 if(num1==0) { if(m<=199) m++; displaym(); //设定占空比加一 } } if(num2==0) { delay(5); if(num2==0) { if(m>=1) m--; displaym(); //设定占空比减一 } } if(num3==0) { delay(5); if(num3==0) { zheng=1; //正传标志置1 fan=0; // 反转标志置0 } } if(num4==0) { delay(5); if(num4==0) { zheng=0; //正传标志置0 fan=1; // 反转标志置1 } } if(num5==0) { delay(5); if(num5==0) { while(num5==0) ; kai=1-kai; } } } void display() { write_com(0x82); zhuansu=zhuansu*30; //将两秒内的计数乘以30得到转每分 if(zhuansu/10000!=0) write_data(zhuansu/10000+0x30); //如果转速的万位不为0 正常显示否则显示空格 else write_data(' '); if(zhuansu/1000==0) write_data(' '); else write_data(zhuansu%10000%1000+0x30); //如果转速小于1000 千位为空格 否则正常显示 if(zhuansu/100==0) write_data(' '); else write_data(zhuansu%10000%1000/100+0x30); //如果转速小于100 百位为空格 否则正常显示 if(zhuansu/10==0) write_data(' '); else write_data(zhuansu%10000%1000%100/10+0x30); //如果转速小于10 十位为空格 否则正常显示 write_data(zhuansu%10000%1000%100%10+0x30); write_com(0xd0); //如果没有这句,当中断内的显示函数执行完,就会在转速的位置显示占空比数据,导致乱码 } void displaym() { write_com(0xcb); if(m/200%10!=0) write_data(m/200%10+0x30); //如果占空比百位不为0则显示百位否则显示空格 else write_data(' '); if(m/200%10==0&&m/20%10==0) write_data(' '); else write_data(m/20%10+0x30); //如果占空比小于10 十位正常显示 否则显示空格 write_data(m/2%10+0x30); //显示个位 } void main() { flag_1=0; m=100; //占空比为100
下一篇:单片机数字温度计的课程设计
史海拾趣
|
Protel99SE精彩教程 此教程采用的样板软件是PROTEL99SE汉化版,对于学习PROTEL99SE很有用~99SE是PROTEL家族中目前最稳定的版本,功能强大。采用了*.DDB数据库格式保存文件,所有同一工程相关的SCH、PCB等文件都可以在同一*.DDB数据库中并存,非常 ...… 查看全部问答> |
|
和初学者说说我学单片机的经过(ZT) 第一次知道"单片机"这三个字,那是1997年.那时我还在读中专,疯狂的在自学电子,这三个字是从 < <电子报> > 上看到的,但当时对单片机没一点认识,电子方面也是一片空白,所以单片机到底是何物,就 ...… 查看全部问答> |
|
要做一个基于AD9851的信号发生电路,初定指标是频率1Hz~30M,已经是高频了,电压为5V。 最关键的是芯片产生信号后,要进行滤波,电压放大,以及功率放大 不知道选择哪款的运放比较合适,是否需要进行级联? 恳请论坛里有模电或者高频经验的高手 ...… 查看全部问答> |
|
Super servers address all of these issues. Rather than have each service accept connections on its own thread, services.exe spins one thread on system startup and listens on a number of sockets, up to 64, for services that request ...… 查看全部问答> |
|
做的一个简单的cla电路,综合后得到电路网表。然后使用write -hierarchy -output cla.db 和write -format Verilog -hierarchy -output cla.v 保存了综合后的网表。但是用pt读后:read_db cla.db 这个说No-Design were read和read_verilog cla.v 这 ...… 查看全部问答> |
|
MSP430如何直接用IAR烧写D43文件,用MSP430 USB型仿真器直接通过IAR建工程烧写IAR编译生成的.D43结尾的文件,方便用于生产使用,不用给原代码,防止工程师原代码泄露,方便实用 [ 本帖最后由 kingheimer 于 2013-3-5 12:59 编辑 ]… 查看全部问答> |




