单片机控制无刷电机初步调试成果和学习经历
2019-11-27 来源:51hei
调了一天多的无刷电机,用的无刷电调,其实本来应该是用32做的,但是不知道原理, 于是用了比较熟悉的51单片剂一下来进行调试 一下,查询的资料,还是蛮简单的,但是实际操作并没有那么容易, 在网上查也没有能用的程序,尤其是51,因为基本用无刷的都是无人机 四六轴。所以今天贴上我的程序,分享给大家,希望能对各位减少时间学习,快速上手,本程序实现的功能是在第一次给无刷电机上电后,首先拉高油门,然后降低油门,最后满开油门,注意,,,,注意,,,,注意,一定不要用带螺旋桨的无刷电机来实验,危险,开机后会全速运行,我开全速是为了用涵道,所以全速,,
废话不多说,贴程序
51单片机源程序如下:
/**************************************************************************/
//-----------------直流电机PWM调速实验程序----------------//
//测试单片机:STC89C52
//晶振:11.0592M (外部)
//复位方式:内部复位
//调试环境:KEIL3
//硬件测试环境:使用“清翔电子”单片机开发板测试通过
//程序功能: PWM也就是脉宽调制,是指在周期脉冲信号频率不变的情况下,改变高电平
//
// 和低电平的比例,也就是改变占空比。PWM在灯具调光,直流电机调速方面
//
// 有着广泛的应用。程序使用定时器0中断模拟PWM定时,S2、S3 两个独立按
//
// 键控制电机速度,为使演示结果明显,PWM输出
//
// 到整个P1接口,通过板上的LED灯可以看到亮度的变化。
//
/****************************************************************************/
#include typedef unsigned char uint8; typedef unsigned int uint16; sbit down = P3^0; sbit up = P3^1; uint8 t = 0; uint8 PWM_T = 0; //占空比控制变 uint8 pwm_init_ready; void delay_1ms(uint16 t) { uint16 x,y; for(x=t;x>0;x--) for(y=120;y>0;y--); } /**************************************************** 主程序 ****************************************************/ void main(void) { TMOD = 0x02; //定时器0,工作模式2,8位定时模式 TH0=(65536-20000)/256;// ?????11.0592,???????46080,?????50000????????? TL0=(65536-20000)%256;//46080???,?50000*11.0592/12 TR0=1; //启动定时器 ET0=1; //允许1定时器0中断 EA=1; //允许总中断 P1=0xff; //初始化P1,输出端口 PWM_T=19; delay_1ms(1000); PWM_T=11; while(1) { // delay_1ms(3000); PWM_T=48; /* if(!up) { if(PWM_T<200) { PWM_T++; } while(!up); delay_1ms(10); } if(!down) { if(PWM_T>0) { PWM_T--; } while(!down); delay_1ms(10); }*/ } } timer0() interrupt 1 { t++; //每次定时器溢出加1 TH0=(65536-20000)/256;// ?????11.0592,???????46080,?????50000????????? TL0=(65536-20000)%256;//46080???,?50000*11.0592/12 if(t==200) //PWM周期 100个单位 { t=0; //使t=0,开始新的PWM周期 P1=0xff; //输出端口 } if(t==PWM_T) //按照当前占空比切换输出为高电平 ……………………
上一篇:基于单片机的电子密码锁全套设计