0、引言

实验材料

类目 型号
MCU N76E003
步进电机 42步进
步进电机驱动器 设置800细分
电源 24V
TTL CH340

代码工程可在此下载

1、程序逻辑

1.1、程序采用PWM中断,实现对PWM脉冲计数,由此实现开环控制步进电机,设定为下降沿触发。
1.2、步进电机驱动器提供EN、Pulse、DIR、COM四个接口,其中COM接单片机的VCC,EN用于控制电机使能,DIR用于电机换向,Pulse为输入脉冲。
1.3、根据上述说明,单片机PWM持续产生脉冲,通过EN控制步进电机是否使能
1.4、流程图如下

2、程序代码

#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"#define uint unsigned int
#define uchar unsigned char uint time;//频率
uint temp[10];//存放输入捕获值
int i=0;uint PWM_Value;//需要改变的占空比值uchar UART0_RX_BUF[11];//串口0,串口1数据接收缓冲区
uchar UART0_RX_STA=0;//串口0,串口1接收计数器
uchar uFlag=0;//串口中断指令接收完成标志char start=0;//用于数据记录
uint ct1,ct2;
//脉冲期望值(0-6700)
uint evt1,evt2;
//状态机:
//0——初始状态
//1——串口
//2——运行到了指定距离。
uchar Flag1=0,Flag2=0;//PWM中断计数器控制器
//0:关闭
//1:开启
char CEP1=0,CEP2=0;//用于回到零点
sbit KEY1=P0^4;
sbit KEY2=P1^4;
//使能
sbit EN1=P1^0;
sbit EN2=P1^1;
//换向
sbit DIR1=P1^2;
sbit DIR2=P1^3;
//指示灯
sbit LED1=P0^5;
sbit LED2=P3^0;void delay1(uint ms);
void PWM_DEAD_TIME_VALUE(UINT16 DeadTimeData);/*
程序说明:
1、PWM一直保持输出,使用EN来控制步进电机输出
2、使用PWM中断,实现脉冲计数,设置为全局变量
3、串口接收数据,数据包见下'A1234B1234E'其中A为第一个步进电机、B为第二个,1234为期望脉冲数
4、程序流程:收到指令——》步进电机运动——》到指定位置,延时1S,返回0点——》等待下一次Tips:程序仍存在问题:
1、在运行过程中不能二次接收数据(应对串口中断关闭,回到0点后再开启)
*/void main (void)
{//———————管脚配置   ——————————  Set_All_GPIO_Quasi_Mode;//所有IO设置为双向模式P03_PushPull_Mode;
//  P30_Input_Mode;//key1EN1=0;EN2=0;//关闭步进电机DIR1=0;DIR2=0;//向前方向LED1=1;LED2=1;Flag1=0;Flag2=0;CEP1=0;CEP2=0;
//----------串口0配置----------------   InitialUART0_Timer1(9600);//在不配置SM1,SM2寄存器的情况下,默认工作在模式0(半双工)   RI=0;TI=0;Timer0_Delay1ms(100);//—————1KHz的50%占空比——————————PWM5_P03_OUTPUT_ENABLE;//使能PWM5,通过P03引脚输出clr_PWMTYP;//边沿对齐模式clr_PWMMOD0;//设置为独立输出模式clr_PWMMOD1;PWM_CLOCK_DIV_8;PWMPH = 0x07;PWMPL = 0xcf;set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1PWM5H = 0x03;             PWM5L = 0xe8;clr_SFRPAGE;                                            set_LOAD;//载入周期和占空比set_PWMRUN;//开始输出PWM//———————PWM配置————————————EA=1;set_EPWM;//使能pwm中断
//  clr_EPWM;PWM_INT_PWM5;//设定中断源为PWM5PWM_FALLING_INT;//下降沿触发Timer3_Delay100ms(1);ES=1;//串口中断使能//------------中断优先级---------------------set_PSH;//设置串口0最高优先级:1set_PS;//设置串口0最高优先级:1clr_PPWMH;//设置PWM中断优先级低位:0clr_PPWM;//设置PWM中断优先级低位:0//---------输入你自己的代码-------------------while(1){//哪个电机先到,哪个先关闭使能if(Flag2==2&&Flag1!=2)EN2=0;if(Flag1==2&&Flag2!=2)EN1=0;//两个电机均运行到指定位置,准备返航if(!KEY1&&(Flag2==2&&Flag1==2)){LED2=0;//返航指示灯CEP1=1;//重启PWM计数器CEP2=1;//重启PWM计数器EN1=1;//开始返航EN2=1;//开始返航Flag1=3;Flag2=3;}//初始化保持步进电机停车if(Flag1==0){EN1=0;}if(Flag2==0){EN2=0;}if(!Flag1&&!Flag2){LED1=1;LED2=1;}//该状态为接收到指令,前向运动if(Flag1==1&&Flag2==1){LED1=0;//正向指示灯EN1=1;//使能步进电机EN2=1;}}
}/****************串口0中断服务程序*****************/
void Uart0_test() interrupt 4
{if(RI)//串口0接收中断标志(有数据时,硬件置1){RI=0;//软件置0TI=0;//同时打开,需要对TI也置低UART0_RX_BUF[UART0_RX_STA]=SBUF;//从SBUF缓存中读取接收到的数据UART0_RX_STA++ ;                //计算接收长度//进行数据校验,通过RX_BUF&RX_STAif(UART0_RX_STA==11&&UART0_RX_BUF[10]==0X45){if(UART0_RX_BUF[0]==0x41&&UART0_RX_BUF[5]==0x42){//收到期望值evt1=(UART0_RX_BUF[1]-48)*1000+(UART0_RX_BUF[2]-48)*100+(UART0_RX_BUF[3]-48)*10+(UART0_RX_BUF[4]-48);evt2=(UART0_RX_BUF[6]-48)*1000+(UART0_RX_BUF[7]-48)*100+(UART0_RX_BUF[8]-48)*10+(UART0_RX_BUF[9]-48);Send_Data_To_UART0(0x4f);Send_Data_To_UART0(0x4b);if(evt1>6700)evt1=6700;if(evt2>6700)evt2=6700;TI=0;UART0_RX_STA=0;Flag1=1;Flag2=1;ct1=0;ct2=0;DIR1=0;DIR2=0;   CEP1=1;//开启计数器使能CEP2=1;EN1=1;//使能步进电机EN2=1;}}}
}/****************PWM中断服务程序*****************/
void PWMISR() interrupt 13
{if(PWMF)//检测到中断标志位{if(CEP1){ct1++;//检测是否达到指定位置if(ct1>=evt1&&Flag1==1)//达到设定值,清空ct1,EN1=0;,正向移动{ct1=0;EN1=0;//停止步进电机转动。DIR1=1;//准备返航Flag1=2; CEP1=0;}//-----------------1号返航-------------------if(ct1>=evt1&&Flag1==3)//回到零点{ct1=0;EN1=0;//停止步进电机转动。Flag1=0;CEP1=0;}}if(CEP2){ct2++;//检测是否达到指定位置if(ct2>=evt2&&Flag2==1){ct2=0;EN2=0;//停止步进电机转动。DIR2=1;//准备返航Flag2=2;  CEP2=0;}//-----------------2号返航-------------------if(ct2>=evt2&&Flag2==3)//回到零点{ct2=0;EN2=0;//停止步进电机转动。Flag2=0;CEP2=0;}}clr_PWMF;//清楚PWM中断标志位Timer0_Delay1ms(1)}
}

