久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的電機(jī)轉(zhuǎn)速控制Proteus仿真程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define THC0 0xf9
#define TLC0 0x0f   //2ms
unsigned char  code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共陰極數(shù)碼管,0-9段碼表
unsigned char  Data_Buffer[8]={0,0,0,0,0,0,0,0};             // 顯示緩沖

uchar i=0;
sbit AddSpeed=P1^1;
sbit SubSpeed=P1^2;
sbit TurnForward=P1^3;
sbit TurnBackward=P1^4;
sbit Stop=P1^5;

sbit IN1=P3^0;
sbit IN2=P3^1;
sbit PWM_FC=P1^0;
int e ,e1 ,e2 ;
float uk ,uk1 ,duk ;//pid輸出值
float Kp=15,Ki=12,Kd=1.6;
int out=0;
uint SpeedSet=380;
uint cnt=0;
uint Inpluse=0,num=0;//脈沖計(jì)數(shù)
uint PWMTime=100;//脈沖寬度
unsigned char  arry[];
void SendString(uint ch);
void PIDControl();
void SystemInit();
void delay(uchar x);
void PWMOUT();
void SetSpeed();
void SegRefre();
/**************主函數(shù)************/
void main()
{
    SystemInit();
    while(1)
    {
        SetSpeed();     //按鍵設(shè)定速度
        SegRefre();     //數(shù)碼管顯示刷新
        PWMOUT();       //輸出PWM

    }
}

void PIDControl()        //pid偏差計(jì)算
{
    e=SpeedSet-num;      
    duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2))/50;      
    uk=uk1+duk;     
    out=(int)uk;   //輸出為占空比
    if(out>1000)
    {
        out=1000;
    }
    else if(out<0)
    {
        out=0;
    }
    uk1=uk;               //變量值移位
    e2=e1;
    e1=e;                 
    PWMTime=out;
}

void delay(uchar x)
{
    uint i,j;
    for(i=x;i>0;i--)
        for(j=50;j>0;j--);
}

void PWMOUT()         
{
    if(cnt<PWMTime)        
    {
        PWM_FC=1;
    }
    else
    {
        PWM_FC=0;
    }
    if(cnt>1000) cnt=0;  
}
void SystemInit()
{
    TMOD=0X21;     
    TH0=THC0;
    TL0=TLC0;
    TH1=0xC0;
    TL1=0XC0;
    ET1=1;
    ET0=1;
    TR0=1;
    TR1=1;
    EX0=1;     
    IT0=1;
    EA=1;
    e =0;      
    e1=0;
    e2=0;
    IN1 = 1;
    IN2 = 0;
}
void SetSpeed()
{
    if(AddSpeed==0)
    {
        delay(200);           //消抖處理
        if(AddSpeed==0)
        {
            SpeedSet+=10;
            if(SpeedSet>1500)
            {
                SpeedSet=1500;
            }
        }
    }
    if(SubSpeed==0)
    {
        delay(200);
        if(SubSpeed==0)
        {
            SpeedSet-=10;
            if(SpeedSet<0) SpeedSet=0;
        }
    }
    if(TurnForward==0)
    {
        delay(200);
        if(TurnForward==0)
        {
           IN1 = 1;
           IN2 = 0;
           while(TurnForward==0);
        }
    }
    if(TurnBackward==0)
    {
        delay(200);
        if(TurnBackward==0)
        {
           IN1 = 0;
           IN2 = 1;
           while(TurnBackward==0);
        }
    }
    if(Stop==0)
    {
        delay(200);
        if(Stop==0)
        {
           IN1 = 1;
           IN2 = 1;
           while(Stop==0);
        }
    }

}
void SegRefre()       //顯示刷新
{
     Data_Buffer[0]=SpeedSet/1000;        //分離設(shè)定值各位
     Data_Buffer[1]=SpeedSet%1000/100;
     Data_Buffer[2]=SpeedSet%100/10;
     Data_Buffer[3]=SpeedSet%10;
     Data_Buffer[4]=num/1000;            
     Data_Buffer[5]=num%1000/100;
     Data_Buffer[6]=num%100/10;
     Data_Buffer[7]=num%10;
}

void int0() interrupt 0
{
    Inpluse++;          //采集外部脈沖
}
void t0() interrupt 1
{
    static unsigned char Bit=0;
    static unsigned int time=0;
    TH0=THC0;
    TL0=TLC0;


    Bit++;
    time++;  //轉(zhuǎn)速測(cè)量周期
    if(Bit>8) Bit=0;         
    P0=0xff;
    P2=Duan[Data_Buffer[Bit]];  //顯示段碼
    switch(Bit)                 //數(shù)碼管位選
    {
        case 0:P0=0X7F;break;
        case 1:P0=0XBF;break;
        case 2:P0=0XDF;break;
        case 3:P0=0XEF;break;
        case 4:P0=0XF7;break;
        case 5:P0=0XFB;break;
        case 6:P0=0XFD;break;
        case 7:P0=0XFE;break;
    }
    if(time>100)
    {
        time=0;
        num=Inpluse*5;         
        Inpluse=0;            
        PIDControl();         
    }
}
void timer_1()  interrupt 3
{
    cnt++;  //cnt越大占空比越高2.5Khz
}



全部資料51hei下載地址:
單片機(jī)直流電機(jī).zip (1.81 MB, 下載次數(shù): 178)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:825015 發(fā)表于 2020-9-30 21:42 | 只看該作者
哥哥,你可以幫我講解一下嗎?急求,我看不懂
回復(fù)

使用道具 舉報(bào)

板凳
ID:825015 發(fā)表于 2020-9-30 21:45 | 只看該作者
請(qǐng)求講解
回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
5#
無(wú)效樓層,該帖已經(jīng)被刪除
6#
無(wú)效樓層,該帖已經(jīng)被刪除
7#
無(wú)效樓層,該帖已經(jīng)被刪除
8#
ID:220066 發(fā)表于 2022-3-10 09:25 | 只看該作者
東西挺好的 挺實(shí)用的
回復(fù)

使用道具 舉報(bào)

9#
無(wú)效樓層,該帖已經(jīng)被刪除
10#
無(wú)效樓層,該帖已經(jīng)被刪除
11#
ID:1142899 發(fā)表于 2025-1-12 17:10 | 只看該作者
謝謝分享!東西很好
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av播播 | 欧美性猛片aaaaaaa做受 | 在线欧美激情 | 亚洲一区二区三区高清 | 国产一级特黄aaa大片评分 | 久久男人| 亚洲精品视频在线 | 91精品久久| 欧美精品久久久久 | 国产目拍亚洲精品99久久精品 | 久久精品欧美一区二区三区不卡 | 草久久| 国产精品成人在线播放 | 一级a性色生活片久久毛片 一级特黄a大片 | 成人免费在线电影 | 成人性视频免费网站 | 男人的天堂在线视频 | 成人精品一区二区三区中文字幕 | 超碰在线免费公开 | 四虎影院在线观看av | 国产精品久久久久久久久免费高清 | 美女逼网站 | 一区二区三区成人 | 欧美视频免费在线 | 天天操天天干天天曰 | 天天看逼 | 99精品一区二区三区 | 综合久| 成人a在线| 国产一区二区三区久久久久久久久 | 亚洲精品一区二区网址 | 色婷婷在线视频 | 在线观看亚洲 | 久久久激情视频 | 亚洲成人一二区 | 国产美女精品视频 | 久久视频精品 | 日韩欧美专区 | 综合精品久久久 | 国产免费一级一级 | 欧美激情精品久久久久久免费 |