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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1934|回復: 9
收起左側

單片機按鍵控制步進電機不能準確實現,求高人指點

[復制鏈接]
ID:610895 發表于 2019-9-25 11:35 | 顯示全部樓層 |閱讀模式
STC89C52,以下程序可以仿真運行,就是用按鍵改變頻率和脈沖數量不能準確實現,頻率加可以循環,頻率減也可以,而且不準確。角度加按到最后就直接成單一電平,不再變化,角度減按下就直接成單一電平,不能再變化。本人初學C語言,求高人指點問題出在哪里?是參數設置和單片機不匹配還是程序不完善?
#include reg52.h //這是一個按鍵驅動步進電機的程序
sbit k1=P1^2;//k1按下執行void Manual();
sbit k9=P3^1; //頻率減
sbit k10=P3^0;  //頻率加
sbit k11=P2^7;//角度加
sbit k12=P2^6;//角度減

sbit PWM=P2^3;//pwm輸出
sbit DIR=P2^4;//換向電平輸出
sbit EN=P2^5;//電機使能

unsigned int i,tt=1500,step=50;定義變量,tt用來確定頻率,step用來確定脈沖數量
void keyscan();//按鍵k1檢測
void keyscan1();//按鍵k9~k12檢測

void Manual();步進電機手動控制程序
void shoudong();//手動程序調用開中斷程序
void main(void)//主程序,主要是按鍵k1檢測
{
        while(1)
{
        keyscan();
}
}

void keyscan()
{
while(1)
{
        if(k1==0)        Manual();
}

}
void keyscan1()//按鍵k9~12檢測程序及改變tt、step的值
{
while(1)
{        
        if(k9==0)
                {
                tt < 1500;
                tt=tt+100;//tt初始值設置為1500,這是減速語句,變化范圍1500~500
          }
        else if(k10==0)
        {        
                tt > 500;//這是加速語句
                tt=tt-100;
        }
        else if(k11==0)
        {
                step < 200;//step初始設置50,范圍50~200,實際測試50時25個脈沖
                step=step+50;
        }
        else if(k12==0)
        {
                step > 50;
                step=step-50;
        }
}
}

void Manual()
        {
                  while(1)
                        {
                        shoudong();
                        keyscan1();
                        keyscan();
      }                                
        }

void shoudong()
{
  TMOD=0x01;
  TH0=(65536-tt)/256;
  TL0=(65536-tt)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
void zhongduan( ) interrupt 1
{   
    TH0=(65536-tt)/256;
    TL0=(65536-tt)%256;
    PWM=~PWM;
          i++;
          if(i==step)
                {
     i=0;
                 DIR=~DIR;
    }
}

回復

使用道具 舉報

ID:235200 發表于 2019-9-25 12:13 | 顯示全部樓層
程序設計的按鍵進行步進增和減,首先要保證每一次按鍵只改變一次數據,另外tt增減后建議進行一次判斷,如果超過上限或下限值,要修改上限或下限值為初始值
回復

使用道具 舉報

ID:275826 發表于 2019-9-25 12:41 | 顯示全部樓層
你的程序結構很亂呀,KEYSCAN()調用了自己
回復

使用道具 舉報

ID:610895 發表于 2019-9-25 13:58 來自手機 | 顯示全部樓層
tyrl800 發表于 2019-9-25 12:41
你的程序結構很亂呀,KEYSCAN()調用了自己

單循環應該沒影響
回復

使用道具 舉報

ID:610895 發表于 2019-9-25 13:59 來自手機 | 顯示全部樓層
csmyldl 發表于 2019-9-25 12:13
程序設計的按鍵進行步進增和減,首先要保證每一次按鍵只改變一次數據,另外tt增減后建議進行一次判斷,如果超 ...

修改為上下限可以嗎?
回復

使用道具 舉報

ID:142699 發表于 2019-9-25 15:01 | 顯示全部樓層
建議去看一下PID算法控制相關的內容,還有你這個按鍵沒防抖是肯定不行的- -
回復

使用道具 舉報

ID:213173 發表于 2019-9-25 17:54 | 顯示全部樓層
樓主這個程序連正常運行的最基本的條件都不具備,甚至離譜在子程序中調用自己,并且用了許多死循環,竟然聲稱可以仿真運行。建議樓主找點相對成熟點的例程參考,基本讀懂別人的程序再自己寫。
回復

使用道具 舉報

ID:610895 發表于 2019-9-25 23:04 來自手機 | 顯示全部樓層
wulin 發表于 2019-9-25 17:54
樓主這個程序連正常運行的最基本的條件都不具備,甚至離譜在子程序中調用自己,并且用了許多死循環,竟然聲 ...

確實錯了,復制粘貼時犯錯了,那個按鍵檢測應該是一個STOP函數
回復

使用道具 舉報

ID:610895 發表于 2019-9-26 14:13 來自手機 | 顯示全部樓層
csmyldl 發表于 2019-9-25 12:13
程序設計的按鍵進行步進增和減,首先要保證每一次按鍵只改變一次數據,另外tt增減后建議進行一次判斷,如果超 ...

感謝指導,現在加入延時和按鍵釋放判斷,程序完全正常!
回復

使用道具 舉報

ID:610895 發表于 2019-9-29 23:21 來自手機 | 顯示全部樓層
已經全部完成,感謝回復的各位!問題處在程序沒有延時和檢測按鍵松開的問題上
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频中文字幕 | 久久成人精品视频 | 国内精品视频一区二区三区 | 91天堂网 | 91精品国产91久久久久游泳池 | 欧美一区二区三区免费在线观看 | 午夜在线 | 国产精品自在线 | 麻豆久久久久久久久久 | 国产成人在线观看免费 | 精品99在线 | 天堂va在线 | 免费激情网站 | 久久精品毛片 | 亚洲 欧美 另类 综合 偷拍 | 亚洲综合国产 | 成人午夜视频在线观看 | 色免费视频 | 欧美一区二区三区四区视频 | 91精品国产色综合久久 | 日韩国产一区二区三区 | 亚洲美女一区二区三区 | 欧美在线观看一区 | 农夫在线精品视频免费观看 | 亚洲精品乱码久久久久久按摩观 | 久久精品国产一区二区电影 | 综合自拍| 一级国产精品一级国产精品片 | 中文字幕av在线 | 二区视频 | 一区二区三区在线观看免费视频 | 日韩精品一区二区三区中文字幕 | 精品久| 日本欧美国产在线观看 | 91国在线高清视频 | 亚洲不卡在线观看 | 亚洲一区二区三区四区五区午夜 | 欧美日韩在线播放 | 欧美日韩在线综合 | 国产精品视频中文字幕 | 亚洲成人一区二区 |