dou_yuyu 发表于 2013-10-25 13:43:47

如何试用stm8s103的pwm功能 驱动步进电机

菜鸟一只,刚开始用stm8。想用stm8f103的pwm功能驱动一步进电机,电机型号为28byj_48.驱动芯片是uln2003。下面是接线图。

求思路,最好有示例代码。谢谢各位。
之前用io口模拟驱动时序,电机可以驱动,但是占用cpu时间实在太多。液晶驱动缓慢。想改成定时器pwm模式驱动的。
谢谢各位。

dou_yuyu 发表于 2013-10-25 14:13:39

自己看了1天手册,还是云里雾里。理不清头绪。

Andrewz 发表于 2013-10-25 14:25:30

突然有一天LZ弄懂了.

dou_yuyu 发表于 2013-10-25 14:28:50

Andrewz 发表于 2013-10-25 14:25 static/image/common/back.gif
突然有一天LZ弄懂了.

可是目前还没弄懂啊,看手册试了一上午,木有 进展。。。囧,水平太菜。{:dizzy:} {:smile:}

landings 发表于 2013-10-25 14:53:45

记得是高级定时器的功能。一次定时器中断产生一个脉冲。修改脉冲长度和数脉冲个数都可以。

dou_yuyu 发表于 2013-10-25 22:29:59

人工 顶贴,求讲解

tlsmf 发表于 2013-10-26 12:05:37

你去问度娘吧,要学会自学{:lol:}

20061002838 发表于 2013-10-26 12:58:23

这是不会驱动步进电机呢,还是不会SM8的PWM,或者俩都不会?

dou_yuyu 发表于 2013-10-26 18:22:36

20061002838 发表于 2013-10-26 12:58 static/image/common/back.gif
这是不会驱动步进电机呢,还是不会SM8的PWM,或者俩都不会?

是不会stm8的pwm。呵{:lol:}

NEWT 发表于 2013-10-27 10:16:52

大概就是先改定时器模式到PWM,再设置频率(周期),然后根据需要的输出改占空比的节奏- -

marshallemon 发表于 2013-10-27 10:34:53

io模拟使用状态机一样有很高的效率

dou_yuyu 发表于 2013-10-27 19:55:50

marshallemon 发表于 2013-10-27 10:34 static/image/common/back.gif
io模拟使用状态机一样有很高的效率

这个思路不错。哈哈哈。想想用个简单定时器产生一个中断,然后中断里改一下状态机状态,执行一下io操作,也蛮不错的。灵活度也有了。


修改原因:改正错别字

zhaolei2612 发表于 2013-10-25 13:43:48

dou_yuyu 发表于 2013-10-27 19:55 static/image/common/back.gif
这个思路不错。哈哈哈。想想用个简单定时器产生一个中断,然后中断里改一下状态机状态,执行一下io操作, ...

用过stm8s003f3的飘过。
步骤1:配置选项字节,使能相应引脚的定时器(PWM)通道,如TIM1_CH1,TIM1_CH2。
步骤2:配置相应定时器,TIMx_CCMR(通道模式PWM,输出预装载使能),TIMx_CCER(设置有效电平),TIMx_ARRH(L)(设置重装载定时器),TIMx_CCRxH(L)(设置捕获比较寄存器),TIMx_BKR(主输出使能),TIMx_EGR(允许产生更新事件),TIMx_CR1(开始计数)。
code]void Timer1_Init(void)
{
        TIM1_CCMR1|=0X78;//OC1通道,PWM模式2,输出比较预装载使能
        TIM1_CCMR2|=0X78;//OC2通道,PWM模式2,输出比较预装载使能
        TIM1_CCER1=0XCC;//CC2N,CC1N低电平有效,CC1N,CC2N输出使能
        TIM1_ARRH=0X00;
        TIM1_ARRL=0X64;//设置重装载定时器,
        TIM1_CCR1H=0X00;
        TIM1_CCR1L=0X00;
        TIM1_CCR2H=0X00;
        TIM1_CCR2L=0X00;//捕获/比较寄存器设置
        TIM1_BKR|=0X80;//主输出使能
        TIM1_EGR|=0X01;//允许产生更新事件
        TIM1_CR1|=0X01;//开始计数
}
步骤3:修改TIMx_CCRxH(L)更改占空比。{:smile:}

gancai 发表于 2013-10-28 17:11:42

用定时器效率低了点吧

jeoge 发表于 2013-10-29 14:47:47

把四相当成是两相,m1为A相正半周,m2为A相为负半周,类推.用正弦电流法来驱动,两相相隔90度就行了。最大电流先用PWM的一半,熟悉规律后再加大电流,两相和四相在驱动上程序代码是一样的。都需要四个带PWM的I/O口来驱动,方法也一样。

ljh407055315 发表于 2013-12-25 21:20:35

不错,学习了!

zl_123 发表于 2014-1-6 21:10:59

zhaolei2612 发表于 2013-10-25 13:43
用过stm8s003f3的飘过。
步骤1:配置选项字节,使能相应引脚的定时器(PWM)通道,如TIM1_CH1,TIM1_CH2 ...

这个片子准备用,mark

radar_12345 发表于 2014-1-6 22:51:36

mark               

zwcled 发表于 2015-7-31 10:50:13

其实可以更加简单,定时器生成PWM,或者定时器模拟PWM(这种更方便移植),然后更新PWM数据就行了。
页: [1]
查看完整版本: 如何试用stm8s103的pwm功能 驱动步进电机