AT89C51单片机,步进电机驱动器L298N驱动,实现单片机识别并输出显示键盘输入的数据信息(转角)并产生连续脉冲控制步进电机转动,电机型号是两相步进电动机42BYG121,其步进角为1.8度,通过半步驱动方式进行细分可获得0.9度的步进角;环形分配器和电机驱动器...
控制器接收到上位机的命令后,首先获取需要转动的步数,然后根据相应命令打开相应定时器的计数功能。控制程序中用定时器1控制二路脉冲输出,定时器2控制一路脉冲输出,从而完成3路电机的控制。 定时器2使用CTC模式,匹配中断使能。通过匹配中断,在OCR2端口可以输出脉冲,通过设定寄存器OCR2寄存器的值可以改变输山脉冲频率。定时器1使用相位与频率修正模式...
键则反向转1~9圈;左键固定正转90度,右键固定反转90;Esc 键终止转动。通过这个程序,我们也可以进一步体会到如何用按键来控制程序完成复杂的功能,以及控制和执行模块之间如何协调工作,而你的编程水平也可以在这样的实践练习中得到锻炼和提升。#include <reg52.h>sbit KEY_IN_1 = P2...
#include <stdio.h>#include <fcntl.h>#include <string.h>#include <sys/ioctl.h>#define STEPMOTOR_IOCTRL_PHASE 0x13 staticintstep_fd = -1
char *STEP_DEV="/dev/exio/0raw"//定义一个指针指向步进电机的驱动 程序
/********* A, AB, B, BC, C CD, D, DA ***/
char stepdata[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}//各 个相位对应的值
void Delay(int t) //延时函数 { int i
for(t>0t--)
for(i=0i<400i++)}
/***************************************************** ***********/
int main(intargc, char **argv) {
int i = 0
if((step_fd=open(STEP_DEV, O_WRONLY))<0){ printf("Error opening /dev/exio/0raw device\n")return 1} /*
打开设备的驱动程序,由于LINUX把所有的设备都模拟成文件。 step_fd=open(STEP_DEV,0_WRONLY)实际调用的函数为:
staticint s3c2410_exio_open(structinode *inode, struct file *filp) //驱动程序中的设备打开程序 */
for () {
for (i=0i<sizeof(stepdata)/sizeof(stepdata[0])i++) { ioctl(step_fd, STEPMOTOR_IOCTRL_PHASE, stepdata[i])}
/*程序进入一个死循环,这样可以使电机在没有人为停止的状况下,一直的 转动下去。
*第二层for语句循环一次即电机转动一周。函数ioctl()对应函 数*s3c2410_exio_ioctl()
*而这个函数最终将调用函数do_stepmotor_run((char)arg)使步进电 机转动起来。 */
printf("Delay(100)\n")Delay(100)}
close(step_fd)//程序结束时关闭设备 printf("Step motor start running!\n")return 0}本文来自百度文库,你可以搜搜,其中答案更详细的!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)