N76E003控制双路步进电机(开环)相关推荐

  1. ros中的电机速度控制_【RosBot】控制两路步进电机-学习笔记1-Arduino中文社区 - Powered by Discuz!...

    本帖最后由 动手党 于 2017-12-11 20:05 编辑 收到之前比赛兑换的RosBot 基础板,顺便做一个学习笔记吧 一.  板子做工和用料 rosbot主板1.jpg (302.71 KB, ...

  2. zenmap nmap输出无显示_双路显示控制仪XME-H80-1616价格报价

    双路显示控制仪XME-H80-1616价格报价 主要性能 二十多种输入信号可选择: 测量输入信号可进行开方及小信号切除. 过程量.给定值.控制量.阀位反馈量等多重显示:测量值与给定值的显示可进行加减运 ...

  3. 二相混合式步进电机开环细分控制simulink仿真模型

    二相混合式步进电机开环细分控制simulink仿真模型 二相混合式步进电机闭环矢量SVPWM控制simulink仿真模型 ID:6915666764175444

  4. 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计

    1628基于单片机双路温度检测报警系统设计(串口上位机控制) 基于pcf8591 tlc2543的双路温度检测报警系统 带串口上位机控制带仿真 源程序 温度传感器是 LM35 两路测温通道所用的ad芯 ...

  5. 二相混合式步进电机开环细分控制simulink建模仿真含模型文件

    目录 细分原理 二相混合式步进电机电磁转矩方程 对Te方程简单的理解 细分控制的推导 细分系统总体图 正弦电流的仿真simulink实现 关于PWM电流控制(或SVPWM控制) 关于模型中如何控制细分 ...

  6. 【项目实战】——USB双路继电器电脑控制灯的开关(Python)

    环境:window10.Python3.7.9 依赖库:pyserial 硬件:220V灯带.220V吊灯.USB双路继电器.电笔 1.安装Python第三方库pyserial 2.清楚插座的零火线( ...

  7. 智能型水泵控制器,双路排污、稳压控制、带BA接口

    智能型水泵控制器GYXF330-2LP-B,双路排污.稳压控制.带BA接口,是应市场需求推出的一款高性能产品,主要用于排污泵.稳压泵.给水泵等控制.本装置用于水泵控制设备中的逻辑运算.自动远程信号处理 ...

  8. C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码

    [FOC+STM32]双路直流无刷电机矢量控制器-使用文档

  9. 测试Risym 2.5A双路电机驱动模块:MX1919

    简 介: 测试了MX1919双电机驱动模块的基本功能.利用MM32F3273实验电路板作为信号来源,驱动了MX1919,并驱动一个小型步进电机运行.验证了模块的基本驱动功能. 关键词: MX1919, ...

最新文章

  1. arm9 6410   tslib触屏小程序
  2. RuoYi(分离版) 使用代码生成器添加子模块(idea版)
  3. Java使用Jolt连接Tuxedo服务器
  4. LeetCode 652. 寻找重复的子树(DFS)
  5. java值类型和引用类型的区别
  6. win7 计算机定时关机脚本,win7定时关机设置及命令
  7. 数据分析师自学好还是报班好
  8. 阿里巴巴矢量图标库的使用步骤
  9. 毕设题目:Matlab交通标志识别
  10. 卸载奇安信天擎,流氓软件
  11. Elasticsearch(ES)入门,这一篇就够了
  12. 6个超实用网站,让你工作时长减半。
  13. matlab摄像头实时人脸检测,一个关于摄像头实时人脸检测的程序
  14. Mencoder 介绍
  15. 分支-12. 计算火车执行时间(15)
  16. python第二版课后习题答案_《python核心编程第二版》课后习题6-12答案
  17. LoRa Gateway 笔记 3.1.3 帮助程序 util_pkt_logger 进行 LoRa 空口抓包
  18. Linux下memc-nginx-module模块指令说明+memcached支持的命令
  19. 锁屏状态接网络电话,Skype商务 iOS 版推重要功能更新
  20. 第1章 SQL Server基本操作

热门文章

  1. FFMPEG小白-day10(sdl项目播放视频进阶)
  2. idea取消SVN关联
  3. 离线地图服务-三种方案
  4. 计算机整机性能配置,整机配置综合性能
  5. 苹果手机公交卡怎么一直显示行程中 关闭教程
  6. 入耳式降噪耳机哪款好?2021新款入耳式降噪耳机推荐
  7. 三年磨一剑,高德地图体验优化实践总结
  8. 解决SC封装WIN10报错
  9. 最全的python就业前景分析
  10. Python编写每日星座运势获取算法