Altium Designer画的步进电机脉冲控制板电路原理图和PCB图 STC15F104E单片机源码,如下:
步进电机脉冲控制板DXP SCH PCB资料.rar
(353.87 KB, 售价: 5 E币)
51单片机C语言控制程序,带掉电记忆功能.rar
(24.59 KB, 售价: 5 E币)
PLC控制步进电机脉冲信号发生器原理图及例程.doc
(993.5 KB, 售价: 2 E币)
产品使用手册.doc
(934 KB, 售价: 1 E币)
【简要说明】
一、 尺寸: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); //写入数据
……………………
…………限于本文篇幅 余下代码请下载附件…………
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|