找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1010|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機電機調(diào)速程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1092316 發(fā)表于 2024-4-1 17:51 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<stc8g.h>
sbit Key=P3^3;
void Timer_Init(void);          //外部中斷初始化
void Key_Check(void);           //按鍵掃描函數(shù)
unsigned int c=0,Alarm1,Alarm;

void delay1us(unsigned int us)
{
    unsigned int i, j;
    for(i = us; i > 0; i--)
        for(j =700; j > 0; j--);  //700
}
void main()  
{   P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0xff;
    P5M1 = 0x00;

        P3PU |= 0x0f;

Timer_Init();       //定時器初始化
  //  Alarm1=200;
while(1)
{
if(P31==1 )
{
P35=1;
P54=1;
delay1us(Alarm1);
P35=0;
P54=0;
delay1us(Alarm);                        
    //  P2=~a;                    
    } }}

void Key_Check(void)
{   
    static unsigned int press_time=0;
    if(Key==0)
        {         //掃描按鍵1     
        if(++press_time<=0) --press_time;    //計算按鍵時間,避免數(shù)據(jù)溢出
        if(press_time==1000)
                {               //按鍵長按1s時要做的事情                  
         c--;  // LED2=~LED2;         
             } }
                else
            {      
       if((20<=press_time)&&(press_time<1000))
             {         //大于10ms小于1s,短按
            c++;   //LED1=~LED1;//長加不能對調(diào)                     
                }
        press_time=0;
      if(        c>8)

      {  
        c=0;
            }
       P1=~c;

          if(c==0)

   { Alarm1=999;
            Alarm=1; }

           if(c==1)
    {
       Alarm1=1000;
            Alarm=3000; }        //不能用200 800


          if(c==2)

   { Alarm1=1500;
            Alarm=4000; }

           if(c==3)
    {
       Alarm1=1500;
            Alarm=5000;
                                   }

         if(c==4)

   { Alarm1=2000;
            Alarm=5000; }

           if(c==5)
    {
       Alarm1=150;
            Alarm=1000;}

        if(c==6)
    {
       Alarm1=200;
            Alarm=1000; }        //16hz

      if(c==7)

   { Alarm1=6000;
            Alarm=1000; }

           if(c==8)                        
   
       {Alarm1=900;        //未加括號,占空比不變,周期變
            Alarm=100;}
                                 
                }}

//定時器初始化
void Timer_Init(void)
  {
    TMOD|=0x10; //打開定時器01,工作方式1。
    TH1=0xfc;   //給定時器0賦初值,定時1ms   
    TL1=0x18;
    ET1=1;      //打開定時器0中斷允許
    TR1=1;      //打開定時器
    EA=1;       //打開總中斷
          }

void Timer1() interrupt 3
  {
    TH1=0xfc;   //給定時器1賦初值,定時1ms   
    TL1=0x18;
    Key_Check();//按鍵掃描      
             }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:961114 發(fā)表于 2024-4-3 09:50 | 只看該作者
電機控制,STC8H系列的高級PWM 更好吧。
梁工講解PWM控制電機

無刷電機:帶霍爾和不帶霍爾。
三相電機用6個半橋驅(qū)動,三項有星型連接和三角形連接,常用星型連接。
三相六步電機原理分析。
有霍爾電機的驅(qū)動。
無霍爾電機的驅(qū)動。
例子講解。
不帶霍爾的電機驅(qū)動比帶霍爾的復(fù)雜。
電機的等效模型:電阻、電感和反電動勢串聯(lián)。驅(qū)動的關(guān)節(jié)在如何檢測轉(zhuǎn)子位置。換向時機的選擇:30度。
過零檢測。檢測懸空相的反電動勢。
低轉(zhuǎn)速高輸出力矩的電機用有霍爾。
高轉(zhuǎn)速高輸出力矩的電機用無霍爾。(轉(zhuǎn)速高)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表