0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术工控主板PWM应用于步进电机控制介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-03 09:20 次阅读

工业控制中,许多场合都可以看到电机的身影。特别是步进电机,以其精度高,运行可靠等优势,广泛地应用于数字控制系统中。像这一类步进电机的控制,通常都是使用的脉冲信号来实现的。当步进电机接收到一个脉冲信号,会转动一个固定的角度,所以可以通过控制脉冲的个数来控制转动的角度,从而实现精确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度,从而实现控制速度的目的。

英创嵌入式工控板提供了两种控制步进电机的方法给用户,第一种方法是使用GPIO发出脉冲来实现控制电机的目的,根据需要转动的角度和速度,通过调用GPIO的API函数来发出相应个数和频率的脉冲就能够达到这一目的。但是如果控制电机的实时性要求比较高,需要达到10ms以内的精度,那么第一种方法可能就不能满足要求了,因为控制GPIO是通过了操作系统来执行的,这样程序就涉及到了系统调度等因素,在实时性方面肯定就不能满足太高的需求。于是英创公司推出了另外一种实时性较高的方法,即使用PWM脉冲来控制电机。

英创工控主板EM928x系列上共有4路PWM输出,其最高输出频率可达12MHz,但如果希望保证一定精 度的占空比(1%的精度),则输出最高频率只能到240KHz。而EM335x系列上也有4路PWM输出,其最高输出频率可达50MHz,但如果希望保证一定精度的占空比(1% 的精度),则输出最高频率只能到1MHz。从频率和占空比上看,应该是完全满足控制速度的要求,但是如果要实现精确定位的功能,还需要控制脉冲的个数,所以英创公司修改了PWM脉冲驱动,在原来的基础上增加了对PWM波个数控制和计数的功能,使应用程序能控制发出的脉冲个数,从而精确步进电机的动作。

本文以下部分将介绍这一新增加的功能以及在应用程序中的调用方法。

实现这一功能是通过利用CPU内部的计数器来记录PWM脉冲的个数,当达到预定的值,就产生中断将PWM脉冲停止,这样就能够对PWM脉冲的计数并且产生指定个数的脉冲,这一部分的功能英创公司已经在驱动中完成,用户只需要在应用程序中通过接口调用,就可以启用、停止计数功能,并且实时查询脉冲数。支持这一功能的PWM波有两路:PWM1和PWM2,能产生的最小波形数为2。对PWM的操作可归为2种基本操,在原有的普通使能和停止功能基础上加入了计数功能的操作,所对应的命令参数,定义如下:

#define EM9280_COUNT_START 12//启动带计数功能的PWM脉冲输出
#define EM9280_COUNT_STOP 13//强制停止带计数功能的PWM脉冲输出

接下来来看头文件中定义的PWM 的数据结构,包括频率、占空比以及极性等参数:

struct pwm_config_info
{
unsigned int cmd;//= 0, 1, 2, ....
unsigned int freq;/* in Hz */
unsigned int duty;/* in % */
unsigned int polarity;
unsigned int count;
};

cmd表示指令:就是上面说的两种操作。
freq表示输出的脉冲频率,单位为 Hz。Freq 的取值范围 和板卡的最高支持频率有关。
duty表示输出脉冲的占空比,单位为%。
Duty的取值范围:1 – 99。
Polarity表示输出脉冲的极性,选择 0 或者 1。
count是新加入的参数,表示需要生成的PWM波的个数。

进行PWM操作时,首先打开相应的设备节点文件,然后再调用 write( )函数进行 pwm 的设置、启动计数等操作,以下为启动计数功能的相关应用代码:

int PWM_COUNT_Start(int fd, int freq, int duty, unsigned int count)
{
int rc;
struct pwm_config_info conf;
conf.cmd = EM9280_COUNT_START;
conf.freq = freq;
conf.duty = duty;
conf.polarity = POLARITY;
conf.count = count;
rc = write(fd, &conf, sizeof(struct pwm_config_info));
return rc;
}

这样就只需要调用PWM_COUNT_Start()这个函数,并将参数带入即可,我们就以产生5个占空比为1KHZ的波形为例:

int npwm = 1;
int fd;
char device[32];
unsigned int freq = 1000;
unsigned int duty = 50;
unsigned int count = 5;
sprintf( device, '/dev/em9280_pwm%d', npwm );
fd = open(device, O_RDWR);
if ( fd < 0)
{
printf('can not open /dev/em9280_pwm%d device file!\n', npwm);
return -1;
}
printf( 'Open %s\n', device );
PWM_COUNT_Start( fd, freq, duty, count );

