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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2690|回復: 20
收起左側

關于步進電機梯形加減速單片機程序

[復制鏈接]
ID:1055885 發表于 2023-9-6 22:14 | 顯示全部樓層 |閱讀模式
請教各位大佬個問題,我寫了一個步進電機梯形加減速程序,但是運行時不夠平順,實際運行時表現就是急啟急停,我是業余初學者,學歷不高,想了很久,網上也沒有實際的例程,有的看不懂,如果哪位大佬有空的話能不能幫我改一下,感激不敬。還有一個問題就是如果多個步進脈沖放在主程序內的話因為定時器的影響,步進運行時會卡頓,所以只能放在定時器內,但是所有步進程序都放在定時器內的話,又太多了,擔心會出錯,這兩個問題困擾了很久不知道怎么改,芯片用的STC89c52rc單片機
感謝!!!!

下面是我的單片機代碼,目前是只有加速


#include<reg52.h>
#define uint unsigned
#define uchar unsigned

uchar TY1,TY2;//Y軸
uint M2;//脈沖數

void Delay(uint);//延時子程序
void YY();//Z軸

sbit Y2=P2^1;//Y        
sbit A1=P3^4;//按鍵1

void main()//主函數
        {
                TY2=20;//加速初始
                EA=1;
                TMOD=0x11;
                ET0=1;
                TH0=(65536-400)/256;
                TL0=(65536-300)%256;
                TR0=1;//啟動定時器0

                while(1)
                        {        
                                Delay(6);
                        }
        }

void timer0() interrupt 1 //定時器0
{
        TH0=(65536-400)/256;
        TL0=(65536-300)%256;
        TY1++;//進入中斷計數
        if(TY1>=TY2)//中斷數對比
                {
                        YY();//調用Y軸步進
                        TY2--;
                        TY1=0;
                        if(TY2<=1)//勻速
                                {
                                        TY2=1;
                                }
                }
}
void YY()//發送脈沖和脈沖計數
        {
                Y2=1;
                Y2=0;
                M2++;
        }

void Delay(uint n)//延時函數
{
uint i,j;
for(i=0;i<n;i++)
  for(j=0;j<10;j++);
}



回復

使用道具 舉報

ID:94031 發表于 2023-9-7 06:26 | 顯示全部樓層
要想步進電機運行平順,應該選用帶細分的步進電機驅動器。
回復

使用道具 舉報

ID:844772 發表于 2023-9-7 08:54 | 顯示全部樓層
梯形加速是角加速度線性啊,你這想做的是脈沖加速線性,可能思路就不大對。不過這么做也可以緩起緩停。建議你下載個例程吧。如果堅持你的程序,建議所有變量要賦值,特別是M2必須有初值。
回復

使用道具 舉報

ID:1055885 發表于 2023-9-7 14:33 來自觸屏版 | 顯示全部樓層
xuyaqi 發表于 2023-9-7 06:26
要想步進電機運行平順,應該選用帶細分的步進電機驅動器。

細分相當于把轉速調慢了,那加減速不就沒有意義了
回復

使用道具 舉報

ID:1055885 發表于 2023-9-7 14:34 來自觸屏版 | 顯示全部樓層
glinfei 發表于 2023-9-7 08:54
梯形加速是角加速度線性啊,你這想做的是脈沖加速線性,可能思路就不大對。不過這么做也可以緩起緩停。建議 ...

角加速是什么意思呢,什么樣的思路,我只會脈沖
回復

使用道具 舉報

ID:123289 發表于 2023-9-7 14:55 | 顯示全部樓層
試試:將中斷時間間隔拉長一點。
回復

使用道具 舉報

ID:1055885 發表于 2023-9-7 15:19 來自觸屏版 | 顯示全部樓層
yzwzfyz 發表于 2023-9-7 14:55
試試:將中斷時間間隔拉長一點。

這個試過了,中斷時長拉長只是電機速度減慢了,加減速還是不夠平順
回復

使用道具 舉報

ID:883242 發表于 2023-9-7 17:04 | 顯示全部樓層
急啟急停是夢寐以求的理想狀態好不好???步進電機的難點就是如何能更快的啟動停止而不丟步,樓主已經做得很好,或者電機功率裕量足夠。
回復

使用道具 舉報

ID:34149 發表于 2023-9-7 17:55 | 顯示全部樓層
實現加減速的構思是如何的呢?我的理解是不是調節輸出脈沖頻率的變化來控制?我也想學學
回復

使用道具 舉報

ID:764101 發表于 2023-9-7 18:29 | 顯示全部樓層
   如圖,加速時使用PID加速,減速時使用某特定形狀的函數波形限速,使得速度降為0時剛好停在設定的目標位置。這種加減速方式可以在很大速度范圍內通用,缺點是加速和減速時的加速度波形不對稱,減速時的加速度值略大,但影響不大。
步進電機加減速波形_位移速度加速度.jpg
回復

使用道具 舉報

ID:1055885 發表于 2023-9-7 18:36 來自觸屏版 | 顯示全部樓層
dyx811 發表于 2023-9-7 17:55
實現加減速的構思是如何的呢?我的理解是不是調節輸出脈沖頻率的變化來控制?我也想學學

