历史上的今天
今天是:2025年02月18日(星期二)
2020年02月18日 | 单片机+直流电机转速控制程序+Proteus仿真电路
2020-02-18 来源:51hei
·1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器
·2.采用霍尔传感器非接触式测电机转速
·3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%。
·4.电机的速度可以通过按键调整,也可以开始暂停,正转和反转。
注意:磁铁和霍尔元件最近距离在2mm左右,太近可能会在电机转动时碰到霍尔元件,太远霍尔元件可能会检测不到磁铁。
使用说明:
液晶屏第一行显示电机转速,第二行显示占空比,占空比数值越大,电机转速越快。
系统一共有6个按键,单片机附近的独立按键是系统的复位按键,按下单片机会复位。
下面一排是控制按键:
1键:加速键,可以短按,占空比加1,也可长按,占空比连续加;
2键:减速键,可以短按,占空比减1,也可长按,占空比连续减;
3键:正转切换键,按下后电机正转;
4键:反转切换键,按下后电机反转;
5键:开始暂停键,按一下开始,再按一下暂停。

程序如下:
#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 zhuansu=0; //转速初值0 flag=0; zheng=1; //初始化电机正转动
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:04 编辑 A题 宽带前置放大器电路(本科) B题 运水机器人(本科) C题 无线汉字识别装置(本科) [ 本帖最后由 open82977352 于 2010-2-3 10:46 编辑 ] … 查看全部问答> |
|
最近在准备一个智能变送器的项目,要用到HART协议,差了些资料,大致了解了HART协议的内容,但就是不知道如何下手,还请高手指点迷津啊! 先在这里谢谢了。… 查看全部问答> |
|
采用的是STM32F105,串口输入始终是乱码 以下是串口的配置信息 void USART1_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructur ...… 查看全部问答> |
|
最近在做一个项目,想实现MsP430对Flash的控制,有On和OFF按钮,ON可以控制电路开始采样,OFF控制停止采样,比如第一次按下on后采集到的数据存到了Flash的第一块和第二块的一部分,按下Off停止采集,下一次采集的时候就可以直接存在Flash的第三块上 ...… 查看全部问答> |
|
作者: TI专家Bruce Trump 翻译: TI信号链工程师 Rocky Xiong (熊尧) SPICE是一种检查电路潜在稳定性问题的有用工具 。本文将介绍一种使用SPICE工具来检查电路潜在稳定性的简单方法。 图1是使用OPA211搭建 的一个同相放大器,在许多应用中,只是 ...… 查看全部问答> |
|
输入占空比50%的PWM:A路:A+N,A-N,A+P,A-P;B路:B+N,B-N,B+P,B-P;AB两路信号相差90度,其中+路和-路反相,A+N和A+P信号完全一样,A-N和A-P一样,B+N和B+P信号完全一样,B-N和B-P一样,,A+A-B+B-是两相步进电机的四个接线端子,现在的情况是电机 ...… 查看全部问答> |
|
本帖最后由 jishuaihu 于 2015-5-18 10:21 编辑 四层板学习活动中的布局基本完成了,但是因为没有做过射频和高速信号的设计,有些地方不敢确定布局是否合理。有熟悉这方面的童鞋给看看呗。 周六回复到别人帖子后面没人看。今天单独拿出来发一 ...… 查看全部问答> |