在脉冲输出的过程中,可以调用read函数读取已经输出的脉冲数,如果到达某一个值的时候需要停止输出,就调用write( )函数进行pwm的停止,详细的代码如下:

int PWM_COUNT_Stop(int fd )
{
int rc;
struct pwm_config_info conf;
memset( &conf, 0, sizeof(struct pwm_config_info));
conf.cmd = EM9280_COUNT_STOP;
rc = write(fd, &conf, sizeof(struct pwm_config_info));
return rc;
}
//读取已发送脉冲数
read(fd, &buf, sizeof(buf));
if( buf>=5 )//当输出脉冲数到达某个值则停止
PWM_COUNT_Stop( fd );

生成5个占空比为1KHz的波形的程序运行的结果如下图:

通过对PWM脉冲计数功能的实现,就可以对电机进行精确的控制了,详细的代码请参考光盘中的例程。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35214
收藏 人收藏

    评论

    相关推荐

    国产工控主板,信产业发展新引擎

    在当今科技飞速发展的时代,信产业正成为国家战略的重要支撑。而我们的国产工控主板,以其卓越的性能和可靠的品质,为信产业的发展注入强大动力。国产工控
    的头像 发表于 11-06 10:29 151次阅读

    步进电机如何自适应控制步进电机如何细分驱动控制

    步进电机是一种将电脉冲信号转换为角位移或线位移的电机,广泛应用于各种自动化控制系统中。为了提高步进
    的头像 发表于 10-23 10:04 329次阅读

    步进电机如何在加减速过程中控制技术

    步进电机是一种将电脉冲信号转换为角位移或线位移的电机,广泛应用于各种自动化控制系统中。在加减速过程中,
    的头像 发表于 10-23 10:02 189次阅读

    步进电机控制技术及发展概况有哪些?

    步进电机是一种将电脉冲信号转换为角位移或线位移的执行元件,广泛应用于各种自动化控制系统中。步进电机
    的头像 发表于 10-22 11:50 190次阅读

    步进电机伺服控制系统的作用

    步进电机伺服控制系统是一种精密的电机控制系统,它通过精确控制
    的头像 发表于 09-04 09:46 575次阅读

    pwm的频率对电机有什么影响

    PWM(脉冲宽度调制)是一种广泛应用于电机控制领域的技术,通过调整脉冲的占空比来实现对电机的精确
    的头像 发表于 08-08 16:12 2819次阅读

    如何使用pwm实现对直流电机控制

    PWM(Pulse Width Modulation,脉冲宽度调制)是一种广泛应用于电机控制领域的技术,通过调节脉冲的占空比来实现对
    的头像 发表于 08-08 15:18 832次阅读

    步进电机控制方法与主要应用

    步进电机,作为一种能将电脉冲信号转换为角位移或线位移的执行元件,在自动化控制领域扮演着至关重要的角色。它以其独特的开环控制特性、高精度定位及快速响应能力,广泛
    的头像 发表于 06-26 14:45 877次阅读

    步进电机控制系统是什么意思

    、高精度定位及良好的重复定位精度,被广泛应用于各种需要精确控制和定位的设备中。本文将从步进电机的工作原理、控制系统组成、
    的头像 发表于 06-18 18:12 882次阅读

    PWM控制电机转速的原理与实现

    PWM(脉宽调制)是一种广泛应用于电机控制领域的调制技术。它通过调节脉冲信号的占空比,实现对电机
    的头像 发表于 06-03 17:23 5486次阅读

    什么是步进电机的细分控制步进电机为什么要细分,如何细分?

    什么是步进电机的细分控制步进电机为什么要细分,如何细分? 步进
    的头像 发表于 02-18 09:39 7162次阅读

    arduino控制步进电机代码

    中,我们将详细介绍如何使用Arduino来控制步进电机的代码。 步进电机通常
    的头像 发表于 02-14 16:29 1884次阅读

    步进电机控制方法 步进电机和伺服电机的区别

    步进电机控制方法 步进电机是一种将电信号转化为机械转动的电动机,其输出转角是按照电脉冲控制信号的
    的头像 发表于 01-22 17:18 1109次阅读

    步进电机控制方法 步进电机控制器参数设置

    控制,需要使用步进电机控制器。步进电机控制器是一种电
    的头像 发表于 01-19 10:50 2710次阅读

    步进电机控制方法及需要哪些控制信号

    步进电机是一种将电子信号转化为机械运动的电动机,广泛应用于机器人、打印机、数码相机等领域。步进电机由于其精度高、固有扭矩大、容易
    的头像 发表于 12-20 11:21 3254次阅读