我也是這樣想的,但是前面有人說是角加速,不知道是什么意思
回復

使用道具 舉報

ID:94031 發表于 2023-9-7 19:00 | 顯示全部樓層
叫大個不叫老朱 發表于 2023-9-7 14:33
細分相當于把轉速調慢了,那加減速不就沒有意義了

把你沒細分前的一步電流到位,通過驅動器高速細分為多步電流階梯上升,下降到位,運行就比較平順。
回復

使用道具 舉報

ID:1055885 發表于 2023-9-7 19:24 來自觸屏版 | 顯示全部樓層
xuyaqi 發表于 2023-9-7 19:00
把你沒細分前的一步電流到位,通過驅動器高速細分為多步電流階梯上升,下降到位,運行就比較平順。

這個太深奧
回復

使用道具 舉報

ID:123289 發表于 2023-9-8 08:26 | 顯示全部樓層
再拉大TY2試試。
回復

使用道具 舉報

ID:1055885 發表于 2023-9-8 09:55 來自觸屏版 | 顯示全部樓層
yzwzfyz 發表于 2023-9-8 08:26
再拉大TY2試試。

TY2拉大后只是前半段脈沖頻率拉長了,接近勻速階段還是會急加速,就是接近勻速這個階段,啟停都是這個階段太急了
回復

使用道具 舉報

ID:478111 發表于 2023-9-18 14:37 | 顯示全部樓層
用定時器中斷去做,每進一次中斷改變輸出的占空比,就可以達到梯形加減速效果
回復

使用道具 舉報

ID:1055885 發表于 2023-9-19 23:47 來自觸屏版 | 顯示全部樓層
dongdongxixi 發表于 2023-9-18 14:37
用定時器中斷去做,每進一次中斷改變輸出的占空比,就可以達到梯形加減速效果

這樣只能改變進入中斷次數的變量,不能改變定時器初值,因為還有別的電機公用一個定時器,如果改變進入中斷次數的話就是我現在遇到的問題
回復

使用道具 舉報

ID:161164 發表于 2023-9-20 10:14 | 顯示全部樓層
試試這段
  1. uchar TY3 = 0;
  2. void timer0() interrupt 1 //定時器0
  3. {
  4.     TH0 = (65536 - 400) / 256;
  5.     TL0 = (65536 - 400) % 256;
  6.     TY1++;//進入中斷計數

  7.     if(TY1 >= TY2) //中斷數對比
  8.     {
  9.         YY();//調用Y軸步進
  10.         if(TY3++ >= 10)
  11.         {
  12.             TY3 = 0;
  13.             TY2--;
  14.         }
  15.         TY1 = 0;
  16.         if(TY2 <= 1) //勻速
  17.         {
  18.             TY2 = 1;
  19.         }
  20.     }
  21. }
復制代碼



回復

使用道具 舉報

ID:478111 發表于 2023-9-20 14:34 | 顯示全部樓層
叫大個不叫老朱 發表于 2023-9-19 23:47
這樣只能改變進入中斷次數的變量,不能改變定時器初值,因為還有別的電機公用一個定時器,如果改變進入中 ...

我說的定時器的意思是PWM的意思,每進一次PWM中斷,改變一下周期和占空比
回復

使用道具 舉報

ID:1055885 發表于 2023-9-28 00:57 來自觸屏版 | 顯示全部樓層
lkc8210 發表于 2023-9-20 10:14
試試這段

謝謝,確實有改善,但是在接近最高速時還是加速過快
回復

使用道具 舉報

ID:1055885 發表于 2023-9-28 00:58 來自觸屏版 | 顯示全部樓層
dongdongxixi 發表于 2023-9-20 14:34
我說的定時器的意思是PWM的意思,每進一次PWM中斷,改變一下周期和占空比

好的,我研究研究
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩亚洲一区二区 | 真人一级毛片 | 欧美视频免费在线 | 欧美精品久久久久久久久久 | 欧美不卡网站 | 黄色一级特级片 | 毛片免费在线 | 激情五月婷婷丁香 | 精品久| 日日摸日日碰夜夜爽2015电影 | 99re视频在线 | 国产精品欧美精品 | 亚洲欧美激情精品一区二区 | 一区二区在线 | 国产精品一区二区久久久久 | 操人视频在线观看 | 国产午夜精品一区二区三区 | 亚洲超碰在线观看 | 国产美女久久久 | 日本免费一区二区三区视频 | 久久精品综合网 | 亚洲精品第一 | 色爱综合网| 成人一级片在线观看 | 日韩精品无码一区二区三区 | 亚洲成人一级片 | 古装人性做爰av网站 | 久久精品一区二区三区四区 | 欧美二区在线 | 日韩精品免费视频 | 视频在线亚洲 | 伊人网站 | 日韩1区 | 精品国产精品国产偷麻豆 | 欧美在线国产精品 | 蜜月aⅴ国产精品 | 99re6热在线精品视频播放 | 天天躁日日躁狠狠很躁 | 亚洲福利视频网 | 国产高清自拍视频在线观看 | 日韩欧美国产成人一区二区 |