搜索
bottom↓
回复: 32

三相细分步进电机控制器(高手进来,含源程序,KND步进控制器)

[复制链接]

出0入0汤圆

发表于 2010-2-26 16:45:08 | 显示全部楼层 |阅读模式
主板有两块芯片组成,主芯片为STM32公司的ARM系列,功能:主控制程序,比如发送脉冲,正转翻转,加减速等,从芯片为XILINX公司的CPLD型号为XC9572XL,经硬件形成3路信号PA,PB,PC进入CPLD,然后分6路输出,AH,AL,BH,BL,CH,CL到驱动板,即可控制电机运转。
我把CPLD这块的程序贴上,有做过步进控制器的给分析分析,不吝指教,先谢了! 目前的情况为电机可以转动,但在突然加减速的时候会出现丢步。
不知道有没有人用过或者做过KND步进电机控制器,原理同。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity pwm_2 is
port(clock,pa,pb,pc : in std_logic;
c39 : in std_logic;
c37 : out std_logic;
ah,al,bh,bl,ch,cl : out std_logic);
end;
                                                                                                                        
architecture dianji of pwm_2 is
signal q1 :  std_logic_vector(7 downto 0) := "00000000";--死区发生器8位
signal q2 :  std_logic_vector(7 downto 0) := "00000000";--
signal q3 :  std_logic_vector(7 downto 0) := "00000000";--
signal dead_time :  std_logic_vector(7 downto 0):= "00101101";--死区寄存器,死区时间3us45

