国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼

[復制鏈接]
樓主
coolice 發表于 2020-4-20 00:02:34 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
Altium Designer畫的步進電機脈沖控制板電路原理圖和PCB圖 STC15F104E單片機源碼,如下:
步進電機脈沖控制板DXP SCH PCB資料.rar (353.87 KB, 售價: 5 E幣)
51單片機C語言控制程序,帶掉電記憶功能.rar (24.59 KB, 售價: 5 E幣) STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼 3.jpg
PLC控制步進電機脈沖信號發生器原理圖及例程.doc (993.5 KB, 售價: 2 E幣)

產品使用手冊.doc (934 KB, 售價: 1 E幣)

STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼 1.jpg STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼 2.jpg

STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼 4.jpg STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼 5.jpg STC51單片機控制步進電機脈沖信號發生器電路原理圖PCB程序源碼 6.jpg


【簡要說明】
一、 尺寸:83mmX50mm X 15mm  長X寬X高
二、 主要芯片:單片機控制
三、 工作電壓:供電電壓直流5~24伏(寬電壓工作);
四、 特點:
1、單路信號輸出。
2、輸出占空比約為百分之五十的方波波形                 
4、輸出頻率由按鍵調節,加速 減速按鍵控制
5、輸出頻率范圍1~4KHZ(40種脈沖頻率調節)
6、輸出電壓(直流5V)
7、輸出電流225毫安(MAX)
8、上升/下降時間100 ns

單片機控制程序,帶掉電記憶功能源程序如下:

使用芯片:STC15F104E
晶振:33MHZ
編譯環境:Keil

*********************************************************************/
/********************************************************************/
#include "reg52.h"
#include <intrins.H>
#define uchar unsigned char //宏定義字符型變量
#define uint  unsigned int        //宏定義整型變量
/********************************************************************
                            寄存器設置
*********************************************************************/
sfr IAP_DATA  =0xc2;         //數據寄存器
sfr IAP_ADDRH =0xc3;         //地址寄存器
sfr IAP_ADDRL =0xc4;         //地址寄存器
sfr IAP_CMD   =0xc5;     //命令寄存器
sfr IAP_TRIG  =0xc6;          //觸發寄存器
sfr IAP_CONTR =0xc7;     //擦除寄存器

/********************************************************************
                            命令定義
*********************************************************************/
#define CMD_IDLE     0         //EEPROM無操作
#define CMD_READ     1         //讀取字節
#define CMD_PROGRAM  2         //寫入字節
#define CMD_ERASE    3         //擦除字節
/********************************************************************
                       編程周期由晶振決定
*********************************************************************/
//#define ENABLE_IAP 0X80         //編程周期由晶振決定(如果<30MHZ選用此項)
//#define ENABLE_IAP 0X81         //編程周期由晶振決定(如果<24MHZ選用此項)
//#define ENABLE_IAP 0X82         //編程周期由晶振決定(如果<20MHZ選用此項)
  #define ENABLE_IAP 0X83         //編程周期由晶振決定(如果<12MHZ選用此項)
//#define ENABLE_IAP 0X84         //編程周期由晶振決定(如果<6MHZ選用此項)
//#define ENABLE_IAP 0X85         //編程周期由晶振決定(如果<3MHZ選用此項)
//#define ENABLE_IAP 0X86         //編程周期由晶振決定(如果<2MHZ選用此項)
//#define ENABLE_IAP 0X87         //編程周期由晶振決定(如果<1MHZ選用此項)

#define IAP_ADDRESS 0X0000         //內部EEPROM地址
/********************************************************************
                           定義繼輸入輸出
*********************************************************************/
sbit JIA=P3^1;         //
sbit JIAN=P3^0;         //
sbit EN=P3^2;         //
sbit P35=P3^5;         //
bit  write=0;
/********************************************************************
                            初始定義
*********************************************************************/
uint tcnt1; //脈沖計數
uint t1;
bit write;
uchar sudu;

/********************************************************************
                            延時100MS函數
*********************************************************************/

void Delay100ms()               
{
        uchar i, j, k;
        _nop_();
        i = 5;
        j = 144;
        k = 71;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}         
