了解stm32后感觉功能太强了,本行不是搞单片机的, 就想业余弄个东西试试手,工作是PLC编程的,一般PLC只有2个高速脉冲输出,当需要控制3个电机时就有点尴尬了,就弄个简单的发脉冲的吧,
由PLC或上位机通过modbus协议发出脉冲个数,和脉冲频率,可以设定加减速时间(梯形加速) ,最高50K
由TIM3的溢出值确定频率,再有该值的一半作为PWM输出,加减速时每个周期都更新频率,起始频率为设定频率的1/10, 加减速时每次进中断都加或减 等差数列值 和脉冲个数加1,如果脉冲到了,就停止定时器 .缺点,频繁的进入中断, 用定时器算了下TIM3中断函数大概需要240个周期(修改下中断函数应该可以减少),加上cpu压栈取中断的12个周期,估计需要4us,设计2路最高频率50K也满足了.刚开始准备每次改变加减速时间时,计算好每次的值放在数组,由DMA传输,就不要每次都中断了,仔细一算数组占用空间太大了,
程序只是分享下思路,很多细节还没考虑,代码也有点凌乱,自己的一共3个文件,main.c modbus.c modbus.h 脉冲相关的都在main中,modbus中串口相关的,环境keil518
欢迎指正交流
基于C#的上位机软件还没做好,1个月内补充上传
用modbus 03读寄存器,06写单个寄存器,, 暂时只实现这2个功能码
脉冲个数 有符号(DBuf[0],低16位,DBuf[1]高16位)
脉冲频率 DBuf[2]
加速时间 DBuf[4]
启动 DBuf[10] 非0启动,启动后自动清零
入门stm32时,看了很多原子的资料,整理的非常好,没买过他们产品也可以下载,非常感谢,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>