单片机
返回首页

单片机控制无刷电机初步调试成果和学习经历

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)  //按照当前占空比切换输出为高电平

……………………



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章