/********************************************************************
                            操作函數
*********************************************************************/
void IapIdle()
{
        IAP_CONTR=0;
        IAP_CMD=0;
        IAP_TRIG=0;
        IAP_ADDRH=0X80;
        IAP_ADDRL=0;
}
/********************************************************************
                            讀取一個字節函數
*********************************************************************/
uchar IapReadByte(uint addr)
{
        uchar dat;  
        IAP_CONTR=ENABLE_IAP;
        IAP_CMD=CMD_READ;
        IAP_ADDRL=addr;
        IAP_ADDRH=addr>>8;
        IAP_TRIG=0X5A;
        IAP_TRIG=0XA5;
        _nop_();
        _nop_();
        _nop_();
        dat=IAP_DATA;
        IapIdle();
        return dat;
}

/********************************************************************
                            寫入一個字節函數
*********************************************************************/
void IapProgramByte(uint addr,uchar dat)
{

        IAP_CONTR=ENABLE_IAP;
        IAP_CMD=CMD_PROGRAM;
        IAP_ADDRL=addr;
        IAP_ADDRH=addr>>8;
        IAP_DATA=dat;
        IAP_TRIG=0X5A;
        IAP_TRIG=0XA5;
        _nop_();
        _nop_();
        _nop_();
        IapIdle();
}
/********************************************************************
                            擦除一個字節函數
*********************************************************************/
void IapEraseSector(uint addr)
{
        IAP_CONTR=ENABLE_IAP;
        IAP_CMD=CMD_ERASE;
        IAP_ADDRL=addr;
        IAP_ADDRH=addr>>8;
        IAP_TRIG=0X5A;
        IAP_TRIG=0XA5;
        _nop_();
        _nop_();
        _nop_();
        IapIdle();
}

/********************************************************************
                            按鍵判斷函數
*********************************************************************/
void KEY()

{

if(JIA==0){Delay100ms();if(JIA==0){Delay100ms();sudu++;write=1;if(sudu>=30)sudu=30;while(!JIA);Delay100ms();}}
if(JIAN==0){Delay100ms();if(JIAN==0){Delay100ms();sudu--;write=1;if(sudu<=1)sudu=1;while(!JIAN);Delay100ms();}}
if(EN==0)TR0=1;else TR0=0;

switch(sudu)
{
case 1: t1=1;break;//2K
case 2: t1=2;break;//1.6k
case 3: t1=3;break;//1.33k
case 4: t1=4;break;//2K
case 5: t1=5;break;//1.6k
case 6: t1=6;break;//1.33k
case 7: t1=7;break;//1.14k
case 8: t1=8;break;//1k
case 9: t1=9;break;// 880
case 10: t1=10;break;// 800
case 11: t1=12;break;// 660
case 12: t1=14;break;// 580
case 13: t1=16;break;//        500
case 14: t1=18;break;//        450
case 15: t1=20;break;//        400
case 16: t1=22;break;//        360
case 17: t1=23;break;//        350
case 18: t1=26;break;//        300
case 19: t1=30;break;//        260
case 20: t1=33;break;//        240
case 21: t1=37;break;//        220
case 22: t1=41;break;//        200
case 23: t1=50;break;//        160
case 24: t1=60;break;//        135
case 25: t1=65;break;//        125
case 26: t1=75;break;//        110
case 27: t1=80;break;//        100
case 28: t1=95;break;//        84
case 29: t1=120;break;//60
case 30: t1=150;break;//50
case 31: t1=300;break;//30
case 32: t1=1000;break;//8
case 33: t1=10000;break;//1
case 34: t1=20000;break;//1
case 35: t1=30000;break;//1
case 36: t1=40000;break;//1
case 37: t1=60000;break;//1

default:break;
}
}

/********************************************************************
                            定時中斷服務函數
*********************************************************************/
void t0(void) interrupt 1 using 0 //定時中斷服務函數
{

         tcnt1++;
         if(tcnt1>=t1)
           {
             tcnt1=0;
         P35=!P35;
            }

}

/********************************************************************
                            主函數
*********************************************************************/
void main()
{
   
        uchar Q;
        TMOD=0x02; //定時器工作在方式2
        TH0=0x06; //對TH0 TL0 賦值
        TL0=0x06;
        TR0=0; //關定時
        ET0=1; //開定時器
        EA=1;  //開總中斷
        P35=0;//脈沖輸出腳
        Q=IapReadByte(0);
        sudu=Q;
      
        while(1)
    {
    KEY();
    if(write==1)
    {
   write=0;
      IapEraseSector(0);            //擦除扇區
      IapProgramByte(0,sudu);        //寫入數據
……………………

…………限于本文篇幅 余下代碼請下載附件…………

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

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 05:53

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表