串口通讯与步进电机驱动

本文介绍了如何使用单片机通过串口通信控制步进电机的正转、反转、加速、减速和停止。实验中,电脑通过虚拟COM端口与单片机交互,借助串口助手和虚拟串口驱动进行通讯。关键点在于正确选择虚拟串口(如COM3-COM4)和设置较低的波特率(如4800bps),确保无乱码通讯。同时,Proteus仿真图提供了视觉验证。
摘要由CSDN通过智能技术生成

这个实验的内容是:电脑通过虚拟的COM端口与单片机进行相互通讯(电脑发给单片机,然后单片机又把接收到的信息发给电脑),发送的信息分别为正转、反转、加速、减速、停止,来控制电机做出相应的反应,并在Proteus上仿真。

模拟串口通讯需要用到2个软件,这里是网盘下载链接:
串口助手
提取码:rzqe
虚拟串口驱动
提取码:1172

这个实验有一个重要的问题,就是一定要选对虚拟串口和波特率,要不然就会不能进行通讯或是通讯时出现乱码。COM端口使用要配对,COM1-COM2,COM3-COM4,优先推荐使用COM3-COM4,波特率最好设置低一点,因为我传输时没有校验位,波特率太高的话容易出现乱码,所以我选择的波特率是4800。再就是程序中设置波特率初值,如果你设置了波特率加倍的话,最终波特率要在波特率的初值上乘以2,注意程序设置的波特率与串口助手要一致。

Proteus图:
在这里插入图片描述

具体实现方式请看下面的程序:

#include"main.h"

// 五条信息的Unicode 码如下 
//正转:d5 fd d7 aa
//反转:b7 b4 d7 aa
//加速:bc d3 cb d9
//减速:bc f5 cb d9
//停止:cd a3 d6 b9

void main(){
   
	UsartInit();  //串口初始化
	timer0_init();  //定时器初始化
	while(1){
   
		setmotor();   //控制电机状态的函数
	}
}
#ifndef __MAIN_H__
#define __MAIN_H__

	#include"setmotor.h"
 	#include"usart.h"

#endif
#include"setmotor.h"

static unsigned char state=0; //赋0、1、2分别表示电机的三个状态
static unsigned char k=4;  //k值决定电机速度的大小,k值越小电机的速度就越大,k值代表延时的长度
static int i;
unsigned char code zz[]={
   0x11,0x31,0x21,0x61,0x41,0xc1,0x81,0x91};//正转四相八拍步进电机
unsigned char code fz[]={
   0x91,0x81,0xc1,0x41,0x61,0x21,0x31,0x11};//反转

//电机正转
void motor_zz(){
   
	unsigned int j;
	for(j=0;j<8;j++){
   
		P1=zz[j];
		//每一拍延时一下
		for(i=0;i<k;i++){
   
			unsigned int t;
			for(t=0;t<3;t++){
   
				timer0_init();
				while(~TF0);  //当定时器溢出时,TF0为1,退出循环
				TF0
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值