begin
process(clock)
begin
if (clock'event and clock = '1') then
if ((pa = '1') and (q1 /=dead_time))  then
q1 <= q1 + 1;
elsif ((pa = '0') and (q1 /= "00000000")) then
q1 <= q1 - 1;
end if;


if ((pa = '1') and (q1 = dead_time)) then --上桥臂导通
ah <= '1';                        
else
ah <= '0';
end if;


if  ((pa = '0') and (q1 ="00000000")) then --下桥臂导通
al <= '1';
else
al <= '0';
end if;
end if;
end process;

process(clock)
begin
if (clock'event and clock = '1') then
if ((pb = '1') and (q2 /=dead_time))  then
q2 <= q2 + 1;
elsif ((pb = '0') and (q2 /= "00000000")) then
q2 <= q2 - 1;
end if;


if ((pb = '1') and (q2 = dead_time)) then --上桥臂导通
bh <= '1';                        
else
bh <= '0';
end if;


if  ((pb = '0') and (q2 ="00000000")) then --下桥臂导通
bl <= '1';
else
bl <= '0';
end if;
end if;
end process;

process(clock)
begin
if (clock'event and clock = '1') then
if ((pc = '1') and (q3 /=dead_time))  then
q3 <= q3 + 1;
elsif ((pc = '0') and (q3 /= "00000000")) then
q3 <= q3 - 1;
end if;


if ((pc = '1') and (q3 = dead_time)) then --上桥臂导通
ch <= '1';                        
else
ch <= '0';
end if;


if  ((pc = '0') and (q3 ="00000000")) then --下桥臂导通
cl <= '1';
else
cl <= '0';
end if;
end if;
end process;
end;

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-2-26 21:48:33 | 显示全部楼层
丢步,关注

出0入0汤圆

发表于 2010-2-26 22:56:21 | 显示全部楼层
使用现成的3相驱动芯片吧
点击此处下载 ourdev_535478.pdf(文件大小:614K) (原文件名:tmc332_datasheet.pdf)

出0入0汤圆

 楼主| 发表于 2010-2-27 08:08:09 | 显示全部楼层
回复【1楼】astudent
丢步,关注
-----------------------------------------------------------------------

哥们,你也做步进控制器这块吗?有没有好的经验分享一下

出0入0汤圆

 楼主| 发表于 2010-2-27 08:09:52 | 显示全部楼层
回复【2楼】TRINAMIC 驱动天下
使用现成的3相驱动芯片吧
点击此处下载  (原文件名:tmc332_datasheet.pdf)  

-----------------------------------------------------------------------

哥们,多谢了。不过这个项目的电路板已经出来了,器件也已经 选定,是不能再更改了

出0入0汤圆

发表于 2010-2-27 09:14:13 | 显示全部楼层
不客气

出0入0汤圆

发表于 2010-2-27 11:23:10 | 显示全部楼层
pa,pb,pc 三个信号是否有毛刺信号,是否是毛刺信号,干扰了下面这段程序,而使桥臂导通出先问题。建议加D触发器器试试。
if ((pa = '1') and (q1 = dead_time)) then --上桥臂导通
ah <= '1';                        
else
ah <= '0';
end if;


if  ((pa = '0') and (q1 ="00000000")) then --下桥臂导通
al <= '1';
else
al <= '0';
end if;
end if;

出0入0汤圆

发表于 2010-2-27 12:00:06 | 显示全部楼层
我用过.........CPLD这块程序很好弄的.     不知楼主是哪的,要是近的话,我可以帮你测试一下.

出0入0汤圆

 楼主| 发表于 2010-2-27 13:06:20 | 显示全部楼层
回复【7楼】wqm8181 数控黑客
我用过.........CPLD这块程序很好弄的.     不知楼主是哪的,要是近的话,我可以帮你测试一下.
-----------------------------------------------------------------------

谢了哥们,找到行家了,这块CPLD应该是3路信号进六路信号出,我写的这个程序功能上、语句上正确吗?我用示波器测量PA,PB,PC这三路进CPLD的信号和6路上下臂驱动信号和资料上是一样的,但就是丢步,不知道哪里的原因。我想先解决CPLD这块,没问题了再处理单片机这块。我是山东潍坊的 ,不知你是哪里?下面是我的联系方式

出0入0汤圆

发表于 2010-2-27 13:14:36 | 显示全部楼层
回复【8楼】liu_jing_yang  
-----------------------------------------------------------------------
我是用VHDL编的.
丢步的原因很多.你能保证其它地方没问题?
我在北京.

出0入0汤圆

 楼主| 发表于 2010-2-27 13:28:44 | 显示全部楼层
回复【9楼】wqm8181 数控黑客
-----------------------------------------------------------------------

就三个方面吧,一个是CPLD这块,一个是单片机这块,再就是板子。
CPLD因为功能简单些所以写出这个程序来 调试好后就一直用着,没做改动;
单片机的程序处理了挺长时间,程序不断的修改,直到电机可以初步正常运转,但加减速会丢步;
主板应该是没问题的。
可能问题就出在单片机上,但我想先百分百的确定CPLD没问题,之后再处理单片机。
要不你给我个邮箱,我把单片机的程序发给你,你帮我分析下,开发软件为Keil.

出0入0汤圆

发表于 2010-2-27 15:29:24 | 显示全部楼层
丢步是怎么丢的?是丢脉冲还是电机堵转?我邮箱wqm8181  at  163.com

出0入0汤圆

 楼主| 发表于 2010-2-27 16:10:43 | 显示全部楼层
回复【11楼】wqm8181 数控黑客
丢步是怎么丢的?是丢脉冲还是电机堵转?我邮箱wqm8181  at  163.com
-----------------------------------------------------------------------

一会我把ARM的程序给你发过去,问题是这样:空载时如果数控系统的X轴Z轴快速倍率为2000以下步进电机转动一切正常,如果调高XZ轴的快速倍率,空载时加速状态下从正转迅速变为反转就会堵转。如果加到车床上XZ轴跑起来会一卡一卡的。

出0入0汤圆

发表于 2010-2-27 17:13:07 | 显示全部楼层
丢步有可能有干扰的

出0入0汤圆

 楼主| 发表于 2010-3-3 14:16:56 | 显示全部楼层
回复【13楼】guoxicun
丢步有可能有干扰的
-----------------------------------------------------------------------

刚才又连到数控上跑了下,电机没负载的情况下跑动很正常,加速转、正反转都可以,就是接上负载就出现丢步,一顿一顿的

出0入0汤圆

发表于 2010-3-3 15:50:53 | 显示全部楼层
如果有种步进驱动芯片能做到像直流伺服那样在运动过程中可以根据电机的需要自动输出电流,这样的话电机就不会丢步了。

出0入0汤圆

发表于 2010-3-3 16:24:03 | 显示全部楼层
回复【14楼】liu_jing_yang
回复【13楼】guoxicun  
丢步有可能有干扰的
-----------------------------------------------------------------------
刚才又连到数控上跑了下,电机没负载的情况下跑动很正常,加速转、正反转都可以,就是接上负载就出现丢步,一顿一顿的
-----------------------------------------------------------------------

查查你的电流检测这块.把电流调大点试试.

出0入0汤圆

 楼主| 发表于 2010-3-23 10:37:04 | 显示全部楼层
回复【16楼】wqm8181 数控黑客
回复【14楼】liu_jing_yang  
回复【13楼】guoxicun   
丢步有可能有干扰的  
-----------------------------------------------------------------------  
刚才又连到数控上跑了下,电机没负载的情况下跑动很正常,加速转、正反转都可以,就是接上负载就出现丢步,一顿一顿的
-----------------------------------------------------------------------
查查你的电流检测这块.把电流调大点试试.
-----------------------------------------------------------------------

电流调大了也一样  , 还是会出现卡的情况

出0入0汤圆

发表于 2010-3-24 10:55:58 | 显示全部楼层
转速调慢点呢,你的负载太大
头像被屏蔽

出0入0汤圆

发表于 2010-3-24 11:09:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2010-3-24 11:14:58 | 显示全部楼层
回复【16楼】wqm8181 数控黑客
回复【14楼】liu_jing_yang  
回复【13楼】guoxicun   
丢步有可能有干扰的  
-----------------------------------------------------------------------  
刚才又连到数控上跑了下,电机没负载的情况下跑动很正常,加速转、正反转都可以,就是接上负载就出现丢步,一顿一顿的
-----------------------------------------------------------------------
查查你的电流检测这块.把电流调大点试试.
-----------------------------------------------------------------------

回复【楼主位】liu_jing_yang
-----------------------------------------------------------------------

大家都来看看啊

出0入0汤圆

发表于 2010-3-24 21:59:41 | 显示全部楼层
STM32F103不能自己产生带死区的差分PWM信号么?

出0入0汤圆

 楼主| 发表于 2010-3-31 22:00:15 | 显示全部楼层
回复【18楼】qwerttt
-----------------------------------------------------------------------

带车床的步进电机 有一定的负载能力的 不是负载的原因我感觉

出0入0汤圆

 楼主| 发表于 2010-3-31 22:03:32 | 显示全部楼层
回复【21楼】sdram
-----------------------------------------------------------------------

回复【21楼】sdram
STM32F103不能自己产生带死区的差分PWM信号么?
-----------------------------------------------------------------------

STM32产生PWM波形 形成三路进入CPLD  从CPLD分成6路出来作为驱动 电路已经做好 就是用STM32+CPLD  不知道大家用没用过KND的步进电机 看了就明白了

出0入0汤圆

发表于 2010-4-6 00:55:10 | 显示全部楼层
不是高手,支持盖楼

出0入0汤圆

发表于 2010-4-7 15:18:45 | 显示全部楼层
回复【23楼】liu_jing_yang
-----------------------------------------------------------------------

带载看看驱动的正弦波正不正常?

出0入0汤圆

发表于 2010-4-7 19:38:47 | 显示全部楼层
STM32好像支持死区控制的吧?

出0入0汤圆

 楼主| 发表于 2010-4-9 08:34:53 | 显示全部楼层
回复【26楼】xky183
STM32好像支持死区控制的吧?
-----------------------------------------------------------------------
死区控制必须在CPLD里面做.....

出0入0汤圆

 楼主| 发表于 2010-4-9 08:36:17 | 显示全部楼层
回复【25楼】wqm8181 数控黑客
回复【23楼】liu_jing_yang  
-----------------------------------------------------------------------
带载看看驱动的正弦波正不正常?
-----------------------------------------------------------------------

我的STM32的程序怎么样?哪里需要修改?

出0入0汤圆

发表于 2010-4-19 17:02:53 | 显示全部楼层
回复【28楼】liu_jing_yang  
-----------------------------------------------------------------------

你的程序可能有问题。你计算一下的中断总花的时间是多少。

出0入0汤圆

发表于 2010-4-20 00:51:42 | 显示全部楼层
强悍啊!

出0入0汤圆

发表于 2012-1-14 10:58:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-5-27 00:04:47 | 显示全部楼层
好东西,我还没弄明白,哈哈
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表