电机pwm调速程序
/****************************************************
========= 直流电机控制+速度显示 ==========
****************************************************/
#include #define uchar unsigned char //宏定义 #define uint unsigned int #define CYCLE 10 //定义PWM的周期T为10ms uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff,0xc6,0x88};//0-9 R 共阳数码管段选数据 /*************************************************** 端口定义 ***************************************************/ sbit PWM1=P1^4; //PWM输出口1(电机正转) sbit PWM2=P1^5; //PWM输出口2(电机反转) sbit K1=P1^1; //加速 sbit K2=P1^2; //减速 sbit K3=P1^3; //正反转 sbit K4=P1^0; //启动停止 /***************************************************/ uchar PWM_ON=0; //PWM高电平时间 uchar count=0; //中断计时 uchar num=0; uchar num1=0; //中断时间计数 uint num2=0; //外部中断次数 uchar flat=0; //正反转标示位 uchar flag=0; //刷新数据标示位 sbit w0=P2^0; sbit w1=P2^1; sbit w2=P2^2; sbit w3=P2^3; /*************************************************** 函数名称:延时子函数 函数功能:按键消抖 ***************************************************/ void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } /*************************************************** 函数名称:按键子函数 函数功能: ***************************************************/ void key() { if(K4==0) //启动 停止 { delayms(5); if(K4==0) { while(!K4); num=!num; } } if(K1==0) //加速键 { delayms(5); if(K1==0) { while(!K1); if(num<3) num++; } } if(K2==0) //减速键 { delayms(5); if(K2==0) { while(!K2); if(num>0) num--; } } if(K3==0) //电机正反转按键 { delayms(5); if(K3==0) { while(!K3); flat++; if(flat==2) flat=0; } } switch(num) { case 0: PWM_ON=0; break; //占空比为00% case 1: PWM_ON=4; break; //占空比为40% case 2: PWM_ON=7; break; //占空比为70% case 3: PWM_ON=10; break; //占空比为100% default: break; } } /*******速度数据采集*****************************************/ void sudu() { uint shuju; if(flag==1) { flag=0; shuju=num2*2; //电机一秒转的圈数 num2=0; } if(flat==0) P0=table[11]; //"C" else P0=table[12]; //"A" w0=1; delayms(10); w0=0; // delayms(3); // P2=0xfd; P0=table[shuju/100]; w1=1; delayms(10); w1=0; // delayms(3); // P2=0xfb; P0=table[shuju%100/10]; w2=1; delayms(10); w2=0; // delayms(3); // P2=0xf7; P0=table[shuju%10]; // delayms(3); w3=1; delayms(10); w3=0; P2=0xff; } void init() { PWM1=1; //初始化 PWM2=1; TMOD=0x11; //打开定时器 TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=1; EX0=1; IT0=1; TH1=(65536-1000)/256; TL1=(65536-1000)%256; EA=1; ET1=1; TR1=1; } /************************************************** 函数名称:主函数 函数功能: **************************************************/ void main() { init(); while(1)
上一篇:基于51单片机的PWM温控风扇
下一篇:51单片机+8155芯片的交通灯程序
推荐阅读最新更新时间:2024-11-10 15:59
设计资源 培训 开发板 精华推荐
- STM32F103、STM32F030开发板
- 基于 ICL8810 的 42 W 高功率因数恒压输出反激式转换器
- DC2165A,用于 LTC3884EUK 双 PMBU 降压的演示板,4.5V = Vin = 14V,Vout0/Vout1 = 0.5V 至 1.8V @ 30A
- 基于STSPIN32F0252的电池供电的无刷电动工具的紧凑型参考设计
- LT4275CHDD IEEE 802.3af (Type 1) 13W 受电器件的典型应用电路
- Tiny-touch
- 桌面工具收纳隔板
- LTC3838IUHF-1 4.5V 至 14V 输入、1.2V/50A 2 相单输出的典型应用电路
- WIFI小车
- BTT6050-1EKA单通道智能高端电源开关典型应用电路